git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH] remote: add 'rm' subcommand
@ 2007-06-05 23:25 James Bowes
  2007-07-05 22:38 ` Johannes Schindelin
  2007-09-03 10:07 ` [PATCH] remote: add " Junio C Hamano
  0 siblings, 2 replies; 7+ messages in thread
From: James Bowes @ 2007-06-05 23:25 UTC (permalink / raw)
  To: junkio, git

Introduce git-remote rm <name> which will:
 - Remove the remote config entry for <name>.
 - Remove any config entries for tracking branches of <name>.
 - Remove any stored remote branches of <name>.

Signed-off-by: James Bowes <jbowes@dangerouslyinc.com>
---

Here's a quick patch to implement the reverse of 'git-remote add', as
was asked about recently on the list[1]. Tested minimally with a
collection of on-disk repositories.

If there is any interest in this, I'll follow up later with additions
to the docs.

-James

[1] http://article.gmane.org/gmane.comp.version-control.git/49222

 git-remote.perl |   38 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 38 insertions(+), 0 deletions(-)

diff --git a/git-remote.perl b/git-remote.perl
index 5763799..05aa8d6 100755
--- a/git-remote.perl
+++ b/git-remote.perl
@@ -313,6 +313,34 @@ sub update_remote {
 	}
 }
 
+sub rm_remote {
+    my ($name) = @_;
+	if (!exists $remote->{$name}) {
+		print STDERR "No such remote $name\n";
+		return;
+	}
+
+	$git->command('config', '--remove-section', "remote.$name");
+
+	eval {
+	    my @trackers = $git->command('config', '--get-regexp',
+			'branch.*.remote', $name);
+		for (@trackers) {
+			/^branch\.(.*)?\.remote/;
+			$git->config('--unset', "branch.$1.remote");
+			$git->config('--unset', "branch.$1.merge");
+		}
+	};
+
+
+    my @refs = $git->command('for-each-ref',
+		'--format=%(refname) %(objectname)', "refs/remotes/$name");
+	for (@refs) {
+		($ref, $object) = split;
+		$git->command(qw(update-ref -d), $ref, $object);
+	}
+}
+
 sub add_usage {
 	print STDERR "Usage: git remote add [-f] [-t track]* [-m master] <name> <url>\n";
 	exit(1);
@@ -403,9 +431,19 @@ elsif ($ARGV[0] eq 'add') {
 	}
 	add_remote($ARGV[1], $ARGV[2], \%opts);
 }
+elsif ($ARGV[0] eq 'rm') {
+	if (@ARGV <= 1) {
+		print STDERR "Usage: git remote rm <remote>\n";
+	}
+    else {
+        rm_remote($ARGV[1]);
+	}
+    exit(1);
+}
 else {
 	print STDERR "Usage: git remote\n";
 	print STDERR "       git remote add <name> <url>\n";
+	print STDERR "       git remote rm <name>\n";
 	print STDERR "       git remote show <name>\n";
 	print STDERR "       git remote prune <name>\n";
 	print STDERR "       git remote update [group]\n";
-- 
1.5.2.1.851.g432c

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

* Re: [PATCH] remote: add 'rm' subcommand
  2007-06-05 23:25 [PATCH] remote: add 'rm' subcommand James Bowes
@ 2007-07-05 22:38 ` Johannes Schindelin
  2007-07-07 15:22   ` [PATCH] remote: document the " James Bowes
  2007-09-03 10:07 ` [PATCH] remote: add " Junio C Hamano
  1 sibling, 1 reply; 7+ messages in thread
From: Johannes Schindelin @ 2007-07-05 22:38 UTC (permalink / raw)
  To: James Bowes; +Cc: gitster, git

Hi,

On Tue, 5 Jun 2007, James Bowes wrote:

> Introduce git-remote rm <name> which will:
>  - Remove the remote config entry for <name>.
>  - Remove any config entries for tracking branches of <name>.
>  - Remove any stored remote branches of <name>.

Any word on this?

Ciao,
Dscho

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

* [PATCH] remote: document the 'rm' subcommand
  2007-07-05 22:38 ` Johannes Schindelin
@ 2007-07-07 15:22   ` James Bowes
  2007-07-07 16:21     ` Johannes Schindelin
  2007-07-07 20:47     ` Junio C Hamano
  0 siblings, 2 replies; 7+ messages in thread
From: James Bowes @ 2007-07-07 15:22 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: gitster, git

Signed-off-by: James Bowes <jbowes@dangerouslyinc.com>
---

So I still think 'git remote rm' would be nice to have. Here's a bit of
documentation for it.

 Documentation/git-remote.txt |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/Documentation/git-remote.txt b/Documentation/git-remote.txt
index 61a6022..fff40ca 100644
--- a/Documentation/git-remote.txt
+++ b/Documentation/git-remote.txt
@@ -11,6 +11,7 @@ SYNOPSIS
 [verse]
 'git-remote'
 'git-remote' add [-t <branch>] [-m <branch>] [-f] <name> <url>
+'git-remote' rm <name>
 'git-remote' show <name>
 'git-remote' prune <name>
 'git-remote' update [group]
@@ -46,6 +47,11 @@ With `-m <master>` option, `$GIT_DIR/remotes/<name>/HEAD` is set
 up to point at remote's `<master>` branch instead of whatever
 branch the `HEAD` at the remote repository actually points at.
 
+'rm'::
+
+Remove the remote named <name>. All remote tracking branches and
+configuration settings for the remote are removed.
+
 'show'::
 
 Gives some information about the remote <name>.
-- 
1.5.3.rc0.838.gdf39a-dirty

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

* Re: [PATCH] remote: document the 'rm' subcommand
  2007-07-07 15:22   ` [PATCH] remote: document the " James Bowes
@ 2007-07-07 16:21     ` Johannes Schindelin
  2007-07-07 20:47     ` Junio C Hamano
  1 sibling, 0 replies; 7+ messages in thread
From: Johannes Schindelin @ 2007-07-07 16:21 UTC (permalink / raw)
  To: James Bowes; +Cc: gitster, git

Hi,

On Sat, 7 Jul 2007, James Bowes wrote:

> Signed-off-by: James Bowes <jbowes@dangerouslyinc.com>
> ---
> 
> So I still think 'git remote rm' would be nice to have. Here's a bit of 
> documentation for it.

Me, too. However, I would feel more comfortable with a test suite that it 
actually works as advertised. It is on my TODO list, which keeps growing 
on top of it.

Ciao,
Dscho

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

* Re: [PATCH] remote: document the 'rm' subcommand
  2007-07-07 15:22   ` [PATCH] remote: document the " James Bowes
  2007-07-07 16:21     ` Johannes Schindelin
@ 2007-07-07 20:47     ` Junio C Hamano
  2007-07-14  7:41       ` Junio C Hamano
  1 sibling, 1 reply; 7+ messages in thread
From: Junio C Hamano @ 2007-07-07 20:47 UTC (permalink / raw)
  To: James Bowes; +Cc: Johannes Schindelin, git

Care to resend a three-patch series (implementation, this
documentation, and test suite updates)?

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

* Re: [PATCH] remote: document the 'rm' subcommand
  2007-07-07 20:47     ` Junio C Hamano
@ 2007-07-14  7:41       ` Junio C Hamano
  0 siblings, 0 replies; 7+ messages in thread
From: Junio C Hamano @ 2007-07-14  7:41 UTC (permalink / raw)
  To: James Bowes; +Cc: Johannes Schindelin, git

Junio C Hamano <gitster@pobox.com> writes:

> Care to resend a three-patch series (implementation, this
> documentation, and test suite updates)?

It seems that this has to miss the boat for 1.5.3...

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

* Re: [PATCH] remote: add 'rm' subcommand
  2007-06-05 23:25 [PATCH] remote: add 'rm' subcommand James Bowes
  2007-07-05 22:38 ` Johannes Schindelin
@ 2007-09-03 10:07 ` Junio C Hamano
  1 sibling, 0 replies; 7+ messages in thread
From: Junio C Hamano @ 2007-09-03 10:07 UTC (permalink / raw)
  To: James Bowes; +Cc: git

James Bowes <jbowes@dangerouslyinc.com> writes:

> Introduce git-remote rm <name> which will:
>  - Remove the remote config entry for <name>.
>  - Remove any config entries for tracking branches of <name>.
>  - Remove any stored remote branches of <name>.
>
> Signed-off-by: James Bowes <jbowes@dangerouslyinc.com>

Let's continue with this in 1.5.4 cycle.  Together with Dscho's
"--mirror" patch, this will make "remote" more complete.

> If there is any interest in this, I'll follow up later with additions
> to the docs.

This is not a good thing to say here.  If even the original
author cannot be bothered to perfect it unconditionally (iow
even when other people do not realize how useful it would be
initially and nobody seem to be interested), it does not help
convincing others that it is a good thing for the community to
take the patch.

> +sub rm_remote {
> +    my ($name) = @_;
> +	if (!exists $remote->{$name}) {
> +		print STDERR "No such remote $name\n";
> +		return;
> +	}
> +
> +	$git->command('config', '--remove-section', "remote.$name");
> +
> +	eval {
> +	    my @trackers = $git->command('config', '--get-regexp',
> +			'branch.*.remote', $name);

Is this correct, or should it be '^branch\..*\.remote$'

> +		for (@trackers) {
> +			/^branch\.(.*)?\.remote/;

And this one.  Why do we have '?' there?  Perhaps...

	if (/^branch\.(.*\)\.remote /) {
		$git->config('--unset', "branch.$1.remote");
		$git->config('--unset', "branch.$1.merge");
	} else {
        	die "Gaah, why $_ is not branch.<<name>>.remote???"
	}

We seem to have another subroutine to prune remote tracking
branches, which does it slightly differently.  Maybe we would
want to share code with that codepath?

Other than that, I think the patch is sane, with your later
"documentation patch".

We would want a handful tests, including ones to check error
conditions, such as trying to remove a remote that does not
exist.

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

end of thread, other threads:[~2007-09-03 10:08 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-06-05 23:25 [PATCH] remote: add 'rm' subcommand James Bowes
2007-07-05 22:38 ` Johannes Schindelin
2007-07-07 15:22   ` [PATCH] remote: document the " James Bowes
2007-07-07 16:21     ` Johannes Schindelin
2007-07-07 20:47     ` Junio C Hamano
2007-07-14  7:41       ` Junio C Hamano
2007-09-03 10:07 ` [PATCH] remote: add " Junio C Hamano

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).