diff options
Diffstat (limited to 'src/commands/list.rs')
-rw-r--r-- | src/commands/list.rs | 118 |
1 files changed, 72 insertions, 46 deletions
diff --git a/src/commands/list.rs b/src/commands/list.rs index fd61a516..082c9dc4 100644 --- a/src/commands/list.rs +++ b/src/commands/list.rs @@ -1,20 +1,23 @@ -use log::{error}; use bch_bindgen::bcachefs; -use bch_bindgen::opt_set; -use bch_bindgen::fs::Fs; use bch_bindgen::bkey::BkeySC; -use bch_bindgen::btree::BtreeTrans; use bch_bindgen::btree::BtreeIter; -use bch_bindgen::btree::BtreeNodeIter; use bch_bindgen::btree::BtreeIterFlags; -use clap::{Parser}; +use bch_bindgen::btree::BtreeNodeIter; +use bch_bindgen::btree::BtreeTrans; +use bch_bindgen::fs::Fs; +use bch_bindgen::opt_set; +use clap::Parser; +use log::error; use std::io::{stdout, IsTerminal}; fn list_keys(fs: &Fs, opt: Cli) -> anyhow::Result<()> { let trans = BtreeTrans::new(fs); - let mut iter = BtreeIter::new(&trans, opt.btree, opt.start, - BtreeIterFlags::ALL_SNAPSHOTS| - BtreeIterFlags::PREFETCH); + let mut iter = BtreeIter::new( + &trans, + opt.btree, + opt.start, + BtreeIterFlags::ALL_SNAPSHOTS | BtreeIterFlags::PREFETCH, + ); while let Some(k) = iter.peek_and_restart()? { if k.k.p > opt.end { @@ -37,9 +40,14 @@ fn list_keys(fs: &Fs, opt: Cli) -> anyhow::Result<()> { fn list_btree_formats(fs: &Fs, opt: Cli) -> anyhow::Result<()> { let trans = BtreeTrans::new(fs); - let mut iter = BtreeNodeIter::new(&trans, opt.btree, opt.start, - 0, opt.level, - BtreeIterFlags::PREFETCH); + let mut iter = BtreeNodeIter::new( + &trans, + opt.btree, + opt.start, + 0, + opt.level, + BtreeIterFlags::PREFETCH, + ); while let Some(b) = iter.peek_and_restart()? { if b.key.k.p > opt.end { @@ -55,9 +63,14 @@ fn list_btree_formats(fs: &Fs, opt: Cli) -> anyhow::Result<()> { fn list_btree_nodes(fs: &Fs, opt: Cli) -> anyhow::Result<()> { let trans = BtreeTrans::new(fs); - let mut iter = BtreeNodeIter::new(&trans, opt.btree, opt.start, - 0, opt.level, - BtreeIterFlags::PREFETCH); + let mut iter = BtreeNodeIter::new( + &trans, + opt.btree, + opt.start, + 0, + opt.level, + BtreeIterFlags::PREFETCH, + ); while let Some(b) = iter.peek_and_restart()? { if b.key.k.p > opt.end { @@ -73,9 +86,14 @@ fn list_btree_nodes(fs: &Fs, opt: Cli) -> anyhow::Result<()> { fn list_nodes_ondisk(fs: &Fs, opt: Cli) -> anyhow::Result<()> { let trans = BtreeTrans::new(fs); - let mut iter = BtreeNodeIter::new(&trans, opt.btree, opt.start, - 0, opt.level, - BtreeIterFlags::PREFETCH); + let mut iter = BtreeNodeIter::new( + &trans, + opt.btree, + opt.start, + 0, + opt.level, + BtreeIterFlags::PREFETCH, + ); while let Some(b) = iter.peek_and_restart()? { if b.key.k.p > opt.end { @@ -102,69 +120,77 @@ enum Mode { pub struct Cli { /// Btree to list from #[arg(short, long, default_value_t=bcachefs::btree_id::BTREE_ID_extents)] - btree: bcachefs::btree_id, + btree: bcachefs::btree_id, /// Bkey type to list - #[arg(short='k', long)] - bkey_type: Option<bcachefs::bch_bkey_type>, + #[arg(short = 'k', long)] + bkey_type: Option<bcachefs::bch_bkey_type>, /// Btree depth to descend to (0 == leaves) - #[arg(short, long, default_value_t=0)] - level: u32, + #[arg(short, long, default_value_t = 0)] + level: u32, /// Start position to list from - #[arg(short, long, default_value="POS_MIN")] - start: bcachefs::bpos, + #[arg(short, long, default_value = "POS_MIN")] + start: bcachefs::bpos, /// End position - #[arg(short, long, default_value="SPOS_MAX")] - end: bcachefs::bpos, + #[arg(short, long, default_value = "SPOS_MAX")] + end: bcachefs::bpos, - #[arg(short, long, default_value="keys")] - mode: Mode, + #[arg(short, long, default_value = "keys")] + mode: Mode, /// Check (fsck) the filesystem first #[arg(short, long)] - fsck: bool, + fsck: bool, /// Force color on/off. Default: autodetect tty #[arg(short, long, action = clap::ArgAction::Set, default_value_t=stdout().is_terminal())] - colorize: bool, + colorize: bool, /// Verbose mode #[arg(short, long)] - verbose: bool, + verbose: bool, #[arg(required(true))] - devices: Vec<std::path::PathBuf>, + devices: Vec<std::path::PathBuf>, } fn cmd_list_inner(opt: Cli) -> anyhow::Result<()> { let mut fs_opts: bcachefs::bch_opts = Default::default(); - opt_set!(fs_opts, nochanges, 1); - opt_set!(fs_opts, read_only, 1); - opt_set!(fs_opts, norecovery, 1); - opt_set!(fs_opts, degraded, 1); - opt_set!(fs_opts, very_degraded, 1); - opt_set!(fs_opts, errors, bcachefs::bch_error_actions::BCH_ON_ERROR_continue as u8); + opt_set!(fs_opts, nochanges, 1); + opt_set!(fs_opts, read_only, 1); + opt_set!(fs_opts, norecovery, 1); + opt_set!(fs_opts, degraded, 1); + opt_set!(fs_opts, very_degraded, 1); + opt_set!( + fs_opts, + errors, + bcachefs::bch_error_actions::BCH_ON_ERROR_continue as u8 + ); if opt.fsck { - opt_set!(fs_opts, fix_errors, bcachefs::fsck_err_opts::FSCK_FIX_yes as u8); - opt_set!(fs_opts, norecovery, 0); + opt_set!( + fs_opts, + fix_errors, + bcachefs::fsck_err_opts::FSCK_FIX_yes as u8 + ); + opt_set!(fs_opts, norecovery, 0); } if opt.verbose { - opt_set!(fs_opts, verbose, 1); + opt_set!(fs_opts, verbose, 1); } let fs = Fs::open(&opt.devices, fs_opts)?; match opt.mode { - Mode::Keys => list_keys(&fs, opt), - Mode::Formats => list_btree_formats(&fs, opt), - Mode::Nodes => list_btree_nodes(&fs, opt), - Mode::NodesOndisk => list_nodes_ondisk(&fs, opt), + Mode::Keys => list_keys(&fs, opt), + Mode::Formats => list_btree_formats(&fs, opt), + Mode::Nodes => list_btree_nodes(&fs, opt), + Mode::NodesOndisk => list_nodes_ondisk(&fs, opt), } } |