summaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
authorslene <vslene@gmail.com>2014-03-20 13:31:24 +0800
committerslene <vslene@gmail.com>2014-03-20 13:31:24 +0800
commit24678d73f59abd46141ef6fece7966e1f9c5c8f3 (patch)
tree703b9cf24bcd7af41be88ef4134c8d21e94bd1fc /models
parent805732fdc76c55659a3ee4b9d1a655ba3c9a0abc (diff)
downloadgitea-24678d73f59abd46141ef6fece7966e1f9c5c8f3.tar.gz
gitea-24678d73f59abd46141ef6fece7966e1f9c5c8f3.zip
read single file
Diffstat (limited to 'models')
-rw-r--r--models/repo.go46
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))