t / t7060-wtstatus.shon commit rebase: prepare to do generic housekeeping (f5f758a)
   1#!/bin/sh
   2
   3test_description='basic work tree status reporting'
   4
   5. ./test-lib.sh
   6
   7test_expect_success setup '
   8        git config --global advice.statusuoption false &&
   9        test_commit A &&
  10        test_commit B oneside added &&
  11        git checkout A^0 &&
  12        test_commit C oneside created
  13'
  14
  15test_expect_success 'A/A conflict' '
  16        git checkout B^0 &&
  17        test_must_fail git merge C
  18'
  19
  20test_expect_success 'Report path with conflict' '
  21        git diff --cached --name-status >actual &&
  22        echo "U oneside" >expect &&
  23        test_cmp expect actual
  24'
  25
  26test_expect_success 'Report new path with conflict' '
  27        git diff --cached --name-status HEAD^ >actual &&
  28        echo "U oneside" >expect &&
  29        test_cmp expect actual
  30'
  31
  32cat >expect <<EOF
  33# On branch side
  34# You have unmerged paths.
  35#   (fix conflicts and run "git commit")
  36#
  37# Unmerged paths:
  38#   (use "git add/rm <file>..." as appropriate to mark resolution)
  39#
  40#       deleted by us:      foo
  41#
  42no changes added to commit (use "git add" and/or "git commit -a")
  43EOF
  44
  45test_expect_success 'M/D conflict does not segfault' '
  46        mkdir mdconflict &&
  47        (
  48                cd mdconflict &&
  49                git init &&
  50                test_commit initial foo "" &&
  51                test_commit modify foo foo &&
  52                git checkout -b side HEAD^ &&
  53                git rm foo &&
  54                git commit -m delete &&
  55                test_must_fail git merge master &&
  56                test_must_fail git commit --dry-run >../actual &&
  57                test_i18ncmp ../expect ../actual &&
  58                git status >../actual &&
  59                test_i18ncmp ../expect ../actual
  60        )
  61'
  62
  63test_expect_success 'rename & unmerged setup' '
  64        git rm -f -r . &&
  65        cat "$TEST_DIRECTORY/README" >ONE &&
  66        git add ONE &&
  67        test_tick &&
  68        git commit -m "One commit with ONE" &&
  69
  70        echo Modified >TWO &&
  71        cat ONE >>TWO &&
  72        cat ONE >>THREE &&
  73        git add TWO THREE &&
  74        sha1=$(git rev-parse :ONE) &&
  75        git rm --cached ONE &&
  76        (
  77                echo "100644 $sha1 1    ONE" &&
  78                echo "100644 $sha1 2    ONE" &&
  79                echo "100644 $sha1 3    ONE"
  80        ) | git update-index --index-info &&
  81        echo Further >>THREE
  82'
  83
  84test_expect_success 'rename & unmerged status' '
  85        git status -suno >actual &&
  86        cat >expect <<-EOF &&
  87        UU ONE
  88        AM THREE
  89        A  TWO
  90        EOF
  91        test_cmp expect actual
  92'
  93
  94test_expect_success 'git diff-index --cached shows 2 added + 1 unmerged' '
  95        cat >expected <<-EOF &&
  96        U       ONE
  97        A       THREE
  98        A       TWO
  99        EOF
 100        git diff-index --cached --name-status HEAD >actual &&
 101        test_cmp expected actual
 102'
 103
 104test_expect_success 'git diff-index --cached -M shows 2 added + 1 unmerged' '
 105        cat >expected <<-EOF &&
 106        U       ONE
 107        A       THREE
 108        A       TWO
 109        EOF
 110        git diff-index --cached --name-status HEAD >actual &&
 111        test_cmp expected actual
 112'
 113
 114test_expect_success 'git diff-index --cached -C shows 2 copies + 1 unmerged' '
 115        cat >expected <<-EOF &&
 116        U       ONE
 117        C       ONE     THREE
 118        C       ONE     TWO
 119        EOF
 120        git diff-index --cached -C --name-status HEAD |
 121        sed "s/^C[0-9]*/C/g" >actual &&
 122        test_cmp expected actual
 123'
 124
 125
 126test_expect_success 'status when conflicts with add and rm advice (deleted by them)' '
 127        git reset --hard &&
 128        git checkout master &&
 129        test_commit init main.txt init &&
 130        git checkout -b second_branch &&
 131        git rm main.txt &&
 132        git commit -m "main.txt deleted on second_branch" &&
 133        test_commit second conflict.txt second &&
 134        git checkout master &&
 135        test_commit on_second main.txt on_second &&
 136        test_commit master conflict.txt master &&
 137        test_must_fail git merge second_branch &&
 138        cat >expected <<-\EOF &&
 139        # On branch master
 140        # You have unmerged paths.
 141        #   (fix conflicts and run "git commit")
 142        #
 143        # Unmerged paths:
 144        #   (use "git add/rm <file>..." as appropriate to mark resolution)
 145        #
 146        #       both added:         conflict.txt
 147        #       deleted by them:    main.txt
 148        #
 149        no changes added to commit (use "git add" and/or "git commit -a")
 150        EOF
 151        git status --untracked-files=no >actual &&
 152        test_i18ncmp expected actual
 153'
 154
 155
 156test_expect_success 'prepare for conflicts' '
 157        git reset --hard &&
 158        git checkout -b conflict &&
 159        test_commit one main.txt one &&
 160        git branch conflict_second &&
 161        git mv main.txt sub_master.txt &&
 162        git commit -m "main.txt renamed in sub_master.txt" &&
 163        git checkout conflict_second &&
 164        git mv main.txt sub_second.txt &&
 165        git commit -m "main.txt renamed in sub_second.txt"
 166'
 167
 168
 169test_expect_success 'status when conflicts with add and rm advice (both deleted)' '
 170        test_must_fail git merge conflict &&
 171        cat >expected <<-\EOF &&
 172        # On branch conflict_second
 173        # You have unmerged paths.
 174        #   (fix conflicts and run "git commit")
 175        #
 176        # Unmerged paths:
 177        #   (use "git add/rm <file>..." as appropriate to mark resolution)
 178        #
 179        #       both deleted:       main.txt
 180        #       added by them:      sub_master.txt
 181        #       added by us:        sub_second.txt
 182        #
 183        no changes added to commit (use "git add" and/or "git commit -a")
 184        EOF
 185        git status --untracked-files=no >actual &&
 186        test_i18ncmp expected actual
 187'
 188
 189
 190test_expect_success 'status when conflicts with only rm advice (both deleted)' '
 191        git reset --hard conflict_second &&
 192        test_must_fail git merge conflict &&
 193        git add sub_master.txt &&
 194        git add sub_second.txt &&
 195        cat >expected <<-\EOF &&
 196        # On branch conflict_second
 197        # You have unmerged paths.
 198        #   (fix conflicts and run "git commit")
 199        #
 200        # Changes to be committed:
 201        #
 202        #       new file:   sub_master.txt
 203        #
 204        # Unmerged paths:
 205        #   (use "git rm <file>..." to mark resolution)
 206        #
 207        #       both deleted:       main.txt
 208        #
 209        # Untracked files not listed (use -u option to show untracked files)
 210        EOF
 211        git status --untracked-files=no >actual &&
 212        test_i18ncmp expected actual &&
 213        git reset --hard &&
 214        git checkout master
 215'
 216
 217
 218test_done