diff options
author | slene <vslene@gmail.com> | 2014-03-20 13:31:24 +0800 |
---|---|---|
committer | slene <vslene@gmail.com> | 2014-03-20 13:31:24 +0800 |
commit | 24678d73f59abd46141ef6fece7966e1f9c5c8f3 (patch) | |
tree | 703b9cf24bcd7af41be88ef4134c8d21e94bd1fc /models | |
parent | 805732fdc76c55659a3ee4b9d1a655ba3c9a0abc (diff) | |
download | gitea-24678d73f59abd46141ef6fece7966e1f9c5c8f3.tar.gz gitea-24678d73f59abd46141ef6fece7966e1f9c5c8f3.zip |
read single file
Diffstat (limited to 'models')
-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 edf800bd70..4b6dedaf90 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)) |