summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2023-07-25 12:32:13 -0600
committerLuke Shumaker <lukeshu@lukeshu.com>2023-07-25 12:37:54 -0600
commit4afd0a5b438f0eda8af3be8018bc024daeb738c3 (patch)
tree71e21a668ddc0ceee42c619f5845a361d0f6886d
parenta2e7457d7fc339caac4e1f55d0eeadd732af60b1 (diff)
Inline btrfsutil.Open() into main.go
-rw-r--r--cmd/btrfs-rec/main.go36
-rw-r--r--lib/btrfsutil/open.go50
2 files changed, 31 insertions, 55 deletions
diff --git a/cmd/btrfs-rec/main.go b/cmd/btrfs-rec/main.go
index 39ba9ef..258e35f 100644
--- a/cmd/btrfs-rec/main.go
+++ b/cmd/btrfs-rec/main.go
@@ -21,6 +21,7 @@ import (
"git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfsvol"
"git.lukeshu.com/btrfs-progs-ng/lib/btrfsutil"
"git.lukeshu.com/btrfs-progs-ng/lib/containers"
+ "git.lukeshu.com/btrfs-progs-ng/lib/diskio"
"git.lukeshu.com/btrfs-progs-ng/lib/profile"
"git.lukeshu.com/btrfs-progs-ng/lib/textui"
)
@@ -160,6 +161,8 @@ func run(runE func(*cobra.Command, []string) error) func(*cobra.Command, []strin
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) {
+ ctx := cmd.Context()
+
maybeSetErr := func(_err error) {
if _err != nil && err == nil {
err = _err
@@ -171,16 +174,39 @@ func runWithRawFS(runE func(*btrfs.FS, *cobra.Command, []string) error) func(*co
// 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
- }
+ fs := new(btrfs.FS)
defer func() {
maybeSetErr(fs.Close())
}()
+ for i, filename := range globalFlags.pvs {
+ dlog.Debugf(ctx, "Adding device file %d/%d %q...", i, len(globalFlags.pvs), filename)
+ osFile, err := os.OpenFile(filename, globalFlags.openFlag, 0)
+ if err != nil {
+ return fmt.Errorf("device file %q: %w", filename, err)
+ }
+ typedFile := &diskio.OSFile[btrfsvol.PhysicalAddr]{
+ File: osFile,
+ }
+ bufFile := diskio.NewBufferedFile[btrfsvol.PhysicalAddr](
+ ctx,
+ typedFile,
+ //nolint:gomnd // False positive: gomnd.ignored-functions=[textui.Tunable] doesn't support type params.
+ textui.Tunable[btrfsvol.PhysicalAddr](16*1024), // block size: 16KiB
+ textui.Tunable(1024), // number of blocks to buffer; total of 16MiB
+ )
+ devFile := &btrfs.Device{
+ File: bufFile,
+ }
+ if err := fs.AddDevice(ctx, devFile); err != nil {
+ return fmt.Errorf("device file %q: %w", filename, err)
+ }
+ }
+ if err := fs.InitChunks(ctx); err != nil {
+ dlog.Errorf(ctx, "error: InitChunks: %v", err)
+ }
if globalFlags.mappings != "" {
- mappingsJSON, err := readJSONFile[[]btrfsvol.Mapping](cmd.Context(), globalFlags.mappings)
+ mappingsJSON, err := readJSONFile[[]btrfsvol.Mapping](ctx, globalFlags.mappings)
if err != nil {
return err
}
diff --git a/lib/btrfsutil/open.go b/lib/btrfsutil/open.go
deleted file mode 100644
index 91bb943..0000000
--- a/lib/btrfsutil/open.go
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright (C) 2022-2023 Luke Shumaker <lukeshu@lukeshu.com>
-//
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-package btrfsutil
-
-import (
- "context"
- "fmt"
- "os"
-
- "github.com/datawire/dlib/dlog"
-
- "git.lukeshu.com/btrfs-progs-ng/lib/btrfs"
- "git.lukeshu.com/btrfs-progs-ng/lib/btrfs/btrfsvol"
- "git.lukeshu.com/btrfs-progs-ng/lib/diskio"
- "git.lukeshu.com/btrfs-progs-ng/lib/textui"
-)
-
-func Open(ctx context.Context, flag int, filenames ...string) (*btrfs.FS, error) {
- fs := new(btrfs.FS)
- for i, filename := range filenames {
- dlog.Debugf(ctx, "Adding device file %d/%d %q...", i, len(filenames), filename)
- osFile, err := os.OpenFile(filename, flag, 0)
- if err != nil {
- _ = fs.Close()
- return nil, fmt.Errorf("device file %q: %w", filename, err)
- }
- typedFile := &diskio.OSFile[btrfsvol.PhysicalAddr]{
- File: osFile,
- }
- bufFile := diskio.NewBufferedFile[btrfsvol.PhysicalAddr](
- ctx,
- typedFile,
- //nolint:gomnd // False positive: gomnd.ignored-functions=[textui.Tunable] doesn't support type params.
- textui.Tunable[btrfsvol.PhysicalAddr](16*1024), // block size: 16KiB
- textui.Tunable(1024), // number of blocks to buffer; total of 16MiB
- )
- devFile := &btrfs.Device{
- File: bufFile,
- }
- if err := fs.AddDevice(ctx, devFile); err != nil {
- return nil, fmt.Errorf("device file %q: %w", filename, err)
- }
- }
- if err := fs.InitChunks(ctx); err != nil {
- dlog.Errorf(ctx, "error: InitChunks: %v", err)
- }
- return fs, nil
-}