switched shlex 1.2 to 1.3
This commit is contained in:
parent
86aa59bad8
commit
e395e7f9c4
3 changed files with 33 additions and 27 deletions
|
@ -6,5 +6,5 @@ edition = "2021"
|
|||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
shlex = "1.2"
|
||||
shlex = "1.3"
|
||||
structopt = "0.3"
|
||||
|
|
Binary file not shown.
58
src/main.rs
58
src/main.rs
|
@ -36,6 +36,12 @@ fn main() -> Result<(), i32> {
|
|||
}
|
||||
}
|
||||
|
||||
for target in &args.targets {
|
||||
if target.contains('\0') {
|
||||
eprintln!("Paths can never contain null byte: {}", target);
|
||||
return Err(1);
|
||||
}
|
||||
}
|
||||
let run_targets: Vec<Vec<&String>> = split_vec(&args.targets, &args.separator.unwrap_or(s_default_target_separator!().to_string()));
|
||||
|
||||
if run_targets.is_empty() {
|
||||
|
@ -45,18 +51,12 @@ fn main() -> Result<(), i32> {
|
|||
return Ok(());
|
||||
}
|
||||
|
||||
if args.prompt {
|
||||
if !prompt_confirm(&run_targets) {
|
||||
return Ok(());
|
||||
}
|
||||
}
|
||||
|
||||
let mut bad = false;
|
||||
let run_paths: Vec<Vec<PathBuf>> = run_targets.iter().enumerate().map(
|
||||
|(_,spaths)| spaths.iter().map(
|
||||
|spath| Path::new(spath).canonicalize().unwrap_or_else(
|
||||
|_| {
|
||||
eprintln!("Failed to retrieve absolute path for {}", shlex::quote(spath));
|
||||
eprintln!("Failed to retrieve absolute path for {}", shlex::try_quote(spath).unwrap());
|
||||
bad = true;
|
||||
Default::default()
|
||||
}
|
||||
|
@ -67,6 +67,12 @@ fn main() -> Result<(), i32> {
|
|||
return Err(1);
|
||||
}
|
||||
|
||||
if args.prompt {
|
||||
if !prompt_confirm(&run_targets) {
|
||||
return Ok(());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for paths in &run_paths {
|
||||
if let Err(s) = check_all_same_device(paths) {
|
||||
|
@ -139,7 +145,7 @@ struct CLIArguments {
|
|||
fn prompt_confirm<'a, T: Borrow<[Y]>, Y: AsRef<str>>(run_targets: &[T]) -> bool {
|
||||
println!("Are you sure you want to link all duplicates in each of these sets of targets?");
|
||||
for spaths in run_targets {
|
||||
println!(" {}", shlex::join(spaths.borrow().iter().map(|s| s.as_ref())));
|
||||
println!(" {}", shlex::try_join(spaths.borrow().iter().map(|s| s.as_ref())).unwrap());
|
||||
}
|
||||
print!("> ");
|
||||
std::io::stdout().flush().unwrap_or_else(|_| ());
|
||||
|
@ -158,7 +164,7 @@ fn prompt_confirm<'a, T: Borrow<[Y]>, Y: AsRef<str>>(run_targets: &[T]) -> bool
|
|||
|
||||
fn read_file_lines(path: &Path, dest: &mut Vec<String>) -> Result<(), String> {
|
||||
if !path.is_file() {
|
||||
return Err(format!("File does not exist or is not a normal file ({})", shlex::quote(&path.to_string_lossy())));
|
||||
return Err(format!("File does not exist or is not a normal file ({})", shlex::try_quote(&path.to_string_lossy()).unwrap()));
|
||||
}
|
||||
if let Ok(f) = std::fs::File::open(path) {
|
||||
let reader = BufReader::new(f);
|
||||
|
@ -170,7 +176,7 @@ fn read_file_lines(path: &Path, dest: &mut Vec<String>) -> Result<(), String> {
|
|||
}
|
||||
Ok(())
|
||||
} else {
|
||||
Err(format!("Could not open {}", shlex::quote(&path.to_string_lossy())))
|
||||
Err(format!("Could not open {}", shlex::try_quote(&path.to_string_lossy()).unwrap()))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -180,7 +186,7 @@ fn get_st_dev(file: &PathBuf) -> Result<u64, String> {
|
|||
if let Ok(metadata) = std::fs::metadata(file) {
|
||||
Ok(metadata.st_dev())
|
||||
} else {
|
||||
Err(format!("Failed to retrive device id for {}", shlex::quote(&file.to_string_lossy())))
|
||||
Err(format!("Failed to retrive device id for {}", shlex::try_quote(&file.to_string_lossy()).unwrap()))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -201,7 +207,7 @@ fn check_all_same_device(paths: &[PathBuf]) -> Result<(), String> {
|
|||
let mut s = String::with_capacity(wrong.len()*128); // 75 max estimated len of path, 53 for prefix msg + nl
|
||||
for path in wrong {
|
||||
s.push_str("Device ids must all be the same; got different for: {}");
|
||||
s.push_str(&shlex::quote(&path.to_string_lossy()));
|
||||
s.push_str(&shlex::try_quote(&path.to_string_lossy()).unwrap());
|
||||
s.push_str("\n");
|
||||
}
|
||||
s.pop(); // remove last newline
|
||||
|
@ -283,8 +289,8 @@ fn format_pair(f1s: &str, f2s: &str, cfg: &Config) -> String {
|
|||
if cfg.no_brace_output {
|
||||
return format!(
|
||||
"{} {}",
|
||||
shlex::quote(&f1s),
|
||||
shlex::quote(&f2s)
|
||||
shlex::try_quote(&f1s).unwrap(),
|
||||
shlex::try_quote(&f2s).unwrap()
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -295,30 +301,30 @@ fn format_pair(f1s: &str, f2s: &str, cfg: &Config) -> String {
|
|||
if prefixlong && suffixlong {
|
||||
format!(
|
||||
"{}{{{},{}}}{}",
|
||||
shlex::quote(prefix),
|
||||
shlex::quote(&f1s[ prefix.len()..std::cmp::max(prefix.len(), f1s.len()-suffix.len()) ]),
|
||||
shlex::quote(&f2s[ prefix.len()..std::cmp::max(prefix.len(), f2s.len()-suffix.len()) ]),
|
||||
shlex::quote(suffix)
|
||||
shlex::try_quote(prefix).unwrap(),
|
||||
shlex::try_quote(&f1s[ prefix.len()..std::cmp::max(prefix.len(), f1s.len()-suffix.len()) ]).unwrap(),
|
||||
shlex::try_quote(&f2s[ prefix.len()..std::cmp::max(prefix.len(), f2s.len()-suffix.len()) ]).unwrap(),
|
||||
shlex::try_quote(suffix).unwrap()
|
||||
)
|
||||
} else if prefixlong {
|
||||
format!(
|
||||
"{}{{{},{}}}",
|
||||
shlex::quote(prefix),
|
||||
shlex::quote(&f1s[prefix.len()..]),
|
||||
shlex::quote(&f2s[prefix.len()..])
|
||||
shlex::try_quote(prefix).unwrap(),
|
||||
shlex::try_quote(&f1s[prefix.len()..]).unwrap(),
|
||||
shlex::try_quote(&f2s[prefix.len()..]).unwrap()
|
||||
)
|
||||
} else if suffixlong {
|
||||
format!(
|
||||
"{{{},{}}}{}",
|
||||
shlex::quote(&f1s[..f1s.len()-suffix.len()]),
|
||||
shlex::quote(&f2s[..f2s.len()-suffix.len()]),
|
||||
shlex::quote(suffix),
|
||||
shlex::try_quote(&f1s[..f1s.len()-suffix.len()]).unwrap(),
|
||||
shlex::try_quote(&f2s[..f2s.len()-suffix.len()]).unwrap(),
|
||||
shlex::try_quote(suffix).unwrap(),
|
||||
)
|
||||
} else {
|
||||
format!(
|
||||
"{} <-> {}",
|
||||
shlex::quote(&f1s),
|
||||
shlex::quote(&f2s)
|
||||
shlex::try_quote(&f1s).unwrap(),
|
||||
shlex::try_quote(&f2s).unwrap()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue