From b553583fc75cb9225e93b3a041a5815acc10b9bf Mon Sep 17 00:00:00 2001 From: FUTATSUKI Yasuhito Date: Sat, 26 Aug 2023 23:47:26 +0900 Subject: [PATCH] Implement diff compatible -L (--label) option. With this, we can use difft as a external diff for Apache Subversion, in the form: svn diff --diff-cmd=difft -x '' --- src/options.rs | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/options.rs b/src/options.rs index 1eb0fcc1d3..6a989cef3b 100644 --- a/src/options.rs +++ b/src/options.rs @@ -135,6 +135,15 @@ fn app() -> clap::Command<'static> { .validator(|s| s.parse::()) .required(false), ) + .arg( + Arg::new("label").short('L') + .long("label") + .takes_value(true) + .value_name("LABEL") + .max_occurrences(2) + .allow_invalid_utf8(true) + .help("Label of file(s) which should be used for printing instead of PATH(s).") + ) .arg( Arg::new("width") .long("width") @@ -638,7 +647,25 @@ pub(crate) fn parse_args() -> Mode { [lhs_path, rhs_path] => { let lhs_arg = FileArgument::from_cli_argument(lhs_path); let rhs_arg = FileArgument::from_cli_argument(rhs_path); - let display_path = build_display_path(&lhs_arg, &rhs_arg); + let display_path = if matches.is_present("label") { + let labels: Vec<_> = matches.values_of_os("label").unwrap_or_default().collect(); + let (_lhs_display_path, rhs_display_path) = match &labels[..] { + [lhs_display_path, rhs_display_path] => ( + lhs_display_path.to_string_lossy().to_string(), + rhs_display_path.to_string_lossy().to_string(), + ), + [display_path] => ( + display_path.to_string_lossy().to_string(), + display_path.to_string_lossy().to_string(), + ), + _ => { + unreachable!("clap has already validated label") + } + }; + rhs_display_path + } else { + build_display_path(&lhs_arg, &rhs_arg) + }; (display_path, lhs_arg, rhs_arg, None) } [display_path, lhs_tmp_file, _lhs_hash, _lhs_mode, rhs_tmp_file, _rhs_hash, _rhs_mode] => {