diff options
author | Junio C Hamano <gitster@pobox.com> | 2008-09-18 20:18:37 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-09-18 20:18:37 -0700 |
commit | b805ef08e691299478b0d0c843eeab3f066c5872 (patch) | |
tree | 0bd1e11f4f7239bbb54c8b771edbafde80b8ecf6 | |
parent | Merge branch 'cc/bisect' (diff) | |
parent | t6013: replace use of 'tac' with equivalent Perl (diff) | |
download | tgif-b805ef08e691299478b0d0c843eeab3f066c5872.tar.xz |
Merge branch 'tr/rev-list-reverse'
* tr/rev-list-reverse:
t6013: replace use of 'tac' with equivalent Perl
rev-list: fix --reverse interaction with --parents
-rw-r--r-- | revision.c | 38 | ||||
-rw-r--r-- | revision.h | 1 | ||||
-rwxr-xr-x | t/t6013-rev-list-reverse-parents.sh | 42 |
3 files changed, 60 insertions, 21 deletions
diff --git a/revision.c b/revision.c index 499f0e0225..2f646deab0 100644 --- a/revision.c +++ b/revision.c @@ -1793,26 +1793,6 @@ static struct commit *get_revision_internal(struct rev_info *revs) return c; } - if (revs->reverse) { - int limit = -1; - - if (0 <= revs->max_count) { - limit = revs->max_count; - if (0 < revs->skip_count) - limit += revs->skip_count; - } - l = NULL; - while ((c = get_revision_1(revs))) { - commit_list_insert(c, &l); - if ((0 < limit) && !--limit) - break; - } - revs->commits = l; - revs->reverse = 0; - revs->max_count = -1; - c = NULL; - } - /* * Now pick up what they want to give us */ @@ -1885,7 +1865,23 @@ static struct commit *get_revision_internal(struct rev_info *revs) struct commit *get_revision(struct rev_info *revs) { - struct commit *c = get_revision_internal(revs); + struct commit *c; + struct commit_list *reversed; + + if (revs->reverse) { + reversed = NULL; + while ((c = get_revision_internal(revs))) { + commit_list_insert(c, &reversed); + } + revs->commits = reversed; + revs->reverse = 0; + revs->reverse_output_stage = 1; + } + + if (revs->reverse_output_stage) + return pop_commit(&revs->commits); + + c = get_revision_internal(revs); if (c && revs->graph) graph_update(revs->graph, c); return c; diff --git a/revision.h b/revision.h index fc23522b38..2fdb2dd0ff 100644 --- a/revision.h +++ b/revision.h @@ -54,6 +54,7 @@ struct rev_info { rewrite_parents:1, print_parents:1, reverse:1, + reverse_output_stage:1, cherry_pick:1, first_parent_only:1; diff --git a/t/t6013-rev-list-reverse-parents.sh b/t/t6013-rev-list-reverse-parents.sh new file mode 100755 index 0000000000..59fc2f06e0 --- /dev/null +++ b/t/t6013-rev-list-reverse-parents.sh @@ -0,0 +1,42 @@ +#!/bin/sh + +test_description='--reverse combines with --parents' + +. ./test-lib.sh + + +commit () { + test_tick && + echo $1 > foo && + git add foo && + git commit -m "$1" +} + +test_expect_success 'set up --reverse example' ' + commit one && + git tag root && + commit two && + git checkout -b side HEAD^ && + commit three && + git checkout master && + git merge -s ours side && + commit five + ' + +test_expect_success '--reverse --parents --full-history combines correctly' ' + git rev-list --parents --full-history master -- foo | + perl -e "print reverse <>" > expected && + git rev-list --reverse --parents --full-history master -- foo \ + > actual && + test_cmp actual expected + ' + +test_expect_success '--boundary does too' ' + git rev-list --boundary --parents --full-history master ^root -- foo | + perl -e "print reverse <>" > expected && + git rev-list --boundary --reverse --parents --full-history \ + master ^root -- foo > actual && + test_cmp actual expected + ' + +test_done |