diff options
author | Unknown <joe2010xtmf@163.com> | 2014-03-20 01:48:55 -0400 |
---|---|---|
committer | Unknown <joe2010xtmf@163.com> | 2014-03-20 01:48:55 -0400 |
commit | ebc3d86e63fb53cfa3f133248a95af9b84e1b26a (patch) | |
tree | de8b2d00cdc85e86a067c5f0f1e72e3989fa71da /models/repo.go | |
parent | bbd38829eb3b41f8128952404b408d3922c7af81 (diff) | |
parent | 24678d73f59abd46141ef6fece7966e1f9c5c8f3 (diff) |
Merge branch 'master' of github.com:gogits/gogs
Conflicts:
routers/repo/single.go
Diffstat (limited to 'models/repo.go')
-rw-r--r-- | models/repo.go | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/models/repo.go b/models/repo.go index edf800bd..4b6dedaf 100644 --- a/models/repo.go +++ b/models/repo.go @@ -81,6 +81,7 @@ var ( var ( ErrRepoAlreadyExist = errors.New("Repository already exist") ErrRepoNotExist = errors.New("Repository does not exist") + ErrRepoFileNotExist = errors.New("Target Repo file does not exist") ) func init() { @@ -463,6 +464,51 @@ func GetBranches(userName, reposName string) ([]string, error) { return brs, nil } +func GetTargetFile(userName, reposName, branchName, commitId, rpath string) (*RepoFile, error) { + repo, err := git.OpenRepository(RepoPath(userName, reposName)) + if err != nil { + return nil, err + } + + commit, err := repo.GetCommit(branchName, commitId) + if err != nil { + return nil, err + } + + parts := strings.Split(path.Clean(rpath), "/") + + var entry *git.TreeEntry + tree := commit.Tree + for i, part := range parts { + if i == len(parts)-1 { + entry = tree.EntryByName(part) + if entry == nil { + return nil, ErrRepoFileNotExist + } + } else { + tree, err = repo.SubTree(tree, part) + if err != nil { + return nil, err + } + } + } + + size, err := repo.ObjectSize(entry.Id) + if err != nil { + return nil, err + } + + repoFile := &RepoFile{ + entry, + rpath, + size, + repo, + commit, + } + + return repoFile, nil +} + // GetReposFiles returns a list of file object in given directory of repository. func GetReposFiles(userName, reposName, branchName, commitId, rpath string) ([]*RepoFile, error) { repo, err := git.OpenRepository(RepoPath(userName, reposName)) |