Move command line snapshot sorting to common snapshot code

This commit is contained in:
Sylvain Baubeau
2014-12-15 10:44:46 +01:00
parent 923e2e1e50
commit 66c9bb86f5
2 changed files with 66 additions and 65 deletions
+10 -65
View File
@@ -4,49 +4,8 @@ import (
"fmt"
"github.com/smira/aptly/deb"
"github.com/smira/commander"
"sort"
)
// Snapshot sorting methods
const (
SortName = iota
SortTime
)
type snapshotListToSort struct {
list []*deb.Snapshot
sortMethod int
}
func parseSortMethod(sortMethod string) (int, error) {
switch sortMethod {
case "time", "Time":
return SortTime, nil
case "name", "Name":
return SortName, nil
}
return -1, fmt.Errorf("sorting method \"%s\" unknown", sortMethod)
}
func (s snapshotListToSort) Swap(i, j int) {
s.list[i], s.list[j] = s.list[j], s.list[i]
}
func (s snapshotListToSort) Less(i, j int) bool {
switch s.sortMethod {
case SortName:
return s.list[i].Name < s.list[j].Name
case SortTime:
return s.list[i].CreatedAt.Before(s.list[j].CreatedAt)
}
panic("unknown sort method")
}
func (s snapshotListToSort) Len() int {
return len(s.list)
}
func aptlySnapshotList(cmd *commander.Command, args []string) error {
var err error
if len(args) != 0 {
@@ -57,44 +16,30 @@ func aptlySnapshotList(cmd *commander.Command, args []string) error {
raw := cmd.Flag.Lookup("raw").Value.Get().(bool)
sortMethodString := cmd.Flag.Lookup("sort").Value.Get().(string)
snapshotsToSort := &snapshotListToSort{}
snapshotsToSort.list = make([]*deb.Snapshot, context.CollectionFactory().SnapshotCollection().Len())
snapshotsToSort.sortMethod, err = parseSortMethod(sortMethodString)
if err != nil {
return err
}
i := 0
context.CollectionFactory().SnapshotCollection().ForEach(func(snapshot *deb.Snapshot) error {
snapshotsToSort.list[i] = snapshot
i++
return nil
})
context.CloseDatabase()
sort.Sort(snapshotsToSort)
collection := context.CollectionFactory().SnapshotCollection()
collection.Sort(sortMethodString)
if raw {
for _, snapshot := range snapshotsToSort.list {
collection.ForEach(func(snapshot *deb.Snapshot) error {
fmt.Printf("%s\n", snapshot.Name)
}
return nil
})
} else {
if len(snapshotsToSort.list) > 0 {
if collection.Len() > 0 {
fmt.Printf("List of snapshots:\n")
for _, snapshot := range snapshotsToSort.list {
collection.ForEach(func(snapshot *deb.Snapshot) error {
fmt.Printf(" * %s\n", snapshot.String())
}
return nil
})
fmt.Printf("\nTo get more information about snapshot, run `aptly snapshot show <name>`.\n")
} else {
fmt.Printf("\nNo snapshots found, create one with `aptly snapshot create...`.\n")
}
}
return err
return err
}
func makeCmdSnapshotList() *commander.Command {