Browse Source

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
maint
Junio C Hamano 16 years ago
parent
commit
b805ef08e6
  1. 38
      revision.c
  2. 1
      revision.h
  3. 42
      t/t6013-rev-list-reverse-parents.sh

38
revision.c

@ -1793,26 +1793,6 @@ static struct commit *get_revision_internal(struct rev_info *revs) @@ -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) @@ -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;

1
revision.h

@ -54,6 +54,7 @@ struct rev_info { @@ -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;


42
t/t6013-rev-list-reverse-parents.sh

@ -0,0 +1,42 @@ @@ -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
Loading…
Cancel
Save