summaryrefslogtreecommitdiff
path: root/git-remote.perl
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2007-02-20 20:13:43 (GMT)
committerJunio C Hamano <junkio@cox.net>2007-02-21 07:58:39 (GMT)
commit1918278ea1019553b01297aad2caeed88e9092a4 (patch)
tree3776db2051dfdd63aa4acba8344a2a02af965606 /git-remote.perl
parent7b9a13ece8a1e7c0fd2a82d4bd4fcf0a9ce0e8c4 (diff)
downloadgit-1918278ea1019553b01297aad2caeed88e9092a4.zip
git-1918278ea1019553b01297aad2caeed88e9092a4.tar.gz
git-1918278ea1019553b01297aad2caeed88e9092a4.tar.bz2
Allow git-remote to update named groups of remotes
In response to a feature request from Shawn Pearce, this patch allows a user to update a named group of remotes by using "git remote update <group>", where the group is defined in the config file by remotes.<group>. The default if the named group is not specified is now fetched group remotes.default, instead of remote.fetch, which is what had been previously used. In addition, if remotes.default is not defined, all remotes defined in the config file will be used, as before, but there is now also possible to request that a particular repository to be skipped by default by using the boolean configuration parameter remote.<name>.skipDefaultUpdate. Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'git-remote.perl')
-rwxr-xr-xgit-remote.perl40
1 files changed, 31 insertions, 9 deletions
diff --git a/git-remote.perl b/git-remote.perl
index 6e473ec..61244e9 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);
}