From c20f323fdb672592b7bb5103f44cd7b7ec492025 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BChlbacher?= Date: Mon, 10 Jun 2024 23:07:27 +0200 Subject: [PATCH] fix(subvol): canonicalize requires path to exist MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Which is probably not the case when you want to create a subvolume in that path. Signed-off-by: Thomas Mühlbacher --- src/commands/subvolume.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/commands/subvolume.rs b/src/commands/subvolume.rs index 64743115..b059ff4a 100644 --- a/src/commands/subvolume.rs +++ b/src/commands/subvolume.rs @@ -1,4 +1,4 @@ -use std::path::PathBuf; +use std::{env, path::PathBuf}; use bch_bindgen::c::BCH_SUBVOL_SNAPSHOT_RO; use clap::{Parser, Subcommand}; @@ -42,9 +42,13 @@ pub fn subvolume(argv: Vec) -> i32 { match cli.subcommands { Subcommands::Create { targets } => { for target in targets { - let target = target - .canonicalize() - .expect("unable to canonicalize a target path"); + let target = if target.is_absolute() { + target + } else { + env::current_dir() + .map(|p| p.join(target)) + .expect("unable to get current directory") + }; if let Some(dirname) = target.parent() { let fs = unsafe { BcachefsHandle::open(dirname) }; @@ -56,7 +60,7 @@ pub fn subvolume(argv: Vec) -> i32 { Subcommands::Delete { target } => { let target = target .canonicalize() - .expect("unable to canonicalize a target path"); + .expect("subvolume path does not exist or can not be canonicalized"); if let Some(dirname) = target.parent() { let fs = unsafe { BcachefsHandle::open(dirname) };