[PATCH] Fix git rev-list --reverse --max-count=N

Subsystems: the rest

DORMANTno replies

4 messages, 3 authors, 2016-06-15 · open the first message on its own page

[PATCH] Fix git rev-list --reverse --max-count=N

From: Michael Spang <hidden>
Date: 2016-06-15 22:48:07

Using --max-count with --reverse currently outputs the last N commits
in the final output rather than the first N commits. We want to
truncate the reversed list after the first few commits, rather than
truncating the initial list and reversing that.

Signed-off-by: Michael Spang <redacted>
---
 revision.c |   20 +++++++++++++++++---
 1 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/revision.c b/revision.c
index f54d43f..62135e0 100644
--- a/revision.c
+++ b/revision.c
@@ -1993,7 +1993,8 @@ static struct commit *get_revision_internal(struct rev_info *revs)
 		c = NULL;
 		break;
 	default:
-		revs->max_count--;
+		if (!revs->reverse)
+			revs->max_count--;
 	}
 
 	if (c)
@@ -2055,8 +2056,21 @@ struct commit *get_revision(struct rev_info *revs)
 		revs->reverse_output_stage = 1;
 	}
 
-	if (revs->reverse_output_stage)
-		return pop_commit(&revs->commits);
+	if (revs->reverse_output_stage) {
+		c = pop_commit(&revs->commits);
+
+		switch (revs->max_count) {
+		case -1:
+			break;
+		case 0:
+			c = NULL;
+			break;
+		default:
+			revs->max_count--;
+		}
+
+		return c;
+	}
 
 	c = get_revision_internal(revs);
 	if (c && revs->graph)
-- 
1.6.6

Re: [PATCH] Fix git rev-list --reverse --max-count=N

From: Johannes Sixt <hidden>
Date: 2016-06-15 22:48:07

On Mittwoch, 27. Januar 2010, Michael Spang wrote:
Using --max-count with --reverse currently outputs the last N commits
in the final output rather than the first N commits. We want to
truncate the reversed list after the first few commits, rather than
truncating the initial list and reversing that.
So when you have this history (A is oldest, D is newest):

   A--B--C--D

and you say

   git log --max-count=2 --reverse D

then you want

   A
   B

but I want

   C
   D

Why is your interpretation correct, an mine wrong?

-- Hannes

Re: [PATCH] Fix git rev-list --reverse --max-count=N

From: Sverre Rabbelier <hidden>
Date: 2016-06-15 22:48:07

Heya,
So when you have this history (A is oldest, D is newest):

  A--B--C--D

and you say

  git log --max-count=2 --reverse D

then you want

  A
  B

but I want

  C
  D
And the current behavior is

B
A

Isn't it? I agree btw, that C D is the 'correct' result.

-- 
Cheers,

Sverre Rabbelier

Re: [PATCH] Fix git rev-list --reverse --max-count=N

From: Michael Spang <hidden>
Date: 2016-06-15 22:48:07

On Wed, Jan 27, 2010 at 5:09 PM, Johannes Sixt [off-list ref] wrote:
On Mittwoch, 27. Januar 2010, Michael Spang wrote:

So when you have this history (A is oldest, D is newest):

  A--B--C--D

and you say

  git log --max-count=2 --reverse D

then you want

  A
  B

but I want

  C
  D

Why is your interpretation correct, an mine wrong?
Perhaps not wrong, but for me it was unexpected. For whatever reason,
I expected "--reverse" to give you the illusion that you are iterating
from the beginning of the history, even if it's not actually possible
to iterate that way directly. In line with that, limiting the output
to N commits would give you the earliest N commits. If you instead
think "stop descending through the history once we have N commits" the
current behavior makes sense.

I talked to Junio and he says the current behavior is here to stay.

Michael
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help