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>
This commit is contained in:
Theodore Ts'o 2007-02-20 15:13:43 -05:00 committed by Junio C Hamano
parent 7b9a13ece8
commit 1918278ea1
3 changed files with 46 additions and 17 deletions

View File

@ -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.

View File

@ -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

View File

@ -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);
}