aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGogs <gogitservice@gmail.com>2014-04-10 12:38:56 -0400
committerGogs <gogitservice@gmail.com>2014-04-10 12:44:05 -0400
commit7811e58726e1ab45a29d982d91f990b7984a2ba9 (patch)
tree24f28a19f053eca41b8bd7dd3dd922894452cef7
parenta24c0b92e4ad847fbd774e604e80017368f25495 (diff)
downloadgitea-7811e58726e1ab45a29d982d91f990b7984a2ba9.tar.gz
gitea-7811e58726e1ab45a29d982d91f990b7984a2ba9.zip
speedup models.getReposFiles, using os.Exec
but the results may different with before
-rw-r--r--models/git.go77
1 files changed, 12 insertions, 65 deletions
diff --git a/models/git.go b/models/git.go
index 46345d0ffc..134d71f4e4 100644
--- a/models/git.go
+++ b/models/git.go
@@ -142,7 +142,8 @@ func GetReposFiles(userName, repoName, commitId, rpath string) ([]*RepoFile, err
}
func getReposFiles(userName, repoName, commitId string, rpath string) ([]*RepoFile, error) {
- repo, err := git.OpenRepository(RepoPath(userName, repoName))
+ repopath := RepoPath(userName, repoName)
+ repo, err := git.OpenRepository(repopath)
if err != nil {
return nil, err
}
@@ -162,77 +163,23 @@ func getReposFiles(userName, repoName, commitId string, rpath string) ([]*RepoFi
return 0
}
- var cm = commit
- var i int
- for {
- i = i + 1
- //fmt.Println(".....", i, cm.Id(), cm.ParentCount())
- if cm.ParentCount() == 0 {
- break
- } else if cm.ParentCount() == 1 {
- pt, _ := repo.SubTree(cm.Parent(0).Tree, dirname)
- if pt == nil {
- break
- }
- pEntry := pt.EntryByName(entry.Name)
- if pEntry == nil || !pEntry.Id.Equal(entry.Id) {
- break
- } else {
- cm = cm.Parent(0)
- }
- } else {
- var emptyCnt = 0
- var sameIdcnt = 0
- var lastSameCm *git.Commit
- //fmt.Println(".....", cm.ParentCount())
- for i := 0; i < cm.ParentCount(); i++ {
- //fmt.Println("parent", i, cm.Parent(i).Id())
- p := cm.Parent(i)
- pt, _ := repo.SubTree(p.Tree, dirname)
- var pEntry *git.TreeEntry
- if pt != nil {
- pEntry = pt.EntryByName(entry.Name)
- }
-
- //fmt.Println("pEntry", pEntry)
-
- if pEntry == nil {
- emptyCnt = emptyCnt + 1
- if emptyCnt+sameIdcnt == cm.ParentCount() {
- if lastSameCm == nil {
- goto loop
- } else {
- cm = lastSameCm
- break
- }
- }
- } else {
- //fmt.Println(i, "pEntry", pEntry.Id, "entry", entry.Id)
- if !pEntry.Id.Equal(entry.Id) {
- goto loop
- } else {
- lastSameCm = cm.Parent(i)
- sameIdcnt = sameIdcnt + 1
- if emptyCnt+sameIdcnt == cm.ParentCount() {
- // TODO: now follow the first parent commit?
- cm = lastSameCm
- //fmt.Println("sameId...")
- break
- }
- }
- }
- }
- }
+ cmd := exec.Command("git", "log", "-1", "--pretty=format:%H", commitId, "--", entry.Name)
+ cmd.Dir = repopath
+ out, err := cmd.Output()
+ if err != nil {
+ return 0
+ }
+ filecm, err := repo.GetCommit(string(out))
+ if err != nil {
+ return 0
}
-
- loop:
rp := &RepoFile{
entry,
path.Join(dirname, entry.Name),
size,
repo,
- cm,
+ filecm,
}
if entry.IsFile() {