From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org, Michael Giuffrida <michaelpg@chromium.org>,
Michael Schubert <mschub@elegosoft.com>,
Jeff King <peff@peff.net>,
Eric Sunshine <sunshine@sunshineco.com>
Subject: Re: [PATCH v2 04/12] fetch tests: double quote a variable for interpolation
Date: Tue, 23 Jan 2018 00:04:28 +0100 [thread overview]
Message-ID: <87wp09h4w3.fsf@evledraar.gmail.com> (raw)
In-Reply-To: <xmqqbmhln01n.fsf@gitster.mtv.corp.google.com>
On Mon, Jan 22 2018, Junio C. Hamano jotted:
> Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:
>
>> If the $cmdline variable contains multiple arguments they won't be
>> interpolated correctly since the body of the test is single quoted. I
>> don't know what part of test-lib.sh is expanding variables within
>> single-quoted strings,...
>
> dothis='echo whatever $IFS separated strings'
> test_expect_success label '
> $dothis
> '
>
> works because test_expect_success ends up beint a glorified 'eval'
> and it sees the value of $dothis.
>
>> but interpolating this inline is the desired
>> behavior here.
>
> I am not sure what you meant by this, though.
Looking into this again:
myvar="a b 'c' \"d\" \"\\\"e\\\"\""
test_expect_success 'blah' '
/usr/bin/perl -MData::Dumper -wE say\ Dumper\ \\@ARGV -- $myvar &&
/usr/bin/perl -MData::Dumper -wE say\ Dumper\ \\@ARGV -- '"$myvar"' &&
echo $myvar &&
false
'
Produces:
Initialized empty Git repository in /home/avar/g/git/t/trash directory.t5510-fetch/.git/
expecting success:
/usr/bin/perl -MData::Dumper -wE say\ Dumper\ \\@ARGV -- $myvar &&
/usr/bin/perl -MData::Dumper -wE say\ Dumper\ \\@ARGV -- a b 'c' "d" "\"e\"" &&
echo $myvar &&
false
+ /usr/bin/perl -MData::Dumper -wE say Dumper \@ARGV -- a b 'c' "d" "\"e\""
$VAR1 = [
'a',
'b',
'\'c\'',
'"d"',
'"\\"e\\""'
];
+ /usr/bin/perl -MData::Dumper -wE say Dumper \@ARGV -- a b c d "e"
$VAR1 = [
'a',
'b',
'c',
'd',
'"e"'
];
+ echo a b 'c' "d" "\"e\""
a b 'c' "d" "\"e\""
+ false
error: last command exited with $?=1
not ok 1 - blah
#
# /usr/bin/perl -MData::Dumper -wE say\ Dumper\ \\@ARGV -- $myvar &&
# /usr/bin/perl -MData::Dumper -wE say\ Dumper\ \\@ARGV -- a b 'c' "d" "\"e\"" &&
# echo $myvar &&
# false
#
I.e. the desired effect is to get variables like the refspec like/this
not 'like/this'. I could also just apply this on top, which gives the
same end result, but now I wonder if starting some args with
e.g. unescaped + and with : and * in the string is portable:
diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh
index 48f49b613a..2d311059e9 100755
--- a/t/t5510-fetch.sh
+++ b/t/t5510-fetch.sh
@@ -587 +587 @@ test_configured_prune () {
- git fetch '"$cmdline"' &&
+ git fetch $cmdline &&
@@ -621 +621 @@ test_configured_prune unset unset unset unset kept pruned \
- "--prune origin 'refs/tags/*:refs/tags/*'"
+ "--prune origin refs/tags/*:refs/tags/*"
@@ -623 +623 @@ test_configured_prune unset unset unset unset pruned pruned \
- "--prune origin 'refs/tags/*:refs/tags/*' '+refs/heads/*:refs/remotes/origin/*'"
+ "--prune origin refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/*"
@@ -641 +641 @@ test_configured_prune false false unset unset kept pruned \
- "--prune origin 'refs/tags/*:refs/tags/*'"
+ "--prune origin refs/tags/*:refs/tags/*"
@@ -643 +643 @@ test_configured_prune false false unset unset pruned pruned \
- "--prune origin 'refs/tags/*:refs/tags/*' '+refs/heads/*:refs/remotes/origin/*'"
+ "--prune origin refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/*"
@@ -661 +661 @@ test_configured_prune true true unset unset kept pruned \
- "--prune origin 'refs/tags/*:refs/tags/*'"
+ "--prune origin refs/tags/*:refs/tags/*"
@@ -663 +663 @@ test_configured_prune true true unset unset pruned pruned \
- "--prune origin 'refs/tags/*:refs/tags/*' '+refs/heads/*:refs/remotes/origin/*'"
+ "--prune origin refs/tags/*:refs/tags/* +refs/heads/*:refs/remotes/origin/*"
@@ -684 +684 @@ test_configured_prune true false true false kept kept ""
-# When --prune-tags is supplied it's ignored if an explict refspec is
+# When --prune-tags is supplied its ignored if an explict refspec is
@@ -687 +687 @@ test_configured_prune unset unset unset unset pruned kept \
- "--prune --prune-tags origin '+refs/heads/*:refs/remotes/origin/*'"
+ "--prune --prune-tags origin +refs/heads/*:refs/remotes/origin/*"
@@ -689 +689 @@ test_configured_prune unset unset true unset pruned kept \
- "--prune --prune-tags origin '+refs/heads/*:refs/remotes/origin/*'"
+ "--prune --prune-tags origin +refs/heads/*:refs/remotes/origin/*"
@@ -691 +691 @@ test_configured_prune unset unset unset true pruned kept \
- "--prune --prune-tags origin '+refs/heads/*:refs/remotes/origin/*'"
+ "--prune --prune-tags origin +refs/heads/*:refs/remotes/origin/*"
>> - git fetch $cmdline &&
>> + git fetch '"$cmdline"' &&
>
> Would this work with cmdline that needs to be quoted for the
> resulting shell script to be syntactically correct (e.g. cmdline
> with a single dq in it)? By stepping out of sq pair, you are
> allowing/asking the shell that forms test_expect_success command
> line arguments to interpolate cmdline, instead of asking the shell
> that evals test_expect_success with its command line argument
> strings.
>
> In other words, I suspect that the caller of test_configured_prune
> now must sq_quote the cmdline arguments it passes to this helper,
> i.e.
>
> cmdline="$(git rev-parse --sq-quote arg1 'arg"2' arg3)"
> test_configured_prune ... "$cmdline" ...
>
> for this patch to be correct.
Sorry at this point I'm confused about this whole thing. This doesn't
work and overquotes:
@@ -559,2 +569,3 @@ test_configured_prune () {
+ cmdline_q="$(git rev-parse --sq-quote $cmdline)"
test_expect_success "prune fetch.prune=$1 remote.origin.prune=$2 fetch.pruneTags=$3 remote.origin.pruneTags=$4${7:+ $7}; branch:$5 tag:$6" '
@@ -586,3 +597,4 @@ test_configured_prune () {
- git fetch '"$cmdline"' &&
+ /usr/bin/perl -MData::Dumper -wE say\ Dumper\ \\@ARGV -- '"$cmdline_q"' &&
+ git fetch '"$cmdline_q"' &&
case "$expected_branch" in
So does just using $cmdline_q without making the calling shell
interpolate it. Is there an idiom I should be following that I'm missing
here?
next prev parent reply other threads:[~2018-01-22 23:04 UTC|newest]
Thread overview: 118+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-15 21:16 [BUG] git remote prune removes local tags, depending on fetch config Michael Giuffrida
2018-01-16 0:38 ` Ævar Arnfjörð Bjarmason
2018-01-16 2:14 ` Michael Giuffrida
2018-01-16 11:14 ` Ævar Arnfjörð Bjarmason
2018-01-19 0:00 ` [PATCH 00/11] document & test fetch pruning + WIP fetch.pruneTags Ævar Arnfjörð Bjarmason
2018-01-21 0:02 ` [PATCH v2 00/12] document & test fetch pruning & add fetch.pruneTags Ævar Arnfjörð Bjarmason
2018-01-23 22:13 ` [PATCH v3 00/11] " Ævar Arnfjörð Bjarmason
2018-01-24 23:04 ` Junio C Hamano
2018-01-24 23:25 ` Ævar Arnfjörð Bjarmason
2018-02-06 16:23 ` Ævar Arnfjörð Bjarmason
2018-02-08 16:19 ` [PATCH v2 00/17] " Ævar Arnfjörð Bjarmason
2018-02-08 18:21 ` Ævar Arnfjörð Bjarmason
2018-02-08 19:48 ` Junio C Hamano
2018-02-09 21:06 ` Ævar Arnfjörð Bjarmason
2018-02-08 16:19 ` [PATCH v2 01/17] fetch: don't redundantly NULL something calloc() gave us Ævar Arnfjörð Bjarmason
2018-02-09 4:36 ` Eric Sunshine
2018-02-09 19:06 ` Ævar Arnfjörð Bjarmason
2018-02-08 16:19 ` [PATCH v2 02/17] fetch: trivially refactor assignment to ref_nr Ævar Arnfjörð Bjarmason
2018-02-09 4:41 ` Eric Sunshine
2018-02-08 16:19 ` [PATCH v2 03/17] fetch: stop accessing "remote" variable indirectly Ævar Arnfjörð Bjarmason
2018-02-08 16:19 ` [PATCH v2 04/17] remote: add a macro for "refs/tags/*:refs/tags/*" Ævar Arnfjörð Bjarmason
2018-02-08 16:19 ` [PATCH v2 05/17] fetch tests: refactor in preparation for testing tag pruning Ævar Arnfjörð Bjarmason
2018-02-08 16:19 ` [PATCH v2 06/17] fetch tests: re-arrange arguments for future readability Ævar Arnfjörð Bjarmason
2018-02-08 16:19 ` [PATCH v2 07/17] fetch tests: add a tag to be deleted to the pruning tests Ævar Arnfjörð Bjarmason
2018-02-08 16:19 ` [PATCH v2 08/17] fetch tests: test --prune and refspec interaction Ævar Arnfjörð Bjarmason
2018-02-08 16:19 ` [PATCH v2 09/17] fetch tests: double quote a variable for interpolation Ævar Arnfjörð Bjarmason
2018-02-08 16:19 ` [PATCH v2 10/17] fetch tests: expand case/esac for later change Ævar Arnfjörð Bjarmason
2018-02-08 16:19 ` [PATCH v2 11/17] fetch tests: fetch <url> <spec> as well as fetch [<remote>] Ævar Arnfjörð Bjarmason
2018-02-09 5:17 ` Eric Sunshine
2018-02-09 20:05 ` Ævar Arnfjörð Bjarmason
2018-02-09 20:27 ` Jeff King
2018-02-09 21:14 ` Eric Sunshine
2018-02-09 20:57 ` Junio C Hamano
2018-02-09 21:13 ` Junio C Hamano
2018-02-08 16:19 ` [PATCH v2 12/17] git fetch doc: add a new section to explain the ins & outs of pruning Ævar Arnfjörð Bjarmason
2018-02-09 5:26 ` Eric Sunshine
2018-02-08 16:19 ` [PATCH v2 13/17] git remote doc: correct dangerous lies about what prune does Ævar Arnfjörð Bjarmason
2018-02-09 5:33 ` Eric Sunshine
2018-02-08 16:19 ` [PATCH v2 14/17] git-fetch & config doc: link to the new PRUNING section Ævar Arnfjörð Bjarmason
2018-02-08 16:19 ` [PATCH v2 15/17] fetch tests: add scaffolding for the new fetch.pruneTags Ævar Arnfjörð Bjarmason
2018-02-08 16:19 ` [PATCH v2 16/17] fetch: add a --fetch-prune option and fetch.pruneTags config Ævar Arnfjörð Bjarmason
2018-02-09 6:58 ` Eric Sunshine
2018-02-09 8:23 ` Ævar Arnfjörð Bjarmason
2018-02-08 16:19 ` [PATCH v2 17/17] fetch: make the --fetch-prune work with <url> Ævar Arnfjörð Bjarmason
2018-02-09 7:03 ` Eric Sunshine
2018-02-09 8:22 ` Ævar Arnfjörð Bjarmason
2018-01-23 22:13 ` [PATCH v3 01/11] fetch: don't redundantly NULL something calloc() gave us Ævar Arnfjörð Bjarmason
2018-01-23 22:13 ` [PATCH v3 02/11] fetch: stop accessing "remote" variable indirectly Ævar Arnfjörð Bjarmason
2018-01-24 20:53 ` Junio C Hamano
2018-01-23 22:13 ` [PATCH v3 03/11] fetch tests: refactor in preparation for testing tag pruning Ævar Arnfjörð Bjarmason
2018-01-23 22:13 ` [PATCH v3 04/11] fetch tests: re-arrange arguments for future readability Ævar Arnfjörð Bjarmason
2018-01-23 22:13 ` [PATCH v3 05/11] fetch tests: add a tag to be deleted to the pruning tests Ævar Arnfjörð Bjarmason
2018-01-23 22:13 ` [PATCH v3 06/11] fetch tests: test --prune and refspec interaction Ævar Arnfjörð Bjarmason
2018-01-23 22:13 ` [PATCH v3 07/11] git fetch doc: add a new section to explain the ins & outs of pruning Ævar Arnfjörð Bjarmason
2018-01-23 22:13 ` [PATCH v3 08/11] git remote doc: correct dangerous lies about what prune does Ævar Arnfjörð Bjarmason
2018-01-23 22:13 ` [PATCH v3 09/11] git-fetch & config doc: link to the new PRUNING section Ævar Arnfjörð Bjarmason
2018-01-23 22:13 ` [PATCH v3 10/11] fetch tests: add scaffolding for the new fetch.pruneTags Ævar Arnfjörð Bjarmason
2018-01-23 22:13 ` [PATCH v3 11/11] fetch: add a --fetch-prune option and fetch.pruneTags config Ævar Arnfjörð Bjarmason
2018-01-24 20:52 ` Junio C Hamano
2018-01-24 21:03 ` Ævar Arnfjörð Bjarmason
2018-01-24 21:15 ` Junio C Hamano
2018-02-09 20:31 ` [PATCH v5 00/17] document & test fetch pruning & add fetch.pruneTags Ævar Arnfjörð Bjarmason
2018-02-22 0:23 ` Junio C Hamano
2018-02-22 14:18 ` Ævar Arnfjörð Bjarmason
2018-02-22 20:09 ` Junio C Hamano
2018-02-23 9:04 ` Ævar Arnfjörð Bjarmason
2018-02-23 21:10 ` Junio C Hamano
2018-02-24 21:42 ` Ævar Arnfjörð Bjarmason
2018-02-09 20:32 ` [PATCH v5 01/17] fetch: don't redundantly NULL something calloc() gave us Ævar Arnfjörð Bjarmason
2018-02-09 20:32 ` [PATCH v5 02/17] fetch: trivially refactor assignment to ref_nr Ævar Arnfjörð Bjarmason
2018-02-09 20:32 ` [PATCH v5 03/17] fetch: stop accessing "remote" variable indirectly Ævar Arnfjörð Bjarmason
2018-02-09 20:32 ` [PATCH v5 04/17] remote: add a macro for "refs/tags/*:refs/tags/*" Ævar Arnfjörð Bjarmason
2018-02-09 20:32 ` [PATCH v5 05/17] fetch tests: refactor in preparation for testing tag pruning Ævar Arnfjörð Bjarmason
2018-02-09 20:32 ` [PATCH v5 06/17] fetch tests: re-arrange arguments for future readability Ævar Arnfjörð Bjarmason
2018-02-09 20:32 ` [PATCH v5 07/17] fetch tests: add a tag to be deleted to the pruning tests Ævar Arnfjörð Bjarmason
2018-02-09 20:32 ` [PATCH v5 08/17] fetch tests: test --prune and refspec interaction Ævar Arnfjörð Bjarmason
2018-02-09 20:32 ` [PATCH v5 09/17] fetch tests: double quote a variable for interpolation Ævar Arnfjörð Bjarmason
2018-02-09 20:32 ` [PATCH v5 10/17] fetch tests: expand case/esac for later change Ævar Arnfjörð Bjarmason
2018-02-09 20:32 ` [PATCH v5 11/17] fetch tests: fetch <url> <spec> as well as fetch [<remote>] Ævar Arnfjörð Bjarmason
2018-02-09 20:32 ` [PATCH v5 12/17] git fetch doc: add a new section to explain the ins & outs of pruning Ævar Arnfjörð Bjarmason
2018-02-09 20:32 ` [PATCH v5 13/17] git remote doc: correct dangerous lies about what prune does Ævar Arnfjörð Bjarmason
2018-02-09 20:32 ` [PATCH v5 14/17] git-fetch & config doc: link to the new PRUNING section Ævar Arnfjörð Bjarmason
2018-02-09 20:32 ` [PATCH v5 15/17] fetch tests: add scaffolding for the new fetch.pruneTags Ævar Arnfjörð Bjarmason
2018-02-09 20:32 ` [PATCH v5 16/17] fetch: add a --prune-tags option and fetch.pruneTags config Ævar Arnfjörð Bjarmason
2018-02-09 20:32 ` [PATCH v5 17/17] fetch: make the --prune-tags work with <url> Ævar Arnfjörð Bjarmason
2018-01-21 0:02 ` [PATCH v2 01/12] fetch tests: refactor in preparation for testing tag pruning Ævar Arnfjörð Bjarmason
2018-01-21 0:02 ` [PATCH v2 02/12] fetch tests: arrange arguments for future readability Ævar Arnfjörð Bjarmason
2018-01-21 0:02 ` [PATCH v2 03/12] fetch tests: add a tag to be deleted to the pruning tests Ævar Arnfjörð Bjarmason
2018-01-21 0:02 ` [PATCH v2 04/12] fetch tests: double quote a variable for interpolation Ævar Arnfjörð Bjarmason
2018-01-22 19:52 ` Junio C Hamano
2018-01-22 23:04 ` Ævar Arnfjörð Bjarmason [this message]
2018-01-21 0:02 ` [PATCH v2 05/12] fetch tests: test --prune and refspec interaction Ævar Arnfjörð Bjarmason
2018-01-21 0:02 ` [PATCH v2 06/12] git fetch doc: add a new section to explain the ins & outs of pruning Ævar Arnfjörð Bjarmason
2018-01-21 0:02 ` [PATCH v2 07/12] git remote doc: correct dangerous lies about what prune does Ævar Arnfjörð Bjarmason
2018-01-22 20:01 ` Junio C Hamano
2018-01-22 23:05 ` Ævar Arnfjörð Bjarmason
2018-01-21 0:03 ` [PATCH v2 08/12] git-fetch & config doc: link to the new PRUNING section Ævar Arnfjörð Bjarmason
2018-01-21 0:03 ` [PATCH v2 09/12] fetch: don't redundantly NULL something calloc() gave us Ævar Arnfjörð Bjarmason
2018-01-21 8:25 ` Ævar Arnfjörð Bjarmason
2018-01-21 0:03 ` [PATCH v2 10/12] fetch: stop accessing "remote" variable indirectly Ævar Arnfjörð Bjarmason
2018-01-21 0:03 ` [PATCH v2 11/12] fetch tests: add scaffolding for the new fetch.pruneTags Ævar Arnfjörð Bjarmason
2018-01-21 0:03 ` [PATCH v2 12/12] fetch: add a --fetch-prune option and fetch.pruneTags config Ævar Arnfjörð Bjarmason
2018-01-22 20:50 ` Junio C Hamano
2018-01-22 23:48 ` Ævar Arnfjörð Bjarmason
2018-01-19 0:00 ` [PATCH 01/11] fetch tests: refactor in preparation for testing tag pruning Ævar Arnfjörð Bjarmason
2018-01-19 0:00 ` [PATCH 02/11] fetch tests: arrange arguments for future readability Ævar Arnfjörð Bjarmason
2018-01-19 0:00 ` [PATCH 03/11] fetch tests: add a tag to be deleted to the pruning tests Ævar Arnfjörð Bjarmason
2018-01-19 0:00 ` [PATCH 04/11] fetch tests: double quote a variable for interpolation Ævar Arnfjörð Bjarmason
2018-01-19 0:00 ` [PATCH 05/11] fetch tests: test --prune and refspec interaction Ævar Arnfjörð Bjarmason
2018-01-19 0:00 ` [PATCH 06/11] git fetch doc: add a new section to explain the ins & outs of pruning Ævar Arnfjörð Bjarmason
2018-01-19 0:46 ` Eric Sunshine
2018-01-19 0:00 ` [PATCH 07/11] git remote doc: correct dangerous lies about what prune does Ævar Arnfjörð Bjarmason
2018-01-19 0:00 ` [PATCH 08/11] git-fetch & config doc: link to the new PRUNING section Ævar Arnfjörð Bjarmason
2018-01-19 0:00 ` [PATCH 09/11] fetch: don't redundantly null something calloc() gave us Ævar Arnfjörð Bjarmason
2018-01-19 0:00 ` [PATCH 10/11] fetch tests: add scaffolding for the new fetch.pruneTags Ævar Arnfjörð Bjarmason
2018-01-19 0:00 ` [RFC/PATCH 11/11] WIP fetch: add a --fetch-prune option and fetch.pruneTags config Ævar Arnfjörð Bjarmason
2018-01-16 11:48 ` [BUG] git remote prune removes local tags, depending on fetch config Andreas Schwab
2018-01-18 6:18 ` Kevin Daudt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87wp09h4w3.fsf@evledraar.gmail.com \
--to=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=michaelpg@chromium.org \
--cc=mschub@elegosoft.com \
--cc=peff@peff.net \
--cc=sunshine@sunshineco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.