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 <gitster@pobox.com>
Junio C Hamano committed
Feb 24, 2010 at 10:22 UTC
bba5322a71a3399a94f53e1dddf5bd66e493dfbc
2 files changed
+29
-1
builtin-fetch.c
+8
-1
@@ -784,13 +784,19 @@ static int add_remote_or_group(const char *name, struct string_list *list)
784
static int fetch_multiple(struct string_list *list)
785
{
786
int i, result = 0;
787
- const char *argv[] = { "fetch", NULL, NULL, NULL, NULL, NULL, NULL };
787
+ const char *argv[10] = { "fetch" };
788
int argc = 1;
789
790
if (dry_run)
791
argv[argc++] = "--dry-run";
792
if (prune)
793
argv[argc++] = "--prune";
794
+ if (update_head_ok)
795
+ argv[argc++] = "--update-head-ok";
796
+ if (force)
797
+ argv[argc++] = "--force";
798
+ if (keep)
799
+ argv[argc++] = "--keep";
800
if (verbosity >= 2)
801
argv[argc++] = "-v";
802
if (verbosity >= 1)
@@ -801,6 +807,7 @@ static int fetch_multiple(struct string_list *list)
807
for (i = 0; i < list->nr; i++) {
808
const char *name = list->items[i].string;
809
argv[argc] = name;
810
+ argv[argc + 1] = NULL;
811
if (verbosity >= 0)
812
printf("Fetching %s\n", name);
813
if (run_command_v_opt(argv, RUN_GIT_CMD)) {
t/t5521-pull-options.sh
+21
@@ -51,4 +51,25 @@ test_expect_success 'git pull -q -v' '
51
test -s err)
52
'
53
54
+test_expect_success 'git pull --force' '
55
+ mkdir clonedoldstyle &&
56
+ (cd clonedoldstyle && git init &&
57
+ cat >>.git/config <<-\EOF &&
58
+ [remote "one"]
59
+ url = ../parent
60
+ fetch = refs/heads/master:refs/heads/mirror
61
+ [remote "two"]
62
+ url = ../parent
63
+ fetch = refs/heads/master:refs/heads/origin
64
+ [branch "master"]
65
+ remote = two
66
+ merge = refs/heads/master
67
+ EOF
68
+ git pull two &&
69
+ test_commit A &&
70
+ git branch -f origin &&
71
+ git pull --all --force
72
+ )
73
+'
74
+
75
test_done