Merge branch 'ad/cygwin-no-backslashes-in-paths'
[git] / t / t3500-cherry.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2006 Yann Dirson, based on t3400 by Amos Waterland
4 #
5
6 test_description='git cherry should detect patches integrated upstream
7
8 This test cherry-picks one local change of two into main branch, and
9 checks that git cherry only returns the second patch in the local branch
10 '
11 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
12 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
13
14 . ./test-lib.sh
15
16 GIT_AUTHOR_EMAIL=bogus_email_address
17 export GIT_AUTHOR_EMAIL
18
19 test_expect_success \
20     'prepare repository with topic branch, and check cherry finds the 2 patches from there' \
21     'echo First > A &&
22      git update-index --add A &&
23      test_tick &&
24      git commit -m "Add A." &&
25
26      git checkout -b my-topic-branch &&
27
28      echo Second > B &&
29      git update-index --add B &&
30      test_tick &&
31      git commit -m "Add B." &&
32
33      echo AnotherSecond > C &&
34      git update-index --add C &&
35      test_tick &&
36      git commit -m "Add C." &&
37
38      git checkout -f main &&
39      rm -f B C &&
40
41      echo Third >> A &&
42      git update-index A &&
43      test_tick &&
44      git commit -m "Modify A." &&
45
46      expr "$(echo $(git cherry main my-topic-branch) )" : "+ [^ ]* + .*"
47 '
48
49 test_expect_success \
50     'check that cherry with limit returns only the top patch'\
51     'expr "$(echo $(git cherry main my-topic-branch my-topic-branch^1) )" : "+ [^ ]*"
52 '
53
54 test_expect_success \
55     'cherry-pick one of the 2 patches, and check cherry recognized one and only one as new' \
56     'git cherry-pick my-topic-branch^0 &&
57      echo $(git cherry main my-topic-branch) &&
58      expr "$(echo $(git cherry main my-topic-branch) )" : "+ [^ ]* - .*"
59 '
60
61 test_expect_success 'cherry ignores whitespace' '
62         git switch --orphan=upstream-with-space &&
63         test_commit initial file &&
64         >expect &&
65         git switch --create=feature-without-space &&
66
67         # A spaceless file on the feature branch.  Expect a match upstream.
68         printf space >file &&
69         git add file &&
70         git commit -m"file without space" &&
71         git log --format="- %H" -1 >>expect &&
72
73         # A further change.  Should not match upstream.
74         test_commit change file &&
75         git log --format="+ %H" -1 >>expect &&
76
77         git switch upstream-with-space &&
78         # Same as the spaceless file, just with spaces and on upstream.
79         test_commit "file with space" file "s p a c e" file-with-space &&
80         git cherry upstream-with-space feature-without-space >actual &&
81         test_cmp expect actual
82 '
83
84 test_done