threads / patch / 7298

patchTeach git-remote to list pushed branches.

Subject: [PATCH] Teach git-remote to list pushed branches.

## tl;dr

6 messages between Mar 18, 2007 and Mar 21, 2007. Diffs are folded; open one to read it.

replies: 5people: 2as markdown or json

Johannes Sixt· Mar 18, 2007, 20:34 UTC · lore

The configured refspecs are printed almost verbatim, i.e. both the local and the remote branch name separated by a colon are printed; only the prefix 'refs/heads/' is removed, like this:

  Local branch(es) pushed with 'git push'
    master refs/tags/*:refs/tags/* next:next
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
---
 [Resent; I don't see the patch applied nor were there any comments.]
 The hunk that reads the 'Push'es from the .git/remotes file is taken
 almost verbatim from the corresponding 'Pull' clause and is untested.
 -- Hannes
 git-remote.perl |   16 +++++++++++++++-
 1 files changed, 15 insertions(+), 1 deletions(-)
Show changes to git-remote.perl +15 −1
diff --git a/git-remote.perl b/git-remote.perl
index bd70bf1..52013fe 100755
--- a/git-remote.perl
+++ b/git-remote.perl
@@ -15,6 +15,10 @@ sub add_remote_config {
 		$hash->{$name}{'FETCH'} ||= [];
 		push @{$hash->{$name}{'FETCH'}}, $value;
 	}
+	elsif ($what eq 'push') {
+		$hash->{$name}{'PUSH'} ||= [];
+		push @{$hash->{$name}{'PUSH'}}, $value;
+	}
 	if (!exists $hash->{$name}{'SOURCE'}) {
 		$hash->{$name}{'SOURCE'} = 'config';
 	}
@@ -44,7 +48,8 @@ sub add_remote_remotes {
 			}
 		}
 		elsif (/^Push:\s*(.*)$/) {
-			; # later
+			$it->{'PUSH'} ||= [];
+			push @{$it->{'PUSH'}}, $1;
 		}
 		elsif (/^Pull:\s*(.*)$/) {
 			$it->{'FETCH'} ||= [];
@@ -250,6 +255,15 @@ sub show_remote {
 	if ($info->{'LS_REMOTE'}) {
 		show_mapping($name, $info);
 	}
+	if ($info->{'PUSH'}) {
+		my @pushed = map {
+			s|^refs/heads/||;
+			s|:refs/heads/|:|;
+			$_;
+		} @{$info->{'PUSH'}};
+		print "  Local branch(es) pushed with 'git push'\n";
+		print "    @pushed\n";
+	}
 }
 
 sub add_remote {
-- 
1.5.0.3.438.gc49b2
Junio C Hamano· Mar 18, 2007, 20:37 UTC · re: Johannes Sixt · lore

Re: [PATCH] Teach git-remote to list pushed branches.

Johannes Sixt <johannes.sixt@telecom.at> writes:
Show 13 quoted lines
> The configured refspecs are printed almost verbatim, i.e. both the local
> and the remote branch name separated by a colon are printed; only the
> prefix 'refs/heads/' is removed, like this:
>
>   Local branch(es) pushed with 'git push'
>     master refs/tags/*:refs/tags/* next:next
>
> Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
> ---
>  [Resent; I don't see the patch applied nor were there any comments.]
>
>  The hunk that reads the 'Push'es from the .git/remotes file is taken
>  almost verbatim from the corresponding 'Pull' clause and is untested.

Maybe while waiting for application nor comments you could have tested and removed that comment?

Johannes Sixt· Mar 19, 2007, 19:16 UTC · re: Junio C Hamano · lore

Re: [PATCH] Teach git-remote to list pushed branches.

On Sunday 18 March 2007 21:37, Junio C Hamano wrote:
Show 6 quoted lines
> Johannes Sixt <johannes.sixt@telecom.at> writes:
> >  The hunk that reads the 'Push'es from the .git/remotes file is taken
> >  almost verbatim from the corresponding 'Pull' clause and is untested.
>
> Maybe while waiting for application nor comments you could have
> tested and removed that comment?
Fair enough ;)

While waiting for application or comments again, I did test now, and the patch does what I expect even for .git/remotes files, that is, it prints the refs to be pushed just like it does for remotes noted in the config file.

-- Hannes
Junio C Hamano· Mar 19, 2007, 22:36 UTC · re: Johannes Sixt · lore

Re: [PATCH] Teach git-remote to list pushed branches.

Johannes Sixt <johannes.sixt@telecom.at> writes:
Show 14 quoted lines
> On Sunday 18 March 2007 21:37, Junio C Hamano wrote:
>> Johannes Sixt <johannes.sixt@telecom.at> writes:
>> >  The hunk that reads the 'Push'es from the .git/remotes file is taken
>> >  almost verbatim from the corresponding 'Pull' clause and is untested.
>>
>> Maybe while waiting for application nor comments you could have
>> tested and removed that comment?
>
> Fair enough ;)
>
> While waiting for application or comments again, I did test
> now, and the patch does what I expect even for .git/remotes
> files, that is, it prints the refs to be pushed just like it
> does for remotes noted in the config file.
Thanks, and sorry for that comment as I was in a grumpy mood.

Let's queue it in 'next', as I do not see anything obviously wrong with it [*1*].

Now let's find other people who find this new feature desirable. I am personally neutral right now.

[Footnote]

*1* Actually I think the refspec list on "Push: " lines should be split out into separate array elements, because

	Push: A B C
is equivalent to
	Push: A
        Push: B
        Push: C
This does not apply to "Pull: " lines, as
	Pull: A B C
and
	Pull: A
	Pull: B
	Pull: C
mean quite different things.

This distinction does not matter to the current callers, but I was hoping that somebody would build "interactive" mode to edit Push and Pull list, and when that happens, having A B C as separate entries in @{$hash->{$name}{'PUSH'}} would be handier to code.

Johannes Sixt· Mar 20, 2007, 23:27 UTC · re: Junio C Hamano · lore

Re: [PATCH] Teach git-remote to list pushed branches.

On Monday 19 March 2007 23:36, Junio C Hamano wrote:
Show 28 quoted lines
> *1* Actually I think the refspec list on "Push: " lines should
> be split out into separate array elements, because
>
> 	Push: A B C
>
> is equivalent to
>
> 	Push: A
>         Push: B
>         Push: C
>
> This does not apply to "Pull: " lines, as
>
> 	Pull: A B C
>
> and
>
> 	Pull: A
> 	Pull: B
> 	Pull: C
>
> mean quite different things.
>
> This distinction does not matter to the current callers, but I
> was hoping that somebody would build "interactive" mode to edit
> Push and Pull list, and when that happens, having A B C as
> separate entries in @{$hash->{$name}{'PUSH'}} would be handier
> to code.

The patch does just that, I think. It is only that everything is *printed* on one line, just like the tracked branches.

BTW, the .git/remotes parser does not allow multiple refspecs on one 'Push:' line, if I understand it correctly (I'm looking at get_remotes_uri in builtin-push.c).

-- Hannes
Junio C Hamano· Mar 21, 2007, 03:03 UTC · re: Johannes Sixt · lore

Re: [PATCH] Teach git-remote to list pushed branches.

Johannes Sixt <johannes.sixt@telecom.at> writes:
> BTW, the .git/remotes parser does not allow multiple refspecs on one 'Push:' 
> line, if I understand it correctly (I'm looking at get_remotes_uri in 
> builtin-push.c).

Sheesh, you are right. That is a regression introduced, when git-push was rewritten as a built-in, and I did not know about it until now.

← back to recent threads