summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2023-01-01 19:46:28 -0700
committerLuke Shumaker <lukeshu@lukeshu.com>2023-01-01 22:42:08 -0700
commitc971b863a0a1f9feb75f31657729db3a03da114c (patch)
tree0aecc29792109070a71769dbe099f4608cc8bed7
parenta06a7fb2d5bbf1ca5659de06fc9e975666bdcf9f (diff)
cmd/btrfs-rec: Add a type-agnostic utility function to write JSON out
-rw-r--r--cmd/btrfs-rec/inspect_rebuildmappings.go26
-rw-r--r--cmd/btrfs-rec/inspect_rebuildnodes.go27
-rw-r--r--cmd/btrfs-rec/inspect_scandevices.go26
-rw-r--r--cmd/btrfs-rec/util.go13
4 files changed, 29 insertions, 63 deletions
diff --git a/cmd/btrfs-rec/inspect_rebuildmappings.go b/cmd/btrfs-rec/inspect_rebuildmappings.go
index da7d12e..b805fc3 100644
--- a/cmd/btrfs-rec/inspect_rebuildmappings.go
+++ b/cmd/btrfs-rec/inspect_rebuildmappings.go
@@ -1,12 +1,10 @@
-// Copyright (C) 2022 Luke Shumaker <lukeshu@lukeshu.com>
+// Copyright (C) 2022-2023 Luke Shumaker <lukeshu@lukeshu.com>
//
// SPDX-License-Identifier: GPL-2.0-or-later
package main
import (
- "bufio"
- "io"
"os"
"git.lukeshu.com/go/lowmemjson"
@@ -49,7 +47,11 @@ func init() {
}
dlog.Infof(ctx, "Writing reconstructed mappings to stdout...")
- if err := writeMappingsJSON(os.Stdout, fs); err != nil {
+ if err := writeJSONFile(os.Stdout, fs, lowmemjson.ReEncoder{
+ Indent: "\t",
+ ForceTrailingNewlines: true,
+ CompactIfUnder: 120,
+ }); err != nil {
return err
}
dlog.Info(ctx, "... done writing")
@@ -58,19 +60,3 @@ func init() {
},
})
}
-
-func writeMappingsJSON(w io.Writer, fs *btrfs.FS) (err error) {
- buffer := bufio.NewWriter(w)
- defer func() {
- if _err := buffer.Flush(); err == nil && _err != nil {
- err = _err
- }
- }()
- return lowmemjson.Encode(&lowmemjson.ReEncoder{
- Out: buffer,
-
- Indent: "\t",
- ForceTrailingNewlines: true,
- CompactIfUnder: 120,
- }, fs.LV.Mappings())
-}
diff --git a/cmd/btrfs-rec/inspect_rebuildnodes.go b/cmd/btrfs-rec/inspect_rebuildnodes.go
index 0f3d60e..e61e6d2 100644
--- a/cmd/btrfs-rec/inspect_rebuildnodes.go
+++ b/cmd/btrfs-rec/inspect_rebuildnodes.go
@@ -1,12 +1,10 @@
-// Copyright (C) 2022 Luke Shumaker <lukeshu@lukeshu.com>
+// Copyright (C) 2022-2023 Luke Shumaker <lukeshu@lukeshu.com>
//
// SPDX-License-Identifier: GPL-2.0-or-later
package main
import (
- "bufio"
- "io"
"os"
"git.lukeshu.com/go/lowmemjson"
@@ -15,11 +13,8 @@ import (
"github.com/spf13/cobra"
"git.lukeshu.com/btrfs-progs-ng/lib/btrfs"
- "git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfsprim"
- "git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfsvol"
"git.lukeshu.com/btrfs-progs-ng/lib/btrfsprogs/btrfsinspect"
"git.lukeshu.com/btrfs-progs-ng/lib/btrfsprogs/btrfsinspect/rebuildnodes"
- "git.lukeshu.com/btrfs-progs-ng/lib/containers"
)
func init() {
@@ -44,7 +39,10 @@ func init() {
}
dlog.Info(ctx, "Writing re-built nodes to stdout...")
- if err := writeNodesJSON(os.Stdout, rebuiltNodes); err != nil {
+ if err := writeJSONFile(os.Stdout, rebuiltNodes, lowmemjson.ReEncoder{
+ Indent: "\t",
+ ForceTrailingNewlines: true,
+ }); err != nil {
return err
}
dlog.Info(ctx, "... done writing")
@@ -53,18 +51,3 @@ func init() {
},
})
}
-
-func writeNodesJSON(w io.Writer, rebuiltNodes map[btrfsprim.ObjID]containers.Set[btrfsvol.LogicalAddr]) (err error) {
- buffer := bufio.NewWriter(w)
- defer func() {
- if _err := buffer.Flush(); err == nil && _err != nil {
- err = _err
- }
- }()
- return lowmemjson.Encode(&lowmemjson.ReEncoder{
- Out: buffer,
-
- Indent: "\t",
- ForceTrailingNewlines: true,
- }, rebuiltNodes)
-}
diff --git a/cmd/btrfs-rec/inspect_scandevices.go b/cmd/btrfs-rec/inspect_scandevices.go
index 7235e45..bca1b13 100644
--- a/cmd/btrfs-rec/inspect_scandevices.go
+++ b/cmd/btrfs-rec/inspect_scandevices.go
@@ -1,12 +1,10 @@
-// Copyright (C) 2022 Luke Shumaker <lukeshu@lukeshu.com>
+// Copyright (C) 2022-2023 Luke Shumaker <lukeshu@lukeshu.com>
//
// SPDX-License-Identifier: GPL-2.0-or-later
package main
import (
- "bufio"
- "io"
"os"
"git.lukeshu.com/go/lowmemjson"
@@ -33,7 +31,11 @@ func init() {
}
dlog.Info(ctx, "Writing scan results to stdout...")
- if err := writeScanResults(os.Stdout, results); err != nil {
+ if err := writeJSONFile(os.Stdout, results, lowmemjson.ReEncoder{
+ Indent: "\t",
+ ForceTrailingNewlines: true,
+ CompactIfUnder: 16,
+ }); err != nil {
return err
}
dlog.Info(ctx, "... done writing")
@@ -42,19 +44,3 @@ func init() {
},
})
}
-
-func writeScanResults(w io.Writer, results btrfsinspect.ScanDevicesResult) (err error) {
- buffer := bufio.NewWriter(w)
- defer func() {
- if _err := buffer.Flush(); err == nil && _err != nil {
- err = _err
- }
- }()
- return lowmemjson.Encode(&lowmemjson.ReEncoder{
- Out: buffer,
-
- Indent: "\t",
- ForceTrailingNewlines: true,
- CompactIfUnder: 16,
- }, results)
-}
diff --git a/cmd/btrfs-rec/util.go b/cmd/btrfs-rec/util.go
index adfe97e..ed1b75d 100644
--- a/cmd/btrfs-rec/util.go
+++ b/cmd/btrfs-rec/util.go
@@ -1,4 +1,4 @@
-// Copyright (C) 2022 Luke Shumaker <lukeshu@lukeshu.com>
+// Copyright (C) 2022-2023 Luke Shumaker <lukeshu@lukeshu.com>
//
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -81,3 +81,14 @@ func readJSONFile[T any](ctx context.Context, filename string) (T, error) {
_ = buf.Close()
return ret, nil
}
+
+func writeJSONFile(w io.Writer, obj any, cfg lowmemjson.ReEncoder) (err error) {
+ buffer := bufio.NewWriter(w)
+ defer func() {
+ if _err := buffer.Flush(); err == nil && _err != nil {
+ err = _err
+ }
+ }()
+ cfg.Out = buffer
+ return lowmemjson.Encode(&cfg, obj)
+}