#!/bin/sh test_description='unpack-trees error messages' . ./test-lib.sh test_expect_success 'setup' ' echo one >one && git add one && git commit -a -m First && git checkout -b branch && echo two >two && echo three >three && echo four >four && echo five >five && git add two three four five && git commit -m Second && git checkout master && echo other >two && echo other >three && echo other >four && echo other >five ' cat >expect <<\EOF error: The following untracked working tree files would be overwritten by merge: five four three two Please move or remove them before you can merge. Aborting EOF test_expect_success 'untracked files overwritten by merge (fast and non-fast forward)' ' test_must_fail git merge branch 2>out && test_i18ncmp out expect && git commit --allow-empty -m empty && ( GIT_MERGE_VERBOSITY=0 && export GIT_MERGE_VERBOSITY && test_must_fail git merge branch 2>out2 ) && test_i18ncmp out2 expect && git reset --hard HEAD^ ' cat >expect <<\EOF error: Your local changes to the following files would be overwritten by merge: four three two Please commit your changes or stash them before you can merge. error: The following untracked working tree files would be overwritten by merge: five Please move or remove them before you can merge. Aborting EOF test_expect_success 'untracked files or local changes ovewritten by merge' ' git add two && git add three && git add four && test_must_fail git merge branch 2>out && test_i18ncmp out expect ' cat >expect <<\EOF error: Your local changes to the following files would be overwritten by checkout: rep/one rep/two Please commit your changes or stash them before you can switch branches. Aborting EOF test_expect_success 'cannot switch branches because of local changes' ' git add five && mkdir rep && echo one >rep/one && echo two >rep/two && git add rep/one rep/two && git commit -m Fourth && git checkout master && echo uno >rep/one && echo dos >rep/two && test_must_fail git checkout branch 2>out && test_i18ncmp out expect ' cat >expect <<\EOF error: Your local changes to the following files would be overwritten by checkout: rep/one rep/two Please commit your changes or stash them before you can switch branches. Aborting EOF test_expect_success 'not uptodate file porcelain checkout error' ' git add rep/one rep/two && test_must_fail git checkout branch 2>out && test_i18ncmp out expect ' cat >expect <<\EOF error: Updating the following directories would lose untracked files in them: rep rep2 Aborting EOF test_expect_success 'not_uptodate_dir porcelain checkout error' ' git init uptodate && cd uptodate && mkdir rep && mkdir rep2 && touch rep/foo && touch rep2/foo && git add rep/foo rep2/foo && git commit -m init && git checkout -b branch && git rm rep -r && git rm rep2 -r && >rep && >rep2 && git add rep rep2&& git commit -m "added test as a file" && git checkout master && >rep/untracked-file && >rep2/untracked-file && test_must_fail git checkout branch 2>out && test_i18ncmp out ../expect ' test_done