diff options
-rw-r--r-- | Documentation/config.txt | 12 | ||||
-rw-r--r-- | Documentation/git-remote.txt | 11 | ||||
-rwxr-xr-x | git-remote.perl | 40 |
3 files changed, 46 insertions, 17 deletions
diff --git a/Documentation/config.txt b/Documentation/config.txt index d8e696f4c..f5c846f41 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -439,10 +439,6 @@ pull.octopus:: pull.twohead:: The default merge strategy to use when pulling a single branch. -remote.fetch:: - The list of remotes which are fetched by "git remote update". - See gitlink:git-remote[1]. - remote.<name>.url:: The URL of a remote repository. See gitlink:git-fetch[1] or gitlink:git-push[1]. @@ -455,6 +451,10 @@ remote.<name>.push:: The default set of "refspec" for gitlink:git-push[1]. See gitlink:git-push[1]. +remote.<name>.skipDefaultUpdate:: + If true, this remote will be skipped by default when updating + using the remote subcommand of gitlink:git-remote[1]. + remote.<name>.receivepack:: The default program to execute on the remote side when pushing. See option \--exec of gitlink:git-push[1]. @@ -463,6 +463,10 @@ remote.<name>.uploadpack:: The default program to execute on the remote side when fetching. See option \--exec of gitlink:git-fetch-pack[1]. +remotes.<group>:: + The list of remotes which are fetched by "git remote update + <group>". See gitlink:git-remote[1]. + repack.usedeltabaseoffset:: Allow gitlink:git-repack[1] to create packs that uses delta-base offset. Defaults to false. diff --git a/Documentation/git-remote.txt b/Documentation/git-remote.txt index 06ba2e6f2..250761f97 100644 --- a/Documentation/git-remote.txt +++ b/Documentation/git-remote.txt @@ -13,7 +13,7 @@ SYNOPSIS 'git-remote' add <name> <url> 'git-remote' show <name> 'git-remote' prune <name> -'git-remote' update +'git-remote' update [group] DESCRIPTION ----------- @@ -46,9 +46,12 @@ referenced by <name>, but are still locally available in 'update':: -Fetch updates for the remotes in the repository. By default all remotes -are updated, but this can be configured via the configuration parameter -'remote.fetch'. (See gitlink:git-config[1]). +Fetch updates for a named set of remotes in the repository as defined by +remotes.<group>. If a named group is not specified on the command line, +the configuration parameter remotes.default will get used; if +remotes.default is not defined, all remotes which do not the +configuration parameter remote.<name>.skipDefaultUpdate set to true will +be updated. (See gitlink:git-config[1]). DISCUSSION diff --git a/git-remote.perl b/git-remote.perl index 6e473ecfd..61244e978 100755 --- a/git-remote.perl +++ b/git-remote.perl @@ -274,6 +274,31 @@ sub add_remote { } } +sub update_remote { + my ($name) = @_; + + my $conf = $git->config("remotes." . $name); + if (defined($conf)) { + @remotes = split(' ', $conf); + } elsif ($name eq 'default') { + undef @remotes; + for (sort keys %$remote) { + my $do_fetch = $git->config_boolean("remote." . $_ . + ".skipDefaultUpdate"); + if (!defined($do_fetch) || $do_fetch ne "true") { + push @remotes, $_; + } + } + } else { + print STDERR "Remote group $name does not exists.\n"; + exit(1); + } + for (@remotes) { + print "Updating $_\n"; + $git->command('fetch', "$_"); + } +} + sub add_usage { print STDERR "Usage: git remote add [-f] [-t track]* [-m master] <name> <url>\n"; exit(1); @@ -304,15 +329,12 @@ elsif ($ARGV[0] eq 'show') { } } elsif ($ARGV[0] eq 'update') { - my $conf = $git->config("remote.fetch"); - if (defined($conf)) { - @remotes = split(' ', $conf); - } else { - @remotes = sort keys %$remote; + if (@ARGV <= 1) { + update_remote("default"); + exit(1); } - for (@remotes) { - print "Fetching $_\n"; - $git->command('fetch', "$_"); + for ($i = 1; $i < @ARGV; $i++) { + update_remote($ARGV[$i]); } } elsif ($ARGV[0] eq 'prune') { @@ -372,6 +394,6 @@ else { print STDERR " git remote add <name> <url>\n"; print STDERR " git remote show <name>\n"; print STDERR " git remote prune <name>\n"; - print STDERR " git remote update\n"; + print STDERR " git remote update [group]\n"; exit(1); } |