summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Bertschinger <tahbertschinger@gmail.com>2024-05-04 23:07:04 -0400
committerThomas Bertschinger <tahbertschinger@gmail.com>2024-05-07 21:29:32 -0400
commit0671ddadd8008bd686fa6bd05f73ca54d28c722e (patch)
tree170862b7df4fcae2dcb66d234b4fd109d0970918
parentba0c99ecd9858951549127d405455423c4e471e8 (diff)
add "bkey-type" option to list command
Only bkeys of the specified type will be printed. Signed-off-by: Thomas Bertschinger <tahbertschinger@gmail.com>
-rw-r--r--bch_bindgen/src/lib.rs28
-rw-r--r--src/commands/list.rs15
2 files changed, 43 insertions, 0 deletions
diff --git a/bch_bindgen/src/lib.rs b/bch_bindgen/src/lib.rs
index d903735e..cd8e9cc2 100644
--- a/bch_bindgen/src/lib.rs
+++ b/bch_bindgen/src/lib.rs
@@ -106,6 +106,34 @@ impl FromStr for c::btree_id {
}
}
+#[derive(Debug)]
+pub struct InvalidBkeyType;
+
+impl fmt::Display for InvalidBkeyType {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "invalid bkey type")
+ }
+}
+
+impl Error for InvalidBkeyType {
+}
+
+impl FromStr for c::bch_bkey_type {
+ type Err = InvalidBkeyType;
+
+ fn from_str(s: &str) -> Result<Self, Self::Err> {
+ let s = CString::new(s).unwrap();
+ let p = s.as_ptr();
+
+ let v = unsafe {c::match_string(c::bch2_bkey_types[..].as_ptr(), (-(1 as isize)) as usize, p)};
+ if v >= 0 {
+ Ok(unsafe { std::mem::transmute(v) })
+ } else {
+ Err(InvalidBkeyType)
+ }
+ }
+}
+
impl c::printbuf {
fn new() -> c::printbuf {
let mut buf: c::printbuf = Default::default();
diff --git a/src/commands/list.rs b/src/commands/list.rs
index 0ed6be05..2cb93962 100644
--- a/src/commands/list.rs
+++ b/src/commands/list.rs
@@ -21,7 +21,18 @@ fn list_keys(fs: &Fs, opt: Cli) -> anyhow::Result<()> {
break;
}
+ match opt.bkey_type {
+ Some(ty) => {
+ if k.k.type_ != ty as u8 {
+ iter.advance();
+ continue;
+ }
+ }
+ _ => {}
+ };
+
println!("{}", k.to_text(fs));
+
iter.advance();
}
@@ -97,6 +108,10 @@ pub struct Cli {
#[arg(short, long, default_value_t=bcachefs::btree_id::BTREE_ID_extents)]
btree: bcachefs::btree_id,
+ /// Bkey type to list
+ #[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,