1
0
Fork 0
mirror of https://github.com/restic/restic.git synced 2025-03-04 10:39:43 +00:00

ls: extract comparator

This commit is contained in:
Michael Eischer 2025-02-03 22:09:55 +01:00
parent 1807627dda
commit c32613a624

View file

@ -498,36 +498,37 @@ func (p *sortedPrinter) LeaveDir(_ string) error {
return nil return nil
} }
func (p *sortedPrinter) Close() error { func (p *sortedPrinter) Close() error {
var comparator func(a, b toSortOutput) int
switch p.sortMode { switch p.sortMode {
case SortModeName: case SortModeName:
case SortModeSize: case SortModeSize:
slices.SortStableFunc(p.collector, func(a, b toSortOutput) int { comparator = func(a, b toSortOutput) int {
return cmp.Or( return cmp.Or(
cmp.Compare(a.node.Size, b.node.Size), cmp.Compare(a.node.Size, b.node.Size),
cmp.Compare(a.nodepath, b.nodepath), cmp.Compare(a.nodepath, b.nodepath),
) )
}) }
case SortModeMtime: case SortModeMtime:
slices.SortStableFunc(p.collector, func(a, b toSortOutput) int { comparator = func(a, b toSortOutput) int {
return cmp.Or( return cmp.Or(
a.node.ModTime.Compare(b.node.ModTime), a.node.ModTime.Compare(b.node.ModTime),
cmp.Compare(a.nodepath, b.nodepath), cmp.Compare(a.nodepath, b.nodepath),
) )
}) }
case SortModeAtime: case SortModeAtime:
slices.SortStableFunc(p.collector, func(a, b toSortOutput) int { comparator = func(a, b toSortOutput) int {
return cmp.Or( return cmp.Or(
a.node.AccessTime.Compare(b.node.AccessTime), a.node.AccessTime.Compare(b.node.AccessTime),
cmp.Compare(a.nodepath, b.nodepath), cmp.Compare(a.nodepath, b.nodepath),
) )
}) }
case SortModeCtime: case SortModeCtime:
slices.SortStableFunc(p.collector, func(a, b toSortOutput) int { comparator = func(a, b toSortOutput) int {
return cmp.Or( return cmp.Or(
a.node.ChangeTime.Compare(b.node.ChangeTime), a.node.ChangeTime.Compare(b.node.ChangeTime),
cmp.Compare(a.nodepath, b.nodepath), cmp.Compare(a.nodepath, b.nodepath),
) )
}) }
case SortModeExt: case SortModeExt:
// map name to extension // map name to extension
mapExt := make(map[string]string, len(p.collector)) mapExt := make(map[string]string, len(p.collector))
@ -536,14 +537,17 @@ func (p *sortedPrinter) Close() error {
mapExt[item.nodepath] = ext mapExt[item.nodepath] = ext
} }
slices.SortStableFunc(p.collector, func(a, b toSortOutput) int { comparator = func(a, b toSortOutput) int {
return cmp.Or( return cmp.Or(
cmp.Compare(mapExt[a.nodepath], mapExt[b.nodepath]), cmp.Compare(mapExt[a.nodepath], mapExt[b.nodepath]),
cmp.Compare(a.nodepath, b.nodepath), cmp.Compare(a.nodepath, b.nodepath),
) )
}) }
} }
if comparator != nil {
slices.SortStableFunc(p.collector, comparator)
}
if p.reverse { if p.reverse {
slices.Reverse(p.collector) slices.Reverse(p.collector)
} }