diff options
Diffstat (limited to 'git_plumbing.go')
-rw-r--r-- | git_plumbing.go | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/git_plumbing.go b/git_plumbing.go index 36acb90..9386ea9 100644 --- a/git_plumbing.go +++ b/git_plumbing.go @@ -18,9 +18,29 @@ import ( func writeTree(ctx context.Context, repoPath string, entries []treeEntry) (string, error) { var buf bytes.Buffer - // Must sort.Slice(entries, func(i, j int) bool { - return entries[i].name < entries[j].name + nameI, nameJ := entries[i].name, entries[j].name + + if nameI == nameJ { // meh + return !(entries[i].mode == "40000") && (entries[j].mode == "40000") + } + + if strings.HasPrefix(nameJ, nameI) && len(nameI) < len(nameJ) { + if entries[i].mode == "40000" { + return false + } + return true + } + + if strings.HasPrefix(nameI, nameJ) && len(nameJ) < len(nameI) { + // nameJ is a prefix of nameI + if entries[j].mode == "40000" { + return true + } + return false + } + + return nameI < nameJ }) for _, e := range entries { |