aboutsummaryrefslogtreecommitdiff
path: root/models
diff options
context:
space:
mode:
authorUnknown <joe2010xtmf@163.com>2014-03-20 01:48:55 -0400
committerUnknown <joe2010xtmf@163.com>2014-03-20 01:48:55 -0400
commitebc3d86e63fb53cfa3f133248a95af9b84e1b26a (patch)
treede8b2d00cdc85e86a067c5f0f1e72e3989fa71da /models
parentbbd38829eb3b41f8128952404b408d3922c7af81 (diff)
parent24678d73f59abd46141ef6fece7966e1f9c5c8f3 (diff)
Merge branch 'master' of github.com:gogits/gogs
Conflicts: routers/repo/single.go
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 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))