| @@ -142,7 +142,8 @@ func GetReposFiles(userName, repoName, commitId, rpath string) ([]*RepoFile, err | |||||
| } | } | ||||
| func getReposFiles(userName, repoName, commitId string, rpath string) ([]*RepoFile, error) { | 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 { | if err != nil { | ||||
| return nil, err | return nil, err | ||||
| } | } | ||||
| @@ -162,77 +163,23 @@ func getReposFiles(userName, repoName, commitId string, rpath string) ([]*RepoFi | |||||
| return 0 | 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, "--", path.Join(dirname, 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{ | rp := &RepoFile{ | ||||
| entry, | entry, | ||||
| path.Join(dirname, entry.Name), | path.Join(dirname, entry.Name), | ||||
| size, | size, | ||||
| repo, | repo, | ||||
| cm, | |||||
| filecm, | |||||
| } | } | ||||
| if entry.IsFile() { | if entry.IsFile() { | ||||