Git development
 help / color / mirror / Atom feed
* git rev-list ordering
@ 2008-11-16  0:44 Ian Hilt
  2008-11-16  1:27 ` Sverre Rabbelier
  0 siblings, 1 reply; 8+ messages in thread
From: Ian Hilt @ 2008-11-16  0:44 UTC (permalink / raw)
  To: Git Mailing List

Why is it that this command,

    git rev-list --reverse --max-count=1 <branch>

results in the same SHA1 as,

    git rev-list --max-count=1 <branch>

So far, the documentation and the mailing list archives haven't helped.

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

* Re: git rev-list ordering
  2008-11-16  0:44 git rev-list ordering Ian Hilt
@ 2008-11-16  1:27 ` Sverre Rabbelier
  2008-11-16  1:44   ` Ian Hilt
  0 siblings, 1 reply; 8+ messages in thread
From: Sverre Rabbelier @ 2008-11-16  1:27 UTC (permalink / raw)
  To: Ian Hilt; +Cc: Git Mailing List

On Sun, Nov 16, 2008 at 01:44, Ian Hilt <ian.hilt@gmx.com> wrote:
> Why is it that this command,
>
>    git rev-list --reverse --max-count=1 <branch>
>
> results in the same SHA1 as,
>
>    git rev-list --max-count=1 <branch>
>
> So far, the documentation and the mailing list archives haven't helped.

The --reverse is applied after the --max-count, so you are seeing the
reverse of one commit ;). For comparison, have a look at:

$ git rev-list --reverse --max-count=2

-- 
Cheers,

Sverre Rabbelier

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

* Re: git rev-list ordering
  2008-11-16  1:27 ` Sverre Rabbelier
@ 2008-11-16  1:44   ` Ian Hilt
  2008-11-16 21:16     ` Johannes Schindelin
  0 siblings, 1 reply; 8+ messages in thread
From: Ian Hilt @ 2008-11-16  1:44 UTC (permalink / raw)
  To: sverre; +Cc: Git Mailing List

On Sat, 15 Nov 2008, Sverre Rabbelier wrote:
> The --reverse is applied after the --max-count, so you are seeing the
> reverse of one commit ;). For comparison, have a look at:
> 
> $ git rev-list --reverse --max-count=2

Ah, I see.  So if you didn't want the sorting to take a long time for
many commits, you would limit the output to n commits, then sort the
output.  Is this the logic behind this design?

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

* Re: git rev-list ordering
  2008-11-16  1:44   ` Ian Hilt
@ 2008-11-16 21:16     ` Johannes Schindelin
  2008-11-17  1:21       ` Ian Hilt
  2008-11-18 20:28       ` Pete Harlan
  0 siblings, 2 replies; 8+ messages in thread
From: Johannes Schindelin @ 2008-11-16 21:16 UTC (permalink / raw)
  To: Ian Hilt; +Cc: sverre, Git Mailing List

Hi,

On Sat, 15 Nov 2008, Ian Hilt wrote:

> On Sat, 15 Nov 2008, Sverre Rabbelier wrote:
> > The --reverse is applied after the --max-count, so you are seeing the 
> > reverse of one commit ;). For comparison, have a look at:
> > 
> > $ git rev-list --reverse --max-count=2
> 
> Ah, I see.  So if you didn't want the sorting to take a long time for 
> many commits, you would limit the output to n commits, then sort the 
> output.  Is this the logic behind this design?

Yes.  It is by design, since the guy who wrote the initial --reverse 
support cannot think of an interesting situation where you need to list 
the oldest n commits.

Ciao,
Dscho

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

* Re: git rev-list ordering
  2008-11-16 21:16     ` Johannes Schindelin
@ 2008-11-17  1:21       ` Ian Hilt
  2008-11-17  1:35         ` Johannes Schindelin
  2008-11-18 20:28       ` Pete Harlan
  1 sibling, 1 reply; 8+ messages in thread
From: Ian Hilt @ 2008-11-17  1:21 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: sverre, Git Mailing List

On Sun, 16 Nov 2008, Johannes Schindelin wrote:
> Hi,
> 
> On Sat, 15 Nov 2008, Ian Hilt wrote:
> 
> > On Sat, 15 Nov 2008, Sverre Rabbelier wrote:
> > > The --reverse is applied after the --max-count, so you are seeing the 
> > > reverse of one commit ;). For comparison, have a look at:
> > > 
> > > $ git rev-list --reverse --max-count=2
> > 
> > Ah, I see.  So if you didn't want the sorting to take a long time for 
> > many commits, you would limit the output to n commits, then sort the 
> > output.  Is this the logic behind this design?
> 
> Yes.  It is by design, since the guy who wrote the initial --reverse 
> support cannot think of an interesting situation where you need to list 
> the oldest n commits.

I see.  Well, the situation in which I found this to be needed was while 
trying to figure out how to find the next commit on branch X while on a 
detached head from that branch without counting how many commits back I 
was.  In other words,

$ git checkout X~4
$ # now I want X~3 without using a number or carets
$ git checkout $(git rev-list --reverse ..X | head -1)
 -- or --
$ git checkout $(git rev-list ..X | tail -1)

So maybe there's a better way to do this.  I don't know.  If the commits
were reversed _then_ limited I wouldn't need to use the pipe to
head/tail.  Not that that is a problem, it just seemed like it should
work with reverse and max-count.

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

* Re: Re: git rev-list ordering
  2008-11-17  1:21       ` Ian Hilt
@ 2008-11-17  1:35         ` Johannes Schindelin
  0 siblings, 0 replies; 8+ messages in thread
From: Johannes Schindelin @ 2008-11-17  1:35 UTC (permalink / raw)
  To: Ian Hilt; +Cc: sverre, Git Mailing List

Hi,

On Sun, 16 Nov 2008, Ian Hilt wrote:

> On Sun, 16 Nov 2008, Johannes Schindelin wrote:
> 
> > On Sat, 15 Nov 2008, Ian Hilt wrote:
> > 
> > > On Sat, 15 Nov 2008, Sverre Rabbelier wrote:
> > > > The --reverse is applied after the --max-count, so you are seeing 
> > > > the reverse of one commit ;). For comparison, have a look at:
> > > > 
> > > > $ git rev-list --reverse --max-count=2
> > > 
> > > Ah, I see.  So if you didn't want the sorting to take a long time 
> > > for many commits, you would limit the output to n commits, then sort 
> > > the output.  Is this the logic behind this design?
> > 
> > Yes.  It is by design, since the guy who wrote the initial --reverse 
> > support cannot think of an interesting situation where you need to 
> > list the oldest n commits.
> 
> I see.  Well, the situation in which I found this to be needed was while 
> trying to figure out how to find the next commit on branch X while on a 
> detached head from that branch without counting how many commits back I 
> was.  In other words,
> 
> $ git checkout X~4
> $ # now I want X~3 without using a number or carets
> $ git checkout $(git rev-list --reverse ..X | head -1)
>  -- or --
> $ git checkout $(git rev-list ..X | tail -1)

This could break down horribly when there was branching going on.  
However, in case you are certain there is only one child of X~4, I'd 
suggest doing this:

$ git checkout $(git rev-list --parents --all ^HEAD |
	sed -n "s/ .*$(git rev-parse HEAD).*$//p")

IOW I would list all revisions with parents, and filter out all which do 
not have the current one as parent.

Hth,
Dscho

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

* Re: git rev-list ordering
  2008-11-16 21:16     ` Johannes Schindelin
  2008-11-17  1:21       ` Ian Hilt
@ 2008-11-18 20:28       ` Pete Harlan
  2008-11-19  8:26         ` Björn Steinbrink
  1 sibling, 1 reply; 8+ messages in thread
From: Pete Harlan @ 2008-11-18 20:28 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Ian Hilt, sverre, Git Mailing List

Johannes Schindelin wrote:
> Hi,
> 
> On Sat, 15 Nov 2008, Ian Hilt wrote:
> 
>> On Sat, 15 Nov 2008, Sverre Rabbelier wrote:
>>> The --reverse is applied after the --max-count, so you are seeing the 
>>> reverse of one commit ;). For comparison, have a look at:
>>>
>>> $ git rev-list --reverse --max-count=2
>> Ah, I see.  So if you didn't want the sorting to take a long time for 
>> many commits, you would limit the output to n commits, then sort the 
>> output.  Is this the logic behind this design?
> 
> Yes.  It is by design, since the guy who wrote the initial --reverse 
> support cannot think of an interesting situation where you need to list 
> the oldest n commits.

I have a script that runs periodically where I need to know the email
address of who added $file to the system, for a handful of $files,
because I'm moving them somewhere else and want to let them know.  The
most recent commits aren't interesting, it's the first commit that matters.

I use:

  git rev-list --reverse --pretty=format:%ae HEAD -- $file

and the second line has the information I need.

Perhaps there's a more straightforward way to answer the question "who
first put this file here".

(One can imagine that may be no "first", because $file merged from
different paths, but in mine as in many real-world cases, it (a) won't
happen and (b) whatever happens will be fine if it does.)

I don't need this to work differently than it does, but perhaps it
constitutes an "interesting situation where you need to list the oldest
n commits"?

Thank you for your numerous contributions,

--Pete

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

* Re: git rev-list ordering
  2008-11-18 20:28       ` Pete Harlan
@ 2008-11-19  8:26         ` Björn Steinbrink
  0 siblings, 0 replies; 8+ messages in thread
From: Björn Steinbrink @ 2008-11-19  8:26 UTC (permalink / raw)
  To: Pete Harlan; +Cc: Johannes Schindelin, Ian Hilt, sverre, Git Mailing List

On 2008.11.18 12:28:27 -0800, Pete Harlan wrote:
> I have a script that runs periodically where I need to know the email
> address of who added $file to the system, for a handful of $files,
> because I'm moving them somewhere else and want to let them know.  The
> most recent commits aren't interesting, it's the first commit that matters.
> 
> I use:
> 
>   git rev-list --reverse --pretty=format:%ae HEAD -- $file
> 
> and the second line has the information I need.
> 
> Perhaps there's a more straightforward way to answer the question "who
> first put this file here".
> 
> (One can imagine that may be no "first", because $file merged from
> different paths, but in mine as in many real-world cases, it (a) won't
> happen and (b) whatever happens will be fine if it does.)
> 
> I don't need this to work differently than it does, but perhaps it
> constitutes an "interesting situation where you need to list the oldest
> n commits"?

What you're asking for are commits that added the file, and you can tell
git to find them, instead of using the --reverse work-around:

git log --diff-filter=A --pretty=format:%ae HEAD -- $file

If you're running that with a single file, you might want to add
--follow and maybe add R to the diff-filter as well (to get the renaming
commits).

Björn

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

end of thread, other threads:[~2008-11-19  8:28 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-11-16  0:44 git rev-list ordering Ian Hilt
2008-11-16  1:27 ` Sverre Rabbelier
2008-11-16  1:44   ` Ian Hilt
2008-11-16 21:16     ` Johannes Schindelin
2008-11-17  1:21       ` Ian Hilt
2008-11-17  1:35         ` Johannes Schindelin
2008-11-18 20:28       ` Pete Harlan
2008-11-19  8:26         ` Björn Steinbrink

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox