diff --git a/models/git.go b/models/git.go index 46345d0ff..134d71f4e 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() {