summaryrefslogtreecommitdiff
path: root/cmd/btrfs-rec
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2023-01-01 22:43:58 -0700
committerLuke Shumaker <lukeshu@lukeshu.com>2023-01-01 22:43:58 -0700
commitd675f41242c043ddc4c6c1a1fb8aabcfd324aae2 (patch)
tree4f2afbce761eb377ad0b0ab2e4fb2f478ff844f5 /cmd/btrfs-rec
parent9971e38110d5f90d15c7b78f396f2638b3952a96 (diff)
parent6e1a9fbb1e9a943e04902ed3a4958f6821e39456 (diff)
Merge branch 'lukeshu/lint'
Diffstat (limited to 'cmd/btrfs-rec')
-rw-r--r--cmd/btrfs-rec/inspect_lsfiles.go8
-rw-r--r--cmd/btrfs-rec/inspect_lstrees.go12
-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/inspect_spewitems.go6
-rw-r--r--cmd/btrfs-rec/main.go6
-rw-r--r--cmd/btrfs-rec/util.go15
8 files changed, 48 insertions, 78 deletions
diff --git a/cmd/btrfs-rec/inspect_lsfiles.go b/cmd/btrfs-rec/inspect_lsfiles.go
index 502d91d..395f60a 100644
--- a/cmd/btrfs-rec/inspect_lsfiles.go
+++ b/cmd/btrfs-rec/inspect_lsfiles.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
@@ -34,7 +34,11 @@ func init() {
},
RunE: func(fs *btrfs.FS, cmd *cobra.Command, _ []string) (err error) {
out := bufio.NewWriter(os.Stdout)
- defer out.Flush()
+ defer func() {
+ if _err := out.Flush(); _err != nil && err == nil {
+ err = _err
+ }
+ }()
defer func() {
if r := derror.PanicToError(recover()); r != nil {
textui.Fprintf(out, "\n\n%+v\n", r)
diff --git a/cmd/btrfs-rec/inspect_lstrees.go b/cmd/btrfs-rec/inspect_lstrees.go
index e92c544..f74956a 100644
--- a/cmd/btrfs-rec/inspect_lstrees.go
+++ b/cmd/btrfs-rec/inspect_lstrees.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
@@ -54,13 +54,13 @@ func init() {
}
numWidth := len(strconv.Itoa(slices.Max(treeErrCnt, totalItems)))
- table := tabwriter.NewWriter(os.Stdout, 0, 8, 2, ' ', 0)
+ table := tabwriter.NewWriter(os.Stdout, 0, 8, 2, ' ', 0) //nolint:gomnd // This is what looks Nice.
textui.Fprintf(table, " errors\t% *s\n", numWidth, strconv.Itoa(treeErrCnt))
for _, typ := range maps.SortedKeys(treeItemCnt) {
textui.Fprintf(table, " %v items\t% *s\n", typ, numWidth, strconv.Itoa(treeItemCnt[typ]))
}
textui.Fprintf(table, " total items\t% *s\n", numWidth, strconv.Itoa(totalItems))
- table.Flush()
+ _ = table.Flush()
}
visitedNodes := make(containers.Set[btrfsvol.LogicalAddr])
btrfsutil.WalkAllTrees(ctx, fs, btrfsutil.WalkAllTreesHandler{
@@ -79,12 +79,12 @@ func init() {
},
Item: func(_ btrfstree.TreePath, item btrfstree.Item) error {
typ := item.Key.ItemType
- treeItemCnt[typ] = treeItemCnt[typ] + 1
+ treeItemCnt[typ]++
return nil
},
BadItem: func(_ btrfstree.TreePath, item btrfstree.Item) error {
typ := item.Key.ItemType
- treeItemCnt[typ] = treeItemCnt[typ] + 1
+ treeItemCnt[typ]++
return nil
},
},
@@ -113,7 +113,7 @@ func init() {
}
for _, item := range node.Data.BodyLeaf {
typ := item.Key.ItemType
- treeItemCnt[typ] = treeItemCnt[typ] + 1
+ treeItemCnt[typ]++
}
}
}
diff --git a/cmd/btrfs-rec/inspect_rebuildmappings.go b/cmd/btrfs-rec/inspect_rebuildmappings.go
index da7d12e..4555e58 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, //nolint:gomnd // This is what looks Nice.
+ }); 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..410fa4f 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, //nolint:gomnd // This is what looks Nice.
+ }); 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/inspect_spewitems.go b/cmd/btrfs-rec/inspect_spewitems.go
index 8d71797..3b79e8b 100644
--- a/cmd/btrfs-rec/inspect_spewitems.go
+++ b/cmd/btrfs-rec/inspect_spewitems.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
@@ -39,13 +39,13 @@ func init() {
Item: func(path btrfstree.TreePath, item btrfstree.Item) error {
textui.Fprintf(os.Stdout, "%s = ", path)
spew.Dump(item)
- os.Stdout.WriteString("\n")
+ _, _ = os.Stdout.WriteString("\n")
return nil
},
BadItem: func(path btrfstree.TreePath, item btrfstree.Item) error {
textui.Fprintf(os.Stdout, "%s = ", path)
spew.Dump(item)
- os.Stdout.WriteString("\n")
+ _, _ = os.Stdout.WriteString("\n")
return nil
},
},
diff --git a/cmd/btrfs-rec/main.go b/cmd/btrfs-rec/main.go
index 13ae886..d9ab485 100644
--- a/cmd/btrfs-rec/main.go
+++ b/cmd/btrfs-rec/main.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
@@ -43,7 +43,7 @@ func main() {
SilenceErrors: true, // main() will handle this after .ExecuteContext() returns
SilenceUsage: true, // our FlagErrorFunc will handle it
- CompletionOptions: cobra.CompletionOptions{ //nolint:exhaustivestruct
+ CompletionOptions: cobra.CompletionOptions{
DisableDefaultCmd: true,
},
}
@@ -62,7 +62,7 @@ func main() {
panic(err)
}
- var openFlag int = os.O_RDONLY
+ openFlag := os.O_RDONLY
argparserInspect := &cobra.Command{
Use: "inspect {[flags]|SUBCOMMAND}",
diff --git a/cmd/btrfs-rec/util.go b/cmd/btrfs-rec/util.go
index adfe97e..ffc03cc 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
@@ -34,7 +34,7 @@ func newRuneScanner(ctx context.Context, fh *os.File) (*runeScanner, error) {
progress: textui.Portion[int64]{
D: fi.Size(),
},
- progressWriter: textui.NewProgress[textui.Portion[int64]](ctx, dlog.LogLevelInfo, 1*time.Second),
+ progressWriter: textui.NewProgress[textui.Portion[int64]](ctx, dlog.LogLevelInfo, textui.Tunable(1*time.Second)),
reader: bufio.NewReader(fh),
closer: fh,
}
@@ -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)
+}