From: Junio C Hamano Date: Wed, 24 Feb 2010 18:22:06 +0000 (-0800) Subject: builtin-fetch --all/--multi: propagate options correctly X-Git-Tag: v1.7.0.3~26^2~1 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=bba5322a71a3399a94f53e1dddf5bd66e493dfbc;p=git.git builtin-fetch --all/--multi: propagate options correctly When running a subfetch, the code propagated some options but not others. Propagate --force, --update-head-ok and --keep options as well. Signed-off-by: Junio C Hamano --- diff --git a/builtin-fetch.c b/builtin-fetch.c index 8654fa7a2..61b2e4060 100644 --- a/builtin-fetch.c +++ b/builtin-fetch.c @@ -784,13 +784,19 @@ static int add_remote_or_group(const char *name, struct string_list *list) static int fetch_multiple(struct string_list *list) { int i, result = 0; - const char *argv[] = { "fetch", NULL, NULL, NULL, NULL, NULL, NULL }; + const char *argv[10] = { "fetch" }; int argc = 1; if (dry_run) argv[argc++] = "--dry-run"; if (prune) argv[argc++] = "--prune"; + if (update_head_ok) + argv[argc++] = "--update-head-ok"; + if (force) + argv[argc++] = "--force"; + if (keep) + argv[argc++] = "--keep"; if (verbosity >= 2) argv[argc++] = "-v"; if (verbosity >= 1) @@ -801,6 +807,7 @@ static int fetch_multiple(struct string_list *list) for (i = 0; i < list->nr; i++) { const char *name = list->items[i].string; argv[argc] = name; + argv[argc + 1] = NULL; if (verbosity >= 0) printf("Fetching %s\n", name); if (run_command_v_opt(argv, RUN_GIT_CMD)) { diff --git a/t/t5521-pull-options.sh b/t/t5521-pull-options.sh index c18d82973..84059d82d 100755 --- a/t/t5521-pull-options.sh +++ b/t/t5521-pull-options.sh @@ -51,4 +51,25 @@ test_expect_success 'git pull -q -v' ' test -s err) ' +test_expect_success 'git pull --force' ' + mkdir clonedoldstyle && + (cd clonedoldstyle && git init && + cat >>.git/config <<-\EOF && + [remote "one"] + url = ../parent + fetch = refs/heads/master:refs/heads/mirror + [remote "two"] + url = ../parent + fetch = refs/heads/master:refs/heads/origin + [branch "master"] + remote = two + merge = refs/heads/master + EOF + git pull two && + test_commit A && + git branch -f origin && + git pull --all --force + ) +' + test_done