From a47bb13059b98812ba5ac9879e794e32e9b7d765 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Fri, 10 Apr 2020 14:54:57 -0400 Subject: [PATCH 1/2] Sort output of disk.Details by partition number. In Details() output, partitions were not guaranteed in any order. This puts them in partition number order. Note that that is not necessarily the order on disk. --- disk.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/disk.go b/disk.go index 34d8ce1..b350b8f 100644 --- a/disk.go +++ b/disk.go @@ -3,6 +3,7 @@ package disko import ( "encoding/json" "fmt" + "sort" ) // DiskType enumerates supported disk types. @@ -263,7 +264,16 @@ func (d Disk) Details() string { lfmt := "[%2s %10s %10s %10s %-16s]\n" buf := fmt.Sprintf(lfmt, "#", "Start", "Last", "Size", "Name") - for _, p := range d.Partitions { + pNums := make([]uint, 0, len(d.Partitions)) + for n := range d.Partitions { + pNums = append(pNums, n) + } + + sort.Slice(pNums, func(i, j int) bool { return pNums[i] < pNums[j] }) + + for _, n := range pNums { + p := d.Partitions[n] + if fsn < len(fss) && fss[fsn].Start < p.Start { buf += fmt.Sprintf(lfmt, "-", mbo(fss[fsn].Start), mbe(fss[fsn].Last), mbo(fss[fsn].Size()), "") fsn++ From 49b9059265b7835de12a98064d506cb04e0b1fc3 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Fri, 10 Apr 2020 14:56:17 -0400 Subject: [PATCH 2/2] Add demo disk show. Demo disk show prints the human friendly version of 'demo disk scan'. --- demo/disk.go | 46 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/demo/disk.go b/demo/disk.go index 35f53d3..62fe814 100644 --- a/demo/disk.go +++ b/demo/disk.go @@ -21,10 +21,15 @@ var diskCommands = cli.Command{ Action: diskNewPartition, }, { - Name: "scan", - Usage: "Scan disks on the system and dump data", + Name: "dump", + Usage: "Scan disks on the system and dump data (json)", Action: diskScan, }, + { + Name: "show", + Usage: "Scan disks on the system and dump data (human)", + Action: diskShow, + }, }, } @@ -72,6 +77,43 @@ func diskScan(c *cli.Context) error { return nil } +func diskShow(c *cli.Context) error { + var err error + + mysys := linux.System() + matchAll := func(d disko.Disk) bool { + return true + } + + if c.Args().Len() == 1 { + disk, err := mysys.ScanDisk(c.Args().First()) + if err != nil { + return err + } + + fmt.Printf("%s\n", disk.Details()) + + return nil + } + + var disks disko.DiskSet + if c.Args().Len() == 0 { + disks, err = mysys.ScanAllDisks(matchAll) + } else { + disks, err = mysys.ScanDisks(matchAll, c.Args().Slice()...) + } + + if err != nil { + return err + } + + for _, d := range disks { + fmt.Printf("%s\n", d.Details()) + } + + return nil +} + func diskNewPartition(c *cli.Context) error { mysys := linux.System() fname := c.Args().First()