diff options
author | Björn Gustavsson <bgustavsson@gmail.com> | 2009-11-09 21:10:32 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-11-10 01:01:07 -0800 |
commit | 16679e373fa85a75c85e6e3b4ae5cd58a89a4114 (patch) | |
tree | 524b0c7624e007c36d00d837484eae17e6a80eb5 /builtin-fetch.c | |
parent | 9c4a036b34acef63ab754f0e27e5e54bd9d9a210 (diff) | |
download | git-16679e373fa85a75c85e6e3b4ae5cd58a89a4114.tar.gz |
Teach the --multiple option to 'git fetch'
Add the --multiple option to specify that all arguments are either
groups or remotes. The primary reason for adding this option is
to allow us to re-implement 'git remote update' using fetch.
It would have been nice if this option was not needed, but since
the colon in a refspec is optional, it is in general not possible
to know whether a single, colon-less argument is a remote or a
refspec.
Signed-off-by: Björn Gustavsson <bgustavsson@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin-fetch.c')
-rw-r--r-- | builtin-fetch.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/builtin-fetch.c b/builtin-fetch.c index e6bbdc7a17..c903c66d47 100644 --- a/builtin-fetch.c +++ b/builtin-fetch.c @@ -15,6 +15,7 @@ static const char * const builtin_fetch_usage[] = { "git fetch [options] [<repository> <refspec>...]", "git fetch [options] <group>", + "git fetch --multiple [options] [<repository> | <group>]...", "git fetch --all [options]", NULL }; @@ -25,7 +26,7 @@ enum { TAGS_SET = 2 }; -static int all, append, force, keep, update_head_ok, verbosity; +static int all, append, force, keep, multiple, update_head_ok, verbosity; static int tags = TAGS_DEFAULT; static const char *depth; static const char *upload_pack; @@ -42,6 +43,8 @@ static struct option builtin_fetch_options[] = { "path to upload pack on remote end"), OPT_BOOLEAN('f', "force", &force, "force overwrite of local branch"), + OPT_BOOLEAN('m', "multiple", &multiple, + "fetch from multiple remotes"), OPT_SET_INT('t', "tags", &tags, "fetch all tags and associated objects", TAGS_SET), OPT_SET_INT('n', NULL, &tags, @@ -798,6 +801,12 @@ int cmd_fetch(int argc, const char **argv, const char *prefix) /* No arguments -- use default remote */ remote = remote_get(NULL); result = fetch_one(remote, argc, argv); + } else if (multiple) { + /* All arguments are assumed to be remotes or groups */ + for (i = 0; i < argc; i++) + if (!add_remote_or_group(argv[i], &list)) + die("No such remote or remote group: %s", argv[i]); + result = fetch_multiple(&list); } else { /* Single remote or group */ (void) add_remote_or_group(argv[0], &list); |