1
0
Fork 0
mirror of https://github.com/restic/restic.git synced 2025-03-04 02:28:27 +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
}
func (p *sortedPrinter) Close() error {
var comparator func(a, b toSortOutput) int
switch p.sortMode {
case SortModeName:
case SortModeSize:
slices.SortStableFunc(p.collector, func(a, b toSortOutput) int {
comparator = func(a, b toSortOutput) int {
return cmp.Or(
cmp.Compare(a.node.Size, b.node.Size),
cmp.Compare(a.nodepath, b.nodepath),
)
})
}
case SortModeMtime:
slices.SortStableFunc(p.collector, func(a, b toSortOutput) int {
comparator = func(a, b toSortOutput) int {
return cmp.Or(
a.node.ModTime.Compare(b.node.ModTime),
cmp.Compare(a.nodepath, b.nodepath),
)
})
}
case SortModeAtime:
slices.SortStableFunc(p.collector, func(a, b toSortOutput) int {
comparator = func(a, b toSortOutput) int {
return cmp.Or(
a.node.AccessTime.Compare(b.node.AccessTime),
cmp.Compare(a.nodepath, b.nodepath),
)
})
}
case SortModeCtime:
slices.SortStableFunc(p.collector, func(a, b toSortOutput) int {
comparator = func(a, b toSortOutput) int {
return cmp.Or(
a.node.ChangeTime.Compare(b.node.ChangeTime),
cmp.Compare(a.nodepath, b.nodepath),
)
})
}
case SortModeExt:
// map name to extension
mapExt := make(map[string]string, len(p.collector))
@ -536,14 +537,17 @@ func (p *sortedPrinter) Close() error {
mapExt[item.nodepath] = ext
}
slices.SortStableFunc(p.collector, func(a, b toSortOutput) int {
comparator = func(a, b toSortOutput) int {
return cmp.Or(
cmp.Compare(mapExt[a.nodepath], mapExt[b.nodepath]),
cmp.Compare(a.nodepath, b.nodepath),
)
})
}
}
if comparator != nil {
slices.SortStableFunc(p.collector, comparator)
}
if p.reverse {
slices.Reverse(p.collector)
}