-
Notifications
You must be signed in to change notification settings - Fork 25.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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>
- Loading branch information
Showing
3 changed files
with
60 additions
and
21 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |