t / t6200-fmt-merge-msg.shon commit exclude: fix a bug in prefix compare optimization (a3ea4d7)
   1#!/bin/sh
   2#
   3# Copyright (c) 2006, Junio C Hamano
   4#
   5
   6test_description='fmt-merge-msg test'
   7
   8. ./test-lib.sh
   9
  10test_expect_success setup '
  11        echo one >one &&
  12        git add one &&
  13        test_tick &&
  14        git commit -m "Initial" &&
  15
  16        git clone . remote &&
  17
  18        echo uno >one &&
  19        echo dos >two &&
  20        git add two &&
  21        test_tick &&
  22        git commit -a -m "Second" &&
  23
  24        git checkout -b left &&
  25
  26        echo "c1" >one &&
  27        test_tick &&
  28        git commit -a -m "Common #1" &&
  29
  30        echo "c2" >one &&
  31        test_tick &&
  32        git commit -a -m "Common #2" &&
  33
  34        git branch right &&
  35
  36        echo "l3" >two &&
  37        test_tick &&
  38        GIT_COMMITTER_NAME="Another Committer" \
  39        GIT_AUTHOR_NAME="Another Author" git commit -a -m "Left #3" &&
  40
  41        echo "l4" >two &&
  42        test_tick &&
  43        GIT_COMMITTER_NAME="Another Committer" \
  44        GIT_AUTHOR_NAME="Another Author" git commit -a -m "Left #4" &&
  45
  46        echo "l5" >two &&
  47        test_tick &&
  48        GIT_COMMITTER_NAME="Another Committer" \
  49        GIT_AUTHOR_NAME="Another Author" git commit -a -m "Left #5" &&
  50        git tag tag-l5 &&
  51
  52        git checkout right &&
  53
  54        echo "r3" >three &&
  55        git add three &&
  56        test_tick &&
  57        git commit -a -m "Right #3" &&
  58        git tag tag-r3 &&
  59
  60        echo "r4" >three &&
  61        test_tick &&
  62        git commit -a -m "Right #4" &&
  63
  64        echo "r5" >three &&
  65        test_tick &&
  66        git commit -a -m "Right #5" &&
  67
  68        git checkout -b long &&
  69        i=0 &&
  70        while test $i -lt 30
  71        do
  72                test_commit $i one &&
  73                i=$(($i+1))
  74        done &&
  75
  76        git show-branch &&
  77
  78        apos="'\''"
  79'
  80
  81test_expect_success 'message for merging local branch' '
  82        echo "Merge branch ${apos}left${apos}" >expected &&
  83
  84        git checkout master &&
  85        git fetch . left &&
  86
  87        git fmt-merge-msg <.git/FETCH_HEAD >actual &&
  88        test_cmp expected actual
  89'
  90
  91test_expect_success 'message for merging external branch' '
  92        echo "Merge branch ${apos}left${apos} of $(pwd)" >expected &&
  93
  94        git checkout master &&
  95        git fetch "$(pwd)" left &&
  96
  97        git fmt-merge-msg <.git/FETCH_HEAD >actual &&
  98        test_cmp expected actual
  99'
 100
 101test_expect_success '[merge] summary/log configuration' '
 102        cat >expected <<-EOF &&
 103        Merge branch ${apos}left${apos}
 104
 105        # By Another Author (3) and A U Thor (2)
 106        # Via Another Committer
 107        * left:
 108          Left #5
 109          Left #4
 110          Left #3
 111          Common #2
 112          Common #1
 113        EOF
 114
 115        git config merge.log true &&
 116        test_might_fail git config --unset-all merge.summary &&
 117
 118        git checkout master &&
 119        test_tick &&
 120        git fetch . left &&
 121
 122        git fmt-merge-msg <.git/FETCH_HEAD >actual1 &&
 123
 124        test_might_fail git config --unset-all merge.log &&
 125        git config merge.summary true &&
 126
 127        git checkout master &&
 128        test_tick &&
 129        git fetch . left &&
 130
 131        git fmt-merge-msg <.git/FETCH_HEAD >actual2 &&
 132
 133        test_cmp expected actual1 &&
 134        test_cmp expected actual2
 135'
 136
 137test_expect_success 'setup: clear [merge] configuration' '
 138        test_might_fail git config --unset-all merge.log &&
 139        test_might_fail git config --unset-all merge.summary
 140'
 141
 142test_expect_success 'setup FETCH_HEAD' '
 143        git checkout master &&
 144        test_tick &&
 145        git fetch . left
 146'
 147
 148test_expect_success 'merge.log=3 limits shortlog length' '
 149        cat >expected <<-EOF &&
 150        Merge branch ${apos}left${apos}
 151
 152        # By Another Author (3) and A U Thor (2)
 153        # Via Another Committer
 154        * left: (5 commits)
 155          Left #5
 156          Left #4
 157          Left #3
 158          ...
 159        EOF
 160
 161        git -c merge.log=3 fmt-merge-msg <.git/FETCH_HEAD >actual &&
 162        test_cmp expected actual
 163'
 164
 165test_expect_success 'merge.log=5 shows all 5 commits' '
 166        cat >expected <<-EOF &&
 167        Merge branch ${apos}left${apos}
 168
 169        # By Another Author (3) and A U Thor (2)
 170        # Via Another Committer
 171        * left:
 172          Left #5
 173          Left #4
 174          Left #3
 175          Common #2
 176          Common #1
 177        EOF
 178
 179        git -c merge.log=5 fmt-merge-msg <.git/FETCH_HEAD >actual &&
 180        test_cmp expected actual
 181'
 182
 183test_expect_success 'merge.log=0 disables shortlog' '
 184        echo "Merge branch ${apos}left${apos}" >expected
 185        git -c merge.log=0 fmt-merge-msg <.git/FETCH_HEAD >actual &&
 186        test_cmp expected actual
 187'
 188
 189test_expect_success '--log=3 limits shortlog length' '
 190        cat >expected <<-EOF &&
 191        Merge branch ${apos}left${apos}
 192
 193        # By Another Author (3) and A U Thor (2)
 194        # Via Another Committer
 195        * left: (5 commits)
 196          Left #5
 197          Left #4
 198          Left #3
 199          ...
 200        EOF
 201
 202        git fmt-merge-msg --log=3 <.git/FETCH_HEAD >actual &&
 203        test_cmp expected actual
 204'
 205
 206test_expect_success '--log=5 shows all 5 commits' '
 207        cat >expected <<-EOF &&
 208        Merge branch ${apos}left${apos}
 209
 210        # By Another Author (3) and A U Thor (2)
 211        # Via Another Committer
 212        * left:
 213          Left #5
 214          Left #4
 215          Left #3
 216          Common #2
 217          Common #1
 218        EOF
 219
 220        git fmt-merge-msg --log=5 <.git/FETCH_HEAD >actual &&
 221        test_cmp expected actual
 222'
 223
 224test_expect_success '--no-log disables shortlog' '
 225        echo "Merge branch ${apos}left${apos}" >expected &&
 226        git fmt-merge-msg --no-log <.git/FETCH_HEAD >actual &&
 227        test_cmp expected actual
 228'
 229
 230test_expect_success '--log=0 disables shortlog' '
 231        echo "Merge branch ${apos}left${apos}" >expected &&
 232        git fmt-merge-msg --no-log <.git/FETCH_HEAD >actual &&
 233        test_cmp expected actual
 234'
 235
 236test_expect_success 'fmt-merge-msg -m' '
 237        echo "Sync with left" >expected &&
 238        cat >expected.log <<-EOF &&
 239        Sync with left
 240
 241        # By Another Author (3) and A U Thor (2)
 242        # Via Another Committer
 243        * ${apos}left${apos} of $(pwd):
 244          Left #5
 245          Left #4
 246          Left #3
 247          Common #2
 248          Common #1
 249        EOF
 250
 251        test_might_fail git config --unset merge.log &&
 252        test_might_fail git config --unset merge.summary &&
 253        git checkout master &&
 254        git fetch "$(pwd)" left &&
 255        git fmt-merge-msg -m "Sync with left" <.git/FETCH_HEAD >actual &&
 256        git fmt-merge-msg --log -m "Sync with left" \
 257                                        <.git/FETCH_HEAD >actual.log &&
 258        git config merge.log true &&
 259        git fmt-merge-msg -m "Sync with left" \
 260                                        <.git/FETCH_HEAD >actual.log-config &&
 261        git fmt-merge-msg --no-log -m "Sync with left" \
 262                                        <.git/FETCH_HEAD >actual.nolog &&
 263
 264        test_cmp expected actual &&
 265        test_cmp expected.log actual.log &&
 266        test_cmp expected.log actual.log-config &&
 267        test_cmp expected actual.nolog
 268'
 269
 270test_expect_success 'setup: expected shortlog for two branches' '
 271        cat >expected <<-EOF
 272        Merge branches ${apos}left${apos} and ${apos}right${apos}
 273
 274        # By Another Author (3) and A U Thor (2)
 275        # Via Another Committer
 276        * left:
 277          Left #5
 278          Left #4
 279          Left #3
 280          Common #2
 281          Common #1
 282
 283        * right:
 284          Right #5
 285          Right #4
 286          Right #3
 287          Common #2
 288          Common #1
 289        EOF
 290'
 291
 292test_expect_success 'shortlog for two branches' '
 293        git config merge.log true &&
 294        test_might_fail git config --unset-all merge.summary &&
 295        git checkout master &&
 296        test_tick &&
 297        git fetch . left right &&
 298        git fmt-merge-msg <.git/FETCH_HEAD >actual1 &&
 299
 300        test_might_fail git config --unset-all merge.log &&
 301        git config merge.summary true &&
 302        git checkout master &&
 303        test_tick &&
 304        git fetch . left right &&
 305        git fmt-merge-msg <.git/FETCH_HEAD >actual2 &&
 306
 307        git config merge.log yes &&
 308        test_might_fail git config --unset-all merge.summary &&
 309        git checkout master &&
 310        test_tick &&
 311        git fetch . left right &&
 312        git fmt-merge-msg <.git/FETCH_HEAD >actual3 &&
 313
 314        test_might_fail git config --unset-all merge.log &&
 315        git config merge.summary yes &&
 316        git checkout master &&
 317        test_tick &&
 318        git fetch . left right &&
 319        git fmt-merge-msg <.git/FETCH_HEAD >actual4 &&
 320
 321        test_cmp expected actual1 &&
 322        test_cmp expected actual2 &&
 323        test_cmp expected actual3 &&
 324        test_cmp expected actual4
 325'
 326
 327test_expect_success 'merge-msg -F' '
 328        test_might_fail git config --unset-all merge.log &&
 329        git config merge.summary yes &&
 330        git checkout master &&
 331        test_tick &&
 332        git fetch . left right &&
 333        git fmt-merge-msg -F .git/FETCH_HEAD >actual &&
 334        test_cmp expected actual
 335'
 336
 337test_expect_success 'merge-msg -F in subdirectory' '
 338        test_might_fail git config --unset-all merge.log &&
 339        git config merge.summary yes &&
 340        git checkout master &&
 341        test_tick &&
 342        git fetch . left right &&
 343        mkdir sub &&
 344        cp .git/FETCH_HEAD sub/FETCH_HEAD &&
 345        (
 346                cd sub &&
 347                git fmt-merge-msg -F FETCH_HEAD >../actual
 348        ) &&
 349        test_cmp expected actual
 350'
 351
 352test_expect_success 'merge-msg with nothing to merge' '
 353        test_might_fail git config --unset-all merge.log &&
 354        git config merge.summary yes &&
 355
 356        >empty &&
 357
 358        (
 359                cd remote &&
 360                git checkout -b unrelated &&
 361                test_tick &&
 362                git fetch origin &&
 363                git fmt-merge-msg <.git/FETCH_HEAD >../actual
 364        ) &&
 365
 366        test_cmp empty actual
 367'
 368
 369test_expect_success 'merge-msg tag' '
 370        cat >expected <<-EOF &&
 371        Merge tag ${apos}tag-r3${apos}
 372
 373        * tag ${apos}tag-r3${apos}:
 374          Right #3
 375          Common #2
 376          Common #1
 377        EOF
 378
 379        test_might_fail git config --unset-all merge.log &&
 380        git config merge.summary yes &&
 381
 382        git checkout master &&
 383        test_tick &&
 384        git fetch . tag tag-r3 &&
 385
 386        git fmt-merge-msg <.git/FETCH_HEAD >actual &&
 387        test_cmp expected actual
 388'
 389
 390test_expect_success 'merge-msg two tags' '
 391        cat >expected <<-EOF &&
 392        Merge tags ${apos}tag-r3${apos} and ${apos}tag-l5${apos}
 393
 394        * tag ${apos}tag-r3${apos}:
 395          Right #3
 396          Common #2
 397          Common #1
 398
 399        # By Another Author (3) and A U Thor (2)
 400        # Via Another Committer
 401        * tag ${apos}tag-l5${apos}:
 402          Left #5
 403          Left #4
 404          Left #3
 405          Common #2
 406          Common #1
 407        EOF
 408
 409        test_might_fail git config --unset-all merge.log &&
 410        git config merge.summary yes &&
 411
 412        git checkout master &&
 413        test_tick &&
 414        git fetch . tag tag-r3 tag tag-l5 &&
 415
 416        git fmt-merge-msg <.git/FETCH_HEAD >actual &&
 417        test_cmp expected actual
 418'
 419
 420test_expect_success 'merge-msg tag and branch' '
 421        cat >expected <<-EOF &&
 422        Merge branch ${apos}left${apos}, tag ${apos}tag-r3${apos}
 423
 424        * tag ${apos}tag-r3${apos}:
 425          Right #3
 426          Common #2
 427          Common #1
 428
 429        # By Another Author (3) and A U Thor (2)
 430        # Via Another Committer
 431        * left:
 432          Left #5
 433          Left #4
 434          Left #3
 435          Common #2
 436          Common #1
 437        EOF
 438
 439        test_might_fail git config --unset-all merge.log &&
 440        git config merge.summary yes &&
 441
 442        git checkout master &&
 443        test_tick &&
 444        git fetch . tag tag-r3 left &&
 445
 446        git fmt-merge-msg <.git/FETCH_HEAD >actual &&
 447        test_cmp expected actual
 448'
 449
 450test_expect_success 'merge-msg lots of commits' '
 451        {
 452                cat <<-EOF &&
 453                Merge branch ${apos}long${apos}
 454
 455                * long: (35 commits)
 456                EOF
 457
 458                i=29 &&
 459                while test $i -gt 9
 460                do
 461                        echo "  $i" &&
 462                        i=$(($i-1))
 463                done &&
 464                echo "  ..."
 465        } >expected &&
 466
 467        git checkout master &&
 468        test_tick &&
 469        git fetch . long &&
 470
 471        git fmt-merge-msg <.git/FETCH_HEAD >actual &&
 472        test_cmp expected actual
 473'
 474
 475test_done