Re: [PATCH v3 1/2] t1300: extract and use test_cmp_config()

2018-10-03 Thread Eric Sunshine
On Tue, Oct 2, 2018 at 12:07 PM Nguyễn Thái Ngọc Duy  wrote:
> In many config-related tests it's common to check if a config variable
> has expected value and we want to print the differences when the test
> fails. Doing it the normal way is three lines of shell code. Let's add
> a function do to all this (and a little more).
> [...]
> Signed-off-by: Nguyễn Thái Ngọc Duy 
> ---
> diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
> @@ -747,6 +747,29 @@ test_cmp() {
> +test_cmp_config() {
> +   local GD

If you re-roll, maybe make this part of the &&-chain to protect
against someone coming along and inserting code above this line
without realizing that the &&-chain is broken.

> +   if test "$1" = "-C"
> +   then
> +   shift &&
> +   GD="-C $1" &&
> +   shift
> +   fi &&
> +   printf "%s\n" "$1" >expect.config &&
> +   shift &&
> +   git $GD config "$@" >actual.config &&
> +   test_cmp expect.config actual.config
> +}


[PATCH v3 1/2] t1300: extract and use test_cmp_config()

2018-10-02 Thread Nguyễn Thái Ngọc Duy
In many config-related tests it's common to check if a config variable
has expected value and we want to print the differences when the test
fails. Doing it the normal way is three lines of shell code. Let's add
a function do to all this (and a little more).

This function has uses outside t1300 as well but I'm not going to
convert them all. And it will be used in the next commit where
per-worktree config feature is introduced.

Signed-off-by: Nguyễn Thái Ngọc Duy 
---
 t/t1300-config.sh   | 79 ++---
 t/test-lib-functions.sh | 23 
 2 files changed, 42 insertions(+), 60 deletions(-)

diff --git a/t/t1300-config.sh b/t/t1300-config.sh
index cdf1fed5d1..00c2b0f0eb 100755
--- a/t/t1300-config.sh
+++ b/t/t1300-config.sh
@@ -76,15 +76,11 @@ EOF
 test_expect_success 'non-match result' 'test_cmp expect .git/config'
 
 test_expect_success 'find mixed-case key by canonical name' '
-   echo Second >expect &&
-   git config cores.whatever >actual &&
-   test_cmp expect actual
+   test_cmp_config Second cores.whatever
 '
 
 test_expect_success 'find mixed-case key by non-canonical name' '
-   echo Second >expect &&
-   git config CoReS.WhAtEvEr >actual &&
-   test_cmp expect actual
+   test_cmp_config Second CoReS.WhAtEvEr
 '
 
 test_expect_success 'subsections are not canonicalized by git-config' '
@@ -94,12 +90,8 @@ test_expect_success 'subsections are not canonicalized by 
git-config' '
[section "SubSection"]
key = two
EOF
-   echo one >expect &&
-   git config section.subsection.key >actual &&
-   test_cmp expect actual &&
-   echo two >expect &&
-   git config section.SubSection.key >actual &&
-   test_cmp expect actual
+   test_cmp_config one section.subsection.key &&
+   test_cmp_config two section.SubSection.key
 '
 
 cat > .git/config <<\EOF
@@ -212,9 +204,7 @@ test_expect_success 'really really mean test' '
 '
 
 test_expect_success 'get value' '
-   echo alpha >expect &&
-   git config beta.haha >actual &&
-   test_cmp expect actual
+   test_cmp_config alpha beta.haha
 '
 
 cat > expect << EOF
@@ -251,15 +241,11 @@ test_expect_success 'non-match' '
 '
 
 test_expect_success 'non-match value' '
-   echo wow >expect &&
-   git config --get nextsection.nonewline !for >actual &&
-   test_cmp expect actual
+   test_cmp_config wow --get nextsection.nonewline !for
 '
 
 test_expect_success 'multi-valued get returns final one' '
-   echo "wow2 for me" >expect &&
-   git config --get nextsection.nonewline >actual &&
-   test_cmp expect actual
+   test_cmp_config "wow2 for me" --get nextsection.nonewline
 '
 
 test_expect_success 'multi-valued get-all returns all' '
@@ -520,21 +506,11 @@ test_expect_success 'editing stdin is an error' '
 
 test_expect_success 'refer config from subdirectory' '
mkdir x &&
-   (
-   cd x &&
-   echo strasse >expect &&
-   git config --get --file ../other-config ein.bahn >actual &&
-   test_cmp expect actual
-   )
-
+   test_cmp_config -C x strasse --get --file ../other-config ein.bahn
 '
 
 test_expect_success 'refer config from subdirectory via --file' '
-   (
-   cd x &&
-   git config --file=../other-config --get ein.bahn >actual &&
-   test_cmp expect actual
-   )
+   test_cmp_config -C x strasse --file=../other-config --get ein.bahn
 '
 
 cat > expect << EOF
@@ -688,16 +664,13 @@ test_expect_success numbers '
 
 test_expect_success '--int is at least 64 bits' '
git config giga.watts 121g &&
-   echo 129922760704 >expect &&
-   git config --int --get giga.watts >actual &&
-   test_cmp expect actual
+   echo  >expect &&
+   test_cmp_config 129922760704 --int --get giga.watts
 '
 
 test_expect_success 'invalid unit' '
git config aninvalid.unit "1auto" &&
-   echo 1auto >expect &&
-   git config aninvalid.unit >actual &&
-   test_cmp expect actual &&
+   test_cmp_config 1auto aninvalid.unit &&
test_must_fail git config --int --get aninvalid.unit 2>actual &&
test_i18ngrep "bad numeric config value .1auto. for .aninvalid.unit. in 
file .git/config: invalid unit" actual
 '
@@ -1039,9 +1012,7 @@ test_expect_success '--null --get-regexp' '
 
 test_expect_success 'inner whitespace kept verbatim' '
git config section.val "foo   bar" &&
-   echo "foo bar" >expect &&
-   git config section.val >actual &&
-   test_cmp expect actual
+   test_cmp_config "foo  bar" section.val
 '
 
 test_expect_success SYMLINKS 'symlinked configuration' '
@@ -1808,21 +1779,15 @@ big = 1M
 EOF
 
 test_expect_success 'identical modern --type specifiers are allowed' '
-   git config --type=int --type=int core.big >actual &&
-   echo 1048576 >expect &&
-   test_cmp expect actual
+   test_cmp_config