rev-list: documentation and test for --left/right-only
authorMichael J Gruber <git@drmicha.warpmail.net>
Mon, 21 Feb 2011 16:09:12 +0000 (17:09 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 22 Feb 2011 00:34:05 +0000 (16:34 -0800)
Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-rev-list.txt
Documentation/rev-list-options.txt
t/t6007-rev-list-cherry-pick-file.sh
index 8e1e32908c31ddb8cb07046a25bcdb6dd38d74f5..5f47a13d3c6191a0029e7e64603518346b0198ee 100644 (file)
@@ -31,6 +31,8 @@ SYNOPSIS
             [ \--parents ]
             [ \--timestamp ]
             [ \--left-right ]
             [ \--parents ]
             [ \--timestamp ]
             [ \--left-right ]
+            [ \--left-only ]
+            [ \--right-only ]
             [ \--cherry-pick ]
             [ \--encoding[=<encoding>] ]
             [ \--(author|committer|grep)=<pattern> ]
             [ \--cherry-pick ]
             [ \--encoding[=<encoding>] ]
             [ \--(author|committer|grep)=<pattern> ]
index 44a2ef1de15bdce5d67a151a1cb6150031e57c7e..cebba62239ad8861160e79255fdbdc4800be5e05 100644 (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
 excluded from the output.
 
 from branch A).  With this option, such pairs of commits are
 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::
 --walk-reflogs::
 
 -g::
 --walk-reflogs::
 
index 64b72a3e209b16d8de3d2975324f7fa7d9bed624..cd089a913bb93abc882db5a128429dab0d0275db 100755 (executable)
@@ -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
 #
 # 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.
 #  \
 #   \
 #    C---E
 #
 # 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.
-# 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 '
        echo Hallo > foo &&
 
 test_expect_success setup '
        echo Hallo > foo &&
@@ -40,7 +40,12 @@ test_expect_success setup '
        git add bar &&
        test_tick &&
        git commit -m "D" &&
        git add bar &&
        test_tick &&
        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
 EOF
 
 test_expect_success '--cherry-pick bar does not come up empty (II)' '
 >tags/E
 EOF
 
 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/*" \
                < actual > actual.named &&
        test_cmp actual.named expect
        git name-rev --stdin --name-only --refs="*tags/*" \
                < actual > actual.named &&
        test_cmp actual.named expect