go-libzfs/sort.go

51 lines
1.1 KiB
Go

package zfs
import (
"strconv"
)
type clonesCreateDesc []Dataset
func (list clonesCreateDesc) Less(i, j int) bool {
_, oki := list[i].Properties[DatasetNumProps+1000]
_, okj := list[i].Properties[DatasetNumProps+1000]
if oki && okj {
unixti, err := strconv.ParseInt(
list[i].Properties[DatasetNumProps+1000].Value, 10, 64)
if err != nil {
panic(err)
}
unixtj, err := strconv.ParseInt(
list[j].Properties[DatasetNumProps+1000].Value, 10, 64)
if err != nil {
panic(err)
}
if unixti != unixtj {
return unixti > unixtj
}
}
// if we have two datasets created from same snapshot
// any of them will do, but we will go for most recent
unixti, err := strconv.ParseInt(
list[i].Properties[DatasetPropCreateTXG].Value, 10, 64)
if err != nil {
panic(err)
}
unixtj, err := strconv.ParseInt(
list[j].Properties[DatasetPropCreateTXG].Value, 10, 64)
if err != nil {
panic(err)
}
return unixti > unixtj
}
func (list clonesCreateDesc) Swap(i, j int) {
list[i], list[j] = list[j], list[i]
}
func (list clonesCreateDesc) Len() int {
return len(list)
}