repository: workaround a go-git bug and ensure sorted tree object

This commit is contained in:
Michael Muré 2020-10-25 00:24:26 +02:00
parent 064a96f808
commit ca4020f4fa
No known key found for this signature in database
GPG Key ID: A4457C029293126F

View File

@ -8,6 +8,7 @@ import (
"os/exec"
stdpath "path"
"path/filepath"
"sort"
"strings"
"sync"
"time"
@ -359,7 +360,22 @@ func (repo *GoGitRepo) ReadData(hash Hash) ([]byte, error) {
func (repo *GoGitRepo) StoreTree(mapping []TreeEntry) (Hash, error) {
var tree object.Tree
for _, entry := range mapping {
// TODO: can be removed once https://github.com/go-git/go-git/issues/193 is resolved
sorted := make([]TreeEntry, len(mapping))
copy(sorted, mapping)
sort.Slice(sorted, func(i, j int) bool {
nameI := sorted[i].Name
if sorted[i].ObjectType == Tree {
nameI += "/"
}
nameJ := sorted[j].Name
if sorted[j].ObjectType == Tree {
nameJ += "/"
}
return nameI < nameJ
})
for _, entry := range sorted {
mode := filemode.Regular
if entry.ObjectType == Tree {
mode = filemode.Dir