Merge branch 'ee/clean-test-fixes'
authorJunio C Hamano <gitster@pobox.com>
Wed, 2 Sep 2015 19:50:16 +0000 (12:50 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 2 Sep 2015 19:50:16 +0000 (12:50 -0700)
* ee/clean-test-fixes:
t7300: fix broken && chains

1  2 
t/t7300-clean.sh
diff --combined t/t7300-clean.sh
index 27557d64f35bf7d53d52ee7583258daa24ef68b7,954ec9c71ea2e1d53fd6cf670870d8e5cacaf094..86ceb38b015807ada68357fa80ffa45f4f85f287
@@@ -119,7 -119,10 +119,7 @@@ test_expect_success C_LOCALE_OUTPUT 'gi
                git clean -n ../src |
                sed -n -e "s|^Would remove ||p"
        ) &&
 -      test "$would_clean" = ../src/part3.c || {
 -              echo "OOps <$would_clean>"
 -              false
 -      }
 +      verbose test "$would_clean" = ../src/part3.c
  '
  
  test_expect_success C_LOCALE_OUTPUT 'git clean with absolute path' '
                git clean -n "$(pwd)/../src" |
                sed -n -e "s|^Would remove ||p"
        ) &&
 -      test "$would_clean" = ../src/part3.c || {
 -              echo "OOps <$would_clean>"
 -              false
 -      }
 +      verbose test "$would_clean" = ../src/part3.c
  '
  
  test_expect_success 'git clean with out of work tree relative path' '
@@@ -292,23 -298,6 +292,23 @@@ test_expect_success 'git clean -d -x' 
  
  '
  
 +test_expect_success 'git clean -d -x with ignored tracked directory' '
 +
 +      mkdir -p build docs &&
 +      touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
 +      git clean -d -x -e src &&
 +      test -f Makefile &&
 +      test -f README &&
 +      test -f src/part1.c &&
 +      test -f src/part2.c &&
 +      test ! -f a.out &&
 +      test -f src/part3.c &&
 +      test ! -d docs &&
 +      test ! -f obj.o &&
 +      test ! -d build
 +
 +'
 +
  test_expect_success 'git clean -X' '
  
        mkdir -p build docs &&
@@@ -343,23 -332,6 +343,23 @@@ test_expect_success 'git clean -d -X' 
  
  '
  
 +test_expect_success 'git clean -d -X with ignored tracked directory' '
 +
 +      mkdir -p build docs &&
 +      touch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&
 +      git clean -d -X -e src &&
 +      test -f Makefile &&
 +      test -f README &&
 +      test -f src/part1.c &&
 +      test -f src/part2.c &&
 +      test -f a.out &&
 +      test ! -f src/part3.c &&
 +      test -f docs/manual.txt &&
 +      test ! -f obj.o &&
 +      test ! -d build
 +
 +'
 +
  test_expect_success 'clean.requireForce defaults to true' '
  
        git config --unset clean.requireForce &&
@@@ -420,10 -392,10 +420,10 @@@ test_expect_success SANITY 'removal fai
  
        mkdir foo &&
        touch foo/bar &&
 +      test_when_finished "chmod 755 foo" &&
        (exec <foo/bar &&
         chmod 0 foo &&
 -       test_must_fail git clean -f -d &&
 -       chmod 755 foo)
 +       test_must_fail git clean -f -d)
  '
  
  test_expect_success 'nested git work tree' '
        (
                cd foo &&
                git init &&
-               >hello.world
-               git add . &&
-               git commit -a -m nested
+               test_commit nested hello.world
        ) &&
        (
                cd bar &&
        (
                cd baz/boo &&
                git init &&
-               >deeper.world
-               git add . &&
-               git commit -a -m deeply.nested
+               test_commit deeply.nested deeper.world
        ) &&
        git clean -f -d &&
        test -f foo/.git/index &&
        ! test -d bar
  '
  
 +test_expect_success 'should clean things that almost look like git but are not' '
 +      rm -fr almost_git almost_bare_git almost_submodule &&
 +      mkdir -p almost_git/.git/objects &&
 +      mkdir -p almost_git/.git/refs &&
 +      cat >almost_git/.git/HEAD <<-\EOF &&
 +      garbage
 +      EOF
 +      cp -r almost_git/.git/ almost_bare_git &&
 +      mkdir almost_submodule/ &&
 +      cat >almost_submodule/.git <<-\EOF &&
 +      garbage
 +      EOF
 +      test_when_finished "rm -rf almost_*" &&
 +      git clean -f -d &&
 +      test_path_is_missing almost_git &&
 +      test_path_is_missing almost_bare_git &&
 +      test_path_is_missing almost_submodule
 +'
 +
 +test_expect_success 'should not clean submodules' '
 +      rm -fr repo to_clean sub1 sub2 &&
 +      mkdir repo to_clean &&
 +      (
 +              cd repo &&
 +              git init &&
 +              test_commit msg hello.world
 +      ) &&
 +      git submodule add ./repo/.git sub1 &&
 +      git commit -m "sub1" &&
 +      git branch before_sub2 &&
 +      git submodule add ./repo/.git sub2 &&
 +      git commit -m "sub2" &&
 +      git checkout before_sub2 &&
 +      >to_clean/should_clean.this &&
 +      git clean -f -d &&
 +      test_path_is_file repo/.git/index &&
 +      test_path_is_file repo/hello.world &&
 +      test_path_is_file sub1/.git &&
 +      test_path_is_file sub1/hello.world &&
 +      test_path_is_file sub2/.git &&
 +      test_path_is_file sub2/hello.world &&
 +      test_path_is_missing to_clean
 +'
 +
 +test_expect_success POSIXPERM 'should avoid cleaning possible submodules' '
 +      rm -fr to_clean possible_sub1 &&
 +      mkdir to_clean possible_sub1 &&
 +      test_when_finished "rm -rf possible_sub*" &&
 +      echo "gitdir: foo" >possible_sub1/.git &&
 +      >possible_sub1/hello.world &&
 +      chmod 0 possible_sub1/.git &&
 +      >to_clean/should_clean.this &&
 +      git clean -f -d &&
 +      test_path_is_file possible_sub1/.git &&
 +      test_path_is_file possible_sub1/hello.world &&
 +      test_path_is_missing to_clean
 +'
 +
 +test_expect_success 'nested (empty) git should be kept' '
 +      rm -fr empty_repo to_clean &&
 +      git init empty_repo &&
 +      mkdir to_clean &&
 +      >to_clean/should_clean.this &&
 +      git clean -f -d &&
 +      test_path_is_file empty_repo/.git/HEAD &&
 +      test_path_is_missing to_clean
 +'
 +
 +test_expect_success 'nested bare repositories should be cleaned' '
 +      rm -fr bare1 bare2 subdir &&
 +      git init --bare bare1 &&
 +      git clone --local --bare . bare2 &&
 +      mkdir subdir &&
 +      cp -r bare2 subdir/bare3 &&
 +      git clean -f -d &&
 +      test_path_is_missing bare1 &&
 +      test_path_is_missing bare2 &&
 +      test_path_is_missing subdir
 +'
 +
 +test_expect_failure 'nested (empty) bare repositories should be cleaned even when in .git' '
 +      rm -fr strange_bare &&
 +      mkdir strange_bare &&
 +      git init --bare strange_bare/.git &&
 +      git clean -f -d &&
 +      test_path_is_missing strange_bare
 +'
 +
 +test_expect_failure 'nested (non-empty) bare repositories should be cleaned even when in .git' '
 +      rm -fr strange_bare &&
 +      mkdir strange_bare &&
 +      git clone --local --bare . strange_bare/.git &&
 +      git clean -f -d &&
 +      test_path_is_missing strange_bare
 +'
 +
 +test_expect_success 'giving path in nested git work tree will remove it' '
 +      rm -fr repo &&
 +      mkdir repo &&
 +      (
 +              cd repo &&
 +              git init &&
 +              mkdir -p bar/baz &&
 +              test_commit msg bar/baz/hello.world
 +      ) &&
 +      git clean -f -d repo/bar/baz &&
 +      test_path_is_file repo/.git/HEAD &&
 +      test_path_is_dir repo/bar/ &&
 +      test_path_is_missing repo/bar/baz
 +'
 +
 +test_expect_success 'giving path to nested .git will not remove it' '
 +      rm -fr repo &&
 +      mkdir repo untracked &&
 +      (
 +              cd repo &&
 +              git init &&
 +              test_commit msg hello.world
 +      ) &&
 +      git clean -f -d repo/.git &&
 +      test_path_is_file repo/.git/HEAD &&
 +      test_path_is_dir repo/.git/refs &&
 +      test_path_is_dir repo/.git/objects &&
 +      test_path_is_dir untracked/
 +'
 +
 +test_expect_success 'giving path to nested .git/ will remove contents' '
 +      rm -fr repo untracked &&
 +      mkdir repo untracked &&
 +      (
 +              cd repo &&
 +              git init &&
 +              test_commit msg hello.world
 +      ) &&
 +      git clean -f -d repo/.git/ &&
 +      test_path_is_dir repo/.git &&
 +      test_dir_is_empty repo/.git &&
 +      test_path_is_dir untracked/
 +'
 +
  test_expect_success 'force removal of nested git work tree' '
        rm -fr foo bar baz &&
        mkdir -p foo bar baz/boo &&
        (
                cd foo &&
                git init &&
-               >hello.world
-               git add . &&
-               git commit -a -m nested
+               test_commit nested hello.world
        ) &&
        (
                cd bar &&
        (
                cd baz/boo &&
                git init &&
-               >deeper.world
-               git add . &&
-               git commit -a -m deeply.nested
+               test_commit deeply.nested deeper.world
        ) &&
        git clean -f -f -d &&
        ! test -d foo &&
@@@ -645,20 -469,4 +637,20 @@@ test_expect_success SANITY 'git clean -
        ! test -d foo
  '
  
 +test_expect_success 'git clean -d respects pathspecs (dir is prefix of pathspec)' '
 +      mkdir -p foo &&
 +      mkdir -p foobar &&
 +      git clean -df foobar &&
 +      test_path_is_dir foo &&
 +      test_path_is_missing foobar
 +'
 +
 +test_expect_success 'git clean -d respects pathspecs (pathspec is prefix of dir)' '
 +      mkdir -p foo &&
 +      mkdir -p foobar &&
 +      git clean -df foo &&
 +      test_path_is_missing foo &&
 +      test_path_is_dir foobar
 +'
 +
  test_done