t / t3032-merge-recursive-options.shon commit Merge branch 'tc/format-patch-p' (33935dc)
   1#!/bin/sh
   2
   3test_description='merge-recursive options
   4
   5* [master] Clarify
   6 ! [remote] Remove cruft
   7--
   8 + [remote] Remove cruft
   9*  [master] Clarify
  10*+ [remote^] Initial revision
  11*   ok 1: setup
  12'
  13
  14. ./test-lib.sh
  15
  16test_expect_success 'setup' '
  17        conflict_hunks () {
  18                sed -n -e "
  19                        /^<<<</ b inconflict
  20                        b
  21                        : inconflict
  22                        p
  23                        /^>>>>/ b
  24                        n
  25                        b inconflict
  26                " "$@"
  27        } &&
  28
  29        cat <<-\EOF >text.txt &&
  30            Hope, he says, cherishes the soul of him who lives in
  31            justice and holiness and is the nurse of his age and the
  32            companion of his journey;--hope which is mightiest to sway
  33            the restless soul of man.
  34
  35        How admirable are his words!  And the great blessing of riches, I do
  36        not say to every man, but to a good man, is, that he has had no
  37        occasion to deceive or to defraud others, either intentionally or
  38        unintentionally; and when he departs to the world below he is not in
  39        any apprehension about offerings due to the gods or debts which he owes
  40        to men.  Now to this peace of mind the possession of wealth greatly
  41        contributes; and therefore I say, that, setting one thing against
  42        another, of the many advantages which wealth has to give, to a man of
  43        sense this is in my opinion the greatest.
  44
  45        Well said, Cephalus, I replied; but as concerning justice, what is
  46        it?--to speak the truth and to pay your debts--no more than this?  And
  47        even to this are there not exceptions?  Suppose that a friend when in
  48        his right mind has deposited arms with me and he asks for them when he
  49        is not in his right mind, ought I to give them back to him?  No one
  50        would say that I ought or that I should be right in doing so, any more
  51        than they would say that I ought always to speak the truth to one who
  52        is in his condition.
  53
  54        You are quite right, he replied.
  55
  56        But then, I said, speaking the truth and paying your debts is not a
  57        correct definition of justice.
  58
  59        CEPHALUS - SOCRATES - POLEMARCHUS
  60
  61        Quite correct, Socrates, if Simonides is to be believed, said
  62        Polemarchus interposing.
  63
  64        I fear, said Cephalus, that I must go now, for I have to look after the
  65        sacrifices, and I hand over the argument to Polemarchus and the company.
  66        EOF
  67        git add text.txt &&
  68        test_tick &&
  69        git commit -m "Initial revision" &&
  70
  71        git checkout -b remote &&
  72        sed -e "
  73                        s/\.  /\. /g
  74                        s/[?]  /? /g
  75                        s/    / /g
  76                        s/--/---/g
  77                        s/but as concerning/but as con cerning/
  78                        /CEPHALUS - SOCRATES - POLEMARCHUS/ d
  79                " text.txt >text.txt+ &&
  80        mv text.txt+ text.txt &&
  81        git commit -a -m "Remove cruft" &&
  82
  83        git checkout master &&
  84        sed -e "
  85                        s/\(not in his right mind\),\(.*\)/\1;\2Q/
  86                        s/Quite correct\(.*\)/It is too correct\1Q/
  87                        s/unintentionally/un intentionally/
  88                        /un intentionally/ s/$/Q/
  89                        s/Polemarchus interposing./Polemarchus, interposing.Q/
  90                        /justice and holiness/ s/$/Q/
  91                        /pay your debts/ s/$/Q/
  92                " text.txt | q_to_cr >text.txt+ &&
  93        mv text.txt+ text.txt &&
  94        git commit -a -m "Clarify" &&
  95        git show-branch --all
  96'
  97
  98test_expect_success 'naive merge fails' '
  99        git read-tree --reset -u HEAD &&
 100        test_must_fail git merge-recursive HEAD^ -- HEAD remote &&
 101        test_must_fail git update-index --refresh &&
 102        grep "<<<<<<" text.txt
 103'
 104
 105test_expect_success '--ignore-space-change makes merge succeed' '
 106        git read-tree --reset -u HEAD &&
 107        git merge-recursive --ignore-space-change HEAD^ -- HEAD remote
 108'
 109
 110test_expect_success '--ignore-space-change: our w/s-only change wins' '
 111        q_to_cr <<-\EOF >expected &&
 112            justice and holiness and is the nurse of his age and theQ
 113        EOF
 114
 115        git read-tree --reset -u HEAD &&
 116        git merge-recursive --ignore-space-change HEAD^ -- HEAD remote &&
 117        grep "justice and holiness" text.txt >actual &&
 118        test_cmp expected actual
 119'
 120
 121test_expect_success '--ignore-space-change: their real change wins over w/s' '
 122        cat <<-\EOF >expected &&
 123        it?---to speak the truth and to pay your debts---no more than this? And
 124        EOF
 125
 126        git read-tree --reset -u HEAD &&
 127        git merge-recursive --ignore-space-change HEAD^ -- HEAD remote &&
 128        grep "pay your debts" text.txt >actual &&
 129        test_cmp expected actual
 130'
 131
 132test_expect_success '--ignore-space-change: does not ignore new spaces' '
 133        cat <<-\EOF >expected1 &&
 134        Well said, Cephalus, I replied; but as con cerning justice, what is
 135        EOF
 136        q_to_cr <<-\EOF >expected2 &&
 137        un intentionally; and when he departs to the world below he is not inQ
 138        EOF
 139
 140        git read-tree --reset -u HEAD &&
 141        git merge-recursive --ignore-space-change HEAD^ -- HEAD remote &&
 142        grep "Well said" text.txt >actual1 &&
 143        grep "when he departs" text.txt >actual2 &&
 144        test_cmp expected1 actual1 &&
 145        test_cmp expected2 actual2
 146'
 147
 148test_expect_success '--ignore-all-space drops their new spaces' '
 149        cat <<-\EOF >expected &&
 150        Well said, Cephalus, I replied; but as concerning justice, what is
 151        EOF
 152
 153        git read-tree --reset -u HEAD &&
 154        git merge-recursive --ignore-all-space HEAD^ -- HEAD remote &&
 155        grep "Well said" text.txt >actual &&
 156        test_cmp expected actual
 157'
 158
 159test_expect_success '--ignore-all-space keeps our new spaces' '
 160        q_to_cr <<-\EOF >expected &&
 161        un intentionally; and when he departs to the world below he is not inQ
 162        EOF
 163
 164        git read-tree --reset -u HEAD &&
 165        git merge-recursive --ignore-all-space HEAD^ -- HEAD remote &&
 166        grep "when he departs" text.txt >actual &&
 167        test_cmp expected actual
 168'
 169
 170test_expect_success '--ignore-space-at-eol' '
 171        q_to_cr <<-\EOF >expected &&
 172        <<<<<<< HEAD
 173        is not in his right mind; ought I to give them back to him?  No oneQ
 174        =======
 175        is not in his right mind, ought I to give them back to him? No one
 176        >>>>>>> remote
 177        EOF
 178
 179        git read-tree --reset -u HEAD &&
 180        test_must_fail git merge-recursive --ignore-space-at-eol \
 181                                                 HEAD^ -- HEAD remote &&
 182        conflict_hunks text.txt >actual &&
 183        test_cmp expected actual
 184'
 185
 186test_done