summaryrefslogtreecommitdiff
path: root/cmd/btrfs-rec/main.go
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2023-03-10 22:02:23 -0700
committerLuke Shumaker <lukeshu@lukeshu.com>2023-03-14 21:31:45 -0600
commitafd2fe91ec604491bd8978b1880c6482e7394240 (patch)
tree7b8275fe12a2f2d7c57f1e9419b97e693b715f36 /cmd/btrfs-rec/main.go
parent3949bd3ff240bc6d06dd08f6e3183e72571e0e1d (diff)
cmd/btrfs-rec: inspect rebuild-mappings list-nodes: Set up logging and stuff
Diffstat (limited to 'cmd/btrfs-rec/main.go')
-rw-r--r--cmd/btrfs-rec/main.go59
1 files changed, 36 insertions, 23 deletions
diff --git a/cmd/btrfs-rec/main.go b/cmd/btrfs-rec/main.go
index 343a41f..15f1964 100644
--- a/cmd/btrfs-rec/main.go
+++ b/cmd/btrfs-rec/main.go
@@ -107,7 +107,7 @@ func main() {
}
}
-func runWithRawFS(runE func(*btrfs.FS, *cobra.Command, []string) error) func(*cobra.Command, []string) error {
+func run(runE func(*cobra.Command, []string) error) func(*cobra.Command, []string) error {
return func(cmd *cobra.Command, args []string) error {
ctx := cmd.Context()
logger := textui.NewLogger(os.Stderr, globalFlags.logLevel.Level)
@@ -126,37 +126,50 @@ func runWithRawFS(runE func(*btrfs.FS, *cobra.Command, []string) error) func(*co
err = _err
}
}
+
defer func() {
maybeSetErr(globalFlags.stopProfiling())
}()
- if len(globalFlags.pvs) == 0 {
- // We do this here instead of calling argparser.MarkPersistentFlagRequired("pv") so that
- // it doesn't interfere with the `help` sub-command.
- return cliutil.FlagErrorFunc(cmd, fmt.Errorf("must specify 1 or more physical volumes with --pv"))
+ cmd.SetContext(ctx)
+ return runE(cmd, args)
+ })
+ return grp.Wait()
+ }
+}
+
+func runWithRawFS(runE func(*btrfs.FS, *cobra.Command, []string) error) func(*cobra.Command, []string) error {
+ return run(func(cmd *cobra.Command, args []string) (err error) {
+ maybeSetErr := func(_err error) {
+ if _err != nil && err == nil {
+ err = _err
}
- fs, err := btrfsutil.Open(ctx, globalFlags.openFlag, globalFlags.pvs...)
+ }
+
+ if len(globalFlags.pvs) == 0 {
+ // We do this here instead of calling argparser.MarkPersistentFlagRequired("pv") so that
+ // it doesn't interfere with the `help` sub-command.
+ return cliutil.FlagErrorFunc(cmd, fmt.Errorf("must specify 1 or more physical volumes with --pv"))
+ }
+ fs, err := btrfsutil.Open(cmd.Context(), globalFlags.openFlag, globalFlags.pvs...)
+ if err != nil {
+ return err
+ }
+ defer func() {
+ maybeSetErr(fs.Close())
+ }()
+
+ if globalFlags.mappings != "" {
+ mappingsJSON, err := readJSONFile[[]btrfsvol.Mapping](cmd.Context(), globalFlags.mappings)
if err != nil {
return err
}
- defer func() {
- maybeSetErr(fs.Close())
- }()
-
- if globalFlags.mappings != "" {
- mappingsJSON, err := readJSONFile[[]btrfsvol.Mapping](ctx, globalFlags.mappings)
- if err != nil {
+ for _, mapping := range mappingsJSON {
+ if err := fs.LV.AddMapping(mapping); err != nil {
return err
}
- for _, mapping := range mappingsJSON {
- if err := fs.LV.AddMapping(mapping); err != nil {
- return err
- }
- }
}
+ }
- cmd.SetContext(ctx)
- return runE(fs, cmd, args)
- })
- return grp.Wait()
- }
+ return runE(fs, cmd, args)
+ })
}