mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-26 17:34:11 -05:00
speedup models.getReposFiles, using os.Exec
but the results may different with before
This commit is contained in:
parent
a24c0b92e4
commit
7811e58726
1 changed files with 12 additions and 65 deletions
|
@ -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
|
cmd := exec.Command("git", "log", "-1", "--pretty=format:%H", commitId, "--", entry.Name)
|
||||||
var i int
|
cmd.Dir = repopath
|
||||||
for {
|
out, err := cmd.Output()
|
||||||
i = i + 1
|
if err != nil {
|
||||||
//fmt.Println(".....", i, cm.Id(), cm.ParentCount())
|
return 0
|
||||||
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)
|
filecm, err := repo.GetCommit(string(out))
|
||||||
if pEntry == nil || !pEntry.Id.Equal(entry.Id) {
|
if err != nil {
|
||||||
break
|
return 0
|
||||||
} 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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
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() {
|
||||||
|
|
Loading…
Reference in a new issue