Allow git-remote to update named groups of remotes
[git/git.git] / git-remote.perl
index 6e473ec..61244e9 100755 (executable)
@@ -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);
 }