git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] Add config_boolean() method to the Git perl module
@ 2007-02-20 20:13 Theodore Ts'o
  2007-02-20 20:13 ` [PATCH 2/2] Allow git-remote to update named groups of remotes Theodore Ts'o
  2007-02-20 21:16 ` [PATCH 1/2] Add config_boolean() method to the Git perl module Eric Wong
  0 siblings, 2 replies; 3+ messages in thread
From: Theodore Ts'o @ 2007-02-20 20:13 UTC (permalink / raw)
  To: git; +Cc: Theodore Ts'o

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
---
 perl/Git.pm |   30 ++++++++++++++++++++++++++++++
 1 files changed, 30 insertions(+), 0 deletions(-)

diff --git a/perl/Git.pm b/perl/Git.pm
index f2c156c..51bd73e 100644
--- a/perl/Git.pm
+++ b/perl/Git.pm
@@ -516,6 +516,36 @@ sub config {
 }
 
 
+=item config_boolean ( VARIABLE )
+
+Retrieve the boolean configuration C<VARIABLE>.
+
+Must be called on a repository instance.
+
+This currently wraps command('config') so it is not so fast.
+
+=cut
+
+sub config_boolean {
+	my ($self, $var) = @_;
+	$self->repo_path()
+		or throw Error::Simple("not a repository");
+
+	try {
+		return $self->command_oneline('config', '--bool', '--get', 
+					      $var);
+	} catch Git::Error::Command with {
+		my $E = shift;
+		if ($E->value() == 1) {
+			# Key not found.
+			return undef;
+		} else {
+			throw $E;
+		}
+	};
+}
+
+
 =item ident ( TYPE | IDENTSTR )
 
 =item ident_person ( TYPE | IDENTSTR | IDENTARRAY )
-- 
1.5.0.1.38.g392d-dirty

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH 2/2] Allow git-remote to update named groups of remotes
  2007-02-20 20:13 [PATCH 1/2] Add config_boolean() method to the Git perl module Theodore Ts'o
@ 2007-02-20 20:13 ` Theodore Ts'o
  2007-02-20 21:16 ` [PATCH 1/2] Add config_boolean() method to the Git perl module Eric Wong
  1 sibling, 0 replies; 3+ messages in thread
From: Theodore Ts'o @ 2007-02-20 20:13 UTC (permalink / raw)
  To: git; +Cc: Theodore Ts'o

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>
---
 Documentation/config.txt     |   12 ++++++++----
 Documentation/git-remote.txt |   11 +++++++----
 git-remote.perl              |   40 +++++++++++++++++++++++++++++++---------
 3 files changed, 46 insertions(+), 17 deletions(-)

diff --git a/Documentation/config.txt b/Documentation/config.txt
index d8e696f..c8cba00 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 06ba2e6..250761f 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 6e473ec..5a4e0ed 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);
 }
-- 
1.5.0.1.38.g392d-dirty

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH 1/2] Add config_boolean() method to the Git perl module
  2007-02-20 20:13 [PATCH 1/2] Add config_boolean() method to the Git perl module Theodore Ts'o
  2007-02-20 20:13 ` [PATCH 2/2] Allow git-remote to update named groups of remotes Theodore Ts'o
@ 2007-02-20 21:16 ` Eric Wong
  1 sibling, 0 replies; 3+ messages in thread
From: Eric Wong @ 2007-02-20 21:16 UTC (permalink / raw)
  To: Theodore Ts'o; +Cc: git

Theodore Ts'o <tytso@mit.edu> wrote:
> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>

Thanks.  I've been meaning to add something like this myself.

config_int() would be nice, too :)

-- 
Eric Wong

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2007-02-20 21:16 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-02-20 20:13 [PATCH 1/2] Add config_boolean() method to the Git perl module Theodore Ts'o
2007-02-20 20:13 ` [PATCH 2/2] Allow git-remote to update named groups of remotes Theodore Ts'o
2007-02-20 21:16 ` [PATCH 1/2] Add config_boolean() method to the Git perl module Eric Wong

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).