From bba5322a71a3399a94f53e1dddf5bd66e493dfbc Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Wed, 24 Feb 2010 10:22:06 -0800 Subject: [PATCH] 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 --- builtin-fetch.c | 9 ++++++++- t/t5521-pull-options.sh | 21 +++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/builtin-fetch.c b/builtin-fetch.c index 8654fa7a2d..61b2e4060c 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 c18d82973f..84059d82d5 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