(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'git clean basic tests'>)}
          spids: [13]
        )
      ]
      spids: [13]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(git)} {(config)} {(clean.requireForce)} {(no)})
    (C {(test_expect_success)} {(SQ <setup>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir -p src &&\n'> <'\ttouch src/part1.c Makefile &&\n'> 
          <'\techo build >.gitignore &&\n'> <'\techo \\*.o >>.gitignore &&\n'> <'\tgit add . &&\n'> <'\tgit commit -m setup &&\n'> 
          <'\ttouch src/part2.c README &&\n'> <'\tgit add .\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git clean with skip-worktree .gitignore'>)} 
      {
        (SQ <'\n'> <'\tgit update-index --skip-worktree .gitignore &&\n'> <'\trm .gitignore &&\n'> 
          <'\tmkdir -p build docs &&\n'> <'\ttouch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&\n'> <'\tgit clean &&\n'> 
          <'\ttest -f Makefile &&\n'> <'\ttest -f README &&\n'> <'\ttest -f src/part1.c &&\n'> <'\ttest -f src/part2.c &&\n'> 
          <'\ttest ! -f a.out &&\n'> <'\ttest ! -f src/part3.c &&\n'> <'\ttest -f docs/manual.txt &&\n'> <'\ttest -f obj.o &&\n'> 
          <'\ttest -f build/lib.so &&\n'> <'\tgit update-index --no-skip-worktree .gitignore &&\n'> <'\tgit checkout .gitignore\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git clean'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir -p build docs &&\n'> 
          <'\ttouch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&\n'> <'\tgit clean &&\n'> <'\ttest -f Makefile &&\n'> <'\ttest -f README &&\n'> 
          <'\ttest -f src/part1.c &&\n'> <'\ttest -f src/part2.c &&\n'> <'\ttest ! -f a.out &&\n'> <'\ttest ! -f src/part3.c &&\n'> 
          <'\ttest -f docs/manual.txt &&\n'> <'\ttest -f obj.o &&\n'> <'\ttest -f build/lib.so\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git clean src/'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir -p build docs &&\n'> 
          <'\ttouch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&\n'> <'\tgit clean src/ &&\n'> <'\ttest -f Makefile &&\n'> <'\ttest -f README &&\n'> 
          <'\ttest -f src/part1.c &&\n'> <'\ttest -f src/part2.c &&\n'> <'\ttest -f a.out &&\n'> <'\ttest ! -f src/part3.c &&\n'> 
          <'\ttest -f docs/manual.txt &&\n'> <'\ttest -f obj.o &&\n'> <'\ttest -f build/lib.so\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git clean src/ src/'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir -p build docs &&\n'> 
          <'\ttouch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&\n'> <'\tgit clean src/ src/ &&\n'> <'\ttest -f Makefile &&\n'> <'\ttest -f README &&\n'> 
          <'\ttest -f src/part1.c &&\n'> <'\ttest -f src/part2.c &&\n'> <'\ttest -f a.out &&\n'> <'\ttest ! -f src/part3.c &&\n'> 
          <'\ttest -f docs/manual.txt &&\n'> <'\ttest -f obj.o &&\n'> <'\ttest -f build/lib.so\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git clean with prefix'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir -p build docs src/test &&\n'> 
          <'\ttouch a.out src/part3.c docs/manual.txt obj.o build/lib.so src/test/1.c &&\n'> <'\t(cd src/ && git clean) &&\n'> <'\ttest -f Makefile &&\n'> <'\ttest -f README &&\n'> 
          <'\ttest -f src/part1.c &&\n'> <'\ttest -f src/part2.c &&\n'> <'\ttest -f a.out &&\n'> <'\ttest ! -f src/part3.c &&\n'> 
          <'\ttest -f src/test/1.c &&\n'> <'\ttest -f docs/manual.txt &&\n'> <'\ttest -f obj.o &&\n'> <'\ttest -f build/lib.so\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(C_LOCALE_OUTPUT)} {(SQ <'git clean with relative prefix'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir -p build docs &&\n'> 
          <'\ttouch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&\n'> <'\twould_clean=$(\n'> <'\t\tcd docs &&\n'> <'\t\tgit clean -n ../src |\n'> 
          <'\t\tsed -n -e "s|^Would remove ||p"\n'> <'\t) &&\n'> <'\tverbose test "$would_clean" = ../src/part3.c\n'>
        )
      }
    )
    (C {(test_expect_success)} {(C_LOCALE_OUTPUT)} {(SQ <'git clean with absolute path'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir -p build docs &&\n'> 
          <'\ttouch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&\n'> <'\twould_clean=$(\n'> <'\t\tcd docs &&\n'> <'\t\tgit clean -n "$(pwd)/../src" |\n'> 
          <'\t\tsed -n -e "s|^Would remove ||p"\n'> <'\t) &&\n'> <'\tverbose test "$would_clean" = ../src/part3.c\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git clean with out of work tree relative path'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir -p build docs &&\n'> 
          <'\ttouch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&\n'> <'\t(\n'> <'\t\tcd docs &&\n'> <'\t\ttest_must_fail git clean -n ../..\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git clean with out of work tree absolute path'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir -p build docs &&\n'> 
          <'\ttouch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&\n'> <'\tdd=$(cd .. && pwd) &&\n'> <'\t(\n'> <'\t\tcd docs &&\n'> <'\t\ttest_must_fail git clean -n $dd\n'> 
          <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git clean -d with prefix and path'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir -p build docs src/feature &&\n'> 
          <'\ttouch a.out src/part3.c src/feature/file.c docs/manual.txt obj.o build/lib.so &&\n'> <'\t(cd src/ && git clean -d feature/) &&\n'> <'\ttest -f Makefile &&\n'> <'\ttest -f README &&\n'> 
          <'\ttest -f src/part1.c &&\n'> <'\ttest -f src/part2.c &&\n'> <'\ttest -f a.out &&\n'> <'\ttest -f src/part3.c &&\n'> 
          <'\ttest ! -f src/feature/file.c &&\n'> <'\ttest -f docs/manual.txt &&\n'> <'\ttest -f obj.o &&\n'> <'\ttest -f build/lib.so\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SYMLINKS)} {(SQ <'git clean symbolic link'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir -p build docs &&\n'> 
          <'\ttouch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&\n'> <'\tln -s docs/manual.txt src/part4.c &&\n'> <'\tgit clean &&\n'> <'\ttest -f Makefile &&\n'> 
          <'\ttest -f README &&\n'> <'\ttest -f src/part1.c &&\n'> <'\ttest -f src/part2.c &&\n'> <'\ttest ! -f a.out &&\n'> 
          <'\ttest ! -f src/part3.c &&\n'> <'\ttest ! -f src/part4.c &&\n'> <'\ttest -f docs/manual.txt &&\n'> <'\ttest -f obj.o &&\n'> 
          <'\ttest -f build/lib.so\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git clean with wildcard'>)} 
      {
        (SQ <'\n'> <'\n'> <'\ttouch a.clean b.clean other.c &&\n'> <'\tgit clean "*.clean" &&\n'> 
          <'\ttest -f Makefile &&\n'> <'\ttest -f README &&\n'> <'\ttest -f src/part1.c &&\n'> <'\ttest -f src/part2.c &&\n'> 
          <'\ttest ! -f a.clean &&\n'> <'\ttest ! -f b.clean &&\n'> <'\ttest -f other.c\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git clean -n'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir -p build docs &&\n'> 
          <'\ttouch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&\n'> <'\tgit clean -n &&\n'> <'\ttest -f Makefile &&\n'> <'\ttest -f README &&\n'> 
          <'\ttest -f src/part1.c &&\n'> <'\ttest -f src/part2.c &&\n'> <'\ttest -f a.out &&\n'> <'\ttest -f src/part3.c &&\n'> 
          <'\ttest -f docs/manual.txt &&\n'> <'\ttest -f obj.o &&\n'> <'\ttest -f build/lib.so\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git clean -d'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir -p build docs &&\n'> 
          <'\ttouch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&\n'> <'\tgit clean -d &&\n'> <'\ttest -f Makefile &&\n'> <'\ttest -f README &&\n'> 
          <'\ttest -f src/part1.c &&\n'> <'\ttest -f src/part2.c &&\n'> <'\ttest ! -f a.out &&\n'> <'\ttest ! -f src/part3.c &&\n'> 
          <'\ttest ! -d docs &&\n'> <'\ttest -f obj.o &&\n'> <'\ttest -f build/lib.so\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git clean -d src/ examples/'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir -p build docs examples &&\n'> 
          <'\ttouch a.out src/part3.c docs/manual.txt obj.o build/lib.so examples/1.c &&\n'> <'\tgit clean -d src/ examples/ &&\n'> <'\ttest -f Makefile &&\n'> <'\ttest -f README &&\n'> 
          <'\ttest -f src/part1.c &&\n'> <'\ttest -f src/part2.c &&\n'> <'\ttest -f a.out &&\n'> <'\ttest ! -f src/part3.c &&\n'> 
          <'\ttest ! -f examples/1.c &&\n'> <'\ttest -f docs/manual.txt &&\n'> <'\ttest -f obj.o &&\n'> <'\ttest -f build/lib.so\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git clean -x'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir -p build docs &&\n'> 
          <'\ttouch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&\n'> <'\tgit clean -x &&\n'> <'\ttest -f Makefile &&\n'> <'\ttest -f README &&\n'> 
          <'\ttest -f src/part1.c &&\n'> <'\ttest -f src/part2.c &&\n'> <'\ttest ! -f a.out &&\n'> <'\ttest ! -f src/part3.c &&\n'> 
          <'\ttest -f docs/manual.txt &&\n'> <'\ttest ! -f obj.o &&\n'> <'\ttest -f build/lib.so\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git clean -d -x'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir -p build docs &&\n'> 
          <'\ttouch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&\n'> <'\tgit clean -d -x &&\n'> <'\ttest -f Makefile &&\n'> <'\ttest -f README &&\n'> 
          <'\ttest -f src/part1.c &&\n'> <'\ttest -f src/part2.c &&\n'> <'\ttest ! -f a.out &&\n'> <'\ttest ! -f src/part3.c &&\n'> 
          <'\ttest ! -d docs &&\n'> <'\ttest ! -f obj.o &&\n'> <'\ttest ! -d build\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git clean -d -x with ignored tracked directory'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir -p build docs &&\n'> 
          <'\ttouch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&\n'> <'\tgit clean -d -x -e src &&\n'> <'\ttest -f Makefile &&\n'> <'\ttest -f README &&\n'> 
          <'\ttest -f src/part1.c &&\n'> <'\ttest -f src/part2.c &&\n'> <'\ttest ! -f a.out &&\n'> <'\ttest -f src/part3.c &&\n'> 
          <'\ttest ! -d docs &&\n'> <'\ttest ! -f obj.o &&\n'> <'\ttest ! -d build\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git clean -X'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir -p build docs &&\n'> 
          <'\ttouch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&\n'> <'\tgit clean -X &&\n'> <'\ttest -f Makefile &&\n'> <'\ttest -f README &&\n'> 
          <'\ttest -f src/part1.c &&\n'> <'\ttest -f src/part2.c &&\n'> <'\ttest -f a.out &&\n'> <'\ttest -f src/part3.c &&\n'> 
          <'\ttest -f docs/manual.txt &&\n'> <'\ttest ! -f obj.o &&\n'> <'\ttest -f build/lib.so\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git clean -d -X'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir -p build docs &&\n'> 
          <'\ttouch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&\n'> <'\tgit clean -d -X &&\n'> <'\ttest -f Makefile &&\n'> <'\ttest -f README &&\n'> 
          <'\ttest -f src/part1.c &&\n'> <'\ttest -f src/part2.c &&\n'> <'\ttest -f a.out &&\n'> <'\ttest -f src/part3.c &&\n'> 
          <'\ttest -f docs/manual.txt &&\n'> <'\ttest ! -f obj.o &&\n'> <'\ttest ! -d build\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git clean -d -X with ignored tracked directory'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir -p build docs &&\n'> 
          <'\ttouch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&\n'> <'\tgit clean -d -X -e src &&\n'> <'\ttest -f Makefile &&\n'> <'\ttest -f README &&\n'> 
          <'\ttest -f src/part1.c &&\n'> <'\ttest -f src/part2.c &&\n'> <'\ttest -f a.out &&\n'> <'\ttest ! -f src/part3.c &&\n'> 
          <'\ttest -f docs/manual.txt &&\n'> <'\ttest ! -f obj.o &&\n'> <'\ttest ! -d build\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'clean.requireForce defaults to true'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit config --unset clean.requireForce &&\n'> 
          <'\ttest_must_fail git clean\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <clean.requireForce>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit config clean.requireForce true &&\n'> <'\ttest_must_fail git clean\n'> 
          <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'clean.requireForce and -n'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir -p build docs &&\n'> 
          <'\ttouch a.out src/part3.c docs/manual.txt obj.o build/lib.so &&\n'> <'\tgit clean -n &&\n'> <'\ttest -f Makefile &&\n'> <'\ttest -f README &&\n'> 
          <'\ttest -f src/part1.c &&\n'> <'\ttest -f src/part2.c &&\n'> <'\ttest -f a.out &&\n'> <'\ttest -f src/part3.c &&\n'> 
          <'\ttest -f docs/manual.txt &&\n'> <'\ttest -f obj.o &&\n'> <'\ttest -f build/lib.so\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'clean.requireForce and -f'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tgit clean -f &&\n'> <'\ttest -f README &&\n'> 
          <'\ttest -f src/part1.c &&\n'> <'\ttest -f src/part2.c &&\n'> <'\ttest ! -f a.out &&\n'> <'\ttest ! -f src/part3.c &&\n'> 
          <'\ttest -f docs/manual.txt &&\n'> <'\ttest -f obj.o &&\n'> <'\ttest -f build/lib.so\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(C_LOCALE_OUTPUT)} {(SQ <core.excludesfile>)} 
      {
        (SQ <'\n'> <'\n'> <'\techo excludes >excludes &&\n'> <'\techo included >included &&\n'> 
          <'\tgit config core.excludesfile excludes &&\n'> <'\toutput=$(git clean -n excludes included 2>&1) &&\n'> 
          <'\texpr "$output" : ".*included" >/dev/null &&\n'> <'\t! expr "$output" : ".*excludes" >/dev/null\n'> <'\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SANITY)} {(SQ <'removal failure'>)} 
      {
        (SQ <'\n'> <'\n'> <'\tmkdir foo &&\n'> <'\ttouch foo/bar &&\n'> 
          <'\ttest_when_finished "chmod 755 foo" &&\n'> <'\t(exec <foo/bar &&\n'> <'\t chmod 0 foo &&\n'> <'\t test_must_fail git clean -f -d)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'nested git work tree'>)} 
      {
        (SQ <'\n'> <'\trm -fr foo bar baz &&\n'> <'\tmkdir -p foo bar baz/boo &&\n'> <'\t(\n'> 
          <'\t\tcd foo &&\n'> <'\t\tgit init &&\n'> <'\t\ttest_commit nested hello.world\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd bar &&\n'> 
          <'\t\t>goodbye.people\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd baz/boo &&\n'> <'\t\tgit init &&\n'> 
          <'\t\ttest_commit deeply.nested deeper.world\n'> <'\t) &&\n'> <'\tgit clean -f -d &&\n'> <'\ttest -f foo/.git/index &&\n'> 
          <'\ttest -f foo/hello.world &&\n'> <'\ttest -f baz/boo/.git/index &&\n'> <'\ttest -f baz/boo/deeper.world &&\n'> <'\t! test -d bar\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'should clean things that almost look like git but are not'>)} 
      {
        (SQ <'\n'> <'\trm -fr almost_git almost_bare_git almost_submodule &&\n'> 
          <'\tmkdir -p almost_git/.git/objects &&\n'> <'\tmkdir -p almost_git/.git/refs &&\n'> <'\tcat >almost_git/.git/HEAD <<-\\EOF &&\n'> <'\tgarbage\n'> 
          <'\tEOF\n'> <'\tcp -r almost_git/.git/ almost_bare_git &&\n'> <'\tmkdir almost_submodule/ &&\n'> 
          <'\tcat >almost_submodule/.git <<-\\EOF &&\n'> <'\tgarbage\n'> <'\tEOF\n'> <'\ttest_when_finished "rm -rf almost_*" &&\n'> <'\tgit clean -f -d &&\n'> 
          <'\ttest_path_is_missing almost_git &&\n'> <'\ttest_path_is_missing almost_bare_git &&\n'> <'\ttest_path_is_missing almost_submodule\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'should not clean submodules'>)} 
      {
        (SQ <'\n'> <'\trm -fr repo to_clean sub1 sub2 &&\n'> <'\tmkdir repo to_clean &&\n'> <'\t(\n'> 
          <'\t\tcd repo &&\n'> <'\t\tgit init &&\n'> <'\t\ttest_commit msg hello.world\n'> <'\t) &&\n'> 
          <'\tgit submodule add ./repo/.git sub1 &&\n'> <'\tgit commit -m "sub1" &&\n'> <'\tgit branch before_sub2 &&\n'> 
          <'\tgit submodule add ./repo/.git sub2 &&\n'> <'\tgit commit -m "sub2" &&\n'> <'\tgit checkout before_sub2 &&\n'> 
          <'\t>to_clean/should_clean.this &&\n'> <'\tgit clean -f -d &&\n'> <'\ttest_path_is_file repo/.git/index &&\n'> 
          <'\ttest_path_is_file repo/hello.world &&\n'> <'\ttest_path_is_file sub1/.git &&\n'> <'\ttest_path_is_file sub1/hello.world &&\n'> 
          <'\ttest_path_is_file sub2/.git &&\n'> <'\ttest_path_is_file sub2/hello.world &&\n'> <'\ttest_path_is_missing to_clean\n'>
        )
      }
    )
    (C {(test_expect_success)} {(POSIXPERM) (Lit_Comma ',') (SANITY)} 
      {(SQ <'should avoid cleaning possible submodules'>)} 
      {
        (SQ <'\n'> <'\trm -fr to_clean possible_sub1 &&\n'> <'\tmkdir to_clean possible_sub1 &&\n'> 
          <'\ttest_when_finished "rm -rf possible_sub*" &&\n'> <'\techo "gitdir: foo" >possible_sub1/.git &&\n'> <'\t>possible_sub1/hello.world &&\n'> 
          <'\tchmod 0 possible_sub1/.git &&\n'> <'\t>to_clean/should_clean.this &&\n'> <'\tgit clean -f -d &&\n'> 
          <'\ttest_path_is_file possible_sub1/.git &&\n'> <'\ttest_path_is_file possible_sub1/hello.world &&\n'> <'\ttest_path_is_missing to_clean\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'nested (empty) git should be kept'>)} 
      {
        (SQ <'\n'> <'\trm -fr empty_repo to_clean &&\n'> <'\tgit init empty_repo &&\n'> 
          <'\tmkdir to_clean &&\n'> <'\t>to_clean/should_clean.this &&\n'> <'\tgit clean -f -d &&\n'> 
          <'\ttest_path_is_file empty_repo/.git/HEAD &&\n'> <'\ttest_path_is_missing to_clean\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'nested bare repositories should be cleaned'>)} 
      {
        (SQ <'\n'> <'\trm -fr bare1 bare2 subdir &&\n'> <'\tgit init --bare bare1 &&\n'> 
          <'\tgit clone --local --bare . bare2 &&\n'> <'\tmkdir subdir &&\n'> <'\tcp -r bare2 subdir/bare3 &&\n'> <'\tgit clean -f -d &&\n'> 
          <'\ttest_path_is_missing bare1 &&\n'> <'\ttest_path_is_missing bare2 &&\n'> <'\ttest_path_is_missing subdir\n'>
        )
      }
    )
    (C {(test_expect_failure)} 
      {(SQ <'nested (empty) bare repositories should be cleaned even when in .git'>)} 
      {
        (SQ <'\n'> <'\trm -fr strange_bare &&\n'> <'\tmkdir strange_bare &&\n'> 
          <'\tgit init --bare strange_bare/.git &&\n'> <'\tgit clean -f -d &&\n'> <'\ttest_path_is_missing strange_bare\n'>
        )
      }
    )
    (C {(test_expect_failure)} 
      {(SQ <'nested (non-empty) bare repositories should be cleaned even when in .git'>)} 
      {
        (SQ <'\n'> <'\trm -fr strange_bare &&\n'> <'\tmkdir strange_bare &&\n'> 
          <'\tgit clone --local --bare . strange_bare/.git &&\n'> <'\tgit clean -f -d &&\n'> <'\ttest_path_is_missing strange_bare\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'giving path in nested git work tree will remove it'>)} 
      {
        (SQ <'\n'> <'\trm -fr repo &&\n'> <'\tmkdir repo &&\n'> <'\t(\n'> <'\t\tcd repo &&\n'> 
          <'\t\tgit init &&\n'> <'\t\tmkdir -p bar/baz &&\n'> <'\t\ttest_commit msg bar/baz/hello.world\n'> <'\t) &&\n'> 
          <'\tgit clean -f -d repo/bar/baz &&\n'> <'\ttest_path_is_file repo/.git/HEAD &&\n'> <'\ttest_path_is_dir repo/bar/ &&\n'> 
          <'\ttest_path_is_missing repo/bar/baz\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'giving path to nested .git will not remove it'>)} 
      {
        (SQ <'\n'> <'\trm -fr repo &&\n'> <'\tmkdir repo untracked &&\n'> <'\t(\n'> <'\t\tcd repo &&\n'> 
          <'\t\tgit init &&\n'> <'\t\ttest_commit msg hello.world\n'> <'\t) &&\n'> <'\tgit clean -f -d repo/.git &&\n'> 
          <'\ttest_path_is_file repo/.git/HEAD &&\n'> <'\ttest_path_is_dir repo/.git/refs &&\n'> <'\ttest_path_is_dir repo/.git/objects &&\n'> 
          <'\ttest_path_is_dir untracked/\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'giving path to nested .git/ will remove contents'>)} 
      {
        (SQ <'\n'> <'\trm -fr repo untracked &&\n'> <'\tmkdir repo untracked &&\n'> <'\t(\n'> 
          <'\t\tcd repo &&\n'> <'\t\tgit init &&\n'> <'\t\ttest_commit msg hello.world\n'> <'\t) &&\n'> 
          <'\tgit clean -f -d repo/.git/ &&\n'> <'\ttest_path_is_dir repo/.git &&\n'> <'\ttest_dir_is_empty repo/.git &&\n'> 
          <'\ttest_path_is_dir untracked/\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'force removal of nested git work tree'>)} 
      {
        (SQ <'\n'> <'\trm -fr foo bar baz &&\n'> <'\tmkdir -p foo bar baz/boo &&\n'> <'\t(\n'> 
          <'\t\tcd foo &&\n'> <'\t\tgit init &&\n'> <'\t\ttest_commit nested hello.world\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd bar &&\n'> 
          <'\t\t>goodbye.people\n'> <'\t) &&\n'> <'\t(\n'> <'\t\tcd baz/boo &&\n'> <'\t\tgit init &&\n'> 
          <'\t\ttest_commit deeply.nested deeper.world\n'> <'\t) &&\n'> <'\tgit clean -f -f -d &&\n'> <'\t! test -d foo &&\n'> <'\t! test -d bar &&\n'> 
          <'\t! test -d baz\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git clean -e'>)} 
      {
        (SQ <'\n'> <'\trm -fr repo &&\n'> <'\tmkdir repo &&\n'> <'\t(\n'> <'\t\tcd repo &&\n'> 
          <'\t\tgit init &&\n'> <'\t\ttouch known 1 2 3 &&\n'> <'\t\tgit add known &&\n'> <'\t\tgit clean -f -e 1 -e 2 &&\n'> 
          <'\t\ttest -e 1 &&\n'> <'\t\ttest -e 2 &&\n'> <'\t\t! (test -e 3) &&\n'> <'\t\ttest -e known\n'> <'\t)\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SANITY)} {(SQ <'git clean -d with an unreadable empty directory'>)} 
      {
        (SQ <'\n'> <'\tmkdir foo &&\n'> <'\tchmod a= foo &&\n'> <'\tgit clean -dfx foo &&\n'> 
          <'\t! test -d foo\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git clean -d respects pathspecs (dir is prefix of pathspec)'>)} 
      {
        (SQ <'\n'> <'\tmkdir -p foo &&\n'> <'\tmkdir -p foobar &&\n'> <'\tgit clean -df foobar &&\n'> 
          <'\ttest_path_is_dir foo &&\n'> <'\ttest_path_is_missing foobar\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'git clean -d respects pathspecs (pathspec is prefix of dir)'>)} 
      {
        (SQ <'\n'> <'\tmkdir -p foo &&\n'> <'\tmkdir -p foobar &&\n'> <'\tgit clean -df foo &&\n'> 
          <'\ttest_path_is_missing foo &&\n'> <'\ttest_path_is_dir foobar\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)