mirror of
https://github.com/git/git.git
synced 2026-02-20 23:01:09 +00:00
rev-list: fix --reverse interaction with --parents
--reverse did not interact well with --parents, as the included test
case shows: in a history like
A--B.
\ \
`C--M--D
the command
git rev-list --reverse --parents --full-history HEAD
erroneously lists D as having no parents at all. (Without --reverse,
it correctly lists M.)
This is caused by the machinery driving --reverse: it first grabs all
commits through the normal routines, then runs them through the same
routines again, effectively simplifying them twice.
Fix this by moving the --reverse one level up, into get_revision().
This way we can cleanly grab all commits via the normal calls, then
just pop them off the list one by one without interfering with
get_revision_internal().
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
6534703059
commit
498bcd3159
42
t/t6013-rev-list-reverse-parents.sh
Executable file
42
t/t6013-rev-list-reverse-parents.sh
Executable file
@@ -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 |
|
||||
tac > 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 |
|
||||
tac > expected &&
|
||||
git rev-list --boundary --reverse --parents --full-history \
|
||||
master ^root -- foo > actual &&
|
||||
test_cmp actual expected
|
||||
'
|
||||
|
||||
test_done
|
||||
Reference in New Issue
Block a user