rev-list: documentation and test for --left/right-only

Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Michael J Gruber 2011-02-21 17:09:12 +01:00 committed by Junio C Hamano
parent e0b9c34f7e
commit 59c8afdf47
3 changed files with 43 additions and 4 deletions

View File

@ -31,6 +31,8 @@ SYNOPSIS
[ \--parents ] [ \--parents ]
[ \--timestamp ] [ \--timestamp ]
[ \--left-right ] [ \--left-right ]
[ \--left-only ]
[ \--right-only ]
[ \--cherry-pick ] [ \--cherry-pick ]
[ \--encoding[=<encoding>] ] [ \--encoding[=<encoding>] ]
[ \--(author|committer|grep)=<pattern> ] [ \--(author|committer|grep)=<pattern> ]

View File

@ -319,6 +319,19 @@ from the other branch (for example, "3rd on b" may be cherry-picked
from branch A). With this option, such pairs of commits are from branch A). With this option, such pairs of commits are
excluded from the output. excluded from the output.
--left-only::
--right-only::
List only commits on the respective side of a symmetric range,
i.e. only those which would be marked `<` resp. `>` by
`--left-right`.
+
For example, `--cherry-pick --right-only A...B` omits those
commits from `B` which are in `A` or are patch-equivalent to a commit in
`A`. In other words, this lists the `{plus}` commits from `git cherry A B`.
More precisely, `--cherry-pick --right-only --no-merges` gives the exact
list.
-g:: -g::
--walk-reflogs:: --walk-reflogs::

View File

@ -4,14 +4,14 @@ test_description='test git rev-list --cherry-pick -- file'
. ./test-lib.sh . ./test-lib.sh
# A---B---D # A---B---D---F
# \ # \
# \ # \
# C---E # C---E
# #
# B changes a file foo.c, adding a line of text. C changes foo.c as # B changes a file foo.c, adding a line of text. C changes foo.c as
# well as bar.c, but the change in foo.c was identical to change B. # well as bar.c, but the change in foo.c was identical to change B.
# D and C change bar in the same way, E differently. # D and C change bar in the same way, E and F differently.
test_expect_success setup ' test_expect_success setup '
echo Hallo > foo && echo Hallo > foo &&
@ -40,7 +40,12 @@ test_expect_success setup '
git add bar && git add bar &&
test_tick && test_tick &&
git commit -m "D" && git commit -m "D" &&
git tag D git tag D &&
echo Nello > bar &&
git add bar &&
test_tick &&
git commit -m "F" &&
git tag F
' '
cat >expect <<EOF cat >expect <<EOF
@ -83,11 +88,30 @@ test_expect_success 'bar does not come up empty' '
' '
cat >expect <<EOF cat >expect <<EOF
<tags/F
>tags/E >tags/E
EOF EOF
test_expect_success '--cherry-pick bar does not come up empty (II)' ' test_expect_success '--cherry-pick bar does not come up empty (II)' '
git rev-list --left-right --cherry-pick D...E -- bar > actual && git rev-list --left-right --cherry-pick F...E -- bar > actual &&
git name-rev --stdin --name-only --refs="*tags/*" \
< actual > actual.named &&
test_cmp actual.named expect
'
cat >expect <<EOF
tags/E
EOF
test_expect_success '--cherry-pick --right-only' '
git rev-list --cherry-pick --right-only F...E -- bar > actual &&
git name-rev --stdin --name-only --refs="*tags/*" \
< actual > actual.named &&
test_cmp actual.named expect
'
test_expect_success '--cherry-pick --left-only' '
git rev-list --cherry-pick --left-only E...F -- bar > actual &&
git name-rev --stdin --name-only --refs="*tags/*" \ git name-rev --stdin --name-only --refs="*tags/*" \
< actual > actual.named && < actual > actual.named &&
test_cmp actual.named expect test_cmp actual.named expect