t / t4202-log.shon commit bash completion: Support "divergence from upstream" messages in __git_ps1 (6d158cb)
   1#!/bin/sh
   2
   3test_description='git log'
   4
   5. ./test-lib.sh
   6
   7test_expect_success setup '
   8
   9        echo one >one &&
  10        git add one &&
  11        test_tick &&
  12        git commit -m initial &&
  13
  14        echo ichi >one &&
  15        git add one &&
  16        test_tick &&
  17        git commit -m second &&
  18
  19        git mv one ichi &&
  20        test_tick &&
  21        git commit -m third &&
  22
  23        cp ichi ein &&
  24        git add ein &&
  25        test_tick &&
  26        git commit -m fourth &&
  27
  28        mkdir a &&
  29        echo ni >a/two &&
  30        git add a/two &&
  31        test_tick &&
  32        git commit -m fifth  &&
  33
  34        git rm a/two &&
  35        test_tick &&
  36        git commit -m sixth
  37
  38'
  39
  40printf "sixth\nfifth\nfourth\nthird\nsecond\ninitial" > expect
  41test_expect_success 'pretty' '
  42
  43        git log --pretty="format:%s" > actual &&
  44        test_cmp expect actual
  45'
  46
  47printf "sixth\nfifth\nfourth\nthird\nsecond\ninitial\n" > expect
  48test_expect_success 'pretty (tformat)' '
  49
  50        git log --pretty="tformat:%s" > actual &&
  51        test_cmp expect actual
  52'
  53
  54test_expect_success 'pretty (shortcut)' '
  55
  56        git log --pretty="%s" > actual &&
  57        test_cmp expect actual
  58'
  59
  60test_expect_success 'format' '
  61
  62        git log --format="%s" > actual &&
  63        test_cmp expect actual
  64'
  65
  66cat > expect << EOF
  67 This is
  68  the sixth
  69  commit.
  70 This is
  71  the fifth
  72  commit.
  73EOF
  74
  75test_expect_success 'format %w(12,1,2)' '
  76
  77        git log -2 --format="%w(12,1,2)This is the %s commit." > actual &&
  78        test_cmp expect actual
  79'
  80
  81test_expect_success 'format %w(,1,2)' '
  82
  83        git log -2 --format="%w(,1,2)This is%nthe %s%ncommit." > actual &&
  84        test_cmp expect actual
  85'
  86
  87cat > expect << EOF
  88804a787 sixth
  89394ef78 fifth
  905d31159 fourth
  912fbe8c0 third
  92f7dab8e second
  933a2fdcb initial
  94EOF
  95test_expect_success 'oneline' '
  96
  97        git log --oneline > actual &&
  98        test_cmp expect actual
  99'
 100
 101test_expect_success 'diff-filter=A' '
 102
 103        actual=$(git log --pretty="format:%s" --diff-filter=A HEAD) &&
 104        expect=$(echo fifth ; echo fourth ; echo third ; echo initial) &&
 105        test "$actual" = "$expect" || {
 106                echo Oops
 107                echo "Actual: $actual"
 108                false
 109        }
 110
 111'
 112
 113test_expect_success 'diff-filter=M' '
 114
 115        actual=$(git log --pretty="format:%s" --diff-filter=M HEAD) &&
 116        expect=$(echo second) &&
 117        test "$actual" = "$expect" || {
 118                echo Oops
 119                echo "Actual: $actual"
 120                false
 121        }
 122
 123'
 124
 125test_expect_success 'diff-filter=D' '
 126
 127        actual=$(git log --pretty="format:%s" --diff-filter=D HEAD) &&
 128        expect=$(echo sixth ; echo third) &&
 129        test "$actual" = "$expect" || {
 130                echo Oops
 131                echo "Actual: $actual"
 132                false
 133        }
 134
 135'
 136
 137test_expect_success 'diff-filter=R' '
 138
 139        actual=$(git log -M --pretty="format:%s" --diff-filter=R HEAD) &&
 140        expect=$(echo third) &&
 141        test "$actual" = "$expect" || {
 142                echo Oops
 143                echo "Actual: $actual"
 144                false
 145        }
 146
 147'
 148
 149test_expect_success 'diff-filter=C' '
 150
 151        actual=$(git log -C -C --pretty="format:%s" --diff-filter=C HEAD) &&
 152        expect=$(echo fourth) &&
 153        test "$actual" = "$expect" || {
 154                echo Oops
 155                echo "Actual: $actual"
 156                false
 157        }
 158
 159'
 160
 161test_expect_success 'git log --follow' '
 162
 163        actual=$(git log --follow --pretty="format:%s" ichi) &&
 164        expect=$(echo third ; echo second ; echo initial) &&
 165        test "$actual" = "$expect" || {
 166                echo Oops
 167                echo "Actual: $actual"
 168                false
 169        }
 170
 171'
 172
 173cat > expect << EOF
 174804a787 sixth
 175394ef78 fifth
 1765d31159 fourth
 177EOF
 178test_expect_success 'git log --no-walk <commits> sorts by commit time' '
 179        git log --no-walk --oneline 5d31159 804a787 394ef78 > actual &&
 180        test_cmp expect actual
 181'
 182
 183cat > expect << EOF
 1845d31159 fourth
 185804a787 sixth
 186394ef78 fifth
 187EOF
 188test_expect_success 'git show <commits> leaves list of commits as given' '
 189        git show --oneline -s 5d31159 804a787 394ef78 > actual &&
 190        test_cmp expect actual
 191'
 192
 193test_expect_success 'setup case sensitivity tests' '
 194        echo case >one &&
 195        test_tick &&
 196        git add one
 197        git commit -a -m Second
 198'
 199
 200test_expect_success 'log --grep' '
 201        echo second >expect &&
 202        git log -1 --pretty="tformat:%s" --grep=sec >actual &&
 203        test_cmp expect actual
 204'
 205
 206test_expect_success 'log -i --grep' '
 207        echo Second >expect &&
 208        git log -1 --pretty="tformat:%s" -i --grep=sec >actual &&
 209        test_cmp expect actual
 210'
 211
 212test_expect_success 'log --grep -i' '
 213        echo Second >expect &&
 214        git log -1 --pretty="tformat:%s" --grep=sec -i >actual &&
 215        test_cmp expect actual
 216'
 217
 218cat > expect <<EOF
 219* Second
 220* sixth
 221* fifth
 222* fourth
 223* third
 224* second
 225* initial
 226EOF
 227
 228test_expect_success 'simple log --graph' '
 229        git log --graph --pretty=tformat:%s >actual &&
 230        test_cmp expect actual
 231'
 232
 233test_expect_success 'set up merge history' '
 234        git checkout -b side HEAD~4 &&
 235        test_commit side-1 1 1 &&
 236        test_commit side-2 2 2 &&
 237        git checkout master &&
 238        git merge side
 239'
 240
 241cat > expect <<\EOF
 242*   Merge branch 'side'
 243|\
 244| * side-2
 245| * side-1
 246* | Second
 247* | sixth
 248* | fifth
 249* | fourth
 250|/
 251* third
 252* second
 253* initial
 254EOF
 255
 256test_expect_success 'log --graph with merge' '
 257        git log --graph --date-order --pretty=tformat:%s |
 258                sed "s/ *\$//" >actual &&
 259        test_cmp expect actual
 260'
 261
 262cat > expect <<\EOF
 263*   commit master
 264|\  Merge: A B
 265| | Author: A U Thor <author@example.com>
 266| |
 267| |     Merge branch 'side'
 268| |
 269| * commit side
 270| | Author: A U Thor <author@example.com>
 271| |
 272| |     side-2
 273| |
 274| * commit tags/side-1
 275| | Author: A U Thor <author@example.com>
 276| |
 277| |     side-1
 278| |
 279* | commit master~1
 280| | Author: A U Thor <author@example.com>
 281| |
 282| |     Second
 283| |
 284* | commit master~2
 285| | Author: A U Thor <author@example.com>
 286| |
 287| |     sixth
 288| |
 289* | commit master~3
 290| | Author: A U Thor <author@example.com>
 291| |
 292| |     fifth
 293| |
 294* | commit master~4
 295|/  Author: A U Thor <author@example.com>
 296|
 297|       fourth
 298|
 299* commit tags/side-1~1
 300| Author: A U Thor <author@example.com>
 301|
 302|     third
 303|
 304* commit tags/side-1~2
 305| Author: A U Thor <author@example.com>
 306|
 307|     second
 308|
 309* commit tags/side-1~3
 310  Author: A U Thor <author@example.com>
 311
 312      initial
 313EOF
 314
 315test_expect_success 'log --graph with full output' '
 316        git log --graph --date-order --pretty=short |
 317                git name-rev --name-only --stdin |
 318                sed "s/Merge:.*/Merge: A B/;s/ *\$//" >actual &&
 319        test_cmp expect actual
 320'
 321
 322test_expect_success 'set up more tangled history' '
 323        git checkout -b tangle HEAD~6 &&
 324        test_commit tangle-a tangle-a a &&
 325        git merge master~3 &&
 326        git merge side~1 &&
 327        git checkout master &&
 328        git merge tangle &&
 329        git checkout -b reach &&
 330        test_commit reach &&
 331        git checkout master &&
 332        git checkout -b octopus-a &&
 333        test_commit octopus-a &&
 334        git checkout master &&
 335        git checkout -b octopus-b &&
 336        test_commit octopus-b &&
 337        git checkout master &&
 338        test_commit seventh &&
 339        git merge octopus-a octopus-b
 340        git merge reach
 341'
 342
 343cat > expect <<\EOF
 344*   Merge commit 'reach'
 345|\
 346| \
 347|  \
 348*-. \   Merge commit 'octopus-a'; commit 'octopus-b'
 349|\ \ \
 350* | | | seventh
 351| | * | octopus-b
 352| |/ /
 353|/| |
 354| * | octopus-a
 355|/ /
 356| * reach
 357|/
 358*   Merge branch 'tangle'
 359|\
 360| *   Merge branch 'side' (early part) into tangle
 361| |\
 362| * \   Merge branch 'master' (early part) into tangle
 363| |\ \
 364| * | | tangle-a
 365* | | |   Merge branch 'side'
 366|\ \ \ \
 367| * | | | side-2
 368| | |_|/
 369| |/| |
 370| * | | side-1
 371* | | | Second
 372* | | | sixth
 373| |_|/
 374|/| |
 375* | | fifth
 376* | | fourth
 377|/ /
 378* | third
 379|/
 380* second
 381* initial
 382EOF
 383
 384test_expect_success 'log --graph with merge' '
 385        git log --graph --date-order --pretty=tformat:%s |
 386                sed "s/ *\$//" >actual &&
 387        test_cmp expect actual
 388'
 389
 390test_expect_success 'log.decorate configuration' '
 391        git config --unset-all log.decorate || :
 392
 393        git log --oneline >expect.none &&
 394        git log --oneline --decorate >expect.short &&
 395        git log --oneline --decorate=full >expect.full &&
 396
 397        echo "[log] decorate" >>.git/config &&
 398        git log --oneline >actual &&
 399        test_cmp expect.short actual &&
 400
 401        git config --unset-all log.decorate &&
 402        git config log.decorate true &&
 403        git log --oneline >actual &&
 404        test_cmp expect.short actual &&
 405        git log --oneline --decorate=full >actual &&
 406        test_cmp expect.full actual &&
 407        git log --oneline --decorate=no >actual &&
 408        test_cmp expect.none actual &&
 409
 410        git config --unset-all log.decorate &&
 411        git config log.decorate no &&
 412        git log --oneline >actual &&
 413        test_cmp expect.none actual &&
 414        git log --oneline --decorate >actual &&
 415        test_cmp expect.short actual &&
 416        git log --oneline --decorate=full >actual &&
 417        test_cmp expect.full actual &&
 418
 419        git config --unset-all log.decorate &&
 420        git config log.decorate short &&
 421        git log --oneline >actual &&
 422        test_cmp expect.short actual &&
 423        git log --oneline --no-decorate >actual &&
 424        test_cmp expect.none actual &&
 425        git log --oneline --decorate=full >actual &&
 426        test_cmp expect.full actual &&
 427
 428        git config --unset-all log.decorate &&
 429        git config log.decorate full &&
 430        git log --oneline >actual &&
 431        test_cmp expect.full actual &&
 432        git log --oneline --no-decorate >actual &&
 433        test_cmp expect.none actual &&
 434        git log --oneline --decorate >actual &&
 435        test_cmp expect.short actual
 436
 437'
 438
 439test_done
 440