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