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
+18 -10
View File
@@ -7,15 +7,23 @@ use crate::env::get_editor;
/// Run the editor and pass the provided files as arguments. The workdir is set
/// to the parent of the first file.
pub fn run_edit_command(files: &[&Path]) -> Result<ExitStatus> {
let mut cmd = Command::new(get_editor().context("getting suitable editor")?);
cmd.current_dir(
files[0]
.parent()
.context("getting parent dir of first file argument")?,
);
for f in files {
cmd.arg(f.to_string_lossy().to_string());
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")?);
cmd.current_dir(
files[0]
.parent()
.context("getting parent dir of first file argument")?,
);
for f in files {
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(())
}
#[allow(clippy::unused_self)]
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 {
ensure!(!file.exists(), "group already exists under {file:?}");
@@ -323,7 +338,7 @@ fn get_group_file_paths_matching_args<'a>(
groups: &'a HashSet<Group>,
) -> Result<Vec<&'a Path>> {
let file_names: Vec<_> = arg_match
.get_many::<String>("group")
.get_many::<String>("groups")
.context("getting groups from args")?
.collect();