1#!/bin/sh
2#
3# Copyright (c) 2006 Yann Dirson, based on t3400 by Amos Waterland
4#
5
6test_description='git cherry should detect patches integrated upstream
7
8This test cherry-picks one local change of two into main branch, and
9checks that git cherry only returns the second patch in the local branch
10'
11GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
12export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
13
14. ./test-lib.sh
15
16GIT_AUTHOR_EMAIL=bogus_email_address
17export GIT_AUTHOR_EMAIL
18
19test_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
49test_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
54test_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
61test_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
84test_done
85