aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documentation/config.txt12
-rw-r--r--Documentation/git-remote.txt11
-rwxr-xr-xgit-remote.perl40
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);
}