t / t7512-status-help.shon commit diff: do not reuse_worktree_file for submodules (aba4727)
   1#!/bin/sh
   2#
   3# Copyright (c) 2012 Valentin Duperray, Lucien Kong, Franck Jonas,
   4#                    Thomas Nguy, Khoi Nguyen
   5#                    Grenoble INP Ensimag
   6#
   7
   8test_description='git status advice'
   9
  10. ./test-lib.sh
  11
  12. "$TEST_DIRECTORY"/lib-rebase.sh
  13
  14set_fake_editor
  15
  16test_expect_success 'prepare for conflicts' '
  17        git config --global advice.statusuoption false &&
  18        test_commit init main.txt init &&
  19        git branch conflicts &&
  20        test_commit on_master main.txt on_master &&
  21        git checkout conflicts &&
  22        test_commit on_conflicts main.txt on_conflicts
  23'
  24
  25
  26test_expect_success 'status when conflicts unresolved' '
  27        test_must_fail git merge master &&
  28        cat >expected <<-\EOF &&
  29        # On branch conflicts
  30        # You have unmerged paths.
  31        #   (fix conflicts and run "git commit")
  32        #
  33        # Unmerged paths:
  34        #   (use "git add <file>..." to mark resolution)
  35        #
  36        #       both modified:      main.txt
  37        #
  38        no changes added to commit (use "git add" and/or "git commit -a")
  39        EOF
  40        git status --untracked-files=no >actual &&
  41        test_i18ncmp expected actual
  42'
  43
  44
  45test_expect_success 'status when conflicts resolved before commit' '
  46        git reset --hard conflicts &&
  47        test_must_fail git merge master &&
  48        echo one >main.txt &&
  49        git add main.txt &&
  50        cat >expected <<-\EOF &&
  51        # On branch conflicts
  52        # All conflicts fixed but you are still merging.
  53        #   (use "git commit" to conclude merge)
  54        #
  55        # Changes to be committed:
  56        #
  57        #       modified:   main.txt
  58        #
  59        # Untracked files not listed (use -u option to show untracked files)
  60        EOF
  61        git status --untracked-files=no >actual &&
  62        test_i18ncmp expected actual
  63'
  64
  65
  66test_expect_success 'prepare for rebase conflicts' '
  67        git reset --hard master &&
  68        git checkout -b rebase_conflicts &&
  69        test_commit one_rebase main.txt one &&
  70        test_commit two_rebase main.txt two &&
  71        test_commit three_rebase main.txt three
  72'
  73
  74
  75test_expect_success 'status when rebase in progress before resolving conflicts' '
  76        test_when_finished "git rebase --abort" &&
  77        ONTO=$(git rev-parse --short HEAD^^) &&
  78        test_must_fail git rebase HEAD^ --onto HEAD^^ &&
  79        cat >expected <<-EOF &&
  80        # rebase in progress; onto $ONTO
  81        # You are currently rebasing branch '\''rebase_conflicts'\'' on '\''$ONTO'\''.
  82        #   (fix conflicts and then run "git rebase --continue")
  83        #   (use "git rebase --skip" to skip this patch)
  84        #   (use "git rebase --abort" to check out the original branch)
  85        #
  86        # Unmerged paths:
  87        #   (use "git reset HEAD <file>..." to unstage)
  88        #   (use "git add <file>..." to mark resolution)
  89        #
  90        #       both modified:      main.txt
  91        #
  92        no changes added to commit (use "git add" and/or "git commit -a")
  93        EOF
  94        git status --untracked-files=no >actual &&
  95        test_i18ncmp expected actual
  96'
  97
  98
  99test_expect_success 'status when rebase in progress before rebase --continue' '
 100        git reset --hard rebase_conflicts &&
 101        test_when_finished "git rebase --abort" &&
 102        ONTO=$(git rev-parse --short HEAD^^) &&
 103        test_must_fail git rebase HEAD^ --onto HEAD^^ &&
 104        echo three >main.txt &&
 105        git add main.txt &&
 106        cat >expected <<-EOF &&
 107        # rebase in progress; onto $ONTO
 108        # You are currently rebasing branch '\''rebase_conflicts'\'' on '\''$ONTO'\''.
 109        #   (all conflicts fixed: run "git rebase --continue")
 110        #
 111        # Changes to be committed:
 112        #   (use "git reset HEAD <file>..." to unstage)
 113        #
 114        #       modified:   main.txt
 115        #
 116        # Untracked files not listed (use -u option to show untracked files)
 117        EOF
 118        git status --untracked-files=no >actual &&
 119        test_i18ncmp expected actual
 120'
 121
 122
 123test_expect_success 'prepare for rebase_i_conflicts' '
 124        git reset --hard master &&
 125        git checkout -b rebase_i_conflicts &&
 126        test_commit one_unmerge main.txt one_unmerge &&
 127        git branch rebase_i_conflicts_second &&
 128        test_commit one_master main.txt one_master &&
 129        git checkout rebase_i_conflicts_second &&
 130        test_commit one_second main.txt one_second
 131'
 132
 133
 134test_expect_success 'status during rebase -i when conflicts unresolved' '
 135        test_when_finished "git rebase --abort" &&
 136        ONTO=$(git rev-parse --short rebase_i_conflicts) &&
 137        test_must_fail git rebase -i rebase_i_conflicts &&
 138        cat >expected <<-EOF &&
 139        # rebase in progress; onto $ONTO
 140        # You are currently rebasing branch '\''rebase_i_conflicts_second'\'' on '\''$ONTO'\''.
 141        #   (fix conflicts and then run "git rebase --continue")
 142        #   (use "git rebase --skip" to skip this patch)
 143        #   (use "git rebase --abort" to check out the original branch)
 144        #
 145        # Unmerged paths:
 146        #   (use "git reset HEAD <file>..." to unstage)
 147        #   (use "git add <file>..." to mark resolution)
 148        #
 149        #       both modified:      main.txt
 150        #
 151        no changes added to commit (use "git add" and/or "git commit -a")
 152        EOF
 153        git status --untracked-files=no >actual &&
 154        test_i18ncmp expected actual
 155'
 156
 157
 158test_expect_success 'status during rebase -i after resolving conflicts' '
 159        git reset --hard rebase_i_conflicts_second &&
 160        test_when_finished "git rebase --abort" &&
 161        ONTO=$(git rev-parse --short rebase_i_conflicts) &&
 162        test_must_fail git rebase -i rebase_i_conflicts &&
 163        git add main.txt &&
 164        cat >expected <<-EOF &&
 165        # rebase in progress; onto $ONTO
 166        # You are currently rebasing branch '\''rebase_i_conflicts_second'\'' on '\''$ONTO'\''.
 167        #   (all conflicts fixed: run "git rebase --continue")
 168        #
 169        # Changes to be committed:
 170        #   (use "git reset HEAD <file>..." to unstage)
 171        #
 172        #       modified:   main.txt
 173        #
 174        # Untracked files not listed (use -u option to show untracked files)
 175        EOF
 176        git status --untracked-files=no >actual &&
 177        test_i18ncmp expected actual
 178'
 179
 180
 181test_expect_success 'status when rebasing -i in edit mode' '
 182        git reset --hard master &&
 183        git checkout -b rebase_i_edit &&
 184        test_commit one_rebase_i main.txt one &&
 185        test_commit two_rebase_i main.txt two &&
 186        test_commit three_rebase_i main.txt three &&
 187        FAKE_LINES="1 edit 2" &&
 188        export FAKE_LINES &&
 189        test_when_finished "git rebase --abort" &&
 190        ONTO=$(git rev-parse --short HEAD~2) &&
 191        git rebase -i HEAD~2 &&
 192        cat >expected <<-EOF &&
 193        # rebase in progress; onto $ONTO
 194        # You are currently editing a commit while rebasing branch '\''rebase_i_edit'\'' on '\''$ONTO'\''.
 195        #   (use "git commit --amend" to amend the current commit)
 196        #   (use "git rebase --continue" once you are satisfied with your changes)
 197        #
 198        nothing to commit (use -u to show untracked files)
 199        EOF
 200        git status --untracked-files=no >actual &&
 201        test_i18ncmp expected actual
 202'
 203
 204
 205test_expect_success 'status when splitting a commit' '
 206        git reset --hard master &&
 207        git checkout -b split_commit &&
 208        test_commit one_split main.txt one &&
 209        test_commit two_split main.txt two &&
 210        test_commit three_split main.txt three &&
 211        test_commit four_split main.txt four &&
 212        FAKE_LINES="1 edit 2 3" &&
 213        export FAKE_LINES &&
 214        test_when_finished "git rebase --abort" &&
 215        ONTO=$(git rev-parse --short HEAD~3) &&
 216        git rebase -i HEAD~3 &&
 217        git reset HEAD^ &&
 218        cat >expected <<-EOF &&
 219        # rebase in progress; onto $ONTO
 220        # You are currently splitting a commit while rebasing branch '\''split_commit'\'' on '\''$ONTO'\''.
 221        #   (Once your working directory is clean, run "git rebase --continue")
 222        #
 223        # Changes not staged for commit:
 224        #   (use "git add <file>..." to update what will be committed)
 225        #   (use "git checkout -- <file>..." to discard changes in working directory)
 226        #
 227        #       modified:   main.txt
 228        #
 229        no changes added to commit (use "git add" and/or "git commit -a")
 230        EOF
 231        git status --untracked-files=no >actual &&
 232        test_i18ncmp expected actual
 233'
 234
 235
 236test_expect_success 'status after editing the last commit with --amend during a rebase -i' '
 237        git reset --hard master &&
 238        git checkout -b amend_last &&
 239        test_commit one_amend main.txt one &&
 240        test_commit two_amend main.txt two &&
 241        test_commit three_amend main.txt three &&
 242        test_commit four_amend main.txt four &&
 243        FAKE_LINES="1 2 edit 3" &&
 244        export FAKE_LINES &&
 245        test_when_finished "git rebase --abort" &&
 246        ONTO=$(git rev-parse --short HEAD~3) &&
 247        git rebase -i HEAD~3 &&
 248        git commit --amend -m "foo" &&
 249        cat >expected <<-EOF &&
 250        # rebase in progress; onto $ONTO
 251        # You are currently editing a commit while rebasing branch '\''amend_last'\'' on '\''$ONTO'\''.
 252        #   (use "git commit --amend" to amend the current commit)
 253        #   (use "git rebase --continue" once you are satisfied with your changes)
 254        #
 255        nothing to commit (use -u to show untracked files)
 256        EOF
 257        git status --untracked-files=no >actual &&
 258        test_i18ncmp expected actual
 259'
 260
 261
 262test_expect_success 'prepare for several edits' '
 263        git reset --hard master &&
 264        git checkout -b several_edits &&
 265        test_commit one_edits main.txt one &&
 266        test_commit two_edits main.txt two &&
 267        test_commit three_edits main.txt three &&
 268        test_commit four_edits main.txt four
 269'
 270
 271
 272test_expect_success 'status: (continue first edit) second edit' '
 273        FAKE_LINES="edit 1 edit 2 3" &&
 274        export FAKE_LINES &&
 275        test_when_finished "git rebase --abort" &&
 276        ONTO=$(git rev-parse --short HEAD~3) &&
 277        git rebase -i HEAD~3 &&
 278        git rebase --continue &&
 279        cat >expected <<-EOF &&
 280        # rebase in progress; onto $ONTO
 281        # You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
 282        #   (use "git commit --amend" to amend the current commit)
 283        #   (use "git rebase --continue" once you are satisfied with your changes)
 284        #
 285        nothing to commit (use -u to show untracked files)
 286        EOF
 287        git status --untracked-files=no >actual &&
 288        test_i18ncmp expected actual
 289'
 290
 291
 292test_expect_success 'status: (continue first edit) second edit and split' '
 293        git reset --hard several_edits &&
 294        FAKE_LINES="edit 1 edit 2 3" &&
 295        export FAKE_LINES &&
 296        test_when_finished "git rebase --abort" &&
 297        ONTO=$(git rev-parse --short HEAD~3) &&
 298        git rebase -i HEAD~3 &&
 299        git rebase --continue &&
 300        git reset HEAD^ &&
 301        cat >expected <<-EOF &&
 302        # rebase in progress; onto $ONTO
 303        # You are currently splitting a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
 304        #   (Once your working directory is clean, run "git rebase --continue")
 305        #
 306        # Changes not staged for commit:
 307        #   (use "git add <file>..." to update what will be committed)
 308        #   (use "git checkout -- <file>..." to discard changes in working directory)
 309        #
 310        #       modified:   main.txt
 311        #
 312        no changes added to commit (use "git add" and/or "git commit -a")
 313        EOF
 314        git status --untracked-files=no >actual &&
 315        test_i18ncmp expected actual
 316'
 317
 318
 319test_expect_success 'status: (continue first edit) second edit and amend' '
 320        git reset --hard several_edits &&
 321        FAKE_LINES="edit 1 edit 2 3" &&
 322        export FAKE_LINES &&
 323        test_when_finished "git rebase --abort" &&
 324        ONTO=$(git rev-parse --short HEAD~3) &&
 325        git rebase -i HEAD~3 &&
 326        git rebase --continue &&
 327        git commit --amend -m "foo" &&
 328        cat >expected <<-EOF &&
 329        # rebase in progress; onto $ONTO
 330        # You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
 331        #   (use "git commit --amend" to amend the current commit)
 332        #   (use "git rebase --continue" once you are satisfied with your changes)
 333        #
 334        nothing to commit (use -u to show untracked files)
 335        EOF
 336        git status --untracked-files=no >actual &&
 337        test_i18ncmp expected actual
 338'
 339
 340
 341test_expect_success 'status: (amend first edit) second edit' '
 342        git reset --hard several_edits &&
 343        FAKE_LINES="edit 1 edit 2 3" &&
 344        export FAKE_LINES &&
 345        test_when_finished "git rebase --abort" &&
 346        ONTO=$(git rev-parse --short HEAD~3) &&
 347        git rebase -i HEAD~3 &&
 348        git commit --amend -m "a" &&
 349        git rebase --continue &&
 350        cat >expected <<-EOF &&
 351        # rebase in progress; onto $ONTO
 352        # You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
 353        #   (use "git commit --amend" to amend the current commit)
 354        #   (use "git rebase --continue" once you are satisfied with your changes)
 355        #
 356        nothing to commit (use -u to show untracked files)
 357        EOF
 358        git status --untracked-files=no >actual &&
 359        test_i18ncmp expected actual
 360'
 361
 362
 363test_expect_success 'status: (amend first edit) second edit and split' '
 364        git reset --hard several_edits &&
 365        FAKE_LINES="edit 1 edit 2 3" &&
 366        export FAKE_LINES &&
 367        test_when_finished "git rebase --abort" &&
 368        ONTO=$(git rev-parse --short HEAD~3) &&
 369        git rebase -i HEAD~3 &&
 370        git commit --amend -m "b" &&
 371        git rebase --continue &&
 372        git reset HEAD^ &&
 373        cat >expected <<-EOF &&
 374        # rebase in progress; onto $ONTO
 375        # You are currently splitting a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
 376        #   (Once your working directory is clean, run "git rebase --continue")
 377        #
 378        # Changes not staged for commit:
 379        #   (use "git add <file>..." to update what will be committed)
 380        #   (use "git checkout -- <file>..." to discard changes in working directory)
 381        #
 382        #       modified:   main.txt
 383        #
 384        no changes added to commit (use "git add" and/or "git commit -a")
 385        EOF
 386        git status --untracked-files=no >actual &&
 387        test_i18ncmp expected actual
 388'
 389
 390
 391test_expect_success 'status: (amend first edit) second edit and amend' '
 392        git reset --hard several_edits &&
 393        FAKE_LINES="edit 1 edit 2 3" &&
 394        export FAKE_LINES &&
 395        test_when_finished "git rebase --abort" &&
 396        ONTO=$(git rev-parse --short HEAD~3) &&
 397        git rebase -i HEAD~3 &&
 398        git commit --amend -m "c" &&
 399        git rebase --continue &&
 400        git commit --amend -m "d" &&
 401        cat >expected <<-EOF &&
 402        # rebase in progress; onto $ONTO
 403        # You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
 404        #   (use "git commit --amend" to amend the current commit)
 405        #   (use "git rebase --continue" once you are satisfied with your changes)
 406        #
 407        nothing to commit (use -u to show untracked files)
 408        EOF
 409        git status --untracked-files=no >actual &&
 410        test_i18ncmp expected actual
 411'
 412
 413
 414test_expect_success 'status: (split first edit) second edit' '
 415        git reset --hard several_edits &&
 416        FAKE_LINES="edit 1 edit 2 3" &&
 417        export FAKE_LINES &&
 418        test_when_finished "git rebase --abort" &&
 419        ONTO=$(git rev-parse --short HEAD~3) &&
 420        git rebase -i HEAD~3 &&
 421        git reset HEAD^ &&
 422        git add main.txt &&
 423        git commit -m "e" &&
 424        git rebase --continue &&
 425        cat >expected <<-EOF &&
 426        # rebase in progress; onto $ONTO
 427        # You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
 428        #   (use "git commit --amend" to amend the current commit)
 429        #   (use "git rebase --continue" once you are satisfied with your changes)
 430        #
 431        nothing to commit (use -u to show untracked files)
 432        EOF
 433        git status --untracked-files=no >actual &&
 434        test_i18ncmp expected actual
 435'
 436
 437
 438test_expect_success 'status: (split first edit) second edit and split' '
 439        git reset --hard several_edits &&
 440        FAKE_LINES="edit 1 edit 2 3" &&
 441        export FAKE_LINES &&
 442        test_when_finished "git rebase --abort" &&
 443        ONTO=$(git rev-parse --short HEAD~3) &&
 444        git rebase -i HEAD~3 &&
 445        git reset HEAD^ &&
 446        git add main.txt &&
 447        git commit --amend -m "f" &&
 448        git rebase --continue &&
 449        git reset HEAD^ &&
 450        cat >expected <<-EOF &&
 451        # rebase in progress; onto $ONTO
 452        # You are currently splitting a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
 453        #   (Once your working directory is clean, run "git rebase --continue")
 454        #
 455        # Changes not staged for commit:
 456        #   (use "git add <file>..." to update what will be committed)
 457        #   (use "git checkout -- <file>..." to discard changes in working directory)
 458        #
 459        #       modified:   main.txt
 460        #
 461        no changes added to commit (use "git add" and/or "git commit -a")
 462        EOF
 463        git status --untracked-files=no >actual &&
 464        test_i18ncmp expected actual
 465'
 466
 467
 468test_expect_success 'status: (split first edit) second edit and amend' '
 469        git reset --hard several_edits &&
 470        FAKE_LINES="edit 1 edit 2 3" &&
 471        export FAKE_LINES &&
 472        test_when_finished "git rebase --abort" &&
 473        ONTO=$(git rev-parse --short HEAD~3) &&
 474        git rebase -i HEAD~3 &&
 475        git reset HEAD^ &&
 476        git add main.txt &&
 477        git commit --amend -m "g" &&
 478        git rebase --continue &&
 479        git commit --amend -m "h" &&
 480        cat >expected <<-EOF &&
 481        # rebase in progress; onto $ONTO
 482        # You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
 483        #   (use "git commit --amend" to amend the current commit)
 484        #   (use "git rebase --continue" once you are satisfied with your changes)
 485        #
 486        nothing to commit (use -u to show untracked files)
 487        EOF
 488        git status --untracked-files=no >actual &&
 489        test_i18ncmp expected actual
 490'
 491
 492
 493test_expect_success 'prepare am_session' '
 494        git reset --hard master &&
 495        git checkout -b am_session &&
 496        test_commit one_am one.txt "one" &&
 497        test_commit two_am two.txt "two" &&
 498        test_commit three_am three.txt "three"
 499'
 500
 501
 502test_expect_success 'status in an am session: file already exists' '
 503        git checkout -b am_already_exists &&
 504        test_when_finished "rm Maildir/* && git am --abort" &&
 505        git format-patch -1 -oMaildir &&
 506        test_must_fail git am Maildir/*.patch &&
 507        cat >expected <<-\EOF &&
 508        # On branch am_already_exists
 509        # You are in the middle of an am session.
 510        #   (fix conflicts and then run "git am --continue")
 511        #   (use "git am --skip" to skip this patch)
 512        #   (use "git am --abort" to restore the original branch)
 513        #
 514        nothing to commit (use -u to show untracked files)
 515        EOF
 516        git status --untracked-files=no >actual &&
 517        test_i18ncmp expected actual
 518'
 519
 520
 521test_expect_success 'status in an am session: file does not exist' '
 522        git reset --hard am_session &&
 523        git checkout -b am_not_exists &&
 524        git rm three.txt &&
 525        git commit -m "delete three.txt" &&
 526        test_when_finished "rm Maildir/* && git am --abort" &&
 527        git format-patch -1 -oMaildir &&
 528        test_must_fail git am Maildir/*.patch &&
 529        cat >expected <<-\EOF &&
 530        # On branch am_not_exists
 531        # You are in the middle of an am session.
 532        #   (fix conflicts and then run "git am --continue")
 533        #   (use "git am --skip" to skip this patch)
 534        #   (use "git am --abort" to restore the original branch)
 535        #
 536        nothing to commit (use -u to show untracked files)
 537        EOF
 538        git status --untracked-files=no >actual &&
 539        test_i18ncmp expected actual
 540'
 541
 542
 543test_expect_success 'status in an am session: empty patch' '
 544        git reset --hard am_session &&
 545        git checkout -b am_empty &&
 546        test_when_finished "rm Maildir/* && git am --abort" &&
 547        git format-patch -3 -oMaildir &&
 548        git rm one.txt two.txt three.txt &&
 549        git commit -m "delete all am_empty" &&
 550        echo error >Maildir/0002-two_am.patch &&
 551        test_must_fail git am Maildir/*.patch &&
 552        cat >expected <<-\EOF &&
 553        # On branch am_empty
 554        # You are in the middle of an am session.
 555        # The current patch is empty.
 556        #   (use "git am --skip" to skip this patch)
 557        #   (use "git am --abort" to restore the original branch)
 558        #
 559        nothing to commit (use -u to show untracked files)
 560        EOF
 561        git status --untracked-files=no >actual &&
 562        test_i18ncmp expected actual
 563'
 564
 565
 566test_expect_success 'status when bisecting' '
 567        git reset --hard master &&
 568        git checkout -b bisect &&
 569        test_commit one_bisect main.txt one &&
 570        test_commit two_bisect main.txt two &&
 571        test_commit three_bisect main.txt three &&
 572        test_when_finished "git bisect reset" &&
 573        git bisect start &&
 574        git bisect bad &&
 575        git bisect good one_bisect &&
 576        TGT=$(git rev-parse --short two_bisect) &&
 577        cat >expected <<-EOF &&
 578        # HEAD detached at $TGT
 579        # You are currently bisecting, started from branch '\''bisect'\''.
 580        #   (use "git bisect reset" to get back to the original branch)
 581        #
 582        nothing to commit (use -u to show untracked files)
 583        EOF
 584        git status --untracked-files=no >actual &&
 585        test_i18ncmp expected actual
 586'
 587
 588
 589test_expect_success 'status when rebase conflicts with statushints disabled' '
 590        git reset --hard master &&
 591        git checkout -b statushints_disabled &&
 592        test_when_finished "git config --local advice.statushints true" &&
 593        git config --local advice.statushints false &&
 594        test_commit one_statushints main.txt one &&
 595        test_commit two_statushints main.txt two &&
 596        test_commit three_statushints main.txt three &&
 597        test_when_finished "git rebase --abort" &&
 598        ONTO=$(git rev-parse --short HEAD^^) &&
 599        test_must_fail git rebase HEAD^ --onto HEAD^^ &&
 600        cat >expected <<-EOF &&
 601        # rebase in progress; onto $ONTO
 602        # You are currently rebasing branch '\''statushints_disabled'\'' on '\''$ONTO'\''.
 603        #
 604        # Unmerged paths:
 605        #       both modified:      main.txt
 606        #
 607        no changes added to commit
 608        EOF
 609        git status --untracked-files=no >actual &&
 610        test_i18ncmp expected actual
 611'
 612
 613
 614test_expect_success 'prepare for cherry-pick conflicts' '
 615        git reset --hard master &&
 616        git checkout -b cherry_branch &&
 617        test_commit one_cherry main.txt one &&
 618        test_commit two_cherries main.txt two &&
 619        git checkout -b cherry_branch_second &&
 620        test_commit second_cherry main.txt second &&
 621        git checkout cherry_branch &&
 622        test_commit three_cherries main.txt three
 623'
 624
 625
 626test_expect_success 'status when cherry-picking before resolving conflicts' '
 627        test_when_finished "git cherry-pick --abort" &&
 628        test_must_fail git cherry-pick cherry_branch_second &&
 629        cat >expected <<-\EOF &&
 630        # On branch cherry_branch
 631        # You are currently cherry-picking.
 632        #   (fix conflicts and run "git cherry-pick --continue")
 633        #   (use "git cherry-pick --abort" to cancel the cherry-pick operation)
 634        #
 635        # Unmerged paths:
 636        #   (use "git add <file>..." to mark resolution)
 637        #
 638        #       both modified:      main.txt
 639        #
 640        no changes added to commit (use "git add" and/or "git commit -a")
 641        EOF
 642        git status --untracked-files=no >actual &&
 643        test_i18ncmp expected actual
 644'
 645
 646
 647test_expect_success 'status when cherry-picking after resolving conflicts' '
 648        git reset --hard cherry_branch &&
 649        test_when_finished "git cherry-pick --abort" &&
 650        test_must_fail git cherry-pick cherry_branch_second &&
 651        echo end >main.txt &&
 652        git add main.txt &&
 653        cat >expected <<-\EOF &&
 654        # On branch cherry_branch
 655        # You are currently cherry-picking.
 656        #   (all conflicts fixed: run "git cherry-pick --continue")
 657        #   (use "git cherry-pick --abort" to cancel the cherry-pick operation)
 658        #
 659        # Changes to be committed:
 660        #
 661        #       modified:   main.txt
 662        #
 663        # Untracked files not listed (use -u option to show untracked files)
 664        EOF
 665        git status --untracked-files=no >actual &&
 666        test_i18ncmp expected actual
 667'
 668
 669test_expect_success 'status showing detached at and from a tag' '
 670        test_commit atag tagging &&
 671        git checkout atag &&
 672        cat >expected <<-\EOF
 673        # HEAD detached at atag
 674        nothing to commit (use -u to show untracked files)
 675        EOF
 676        git status --untracked-files=no >actual &&
 677        test_i18ncmp expected actual &&
 678
 679        git reset --hard HEAD^ &&
 680        cat >expected <<-\EOF
 681        # HEAD detached from atag
 682        nothing to commit (use -u to show untracked files)
 683        EOF
 684        git status --untracked-files=no >actual &&
 685        test_i18ncmp expected actual
 686'
 687
 688test_expect_success 'status while reverting commit (conflicts)' '
 689        git checkout master &&
 690        echo before >to-revert.txt &&
 691        test_commit before to-revert.txt &&
 692        echo old >to-revert.txt &&
 693        test_commit old to-revert.txt &&
 694        echo new >to-revert.txt &&
 695        test_commit new to-revert.txt &&
 696        TO_REVERT=$(git rev-parse --short HEAD^) &&
 697        test_must_fail git revert $TO_REVERT &&
 698        cat >expected <<-EOF
 699        # On branch master
 700        # You are currently reverting commit $TO_REVERT.
 701        #   (fix conflicts and run "git revert --continue")
 702        #   (use "git revert --abort" to cancel the revert operation)
 703        #
 704        # Unmerged paths:
 705        #   (use "git reset HEAD <file>..." to unstage)
 706        #   (use "git add <file>..." to mark resolution)
 707        #
 708        #       both modified:      to-revert.txt
 709        #
 710        no changes added to commit (use "git add" and/or "git commit -a")
 711        EOF
 712        git status --untracked-files=no >actual &&
 713        test_i18ncmp expected actual
 714'
 715
 716test_expect_success 'status while reverting commit (conflicts resolved)' '
 717        echo reverted >to-revert.txt &&
 718        git add to-revert.txt &&
 719        cat >expected <<-EOF
 720        # On branch master
 721        # You are currently reverting commit $TO_REVERT.
 722        #   (all conflicts fixed: run "git revert --continue")
 723        #   (use "git revert --abort" to cancel the revert operation)
 724        #
 725        # Changes to be committed:
 726        #   (use "git reset HEAD <file>..." to unstage)
 727        #
 728        #       modified:   to-revert.txt
 729        #
 730        # Untracked files not listed (use -u option to show untracked files)
 731        EOF
 732        git status --untracked-files=no >actual &&
 733        test_i18ncmp expected actual
 734'
 735
 736test_expect_success 'status after reverting commit' '
 737        git revert --continue &&
 738        cat >expected <<-\EOF
 739        # On branch master
 740        nothing to commit (use -u to show untracked files)
 741        EOF
 742        git status --untracked-files=no >actual &&
 743        test_i18ncmp expected actual
 744'
 745
 746test_done