diff options
-rw-r--r-- | cmd/btrfs-rec/inspect_visualizenodes.go | 15 | ||||
-rw-r--r-- | lib/btrfsprogs/btrfsinspect/rebuildnodes/visualizenodes.go | 30 | ||||
-rwxr-xr-x | scripts/main.sh | 4 |
3 files changed, 23 insertions, 26 deletions
diff --git a/cmd/btrfs-rec/inspect_visualizenodes.go b/cmd/btrfs-rec/inspect_visualizenodes.go index 4c31100..89c8ad6 100644 --- a/cmd/btrfs-rec/inspect_visualizenodes.go +++ b/cmd/btrfs-rec/inspect_visualizenodes.go @@ -5,6 +5,9 @@ package main import ( + "bufio" + "os" + "github.com/datawire/dlib/dlog" "github.com/datawire/ocibuild/pkg/cliutil" "github.com/spf13/cobra" @@ -16,8 +19,8 @@ import ( func init() { inspectors = append(inspectors, subcommand{ Command: cobra.Command{ - Use: "visualize-nodes NODESCAN.json OUTPUT_DIR", - Args: cliutil.WrapPositionalArgs(cobra.ExactArgs(2)), + Use: "visualize-nodes NODESCAN.json", + Args: cliutil.WrapPositionalArgs(cobra.ExactArgs(1)), }, RunE: func(fs *btrfs.FS, cmd *cobra.Command, args []string) (err error) { ctx := cmd.Context() @@ -29,7 +32,13 @@ func init() { } dlog.Infof(ctx, "... done reading %q", args[0]) - return rebuildnodes.VisualizeNodes(ctx, args[1], fs, nodeScanResults) + buffer := bufio.NewWriter(os.Stdout) + defer func() { + if _err := buffer.Flush(); err == nil && _err != nil { + err = _err + } + }() + return rebuildnodes.VisualizeNodes(ctx, buffer, fs, nodeScanResults) }, }) } diff --git a/lib/btrfsprogs/btrfsinspect/rebuildnodes/visualizenodes.go b/lib/btrfsprogs/btrfsinspect/rebuildnodes/visualizenodes.go index c3784bb..3096b46 100644 --- a/lib/btrfsprogs/btrfsinspect/rebuildnodes/visualizenodes.go +++ b/lib/btrfsprogs/btrfsinspect/rebuildnodes/visualizenodes.go @@ -5,14 +5,13 @@ package rebuildnodes import ( - "bufio" + "archive/zip" "context" "errors" "fmt" "html" + "io" iofs "io/fs" - "os" - "path/filepath" "strings" "github.com/datawire/dlib/dlog" @@ -57,7 +56,7 @@ func getCliqueID(cliques map[btrfsprim.ObjID]*containers.Set[btrfsprim.ObjID], t return maps.SortedKeys(*clique)[0] } -func VisualizeNodes(ctx context.Context, dir string, fs *btrfs.FS, nodeScanResults btrfsinspect.ScanDevicesResult) error { +func VisualizeNodes(ctx context.Context, out io.Writer, fs *btrfs.FS, nodeScanResults btrfsinspect.ScanDevicesResult) error { uuidMap, err := buildUUIDMap(ctx, fs, nodeScanResults) if err != nil { return err @@ -200,31 +199,17 @@ func VisualizeNodes(ctx context.Context, dir string, fs *btrfs.FS, nodeScanResul //////////////////////////////////////////////////////////////////////////////////////////// - dlog.Infof(ctx, "Writing graphviz output to %q...", dir) + dlog.Info(ctx, "Writing graphviz output...") cliqueIDs := maps.SortedKeys(edges) - if err := os.MkdirAll(dir, 0777); err != nil { - return err - } + zw := zip.NewWriter(out) for _, cliqueID := range cliqueIDs { if err := func() (err error) { - maybeSetErr := func(_err error) { - if err == nil && _err != nil { - err = _err - } - } - fh, err := os.OpenFile(filepath.Join(dir, fmt.Sprintf("%d.dot", cliqueID)), os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) + buf, err := zw.Create(fmt.Sprintf("%d.dot", cliqueID)) if err != nil { return err } - defer func() { - maybeSetErr(fh.Close()) - }() - buf := bufio.NewWriter(fh) - defer func() { - maybeSetErr(buf.Flush()) - }() if _, err := fmt.Fprintf(buf, "digraph clique%d {\n", cliqueID); err != nil { return err @@ -257,6 +242,9 @@ func VisualizeNodes(ctx context.Context, dir string, fs *btrfs.FS, nodeScanResul return err } } + if err := zw.Close(); err != nil { + return err + } dlog.Info(ctx, "... done writing") diff --git a/scripts/main.sh b/scripts/main.sh index 0635e49..dde5671 100755 --- a/scripts/main.sh +++ b/scripts/main.sh @@ -23,9 +23,9 @@ gen $b.gen/0.scandevices.json \ gen $b.gen/1.mappings.json \ ./btrfs-rec --pv=$b.img \ inspect rebuild-mappings $b.gen/0.scandevices.json -gen $b.gen/2.nodes.gv-o \ +gen $b.gen/2.nodes.zip \ ./btrfs-rec --pv=$b.img --mappings=$b.gen/1.mappings.json \ - inspect visualize-nodes $b.gen/0.scandevices.json $b.gen/2.nodes.gv-d + inspect visualize-nodes $b.gen/0.scandevices.json # gen $b.gen/2.nodes.json \ # ./btrfs-rec --pv=$b.img --mappings=$b.gen/1.mappings.json \ # inspect rebuild-nodes $b.gen/0.scandevices.json |