fix 'group new' subcommand

This commit is contained in:
steven-omaha
2023-02-23 22:02:15 +01:00
parent dca0895b39
commit d45cdc4eae
2 changed files with 35 additions and 12 deletions
+9 -1
View File
@@ -7,7 +7,11 @@ use crate::env::get_editor;
/// Run the editor and pass the provided files as arguments. The workdir is set /// Run the editor and pass the provided files as arguments. The workdir is set
/// to the parent of the first file. /// to the parent of the first file.
pub fn run_edit_command(files: &[&Path]) -> Result<ExitStatus> { pub fn run_edit_command<P>(files: &[P]) -> Result<ExitStatus>
where
P: AsRef<Path>,
{
fn inner(files: &[&Path]) -> Result<ExitStatus> {
let mut cmd = Command::new(get_editor().context("getting suitable editor")?); let mut cmd = Command::new(get_editor().context("getting suitable editor")?);
cmd.current_dir( cmd.current_dir(
files[0] files[0]
@@ -18,4 +22,8 @@ pub fn run_edit_command(files: &[&Path]) -> Result<ExitStatus> {
cmd.arg(f.to_string_lossy().to_string()); cmd.arg(f.to_string_lossy().to_string());
} }
cmd.status().map_err(|e| anyhow!(e)) cmd.status().map_err(|e| anyhow!(e))
}
let files: Vec<_> = files.iter().map(|p| p.as_ref()).collect();
inner(&files)
} }
+17 -2
View File
@@ -280,8 +280,23 @@ impl Pacdef {
Ok(()) Ok(())
} }
#[allow(clippy::unused_self)]
fn new_groups(&self, arg_matches: &ArgMatches) -> Result<()> { fn new_groups(&self, arg_matches: &ArgMatches) -> Result<()> {
let paths = get_group_file_paths_matching_args(arg_matches, &self.groups)?; let group_path = get_group_dir()?;
let new_group_names: Vec<_> = arg_matches
.get_many::<String>("groups")
.context("getting groups from args")?
.collect();
let paths: Vec<_> = new_group_names
.into_iter()
.map(|name| {
let mut base = group_path.clone();
base.push(name);
base
})
.collect();
for file in &paths { for file in &paths {
ensure!(!file.exists(), "group already exists under {file:?}"); ensure!(!file.exists(), "group already exists under {file:?}");
@@ -323,7 +338,7 @@ fn get_group_file_paths_matching_args<'a>(
groups: &'a HashSet<Group>, groups: &'a HashSet<Group>,
) -> Result<Vec<&'a Path>> { ) -> Result<Vec<&'a Path>> {
let file_names: Vec<_> = arg_match let file_names: Vec<_> = arg_match
.get_many::<String>("group") .get_many::<String>("groups")
.context("getting groups from args")? .context("getting groups from args")?
.collect(); .collect();