summaryrefslogtreecommitdiff
path: root/src/commands/list.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands/list.rs')
-rw-r--r--src/commands/list.rs118
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),
}
}