Re: [PATCH v2 11/17] fetch tests: fetch <url> <spec> as well as fetch [<remote>]
From: Eric Sunshine <hidden>
Date: 2018-02-09 05:17:12
On Thu, Feb 8, 2018 at 11:19 AM, Ævar Arnfjörð Bjarmason [off-list ref] wrote:
quoted hunk ↗ jump to hunk
When a remote URL is supplied on the command-line the internals of the fetch are different, in particular the code in get_ref_map(). An earlier version of the subsequent fetch.pruneTags patch hid a segfault because the difference wasn't tested for. Now all the tests are run as both of the variants of: git fetch git -c [...] fetch $(git config remote.origin.url) $(git config remote.origin.fetch) I'm using -c because while the [fetch] config just set by set_config_tristate will be picked up, the remote.origin.* config won't override it as intended. Work around that and turn this into a purely command-line test by always setting the variables on the command-line, and translate any setting of remote.origin.X into fetch.X. [...] Signed-off-by: Ævar Arnfjörð Bjarmason <redacted> ---diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh@@ -548,18 +548,52 @@ set_config_tristate () { *) git config "$1" "$2" + key=$(echo $1 | sed -e 's/^remote\.origin/fetch/')
Faster (thus more Windows-friendly) assuming that $1 always starts
with "remote.origin":
key=fetch${u#remote.origin}
+ git_fetch_c="$git_fetch_c -c $key=$2"
;;
esac
}
+test_configured_prune_type () {
fetch_prune=$1
remote_origin_prune=$2
expected_branch=$3
expected_tag=$4
cmdline=$5
-
- test_expect_success "prune fetch.prune=$1 remote.origin.prune=$2${5:+ $5}; branch:$3 tag:$4" '
+ mode=$6
+
+ if ! test -e prune-type-setup-done
+ then
+ test_expect_success 'prune_type setup' '
+ git -C one config remote.origin.url >one.remote-url &&
+ git -C one config remote.origin.fetch >one.remote-fetch &&
+ remote_url="file://$(cat one.remote-url)" &&
+ remote_fetch="$(cat one.remote-fetch)" &&
Is there a reason that these values need to be captured to files
(which are otherwise not used) before being assigned to variables?
That is, wouldn't this work?
remote_url="file://$(git -C one config remote.origin.url)" &&
remote_fetch="$(git -C one config remote.origin.fetch)" &&
+ cmdline_setup="\"$remote_url\" \"$remote_fetch\"" && + touch prune-type-setup-done
Why does "prune-type-setup-done" need to be a file rather than a
simple shell variable (which is global by default even when assigned
inside test_expect_success)?
Also, since the purpose of this code seems to compute 'cmdline_setup'
just once, can't you do away with 'prune-type-setup-done' altogether
and change:
if ! test -e prune-type-setup-done
to:
if test -z "$cmdline_setup"
+ ' + fi