t / t4038-diff-combined.shon commit Merge branch 'fc/completion' (f241c08)
   1#!/bin/sh
   2
   3test_description='combined diff'
   4
   5. ./test-lib.sh
   6. "$TEST_DIRECTORY"/diff-lib.sh
   7
   8setup_helper () {
   9        one=$1 branch=$2 side=$3 &&
  10
  11        git branch $side $branch &&
  12        for l in $one two three fyra
  13        do
  14                echo $l
  15        done >file &&
  16        git add file &&
  17        test_tick &&
  18        git commit -m $branch &&
  19        git checkout $side &&
  20        for l in $one two three quatro
  21        do
  22                echo $l
  23        done >file &&
  24        git add file &&
  25        test_tick &&
  26        git commit -m $side &&
  27        test_must_fail git merge $branch &&
  28        for l in $one three four
  29        do
  30                echo $l
  31        done >file &&
  32        git add file &&
  33        test_tick &&
  34        git commit -m "merge $branch into $side"
  35}
  36
  37verify_helper () {
  38        it=$1 &&
  39
  40        # Ignore lines that were removed only from the other parent
  41        sed -e '
  42                1,/^@@@/d
  43                /^ -/d
  44                s/^\(.\)./\1/
  45        ' "$it" >"$it.actual.1" &&
  46        sed -e '
  47                1,/^@@@/d
  48                /^- /d
  49                s/^.\(.\)/\1/
  50        ' "$it" >"$it.actual.2" &&
  51
  52        git diff "$it^" "$it" -- | sed -e '1,/^@@/d' >"$it.expect.1" &&
  53        test_cmp "$it.expect.1" "$it.actual.1" &&
  54
  55        git diff "$it^2" "$it" -- | sed -e '1,/^@@/d' >"$it.expect.2" &&
  56        test_cmp "$it.expect.2" "$it.actual.2"
  57}
  58
  59test_expect_success setup '
  60        >file &&
  61        git add file &&
  62        test_tick &&
  63        git commit -m initial &&
  64
  65        git branch withone &&
  66        git branch sansone &&
  67
  68        git checkout withone &&
  69        setup_helper one withone sidewithone &&
  70
  71        git checkout sansone &&
  72        setup_helper "" sansone sidesansone
  73'
  74
  75test_expect_success 'check combined output (1)' '
  76        git show sidewithone -- >sidewithone &&
  77        verify_helper sidewithone
  78'
  79
  80test_expect_success 'check combined output (2)' '
  81        git show sidesansone -- >sidesansone &&
  82        verify_helper sidesansone
  83'
  84
  85test_expect_success 'diagnose truncated file' '
  86        >file &&
  87        git add file &&
  88        git commit --amend -C HEAD &&
  89        git show >out &&
  90        grep "diff --cc file" out
  91'
  92
  93test_expect_success 'setup for --cc --raw' '
  94        blob=$(echo file | git hash-object --stdin -w) &&
  95        base_tree=$(echo "100644 blob $blob     file" | git mktree) &&
  96        trees= &&
  97        for i in `test_seq 1 40`
  98        do
  99                blob=$(echo file$i | git hash-object --stdin -w) &&
 100                trees="$trees$(echo "100644 blob $blob  file" | git mktree)$LF"
 101        done
 102'
 103
 104test_expect_success 'check --cc --raw with four trees' '
 105        four_trees=$(echo "$trees" | sed -e 4q) &&
 106        git diff --cc --raw $four_trees $base_tree >out &&
 107        # Check for four leading colons in the output:
 108        grep "^::::[^:]" out
 109'
 110
 111test_expect_success 'check --cc --raw with forty trees' '
 112        git diff --cc --raw $trees $base_tree >out &&
 113        # Check for forty leading colons in the output:
 114        grep "^::::::::::::::::::::::::::::::::::::::::[^:]" out
 115'
 116
 117test_expect_success 'setup combined ignore spaces' '
 118        git checkout master &&
 119        >test &&
 120        git add test &&
 121        git commit -m initial &&
 122
 123        tr -d Q <<-\EOF >test &&
 124        always coalesce
 125        eol space coalesce Q
 126        space  change coalesce
 127        all spa ces coalesce
 128        eol spaces Q
 129        space  change
 130        all spa ces
 131        EOF
 132        git commit -m "test space change" -a &&
 133
 134        git checkout -b side HEAD^ &&
 135        tr -d Q <<-\EOF >test &&
 136        always coalesce
 137        eol space coalesce
 138        space change coalesce
 139        all spaces coalesce
 140        eol spaces
 141        space change
 142        all spaces
 143        EOF
 144        git commit -m "test other space changes" -a &&
 145
 146        test_must_fail git merge master &&
 147        tr -d Q <<-\EOF >test &&
 148        eol spaces Q
 149        space  change
 150        all spa ces
 151        EOF
 152        git commit -m merged -a
 153'
 154
 155test_expect_success 'check combined output (no ignore space)' '
 156        git show >actual.tmp &&
 157        sed -e "1,/^@@@/d" < actual.tmp >actual &&
 158        tr -d Q <<-\EOF >expected &&
 159        --always coalesce
 160        - eol space coalesce
 161        - space change coalesce
 162        - all spaces coalesce
 163        - eol spaces
 164        - space change
 165        - all spaces
 166         -eol space coalesce Q
 167         -space  change coalesce
 168         -all spa ces coalesce
 169        + eol spaces Q
 170        + space  change
 171        + all spa ces
 172        EOF
 173        compare_diff_patch expected actual
 174'
 175
 176test_expect_success 'check combined output (ignore space at eol)' '
 177        git show --ignore-space-at-eol >actual.tmp &&
 178        sed -e "1,/^@@@/d" < actual.tmp >actual &&
 179        tr -d Q <<-\EOF >expected &&
 180        --always coalesce
 181        --eol space coalesce
 182        - space change coalesce
 183        - all spaces coalesce
 184         -space  change coalesce
 185         -all spa ces coalesce
 186          eol spaces Q
 187        - space change
 188        - all spaces
 189        + space  change
 190        + all spa ces
 191        EOF
 192        compare_diff_patch expected actual
 193'
 194
 195test_expect_success 'check combined output (ignore space change)' '
 196        git show -b >actual.tmp &&
 197        sed -e "1,/^@@@/d" < actual.tmp >actual &&
 198        tr -d Q <<-\EOF >expected &&
 199        --always coalesce
 200        --eol space coalesce
 201        --space change coalesce
 202        - all spaces coalesce
 203         -all spa ces coalesce
 204          eol spaces Q
 205          space  change
 206        - all spaces
 207        + all spa ces
 208        EOF
 209        compare_diff_patch expected actual
 210'
 211
 212test_expect_success 'check combined output (ignore all spaces)' '
 213        git show -w >actual.tmp &&
 214        sed -e "1,/^@@@/d" < actual.tmp >actual &&
 215        tr -d Q <<-\EOF >expected &&
 216        --always coalesce
 217        --eol space coalesce
 218        --space change coalesce
 219        --all spaces coalesce
 220          eol spaces Q
 221          space  change
 222          all spa ces
 223        EOF
 224        compare_diff_patch expected actual
 225'
 226
 227test_expect_success 'combine diff coalesce simple' '
 228        >test &&
 229        git add test &&
 230        git commit -m initial &&
 231        test_seq 4 >test &&
 232        git commit -a -m empty1 &&
 233        git branch side1 &&
 234        git checkout HEAD^ &&
 235        test_seq 5 >test &&
 236        git commit -a -m empty2 &&
 237        test_must_fail git merge side1 &&
 238        >test &&
 239        git commit -a -m merge &&
 240        git show >actual.tmp &&
 241        sed -e "1,/^@@@/d" < actual.tmp >actual &&
 242        tr -d Q <<-\EOF >expected &&
 243        --1
 244        --2
 245        --3
 246        --4
 247        - 5
 248        EOF
 249        compare_diff_patch expected actual
 250'
 251
 252test_expect_success 'combine diff coalesce tricky' '
 253        >test &&
 254        git add test &&
 255        git commit -m initial --allow-empty &&
 256        cat <<-\EOF >test &&
 257        3
 258        1
 259        2
 260        3
 261        4
 262        EOF
 263        git commit -a -m empty1 &&
 264        git branch -f side1 &&
 265        git checkout HEAD^ &&
 266        cat <<-\EOF >test &&
 267        1
 268        3
 269        5
 270        4
 271        EOF
 272        git commit -a -m empty2 &&
 273        git branch -f side2 &&
 274        test_must_fail git merge side1 &&
 275        >test &&
 276        git commit -a -m merge &&
 277        git show >actual.tmp &&
 278        sed -e "1,/^@@@/d" < actual.tmp >actual &&
 279        tr -d Q <<-\EOF >expected &&
 280         -3
 281        --1
 282         -2
 283        --3
 284        - 5
 285        --4
 286        EOF
 287        compare_diff_patch expected actual &&
 288        git checkout -f side1 &&
 289        test_must_fail git merge side2 &&
 290        >test &&
 291        git commit -a -m merge &&
 292        git show >actual.tmp &&
 293        sed -e "1,/^@@@/d" < actual.tmp >actual &&
 294        tr -d Q <<-\EOF >expected &&
 295        - 3
 296        --1
 297        - 2
 298        --3
 299         -5
 300        --4
 301        EOF
 302        compare_diff_patch expected actual
 303'
 304
 305test_expect_failure 'combine diff coalesce three parents' '
 306        >test &&
 307        git add test &&
 308        git commit -m initial --allow-empty &&
 309        cat <<-\EOF >test &&
 310        3
 311        1
 312        2
 313        3
 314        4
 315        EOF
 316        git commit -a -m empty1 &&
 317        git checkout -B side1 &&
 318        git checkout HEAD^ &&
 319        cat <<-\EOF >test &&
 320        1
 321        3
 322        7
 323        5
 324        4
 325        EOF
 326        git commit -a -m empty2 &&
 327        git branch -f side2 &&
 328        git checkout HEAD^ &&
 329        cat <<-\EOF >test &&
 330        3
 331        1
 332        6
 333        5
 334        4
 335        EOF
 336        git commit -a -m empty3 &&
 337        >test &&
 338        git add test &&
 339        TREE=$(git write-tree) &&
 340        COMMIT=$(git commit-tree -p HEAD -p side1 -p side2 -m merge $TREE) &&
 341        git show $COMMIT >actual.tmp &&
 342        sed -e "1,/^@@@/d" < actual.tmp >actual &&
 343        tr -d Q <<-\EOF >expected &&
 344        -- 3
 345        ---1
 346        -  6
 347         - 2
 348         --3
 349          -7
 350        - -5
 351        ---4
 352        EOF
 353        compare_diff_patch expected actual
 354'
 355
 356test_done