git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Use of tac in git-rebase--interactive
@ 2008-04-27  6:24 Brian Gernhardt
  2008-04-27  6:42 ` Jeff King
  2008-04-27  7:33 ` Use of tac in git-rebase--interactive しらいしななこ
  0 siblings, 2 replies; 30+ messages in thread
From: Brian Gernhardt @ 2008-04-27  6:24 UTC (permalink / raw)
  To: git list

Commit d481bcc9: "Do rebase with preserve merges with advanced TODO  
list" uses the command tac, apparently to reverse the TODO command  
list.  (I don't use rebase -i much, if you can't tell.)

The problem is that tac doesn't exist on my OS X system.  I do appear  
to have a rev command which does the same thing.  Simply posting a  
patch that does 472s/tac/rev/ would fix the problem on my system, but  
the fact that this is an issue raises the question of the relative  
portability of the two commands.  I don't think we have a declared  
dependancy on GNU's coreutils, which is where Debian lists tac as  
coming from.

~~ Brian

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

* Re: Use of tac in git-rebase--interactive
  2008-04-27  6:24 Use of tac in git-rebase--interactive Brian Gernhardt
@ 2008-04-27  6:42 ` Jeff King
  2008-04-27  6:55   ` [PATCH] Use perl instead of tac Brian Gernhardt
  2008-04-27  7:33 ` Use of tac in git-rebase--interactive しらいしななこ
  1 sibling, 1 reply; 30+ messages in thread
From: Jeff King @ 2008-04-27  6:42 UTC (permalink / raw)
  To: Brian Gernhardt; +Cc: git list

On Sun, Apr 27, 2008 at 02:24:18AM -0400, Brian Gernhardt wrote:

> The problem is that tac doesn't exist on my OS X system.  I do appear to 
> have a rev command which does the same thing.  Simply posting a patch that 
> does 472s/tac/rev/ would fix the problem on my system, but the fact that 
> this is an issue raises the question of the relative portability of the 
> two commands.  I don't think we have a declared dependancy on GNU's 
> coreutils, which is where Debian lists tac as coming from.

I know the list will be shocked to hear that Solaris has neither.

An easy perl replacement is:

  perl -e 'print reverse <>'

which should work fine for small-ish input (since it puts the whole
thing in memory).

-Peff

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

* [PATCH] Use perl instead of tac
  2008-04-27  6:42 ` Jeff King
@ 2008-04-27  6:55   ` Brian Gernhardt
  2008-04-28  7:44     ` [PATCH] rebase--interactive: Replace unportable 'tac' by a sed script Johannes Sixt
  2008-04-28 11:46     ` [PATCH] Use perl instead of tac Jörg Sommer
  0 siblings, 2 replies; 30+ messages in thread
From: Brian Gernhardt @ 2008-04-27  6:55 UTC (permalink / raw)
  To: Jeff King, Junio C Hamano; +Cc: git list

Subject: [PATCH] Use perl instead of tac

tac is part of GNU coreutils and not portable.  Use perl's reverse
function instead, since we already require it.

Signed-off-by: Brian Gernhardt <benji@silverinsanity.com>
---

On Apr 27, 2008, at 2:42 AM, Jeff King wrote:

> I know the list will be shocked to hear that Solaris has neither.

I am shocked and horrified.  But then again, that's mostly just my  
reaction to Solaris in general. ;-D

> An easy perl replacement is:
>
>  perl -e 'print reverse <>'
>
> which should work fine for small-ish input (since it puts the whole
> thing in memory).

Something like this?

And I'm having problems with t3404.13 now (mark :0 invalid).  And it's  
too late for me to track it down.

  git-rebase--interactive.sh |    2 +-
  1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index 1751b08..303b754 100755
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -469,7 +469,7 @@ create_extended_todo_list () {
  	test -n "${last_parent:-}" -a "${last_parent:-}" != $SHORTUPSTREAM  
&& \
  		echo reset $last_parent
  	) | \
-	tac | \
+	perl -e 'print reverse <>' | \
  	while read cmd args
  	do
  		: ${commit_mark_list:=} ${last_commit:=000}
-- 
1.5.5.111.g180d

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

* Re: Use of tac in git-rebase--interactive
  2008-04-27  6:24 Use of tac in git-rebase--interactive Brian Gernhardt
  2008-04-27  6:42 ` Jeff King
@ 2008-04-27  7:33 ` しらいしななこ
  2008-04-30  0:25   ` Junio C Hamano
  1 sibling, 1 reply; 30+ messages in thread
From: しらいしななこ @ 2008-04-27  7:33 UTC (permalink / raw)
  To: Brian Gernhardt; +Cc: Junio C Hamano, git

Quoting Brian Gernhardt <benji@silverinsanity.com> writes:

> Commit d481bcc9: "Do rebase with preserve merges with advanced TODO
> list" uses the command tac, apparently to reverse the TODO command
> list.  (I don't use rebase -i much, if you can't tell.)

That is very sloppy job on Junio's part.  He usually is very picky about shell portability, and I remember that he earlier rewrote somebody else's commit that originally used tac command.

-- 
Nanako Shiraishi
http://ivory.ap.teacup.com/nanako3/

----------------------------------------------------------------------
Get a free email address with REAL anti-spam protection.
http://www.bluebottle.com/tag/1

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

* [PATCH] rebase--interactive: Replace unportable 'tac' by a sed script.
  2008-04-27  6:55   ` [PATCH] Use perl instead of tac Brian Gernhardt
@ 2008-04-28  7:44     ` Johannes Sixt
  2008-04-28  8:19       ` Junio C Hamano
  2008-04-28  9:04       ` Jeff King
  2008-04-28 11:46     ` [PATCH] Use perl instead of tac Jörg Sommer
  1 sibling, 2 replies; 30+ messages in thread
From: Johannes Sixt @ 2008-04-28  7:44 UTC (permalink / raw)
  To: Brian Gernhardt; +Cc: Jeff King, Junio C Hamano, git list

From: Johannes Sixt <johannes.sixt@telecom.at>

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
---
Brian Gernhardt schrieb:
> -    tac | \
> +    perl -e 'print reverse <>' | \

Here's my try, which avoids the perl hammer. ;)

Sorry, I can't test this at the moment due to an unrelated breakage
that I first have to chase down.

-- Hannes

PS: I picked the sed script from this patch by Simon 'corecode' Schubert:

http://article.gmane.org/gmane.comp.version-control.git/37074

 git-rebase--interactive.sh |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index 1751b08..a9ac332 100755
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -469,7 +469,7 @@ create_extended_todo_list () {
 	test -n "${last_parent:-}" -a "${last_parent:-}" != $SHORTUPSTREAM && \
 		echo reset $last_parent
 	) | \
-	tac | \
+	sed -ne '1!G;$p;h' | \
 	while read cmd args
 	do
 		: ${commit_mark_list:=} ${last_commit:=000}
-- 
1.5.5.1.930.g66f94.dirty

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

* Re: [PATCH] rebase--interactive: Replace unportable 'tac' by a sed script.
  2008-04-28  7:44     ` [PATCH] rebase--interactive: Replace unportable 'tac' by a sed script Johannes Sixt
@ 2008-04-28  8:19       ` Junio C Hamano
  2008-04-28  8:58         ` Paolo Bonzini
  2008-04-28  9:04       ` Jeff King
  1 sibling, 1 reply; 30+ messages in thread
From: Junio C Hamano @ 2008-04-28  8:19 UTC (permalink / raw)
  To: Johannes Sixt; +Cc: Brian Gernhardt, Jeff King, git list

Johannes Sixt <j.sixt@viscovery.net> writes:

> From: Johannes Sixt <johannes.sixt@telecom.at>
>
> Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
> ---
> Brian Gernhardt schrieb:
>> -    tac | \
>> +    perl -e 'print reverse <>' | \
>
> Here's my try, which avoids the perl hammer. ;)
> ...
> -	tac | \
> +	sed -ne '1!G;$p;h' | \

Thanks for trying, but frankly, I'd prefer the Perl hammer, as any
advanced sed scripting tend to be far less portable.

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

* Re: [PATCH] rebase--interactive: Replace unportable 'tac' by a sed script.
  2008-04-28  8:19       ` Junio C Hamano
@ 2008-04-28  8:58         ` Paolo Bonzini
  0 siblings, 0 replies; 30+ messages in thread
From: Paolo Bonzini @ 2008-04-28  8:58 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Johannes Sixt, Brian Gernhardt, Jeff King, git list


>> Here's my try, which avoids the perl hammer. ;)
>> ...
>> -	tac | \
>> +	sed -ne '1!G;$p;h' | \
> 
> Thanks for trying, but frankly, I'd prefer the Perl hammer, as any
> advanced sed scripting tend to be far less portable.

In fact this script is not portable. :-(  Not so much because of its 
"advanced-ness", but because it loads the entire file in memory, and 
thus hits the limit on the buffer length of many seds.

Paolo

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

* Re: [PATCH] rebase--interactive: Replace unportable 'tac' by a sed script.
  2008-04-28  7:44     ` [PATCH] rebase--interactive: Replace unportable 'tac' by a sed script Johannes Sixt
  2008-04-28  8:19       ` Junio C Hamano
@ 2008-04-28  9:04       ` Jeff King
  2008-04-28  9:11         ` Andreas Ericsson
  1 sibling, 1 reply; 30+ messages in thread
From: Jeff King @ 2008-04-28  9:04 UTC (permalink / raw)
  To: Johannes Sixt; +Cc: Brian Gernhardt, Junio C Hamano, git list

On Mon, Apr 28, 2008 at 09:44:48AM +0200, Johannes Sixt wrote:

>> +    perl -e 'print reverse <>' | \
> [...]
> +	sed -ne '1!G;$p;h' | \

Wow, and people complain about perl being unreadable. ;)

-Peff

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

* Re: [PATCH] rebase--interactive: Replace unportable 'tac' by a sed script.
  2008-04-28  9:04       ` Jeff King
@ 2008-04-28  9:11         ` Andreas Ericsson
  0 siblings, 0 replies; 30+ messages in thread
From: Andreas Ericsson @ 2008-04-28  9:11 UTC (permalink / raw)
  To: Jeff King; +Cc: Johannes Sixt, Brian Gernhardt, Junio C Hamano, git list

Jeff King wrote:
> On Mon, Apr 28, 2008 at 09:44:48AM +0200, Johannes Sixt wrote:
> 
>>> +    perl -e 'print reverse <>' | \
>> [...]
>> +	sed -ne '1!G;$p;h' | \
> 
> Wow, and people complain about perl being unreadable. ;)
> 

Well, the tmtowtdi dogma has its drawbacks. Here's another sed-script
that does the exact same thing:

	sed '1!G;h;$!d'

That being said, perl borrows most of its regex notation from sed, so
it's not as if perl is easier. This is just the top-end of the scale
that things like "sed s/foo/bar/" is at the bottom of ;-)

-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

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

* Re: [PATCH] Use perl instead of tac
  2008-04-27  6:55   ` [PATCH] Use perl instead of tac Brian Gernhardt
  2008-04-28  7:44     ` [PATCH] rebase--interactive: Replace unportable 'tac' by a sed script Johannes Sixt
@ 2008-04-28 11:46     ` Jörg Sommer
  2008-04-28 12:58       ` Randal L. Schwartz
  2008-04-28 13:46       ` Johannes Schindelin
  1 sibling, 2 replies; 30+ messages in thread
From: Jörg Sommer @ 2008-04-28 11:46 UTC (permalink / raw)
  To: git

Hi,

Brian Gernhardt <benji@silverinsanity.com> wrote:
> diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
> index 1751b08..303b754 100755
> --- a/git-rebase--interactive.sh
> +++ b/git-rebase--interactive.sh
> @@ -469,7 +469,7 @@ create_extended_todo_list () {
>   	test -n "${last_parent:-}" -a "${last_parent:-}" != $SHORTUPSTREAM  
> && \
>   		echo reset $last_parent
>   	) | \
> -	tac | \
> +	perl -e 'print reverse <>' | \

What about using a shell function and a *big* variable or an intermediate
file?

tac()
{
	while read line
	do
		reversed="$line
$reversed"
	done
	echo "${reversed%
}"
}

Bye, Jörg.
-- 
Ich halte ihn zwar für einen Schurken und das was er sagt für
falsch – aber ich bin bereit mein Leben dafür einzusetzen, daß
er seine Meinung sagen kann.		(Voletair)

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

* Re: [PATCH] Use perl instead of tac
  2008-04-28 11:46     ` [PATCH] Use perl instead of tac Jörg Sommer
@ 2008-04-28 12:58       ` Randal L. Schwartz
  2008-04-28 13:12         ` David Symonds
  2008-04-28 15:15         ` Jörg Sommer
  2008-04-28 13:46       ` Johannes Schindelin
  1 sibling, 2 replies; 30+ messages in thread
From: Randal L. Schwartz @ 2008-04-28 12:58 UTC (permalink / raw)
  To: Jörg Sommer; +Cc: git

>>>>> "Jörg" == Jörg Sommer <joerg@alea.gnuu.de> writes:

Jörg> What about using a shell function and a *big* variable or an intermediate
Jörg> file?

What makes you think that's any more faster or efficient than calling Perl
at this point?

-- 
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/>
Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.
See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training!

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

* Re: [PATCH] Use perl instead of tac
  2008-04-28 12:58       ` Randal L. Schwartz
@ 2008-04-28 13:12         ` David Symonds
  2008-04-28 13:31           ` Paolo Bonzini
  2008-04-28 14:11           ` Brian Gernhardt
  2008-04-28 15:15         ` Jörg Sommer
  1 sibling, 2 replies; 30+ messages in thread
From: David Symonds @ 2008-04-28 13:12 UTC (permalink / raw)
  To: Randal L. Schwartz; +Cc: Jörg Sommer, git

On Mon, Apr 28, 2008 at 10:58 PM, Randal L. Schwartz
<merlyn@stonehenge.com> wrote:
> >>>>> "Jörg" == Jörg Sommer <joerg@alea.gnuu.de> writes:
>
>  Jörg> What about using a shell function and a *big* variable or an intermediate
>  Jörg> file?
>
>  What makes you think that's any more faster or efficient than calling Perl
>  at this point?

I doubt Jörg suggested it for its speed, but it removes the dependency on Perl.

Bit ugly, still.


Dave.

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

* Re: [PATCH] Use perl instead of tac
  2008-04-28 13:12         ` David Symonds
@ 2008-04-28 13:31           ` Paolo Bonzini
  2008-04-28 14:11           ` Brian Gernhardt
  1 sibling, 0 replies; 30+ messages in thread
From: Paolo Bonzini @ 2008-04-28 13:31 UTC (permalink / raw)
  To: David Symonds; +Cc: Randal L. Schwartz, Jörg Sommer, git

David Symonds wrote:
> On Mon, Apr 28, 2008 at 10:58 PM, Randal L. Schwartz
> <merlyn@stonehenge.com> wrote:
>>>>>>> "Jörg" == Jörg Sommer <joerg@alea.gnuu.de> writes:
>>  Jörg> What about using a shell function and a *big* variable or an intermediate
>>  Jörg> file?
>>
>>  What makes you think that's any more faster or efficient than calling Perl
>>  at this point?
> 
> I doubt Jörg suggested it for its speed, but it removes the dependency on Perl.
> 
> Bit ugly, still.

And quadratic, unlike Perl (and unlike sed, if it worked portably).

Paolo

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

* Re: [PATCH] Use perl instead of tac
  2008-04-28 11:46     ` [PATCH] Use perl instead of tac Jörg Sommer
  2008-04-28 12:58       ` Randal L. Schwartz
@ 2008-04-28 13:46       ` Johannes Schindelin
  2008-04-28 14:07         ` Brian Gernhardt
  1 sibling, 1 reply; 30+ messages in thread
From: Johannes Schindelin @ 2008-04-28 13:46 UTC (permalink / raw)
  To: Jörg Sommer; +Cc: git

[-- Attachment #1: Type: TEXT/PLAIN, Size: 816 bytes --]

Hi,

On Mon, 28 Apr 2008, Jörg Sommer wrote:

> Brian Gernhardt <benji@silverinsanity.com> wrote:
> > diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
> > index 1751b08..303b754 100755
> > --- a/git-rebase--interactive.sh
> > +++ b/git-rebase--interactive.sh
> > @@ -469,7 +469,7 @@ create_extended_todo_list () {
> >   	test -n "${last_parent:-}" -a "${last_parent:-}" != $SHORTUPSTREAM  
> > && \
> >   		echo reset $last_parent
> >   	) | \
> > -	tac | \
> > +	perl -e 'print reverse <>' | \
> 
> What about using a shell function and a *big* variable or an 
> intermediate file?

How about fixing the code to not need tac instead?  We went to great 
lengths to introduce the --reverse option to the rev-list command, in 
order to avoid tac in the original version of rebase -i.

Ciao,
Dscho

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

* Re: [PATCH] Use perl instead of tac
  2008-04-28 13:46       ` Johannes Schindelin
@ 2008-04-28 14:07         ` Brian Gernhardt
  2008-04-28 14:20           ` Johannes Schindelin
  0 siblings, 1 reply; 30+ messages in thread
From: Brian Gernhardt @ 2008-04-28 14:07 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Jörg Sommer, git


On Apr 28, 2008, at 9:46 AM, Johannes Schindelin wrote:

> How about fixing the code to not need tac instead?  We went to great
> lengths to introduce the --reverse option to the rev-list command, in
> order to avoid tac in the original version of rebase -i.

Because this is reversing the output of a sub-shell (ll.395-471), not  
rev-list.  And making the shell code insert commands before the lines  
the produce it would make the code complex at best.  (And it's not  
simple code either.)

Or at least that's why I didn't do it.  Someone who understands it  
better can feel free to make it work in reverse in the first place.

~~ Brian

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

* Re: [PATCH] Use perl instead of tac
  2008-04-28 13:12         ` David Symonds
  2008-04-28 13:31           ` Paolo Bonzini
@ 2008-04-28 14:11           ` Brian Gernhardt
  2008-04-28 14:22             ` Johannes Schindelin
  1 sibling, 1 reply; 30+ messages in thread
From: Brian Gernhardt @ 2008-04-28 14:11 UTC (permalink / raw)
  To: David Symonds; +Cc: Randal L. Schwartz, "Jörg Sommer", git


On Apr 28, 2008, at 9:12 AM, David Symonds wrote:

> I doubt Jörg suggested it for its speed, but it removes the  
> dependency on Perl.

We already depend on perl for git-add--interactive.perl in core git,  
and for git-svn, git-cvs*, and git-send-email.  I don't think this one  
line is going to make a big difference in our Perl dependency.

~~ Brian

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

* Re: [PATCH] Use perl instead of tac
  2008-04-28 14:07         ` Brian Gernhardt
@ 2008-04-28 14:20           ` Johannes Schindelin
  0 siblings, 0 replies; 30+ messages in thread
From: Johannes Schindelin @ 2008-04-28 14:20 UTC (permalink / raw)
  To: Brian Gernhardt; +Cc: Jörg Sommer, git

Hi,

On Mon, 28 Apr 2008, Brian Gernhardt wrote:

> On Apr 28, 2008, at 9:46 AM, Johannes Schindelin wrote:
> 
> >How about fixing the code to not need tac instead?  We went to great 
> >lengths to introduce the --reverse option to the rev-list command, in 
> >order to avoid tac in the original version of rebase -i.
> 
> Because this is reversing the output of a sub-shell (ll.395-471), not 
> rev-list.  And making the shell code insert commands before the lines 
> the produce it would make the code complex at best.  (And it's not 
> simple code either.)

That's my _point_: the code is way too complex for what it tries to 
accomplish, namely implement a sane syntax for rebase -i -p.

Ciao,
Dscho

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

* Re: [PATCH] Use perl instead of tac
  2008-04-28 14:11           ` Brian Gernhardt
@ 2008-04-28 14:22             ` Johannes Schindelin
  0 siblings, 0 replies; 30+ messages in thread
From: Johannes Schindelin @ 2008-04-28 14:22 UTC (permalink / raw)
  To: Brian Gernhardt
  Cc: David Symonds, Randal L. Schwartz, "Jörg Sommer",
	git

[-- Attachment #1: Type: TEXT/PLAIN, Size: 788 bytes --]

Hi,

On Mon, 28 Apr 2008, Brian Gernhardt wrote:

> On Apr 28, 2008, at 9:12 AM, David Symonds wrote:
> 
> >I doubt Jörg suggested it for its speed, but it removes the dependency 
> >on Perl.
> 
> We already depend on perl for git-add--interactive.perl in core git, and 
> for git-svn, git-cvs*, and git-send-email.  I don't think this one line 
> is going to make a big difference in our Perl dependency.

It does.  It goes the wrong way.  And work on building in 
git-add--interactive.perl has already begun, so that is not a strong 
argument.

As for git-svn and git-cvs* I agree, they will probably remain perl 
scripts.  But I think that they are not that important, since they are not 
strictly _core_ parts of Git, being importers/exporters that not everybody 
needs.

Ciao,
Dscho

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

* Re: [PATCH] Use perl instead of tac
  2008-04-28 12:58       ` Randal L. Schwartz
  2008-04-28 13:12         ` David Symonds
@ 2008-04-28 15:15         ` Jörg Sommer
  2008-04-28 17:26           ` Avery Pennarun
                             ` (2 more replies)
  1 sibling, 3 replies; 30+ messages in thread
From: Jörg Sommer @ 2008-04-28 15:15 UTC (permalink / raw)
  To: git

Hallo Randal,

Randal L. Schwartz <merlyn@stonehenge.com> wrote:
>>>>>> "Jörg" == Jörg Sommer <joerg@alea.gnuu.de> writes:
>
> Jörg> What about using a shell function and a *big* variable or an intermediate
> Jörg> file?
>
> What makes you think that's any more faster or efficient than calling Perl
> at this point?

Nothing. My intention was not the speed, but the dependency on Perl. But
your are right. Except from the point that my suggestion is broken, it's
*much* slower:

% time dash -c 'while IFS= read -r line; do rev="$line
$rev"; done; printf "%s" "$rev"' < gitk-git/gitk-wish DN
dash -c  < gitk-git/gitk-wish > /dev/null 2> /dev/null  17,89s user 2,68s system 96% cpu 21,352 total

% time tac < gitk-git/gitk-wish DN
tac < gitk-git/gitk-wish > /dev/null 2> /dev/null  0,01s user 0,01s system 91% cpu 0,017 total

% time perl -e 'print reverse <>' < gitk-git/gitk-wish DN
perl -e 'print reverse <>' < gitk-git/gitk-wish > /dev/null 2> /dev/null  0,07s user 0,01s system 59% cpu 0,141 total

But I doubt this hurts, because we don't have such a big input.

% wc -l git.c
390 git.c

% time dash -c 'while IFS= read -r line; do rev="$line
$rev"; done; printf "%s" "$rev"' < git.c DN
dash -c  < git.c > /dev/null 2> /dev/null  0,04s user 0,04s system 62% cpu 0,115 total

And what about something like this: 'tac || rev || perl …'

Bye, Jörg.
-- 
Was der Bauer nicht kennt, das frisst er nicht. Würde der Städter kennen,
was er frisst, er würde umgehend Bauer werden.
                                                       Oliver Hassencamp

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

* Re: [PATCH] Use perl instead of tac
  2008-04-28 15:15         ` Jörg Sommer
@ 2008-04-28 17:26           ` Avery Pennarun
  2008-04-28 17:34           ` Matthieu Moy
  2008-04-28 19:13           ` Brian Gernhardt
  2 siblings, 0 replies; 30+ messages in thread
From: Avery Pennarun @ 2008-04-28 17:26 UTC (permalink / raw)
  To: Jörg Sommer; +Cc: git

On 4/28/08, Jörg Sommer <joerg@alea.gnuu.de> wrote:
>  And what about something like this: 'tac || rev || perl …'

Or we could just add a git-tac.c and use that :)

Have fun,

Avery

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

* Re: [PATCH] Use perl instead of tac
  2008-04-28 15:15         ` Jörg Sommer
  2008-04-28 17:26           ` Avery Pennarun
@ 2008-04-28 17:34           ` Matthieu Moy
  2008-04-28 17:50             ` Brian Gernhardt
  2008-04-28 19:13           ` Brian Gernhardt
  2 siblings, 1 reply; 30+ messages in thread
From: Matthieu Moy @ 2008-04-28 17:34 UTC (permalink / raw)
  To: Jörg Sommer; +Cc: git

Jörg Sommer <joerg@alea.gnuu.de> writes:

> And what about something like this: 'tac || rev || perl …'

Be careful: rev and tac are different. tac reverses lines, while rev
reverses chars inside lines.

My 2 cents,

-- 
Matthieu

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

* Re: [PATCH] Use perl instead of tac
  2008-04-28 17:34           ` Matthieu Moy
@ 2008-04-28 17:50             ` Brian Gernhardt
  0 siblings, 0 replies; 30+ messages in thread
From: Brian Gernhardt @ 2008-04-28 17:50 UTC (permalink / raw)
  To: Matthieu Moy; +Cc: Jörg Sommer, git


On Apr 28, 2008, at 1:34 PM, Matthieu Moy wrote:

> Jörg Sommer <joerg@alea.gnuu.de> writes:
>
>> And what about something like this: 'tac || rev || perl …'
>
> Be careful: rev and tac are different. tac reverses lines, while rev
> reverses chars inside lines.

Indeed you are correct.  This is a mistake I made in my original  
email, which people have been parroting.  My mistake, sorry.

~~ Brian

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

* Re: [PATCH] Use perl instead of tac
  2008-04-28 15:15         ` Jörg Sommer
  2008-04-28 17:26           ` Avery Pennarun
  2008-04-28 17:34           ` Matthieu Moy
@ 2008-04-28 19:13           ` Brian Gernhardt
  2008-04-30  9:02             ` Jörg Sommer
  2 siblings, 1 reply; 30+ messages in thread
From: Brian Gernhardt @ 2008-04-28 19:13 UTC (permalink / raw)
  To: Jörg Sommer; +Cc: git


On Apr 28, 2008, at 11:15 AM, Jörg Sommer wrote:

> Nothing. My intention was not the speed, but the dependency on Perl.  
> But
> your are right. Except from the point that my suggestion is broken,  
> it's
> *much* slower:

[snip]

> And what about something like this: 'tac || rev || perl …'

This would actually be spelled something like:

----- 8< -----
tac=""

tac < /dev/null > /dev/null 2>&1
if test $? != 127; then
    tac=tac
fi

if test -z "$tac"; then
    perl < /dev/null > /dev/null 2>&1
    if test $? != 127; then
       tac="perl -e 'print reverse <>'"
    fi
fi

if test -z "$tac"; then
    die "Couldn't find tac or perl."
fi

(subshell) | $tac | while loop
----- 8< -----

Ugly, no?  Plus it adds a dependency on tac OR doesn't solve the perl  
dependency.  I personally think using perl is better than this  
approach.  Even if we're trying to reduce the perl dependency in core,  
it's there right now so this has zero impact now.  The ideal solution  
is to re-write the loop so that it doesn't need to be reversed in the  
first place.  We can use perl until that rewrite is done.

This loop-reverse-loop construct is _extremely_ ugly, and I'm having  
problems following it.  None of what this function is doing is  
immediately obvious.  It's a good candidate for a comment or two.

Looking over it, we should be able to do this with one loop over the  
list of commits, doing this for each of them:

if more than one parent
   other_parents=all but first, comma separated
   print merge command (without marks)
else
   print pick command
fi

if commit is tagged
   print tag command
fi

I also dislike the large lists this is carrying around in shell  
variables.  If I'm reading it correctly, the tag list could be  
replaced by invocations of "git describe --exact-match".  The mark  
list appears to be unavoidable, but significantly smaller than the tag  
list.

Now that I think about it, the generation of marks could be done by a  
second loop over the list.  Notice what commits need to be marked in  
loop 1, then add the mark commands in loop 2.  Both of these loops  
would function in the same direction, removing the need for either tac  
or perl.

~~ Brian

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

* Re: Use of tac in git-rebase--interactive
  2008-04-27  7:33 ` Use of tac in git-rebase--interactive しらいしななこ
@ 2008-04-30  0:25   ` Junio C Hamano
  0 siblings, 0 replies; 30+ messages in thread
From: Junio C Hamano @ 2008-04-30  0:25 UTC (permalink / raw)
  To: しらいしななこ
  Cc: Brian Gernhardt, git

しらいしななこ  <nanako3@bluebottle.com> writes:

> Quoting Brian Gernhardt <benji@silverinsanity.com> writes:
>
>> Commit d481bcc9: "Do rebase with preserve merges with advanced TODO
>> list" uses the command tac, apparently to reverse the TODO command
>> list.  (I don't use rebase -i much, if you can't tell.)
>
> That is very sloppy job on Junio's part.  He usually is very picky about shell portability, and I remember that he earlier rewrote somebody else's commit that originally used tac command.

Heh, sorry about sloppiness.  I've been swamped lately outside git...

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

* Re: [PATCH] Use perl instead of tac
  2008-04-28 19:13           ` Brian Gernhardt
@ 2008-04-30  9:02             ` Jörg Sommer
  2008-04-30  9:39               ` Jörg Sommer
  2008-04-30 15:25               ` Brian Gernhardt
  0 siblings, 2 replies; 30+ messages in thread
From: Jörg Sommer @ 2008-04-30  9:02 UTC (permalink / raw)
  To: Brian Gernhardt; +Cc: git

[-- Attachment #1: Type: text/plain, Size: 1181 bytes --]

Hi Brian,

Brian Gernhardt schrieb am Mon 28. Apr, 15:13 (-0400):
> This loop-reverse-loop construct is _extremely_ ugly, and I'm having  
> problems following it.  None of what this function is doing is  
> immediately obvious.  It's a good candidate for a comment or two.

I write one.

> I also dislike the large lists this is carrying around in shell  
> variables.  If I'm reading it correctly, the tag list could be replaced 
> by invocations of "git describe --exact-match".

Yes. How to get all tags of a commit?

% git tag foo v1.5.5
% git describe --exact-match 9d831805195ba40b62f632acc6bb6e53d3
warning: tag 'v1.5.5' is really 'foo' here
v1.5.5

> Now that I think about it, the generation of marks could be done by a  
> second loop over the list.  Notice what commits need to be marked in  
> loop 1, then add the mark commands in loop 2.  Both of these loops would 
> function in the same direction, removing the need for either tac or perl.

You are right.

Thanks for your comments.

Bye, Jörg.
-- 
Damit das Mögliche entsteht, muß immer wieder das Unmögliche versucht
werden.                                       (Hermann Hesse)

[-- Attachment #2: Digital signature http://en.wikipedia.org/wiki/OpenPGP --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

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

* Re: [PATCH] Use perl instead of tac
  2008-04-30  9:02             ` Jörg Sommer
@ 2008-04-30  9:39               ` Jörg Sommer
  2008-04-30 16:12                 ` Brian Gernhardt
  2008-04-30 15:25               ` Brian Gernhardt
  1 sibling, 1 reply; 30+ messages in thread
From: Jörg Sommer @ 2008-04-30  9:39 UTC (permalink / raw)
  To: Brian Gernhardt; +Cc: git

[-- Attachment #1: Type: text/plain, Size: 973 bytes --]

Hallo Brian,

Jörg Sommer schrieb am Wed 30. Apr, 11:02 (+0200):
> Brian Gernhardt schrieb am Mon 28. Apr, 15:13 (-0400):
> > Now that I think about it, the generation of marks could be done by a  
> > second loop over the list.  Notice what commits need to be marked in  
> > loop 1, then add the mark commands in loop 2.  Both of these loops would 
> > function in the same direction, removing the need for either tac or perl.
> 
> You are right.

… but I found the problem. I don't know how to pass the list from one
subshell to the other.

% { echo pick; echo merge; a=12 } | { echo +$a+; while read line; do echo $line; done; }
++
pick
merge

The only idea I have is a file. Do you have a better idea?

% { echo pick; echo merge; a=12 } >/tmp/tmp; \
  { echo +$a+; while read line; do echo $line; done; } < /tmp/tmp
+12+
pick
merge

Bye, Jörg.
-- 
Viele Leute glauben, dass sie denken, wenn sie lediglich
ihre Vorurteile neu ordnen.

[-- Attachment #2: Digital signature http://en.wikipedia.org/wiki/OpenPGP --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

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

* Re: [PATCH] Use perl instead of tac
  2008-04-30  9:02             ` Jörg Sommer
  2008-04-30  9:39               ` Jörg Sommer
@ 2008-04-30 15:25               ` Brian Gernhardt
  2008-05-04 22:13                 ` Jörg Sommer
  1 sibling, 1 reply; 30+ messages in thread
From: Brian Gernhardt @ 2008-04-30 15:25 UTC (permalink / raw)
  To: Jörg Sommer; +Cc: git


On Apr 30, 2008, at 5:02 AM, Jörg Sommer wrote:

>> I also dislike the large lists this is carrying around in shell
>> variables.  If I'm reading it correctly, the tag list could be  
>> replaced
>> by invocations of "git describe --exact-match".
>
> Yes. How to get all tags of a commit?
>
> % git tag foo v1.5.5
> % git describe --exact-match 9d831805195ba40b62f632acc6bb6e53d3
> warning: tag 'v1.5.5' is really 'foo' here
> v1.5.5

I wish I could be clever and say I pointed this out as an obviously  
wrong answer or similar.  But, no, I simply didn't think of that.  The  
long list may be required, despite my concerns about it..  :-(

Those concerns being: overrunning the length of a shell variable, the  
speed of constructing and searching the list, over-complexity of the  
code.  But, of course, if there isn't another way to do it right then  
the list stays.

~~ Brian

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

* Re: [PATCH] Use perl instead of tac
  2008-04-30  9:39               ` Jörg Sommer
@ 2008-04-30 16:12                 ` Brian Gernhardt
  0 siblings, 0 replies; 30+ messages in thread
From: Brian Gernhardt @ 2008-04-30 16:12 UTC (permalink / raw)
  To: Jörg Sommer; +Cc: git


On Apr 30, 2008, at 5:39 AM, Jörg Sommer wrote:

> … but I found the problem. I don't know how to pass the list from one
> subshell to the other.
>
> % { echo pick; echo merge; a=12 } | { echo +$a+; while read line; do  
> echo $line; done; }
> ++
> pick
> merge
>
> The only idea I have is a file. Do you have a better idea?
>
> % { echo pick; echo merge; a=12 } >/tmp/tmp; \
>  { echo +$a+; while read line; do echo $line; done; } < /tmp/tmp
> +12+
> pick
> merge

No, I don't.  But I think the resulting code will be easier to read,  
even with the file.

~~ Brian

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

* Re: [PATCH] Use perl instead of tac
  2008-04-30 15:25               ` Brian Gernhardt
@ 2008-05-04 22:13                 ` Jörg Sommer
  2008-05-06  4:32                   ` Brian Gernhardt
  0 siblings, 1 reply; 30+ messages in thread
From: Jörg Sommer @ 2008-05-04 22:13 UTC (permalink / raw)
  To: Brian Gernhardt; +Cc: git

[-- Attachment #1: Type: text/plain, Size: 5613 bytes --]

Hallo Brian,

Brian Gernhardt schrieb am Wed 30. Apr, 11:25 (-0400):
> On Apr 30, 2008, at 5:02 AM, Jörg Sommer wrote:
>
>>> I also dislike the large lists this is carrying around in shell
>>> variables.  If I'm reading it correctly, the tag list could be  
>>> replaced
>>> by invocations of "git describe --exact-match".
>>
>> Yes. How to get all tags of a commit?
>>
>> % git tag foo v1.5.5
>> % git describe --exact-match 9d831805195ba40b62f632acc6bb6e53d3
>> warning: tag 'v1.5.5' is really 'foo' here
>> v1.5.5

And how can I get only tags no annotated tags? We can't recreate
annotated tags with git rebase.

> Those concerns being: overrunning the length of a shell variable,

Are you shure there is any such bounding? I didn't saw anything about the
size of a variables in IEEE 1003.1-2004, but didn't look very carfully.
All my shells (bash, dash, zsh) can handle more than 16777217 characters:

dash -c 'a=a; while :; do a=$a$a; echo $a | wc -c; done'

This would be a new version of create_extended_todo_list() without tac.
What do you think about it? Is it better readable? But there's a bug.

create_extended_todo_list () {
	# The idea of this function is to
	# 1. build a list of tags
	# 2. go through the list and
	#    * issue a reset command to the parent of the commit, if the last
	#      commit was not the parent of the current commit,
	#    * issue a pick command for simple commits,
	#    * issue for each merge commit a merge command with the hashs of
	#      the parent commits,
	#    * register each parent of a merge and issue a mark command
	#      (without an ID) after the commit for each registered commit and
	#    * issue a tag command, if the commit is in the tag list.
	# 3. Then go through the created list and
	#    * add an ID to each mark command and
	#    * replace all occurences of the hash in reset and merge commands
	#      by the mark ID
	test -e "$DOTEST"/cetl.tmp \
		&& die "Someone else uses our filename cetl.tmp." \
			"That's not nice"
	if test t = "${PRESERVE_TAGS:-}"
	then
		tag_list=$(git show-ref --abbrev=7 --tags | \
			(
			while read sha1 tag
			do
				tag=${tag#refs/tags/}
				if test ${last_sha1:-0000} = $sha1
				then
					saved_tags="$saved_tags:$tag"
				else
					printf "%s" "${last_sha1:+ $last_sha1#$saved_tags}"
					last_sha1=$sha1
					saved_tags=$tag
				fi
			done
			echo "${last_sha1:+ $last_sha1:$saved_tags}"
			) )
	else
		tag_list=
	fi
	mark_these_commits=
	while IFS=_ read commit parents subject
	do
		first_parent=${parents%% *}
		if test "${last_commit:-$SHORTUPSTREAM}" != $first_parent
		then
			test "$first_parent" = $SHORTUPSTREAM &&
				first_parent=$SHORTONTO
			echo reset $first_parent
		fi
		unset first_parent
		last_commit=$commit

		case "$parents" in
		*' '*)
			new_parents=
			for p in $parents
			do
				mark_these_commits=$(insert_value_at_key_into_list \
					"$commit" "$p" "$mark_these_commits")
				if test "$p" = $SHORTUPSTREAM
				then
					new_parents="$new_parents $SHORTONTO"
				else
					new_parents="$new_parents $p"
				fi
			done
			unset p
			echo merge $commit ${new_parents# * }
			unset new_parents
			;;
		*)
			echo "pick $commit $subject"
			;;
		esac

		if tmp=$(get_value_from_list $commit "$tag_list")
		then
			for t in $(echo $tmp | tr : ' ')
			do
				echo tag $t
			done
		fi
	done > "$DOTEST"/cetl.tmp
	unset commit parents subject

	commit_mark_list=
	next_mark=0
	last_commit=
	while read cmd args
	do
		case "$cmd" in
		pick)
			this_commit="${args%% *}"
			;;
		reset)
			this_commit=$args
			if tmp=$(get_value_from_list $args "$commit_mark_list")
			then
				args=":$tmp"
			fi
			;;
		merge)
			new_args=
			for i in ${args#* }
			do
				if tmp=$(get_value_from_list $i \
					"$commit_mark_list")
				then
					new_args="$new_args :$tmp"
				else
					new_args="$new_args $i"
				fi
			done
			this_commit="${args%% *}"
			args="$this_commit ${new_args# }"
			;;
		esac

		if tmp=$(get_value_from_list "$last_commit" \
			"$mark_these_commits") && \
			test "${this_commit:-$last_commit}" != $tmp
		then
			if tmp=$(get_value_from_list "$last_commit" \
				"$commit_mark_list")
			then
				test "$last_cmd" = reset -o "$last_cmd" = tag \
					|| echo mark ":$tmp"
			else
				commit_mark_list=$(insert_value_at_key_into_list \
					$next_mark $last_commit "$commit_mark_list")
				echo mark ":$next_mark"
				next_mark=$(($next_mark + 1))
			fi
		fi
		last_commit=${this_commit:-$last_commit}
		unset this_commit

		echo "$cmd $args"
		last_cmd=$cmd
	done < "$DOTEST"/cetl.tmp
	rm "$DOTEST"/cetl.tmp
	unset last_cmd last_commit next_mark cmd args tmp commit_mark_list \
		mark_these_commits
}

The problem is the mark command. If you walk from ONTO to HEAD trough the
list, you must know for a commit, if it is used _later_. But don't create
a mark if it is used immediately, e.g. pick; merge not pick; mark; merge.

If you walk from HEAD to ONTO, this is much easier. I delayed the mark
for the first head of a merge and checked if the next commit is this
commit. This way I keep the todo list clean and don't get something like
this for --first-parent:

pick abc
pick def
mark :0
merge 012 foreign-branch

Bye, Jörg.
-- 
Es ist außerdem ein weit verbreiteter Irrtum das USENET ‚helfen‘ soll.
Tatsächlich wurde USENET nachweislich zur persönlichen Belustigung
seiner Erfinder geschaffen.
Jörg Klemenz <joerg@gmx.net>, <b4ai4o$1u8vmt$2@ID-21915.news.dfncis.de>

[-- Attachment #2: Digital signature http://en.wikipedia.org/wiki/OpenPGP --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

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

* Re: [PATCH] Use perl instead of tac
  2008-05-04 22:13                 ` Jörg Sommer
@ 2008-05-06  4:32                   ` Brian Gernhardt
  0 siblings, 0 replies; 30+ messages in thread
From: Brian Gernhardt @ 2008-05-06  4:32 UTC (permalink / raw)
  To: Jörg Sommer; +Cc: git


On May 4, 2008, at 6:13 PM, Jörg Sommer wrote:

> Hallo Brian,
>
> Brian Gernhardt schrieb am Wed 30. Apr, 11:25 (-0400):
>> On Apr 30, 2008, at 5:02 AM, Jörg Sommer wrote:
>>> Yes. How to get all tags of a commit?
>>>
>>> % git tag foo v1.5.5
>>> % git describe --exact-match 9d831805195ba40b62f632acc6bb6e53d3
>>> warning: tag 'v1.5.5' is really 'foo' here
>>> v1.5.5
>
> And how can I get only tags no annotated tags? We can't recreate
> annotated tags with git rebase.

Yes, the tag list has to stay.  I had missed several bits of what it  
was trying to do.

>> Those concerns being: overrunning the length of a shell variable,
>
> Are you shure there is any such bounding? I didn't saw anything  
> about the
> size of a variables in IEEE 1003.1-2004, but didn't look very  
> carfully.
> All my shells (bash, dash, zsh) can handle more than 16777217  
> characters:
>
> dash -c 'a=a; while :; do a=$a$a; echo $a | wc -c; done'

My concern is that some shell somewhere (like the ever problematic  
Solaris) would have a limit and it would silently fail.  It may be an  
unfounded concern, but I thought I'd mention it to the list and see if  
anyone agreed.

> This would be a new version of create_extended_todo_list() without  
> tac.
> What do you think about it? Is it better readable? But there's a bug.

I find it more readable and am pleased about the lack of perl and tac.

> create_extended_todo_list () {
> 	# The idea of this function is to
> 	# 1. build a list of tags
> 	# 2. go through the list and
> 	#    * issue a reset command to the parent of the commit, if the last
> 	#      commit was not the parent of the current commit,
> 	#    * issue a pick command for simple commits,
> 	#    * issue for each merge commit a merge command with the hashs of
> 	#      the parent commits,
> 	#    * register each parent of a merge and issue a mark command
> 	#      (without an ID) after the commit for each registered commit  
> and
> 	#    * issue a tag command, if the commit is in the tag list.
> 	# 3. Then go through the created list and
> 	#    * add an ID to each mark command and
> 	#    * replace all occurences of the hash in reset and merge commands
> 	#      by the mark ID

Comment is excellent, although I'd prefer that the three parts were  
simply next to the code they're referring to.

> 	test -e "$DOTEST"/cetl.tmp \
> 		&& die "Someone else uses our filename cetl.tmp." \
> 			"That's not nice"

Is this just to catch a bug where another part of rebase -i uses the  
same file?  Or is there a way this could be triggered by user  
actions?  (I am under the impression that we'd never get this far if  
$DOTEST already existed.)

> 	mark_these_commits=
> 	while IFS=_ read commit parents subject
> 	do
> 		first_parent=${parents%% *}
> 		if test "${last_commit:-$SHORTUPSTREAM}" != $first_parent
> 		then
> 			test "$first_parent" = $SHORTUPSTREAM &&
> 				first_parent=$SHORTONTO
> 			echo reset $first_parent
> 		fi
> 		unset first_parent
> 		last_commit=$commit
>
> 		case "$parents" in
> 		*' '*)
> 			new_parents=
> 			for p in $parents
> 			do

To avoid unneeded marks, you need one more variable and an if  
statement.  Instead of unconditionally marking every parent, keep  
track of the previous commit and add a line like this:

                                if test "$p" != "$prev_commit"
                                then
> 				mark_these_commits=$(insert_value_at_key_into_list \
> 					"$commit" "$p" "$mark_these_commits")
                                fi
>
> 				if test "$p" = $SHORTUPSTREAM
> 				then
> 					new_parents="$new_parents $SHORTONTO"
> 				else
> 					new_parents="$new_parents $p"
> 				fi
> 			done
> 			unset p
> 			echo merge $commit ${new_parents# * }
> 			unset new_parents
> 			;;
> 		*)
> 			echo "pick $commit $subject"
> 			;;
> 		esac
>
> 		if tmp=$(get_value_from_list $commit "$tag_list")
> 		then
> 			for t in $(echo $tmp | tr : ' ')
> 			do
> 				echo tag $t
> 			done
> 		fi
>
> 	done > "$DOTEST"/cetl.tmp
> 	unset commit parents subject
>
> 	commit_mark_list=
> 	next_mark=0
> 	last_commit=
> 	while read cmd args

I'd personally do "cat cetl.tmp | while" instead of "while .... done <  
cetl.tmp", just so that where we're reading from is obvious from the  
start.

> The problem is the mark command. If you walk from ONTO to HEAD  
> trough the
> list, you must know for a commit, if it is used _later_. But don't  
> create
> a mark if it is used immediately, e.g. pick; merge not pick; mark;  
> merge.
>
> If you walk from HEAD to ONTO, this is much easier. I delayed the mark
> for the first head of a merge and checked if the next commit is this
> commit. This way I keep the todo list clean and don't get something  
> like
> this for --first-parent:
>
> pick abc
> pick def
> mark :0
> merge 012 foreign-branch

(See above.)

~~ Brian

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

end of thread, other threads:[~2008-05-06  4:33 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-27  6:24 Use of tac in git-rebase--interactive Brian Gernhardt
2008-04-27  6:42 ` Jeff King
2008-04-27  6:55   ` [PATCH] Use perl instead of tac Brian Gernhardt
2008-04-28  7:44     ` [PATCH] rebase--interactive: Replace unportable 'tac' by a sed script Johannes Sixt
2008-04-28  8:19       ` Junio C Hamano
2008-04-28  8:58         ` Paolo Bonzini
2008-04-28  9:04       ` Jeff King
2008-04-28  9:11         ` Andreas Ericsson
2008-04-28 11:46     ` [PATCH] Use perl instead of tac Jörg Sommer
2008-04-28 12:58       ` Randal L. Schwartz
2008-04-28 13:12         ` David Symonds
2008-04-28 13:31           ` Paolo Bonzini
2008-04-28 14:11           ` Brian Gernhardt
2008-04-28 14:22             ` Johannes Schindelin
2008-04-28 15:15         ` Jörg Sommer
2008-04-28 17:26           ` Avery Pennarun
2008-04-28 17:34           ` Matthieu Moy
2008-04-28 17:50             ` Brian Gernhardt
2008-04-28 19:13           ` Brian Gernhardt
2008-04-30  9:02             ` Jörg Sommer
2008-04-30  9:39               ` Jörg Sommer
2008-04-30 16:12                 ` Brian Gernhardt
2008-04-30 15:25               ` Brian Gernhardt
2008-05-04 22:13                 ` Jörg Sommer
2008-05-06  4:32                   ` Brian Gernhardt
2008-04-28 13:46       ` Johannes Schindelin
2008-04-28 14:07         ` Brian Gernhardt
2008-04-28 14:20           ` Johannes Schindelin
2008-04-27  7:33 ` Use of tac in git-rebase--interactive しらいしななこ
2008-04-30  0:25   ` Junio C Hamano

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