diff options
author | Michael J Gruber <git@drmicha.warpmail.net> | 2011-02-21 17:09:12 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-02-21 16:34:05 -0800 |
commit | 59c8afdf475d2b072fb63383df9f62afd2b3b1ee (patch) | |
tree | cf1f68185ae6e6a971790a001e86cf86b94abdae | |
parent | e0b9c34f7eec9d7943bbb8a3134f24e6e4e4ed3e (diff) | |
download | git-59c8afdf475d2b072fb63383df9f62afd2b3b1ee.tar.gz |
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>
-rw-r--r-- | Documentation/git-rev-list.txt | 2 | ||||
-rw-r--r-- | Documentation/rev-list-options.txt | 13 | ||||
-rwxr-xr-x | t/t6007-rev-list-cherry-pick-file.sh | 32 |
3 files changed, 43 insertions, 4 deletions
diff --git a/Documentation/git-rev-list.txt b/Documentation/git-rev-list.txt index 8e1e32908c..5f47a13d3c 100644 --- a/Documentation/git-rev-list.txt +++ b/Documentation/git-rev-list.txt @@ -31,6 +31,8 @@ SYNOPSIS [ \--parents ] [ \--timestamp ] [ \--left-right ] + [ \--left-only ] + [ \--right-only ] [ \--cherry-pick ] [ \--encoding[=<encoding>] ] [ \--(author|committer|grep)=<pattern> ] diff --git a/Documentation/rev-list-options.txt b/Documentation/rev-list-options.txt index 44a2ef1de1..cebba62239 100644 --- a/Documentation/rev-list-options.txt +++ b/Documentation/rev-list-options.txt @@ -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. +--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:: diff --git a/t/t6007-rev-list-cherry-pick-file.sh b/t/t6007-rev-list-cherry-pick-file.sh index 64b72a3e20..cd089a913b 100755 --- a/t/t6007-rev-list-cherry-pick-file.sh +++ b/t/t6007-rev-list-cherry-pick-file.sh @@ -4,14 +4,14 @@ test_description='test git rev-list --cherry-pick -- file' . ./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. -# 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 && @@ -40,7 +40,12 @@ test_expect_success setup ' 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 @@ -83,11 +88,30 @@ test_expect_success 'bar does not come up empty' ' ' cat >expect <<EOF +<tags/F >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 |