| #!/bin/sh |
| |
| test_description='merge-recursive space options |
| |
| * [main] Clarify |
| ! [remote] Remove cruft |
| -- |
| + [remote] Remove cruft |
| * [main] Clarify |
| *+ [remote^] Initial revision |
| * ok 1: setup |
| ' |
| |
| GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main |
| export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME |
| |
| TEST_PASSES_SANITIZE_LEAK=true |
| . ./test-lib.sh |
| |
| test_have_prereq SED_STRIPS_CR && SED_OPTIONS=-b |
| if test_have_prereq GREP_STRIPS_CR |
| then |
| GREP_OPTIONS=-U |
| export GREP_OPTIONS |
| fi |
| |
| test_expect_success 'setup' ' |
| conflict_hunks () { |
| sed $SED_OPTIONS -n -e " |
| /^<<<</ b conflict |
| b |
| : conflict |
| p |
| /^>>>>/ b |
| n |
| b conflict |
| " "$@" |
| } && |
| |
| cat <<-\EOF >text.txt && |
| Hope, he says, cherishes the soul of him who lives in |
| justice and holiness and is the nurse of his age and the |
| companion of his journey;--hope which is mightiest to sway |
| the restless soul of man. |
| |
| How admirable are his words! And the great blessing of riches, I do |
| not say to every man, but to a good man, is, that he has had no |
| occasion to deceive or to defraud others, either intentionally or |
| unintentionally; and when he departs to the world below he is not in |
| any apprehension about offerings due to the gods or debts which he owes |
| to men. Now to this peace of mind the possession of wealth greatly |
| contributes; and therefore I say, that, setting one thing against |
| another, of the many advantages which wealth has to give, to a man of |
| sense this is in my opinion the greatest. |
| |
| Well said, Cephalus, I replied; but as concerning justice, what is |
| it?--to speak the truth and to pay your debts--no more than this? And |
| even to this are there not exceptions? Suppose that a friend when in |
| his right mind has deposited arms with me and he asks for them when he |
| is not in his right mind, ought I to give them back to him? No one |
| would say that I ought or that I should be right in doing so, any more |
| than they would say that I ought always to speak the truth to one who |
| is in his condition. |
| |
| You are quite right, he replied. |
| |
| But then, I said, speaking the truth and paying your debts is not a |
| correct definition of justice. |
| |
| CEPHALUS - SOCRATES - POLEMARCHUS |
| |
| Quite correct, Socrates, if Simonides is to be believed, said |
| Polemarchus interposing. |
| |
| I fear, said Cephalus, that I must go now, for I have to look after the |
| sacrifices, and I hand over the argument to Polemarchus and the company. |
| EOF |
| git add text.txt && |
| test_tick && |
| git commit -m "Initial revision" && |
| |
| git checkout -b remote && |
| sed -e " |
| s/\. /\. /g |
| s/[?] /? /g |
| s/ / /g |
| s/--/---/g |
| s/but as concerning/but as con cerning/ |
| /CEPHALUS - SOCRATES - POLEMARCHUS/ d |
| " text.txt >text.txt+ && |
| mv text.txt+ text.txt && |
| git commit -a -m "Remove cruft" && |
| |
| git checkout main && |
| sed -e " |
| s/\(not in his right mind\),\(.*\)/\1;\2Q/ |
| s/Quite correct\(.*\)/It is too correct\1Q/ |
| s/unintentionally/un intentionally/ |
| /un intentionally/ s/$/Q/ |
| s/Polemarchus interposing./Polemarchus, interposing.Q/ |
| /justice and holiness/ s/$/Q/ |
| /pay your debts/ s/$/Q/ |
| " text.txt | q_to_cr >text.txt+ && |
| mv text.txt+ text.txt && |
| git commit -a -m "Clarify" && |
| git show-branch --all |
| ' |
| |
| test_expect_success 'naive merge fails' ' |
| git read-tree --reset -u HEAD && |
| test_must_fail git merge-recursive HEAD^ -- HEAD remote && |
| test_must_fail git update-index --refresh && |
| grep "<<<<<<" text.txt |
| ' |
| |
| test_expect_success '--ignore-space-change makes merge succeed' ' |
| git read-tree --reset -u HEAD && |
| git merge-recursive --ignore-space-change HEAD^ -- HEAD remote |
| ' |
| |
| test_expect_success 'naive cherry-pick fails' ' |
| git read-tree --reset -u HEAD && |
| test_must_fail git cherry-pick --no-commit remote && |
| git read-tree --reset -u HEAD && |
| test_must_fail git cherry-pick remote && |
| test_must_fail git update-index --refresh && |
| grep "<<<<<<" text.txt |
| ' |
| |
| test_expect_success '-Xignore-space-change makes cherry-pick succeed' ' |
| git read-tree --reset -u HEAD && |
| git cherry-pick --no-commit -Xignore-space-change remote |
| ' |
| |
| test_expect_success '--ignore-space-change: our w/s-only change wins' ' |
| q_to_cr <<-\EOF >expected && |
| justice and holiness and is the nurse of his age and theQ |
| EOF |
| |
| git read-tree --reset -u HEAD && |
| git merge-recursive --ignore-space-change HEAD^ -- HEAD remote && |
| grep "justice and holiness" text.txt >actual && |
| test_cmp expected actual |
| ' |
| |
| test_expect_success '--ignore-space-change: their real change wins over w/s' ' |
| cat <<-\EOF >expected && |
| it?---to speak the truth and to pay your debts---no more than this? And |
| EOF |
| |
| git read-tree --reset -u HEAD && |
| git merge-recursive --ignore-space-change HEAD^ -- HEAD remote && |
| grep "pay your debts" text.txt >actual && |
| test_cmp expected actual |
| ' |
| |
| test_expect_success '--ignore-space-change: does not ignore new spaces' ' |
| cat <<-\EOF >expected1 && |
| Well said, Cephalus, I replied; but as con cerning justice, what is |
| EOF |
| q_to_cr <<-\EOF >expected2 && |
| un intentionally; and when he departs to the world below he is not inQ |
| EOF |
| |
| git read-tree --reset -u HEAD && |
| git merge-recursive --ignore-space-change HEAD^ -- HEAD remote && |
| grep "Well said" text.txt >actual1 && |
| grep "when he departs" text.txt >actual2 && |
| test_cmp expected1 actual1 && |
| test_cmp expected2 actual2 |
| ' |
| |
| test_expect_success '--ignore-all-space drops their new spaces' ' |
| cat <<-\EOF >expected && |
| Well said, Cephalus, I replied; but as concerning justice, what is |
| EOF |
| |
| git read-tree --reset -u HEAD && |
| git merge-recursive --ignore-all-space HEAD^ -- HEAD remote && |
| grep "Well said" text.txt >actual && |
| test_cmp expected actual |
| ' |
| |
| test_expect_success '--ignore-all-space keeps our new spaces' ' |
| q_to_cr <<-\EOF >expected && |
| un intentionally; and when he departs to the world below he is not inQ |
| EOF |
| |
| git read-tree --reset -u HEAD && |
| git merge-recursive --ignore-all-space HEAD^ -- HEAD remote && |
| grep "when he departs" text.txt >actual && |
| test_cmp expected actual |
| ' |
| |
| test_expect_success '--ignore-space-at-eol' ' |
| q_to_cr <<-\EOF >expected && |
| <<<<<<< HEAD |
| is not in his right mind; ought I to give them back to him? No oneQ |
| ======= |
| is not in his right mind, ought I to give them back to him? No one |
| >>>>>>> remote |
| EOF |
| |
| git read-tree --reset -u HEAD && |
| test_must_fail git merge-recursive --ignore-space-at-eol \ |
| HEAD^ -- HEAD remote && |
| conflict_hunks text.txt >actual && |
| test_cmp expected actual |
| ' |
| |
| test_done |