From 43ae361226abe951971eee477714f76acb5be6ab Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Sat, 24 Apr 2021 09:43:51 -0400 Subject: Refactor test to allow multiple env var formats to be tested --- src/git_config/mod.rs | 53 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/src/git_config/mod.rs b/src/git_config/mod.rs index 13b494b9..454470f7 100644 --- a/src/git_config/mod.rs +++ b/src/git_config/mod.rs @@ -167,32 +167,41 @@ mod tests { // [core] // pager = env | grep GIT_CONFIG_PARAMETERS - let config = parse_config_from_env_var_value("'user.name=xxx'"); - assert!(config.is_empty()); + for env_var_value in &["'user.name=xxx'"] { + let config = parse_config_from_env_var_value(env_var_value); + assert!(config.is_empty()); + } - let config = parse_config_from_env_var_value("'delta.plus-style=green'"); - assert_eq!(config["delta.plus-style"], "green"); + for env_var_value in &["'delta.plus-style=green'"] { + let config = parse_config_from_env_var_value(env_var_value); + assert_eq!(config["delta.plus-style"], "green"); + } - let config = parse_config_from_env_var_value( - r##"'user.name=xxx' 'delta.hunk-header-line-number-style=red "#067a00"'"##, - ); - assert_eq!( - config["delta.hunk-header-line-number-style"], - r##"red "#067a00""## - ); + for env_var_value in + &[r##"'user.name=xxx' 'delta.hunk-header-line-number-style=red "#067a00"'"##] + { + let config = parse_config_from_env_var_value(env_var_value); + assert_eq!( + config["delta.hunk-header-line-number-style"], + r##"red "#067a00""## + ); + } - let config = - parse_config_from_env_var_value(r##"'user.name=xxx' 'delta.side-by-side=false'"##); - assert_eq!(config["delta.side-by-side"], "false"); + for env_var_value in &[r##"'user.name=xxx' 'delta.side-by-side=false'"##] { + let config = parse_config_from_env_var_value(env_var_value); + assert_eq!(config["delta.side-by-side"], "false"); + } - let config = parse_config_from_env_var_value( + for env_var_value in &[ r##"'delta.plus-style=green' 'delta.side-by-side=false' 'delta.hunk-header-line-number-style=red "#067a00"'"##, - ); - assert_eq!(config["delta.plus-style"], "green"); - assert_eq!(config["delta.side-by-side"], "false"); - assert_eq!( - config["delta.hunk-header-line-number-style"], - r##"red "#067a00""## - ); + ] { + let config = parse_config_from_env_var_value(env_var_value); + assert_eq!(config["delta.plus-style"], "green"); + assert_eq!(config["delta.side-by-side"], "false"); + assert_eq!( + config["delta.hunk-header-line-number-style"], + r##"red "#067a00""## + ); + } } } -- cgit v1.2.3 From adb61d15cb9f69554b9ce1ddc05ee63e86daff84 Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Sat, 24 Apr 2021 09:55:33 -0400 Subject: Use verbose regex style --- src/git_config/mod.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/git_config/mod.rs b/src/git_config/mod.rs index 454470f7..5e309666 100644 --- a/src/git_config/mod.rs +++ b/src/git_config/mod.rs @@ -80,8 +80,12 @@ fn parse_config_from_env_var() -> HashMap { } lazy_static! { - static ref GIT_CONFIG_PARAMETERS_REGEX: Regex = - Regex::new(r"'(delta\.[a-z-]+)=([^']+)'").unwrap(); + static ref GIT_CONFIG_PARAMETERS_REGEX: Regex = Regex::new( + r"(?x) + '(delta\.[a-z-]+)=([^']+)' + " + ) + .unwrap(); } fn parse_config_from_env_var_value(s: &str) -> HashMap { -- cgit v1.2.3 From 86a7a6a713b4b8e11510b2c27d26a3129865aa42 Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Sat, 24 Apr 2021 09:52:21 -0400 Subject: Add failing test: support new GIT_CONFIG_PARAMETERS format --- src/git_config/mod.rs | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/git_config/mod.rs b/src/git_config/mod.rs index 5e309666..cbdab805 100644 --- a/src/git_config/mod.rs +++ b/src/git_config/mod.rs @@ -171,19 +171,25 @@ mod tests { // [core] // pager = env | grep GIT_CONFIG_PARAMETERS - for env_var_value in &["'user.name=xxx'"] { + // We test multiple formats because the format of the value stored by + // git in this environment variable has changed in recent versions of + // Git. See + // https://github.com/git/git/blob/311531c9de557d25ac087c1637818bd2aad6eb3a/Documentation/RelNotes/2.31.0.txt#L127-L130 + + for env_var_value in &["'user.name=xxx'", "'user.name'='xxx'"] { let config = parse_config_from_env_var_value(env_var_value); assert!(config.is_empty()); } - for env_var_value in &["'delta.plus-style=green'"] { + for env_var_value in &["'delta.plus-style=green'", "'delta.plus-style'='green'"] { let config = parse_config_from_env_var_value(env_var_value); assert_eq!(config["delta.plus-style"], "green"); } - for env_var_value in - &[r##"'user.name=xxx' 'delta.hunk-header-line-number-style=red "#067a00"'"##] - { + for env_var_value in &[ + r##"'user.name=xxx' 'delta.hunk-header-line-number-style=red "#067a00"'"##, + r##"'user.name'='xxx' 'delta.hunk-header-line-number-style'='red "#067a00"'"##, + ] { let config = parse_config_from_env_var_value(env_var_value); assert_eq!( config["delta.hunk-header-line-number-style"], @@ -191,13 +197,17 @@ mod tests { ); } - for env_var_value in &[r##"'user.name=xxx' 'delta.side-by-side=false'"##] { + for env_var_value in &[ + r##"'user.name=xxx' 'delta.side-by-side=false'"##, + r##"'user.name'='xxx' 'delta.side-by-side'='false'"##, + ] { let config = parse_config_from_env_var_value(env_var_value); assert_eq!(config["delta.side-by-side"], "false"); } for env_var_value in &[ r##"'delta.plus-style=green' 'delta.side-by-side=false' 'delta.hunk-header-line-number-style=red "#067a00"'"##, + r##"'delta.plus-style'='green' 'delta.side-by-side'='false' 'delta.hunk-header-line-number-style'='red "#067a00"'"##, ] { let config = parse_config_from_env_var_value(env_var_value); assert_eq!(config["delta.plus-style"], "green"); -- cgit v1.2.3 From 567bdf6775bce0f9b7ab6fc12cc319927aca12e2 Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Sat, 24 Apr 2021 10:13:44 -0400 Subject: Support new GIT_CONFIG_PARAMETERS env var format https://github.com/git/git/blob/311531c9de557d25ac087c1637818bd2aad6eb3a/Documentation/RelNotes/2.31.0.txt#L127-L130 --- src/git_config/mod.rs | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/git_config/mod.rs b/src/git_config/mod.rs index cbdab805..1b2ea0a6 100644 --- a/src/git_config/mod.rs +++ b/src/git_config/mod.rs @@ -82,7 +82,11 @@ fn parse_config_from_env_var() -> HashMap { lazy_static! { static ref GIT_CONFIG_PARAMETERS_REGEX: Regex = Regex::new( r"(?x) - '(delta\.[a-z-]+)=([^']+)' + (?: # Non-capturing group containing union + '(delta\.[a-z-]+)=([^']+)' # Git <2.31.0 format + | + '(delta\.[a-z-]+)'='([^']+)' # Git ≥2.31.0 format + ) " ) .unwrap(); @@ -91,7 +95,23 @@ lazy_static! { fn parse_config_from_env_var_value(s: &str) -> HashMap { GIT_CONFIG_PARAMETERS_REGEX .captures_iter(s) - .map(|captures| (captures[1].to_string(), captures[2].to_string())) + .map(|captures| { + let (i, j) = match ( + captures.get(1), + captures.get(2), + captures.get(3), + captures.get(4), + ) { + (Some(_), Some(_), None, None) => (1, 2), + (None, None, Some(_), Some(_)) => (3, 4), + _ => (0, 0), + }; + if (i, j) == (0, 0) { + ("".to_string(), "".to_string()) + } else { + (captures[i].to_string(), captures[j].to_string()) + } + }) .collect() } -- cgit v1.2.3