When fetch is invoked with --all, we need to pass the tag-following preference to each individual fetch; without this, we will always auto-follow tags, preventing us from fetching the remote tags into a remote-specific namespace, for example. Reported-by: Oswald Buddenhagen <ossi@xxxxxxx> Signed-off-by: Dan Johnson <ComputerDruid@xxxxxxxxx> --- On Sat, Sep 1, 2012 at 7:22 AM, Jeff King <peff@xxxxxxxx> wrote: >Hmm. We allocate argv in fetch_multiple like this: > > const char *argv[12] = { "fetch", "--append" }; > >and then add a bunch of options to it, along with the name of the >remote. By my count, the current code can hit exactly 12 (including the >terminating NULL) if all options are set. Your patch would make it >possible to overflow. Of course, I may be miscounting since it is >extremely error-prone to figure out the right number by tracing each >possible conditional. > >Maybe we should switch it to a dynamic argv_array? Like this: > > [1/2]: argv-array: add pop function > [2/2]: fetch: use argv_array instead of hand-building arrays This version is re-rolled to be on top of jk/argv-array, avoiding the issue of the fixed-size array entirely. If needed, we could of course use the old version of this patch and bump the number, but I figure this is preferable. I've also added some test cases to cover this behavior, but I'm not entirely happy with them. I'm not sure if/how we should be testing the pass-through behavior of various arguments with fetch --all, but if so, we should probably do so more thouroughly than I have here, but that just seems like combining together tests of two unrelated things. It might just make more sense to ignore it and drop these tests, I don't know. Sorry this took me a few days to send, I just kept not getting around to it. builtin/fetch.c | 4 ++++ t/t5514-fetch-multiple.sh | 29 +++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/builtin/fetch.c b/builtin/fetch.c index 6196e91..4494aed 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -858,6 +858,10 @@ static void add_options_to_argv(struct argv_array *argv) argv_array_push(argv, "--recurse-submodules"); else if (recurse_submodules == RECURSE_SUBMODULES_ON_DEMAND) argv_array_push(argv, "--recurse-submodules=on-demand"); + if (tags == TAGS_SET) + argv_array_push(argv, "--tags"); + else if (tags == TAGS_UNSET) + argv_array_push(argv, "--no-tags"); if (verbosity >= 2) argv_array_push(argv, "-v"); if (verbosity >= 1) diff --git a/t/t5514-fetch-multiple.sh b/t/t5514-fetch-multiple.sh index 227dd56..cbd2460 100755 --- a/t/t5514-fetch-multiple.sh +++ b/t/t5514-fetch-multiple.sh @@ -151,4 +151,33 @@ test_expect_success 'git fetch --multiple (ignoring skipFetchAll)' ' test_cmp ../expect output) ' +cat > expect << EOF +EOF + +test_expect_success 'git fetch --all --no-tags' ' + (git clone one test5 && + git clone test5 test6 && + (cd test5 && git tag test-tag) && + cd test6 && + git fetch --all --no-tags && + git tag >output && + test_cmp ../expect output) +' + +cat > expect << EOF +test-tag +EOF + +test_expect_success 'git fetch --all --tags' ' + (git clone one test7 && + git clone test7 test8 && + (cd test7 && + test_commit test-tag && + git reset --hard HEAD^) && + cd test8 && + git fetch --all --tags && + git tag >output && + test_cmp ../expect output) +' + test_done -- 1.7.11.1 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html