diff options
Diffstat (limited to 'third_party/git/t/t7300-clean.sh')
-rwxr-xr-x | third_party/git/t/t7300-clean.sh | 749 |
1 files changed, 0 insertions, 749 deletions
diff --git a/third_party/git/t/t7300-clean.sh b/third_party/git/t/t7300-clean.sh deleted file mode 100755 index cb5e34d94c3a..000000000000 --- a/third_party/git/t/t7300-clean.sh +++ /dev/null @@ -1,749 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2007 Michael Spang -# - -test_description='git clean basic tests' - -. ./test-lib.sh - -git config clean.requireForce no - -test_expect_success 'setup' ' - - mkdir -p src && - touch src/part1.c Makefile && - echo build >.gitignore && - echo \*.o >>.gitignore && - git add . && - git commit -m setup && - touch src/part2.c README && - git add . - -' - -test_expect_success 'git clean with skip-worktree .gitignore' ' - git update-index --skip-worktree .gitignore && - rm .gitignore && - mkdir -p build docs && - touch a.out src/part3.c docs/manual.txt obj.o build/lib.so && - git clean && - 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 -f build/lib.so && - git update-index --no-skip-worktree .gitignore && - git checkout .gitignore -' - -test_expect_success 'git clean' ' - - mkdir -p build docs && - touch a.out src/part3.c docs/manual.txt obj.o build/lib.so && - git clean && - 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 -f build/lib.so - -' - -test_expect_success 'git clean src/' ' - - mkdir -p build docs && - touch a.out src/part3.c docs/manual.txt obj.o build/lib.so && - git clean 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 -f build/lib.so - -' - -test_expect_success 'git clean src/ src/' ' - - mkdir -p build docs && - touch a.out src/part3.c docs/manual.txt obj.o build/lib.so && - git clean src/ 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 -f build/lib.so - -' - -test_expect_success 'git clean with prefix' ' - - mkdir -p build docs src/test && - touch a.out src/part3.c docs/manual.txt obj.o build/lib.so src/test/1.c && - (cd src/ && git clean) && - 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 src/test/1.c && - test -f docs/manual.txt && - test -f obj.o && - test -f build/lib.so - -' - -test_expect_success C_LOCALE_OUTPUT 'git clean with relative prefix' ' - - mkdir -p build docs && - touch a.out src/part3.c docs/manual.txt obj.o build/lib.so && - would_clean=$( - cd docs && - git clean -n ../src | - grep part3 | - sed -n -e "s|^Would remove ||p" - ) && - verbose test "$would_clean" = ../src/part3.c -' - -test_expect_success C_LOCALE_OUTPUT 'git clean with absolute path' ' - - mkdir -p build docs && - touch a.out src/part3.c docs/manual.txt obj.o build/lib.so && - would_clean=$( - cd docs && - git clean -n "$(pwd)/../src" | - grep part3 | - sed -n -e "s|^Would remove ||p" - ) && - verbose test "$would_clean" = ../src/part3.c -' - -test_expect_success 'git clean with out of work tree relative path' ' - - mkdir -p build docs && - touch a.out src/part3.c docs/manual.txt obj.o build/lib.so && - ( - cd docs && - test_must_fail git clean -n ../.. - ) -' - -test_expect_success 'git clean with out of work tree absolute path' ' - - mkdir -p build docs && - touch a.out src/part3.c docs/manual.txt obj.o build/lib.so && - dd=$(cd .. && pwd) && - ( - cd docs && - test_must_fail git clean -n $dd - ) -' - -test_expect_success 'git clean -d with prefix and path' ' - - mkdir -p build docs src/feature && - touch a.out src/part3.c src/feature/file.c docs/manual.txt obj.o build/lib.so && - (cd src/ && git clean -d feature/) && - 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 src/feature/file.c && - test -f docs/manual.txt && - test -f obj.o && - test -f build/lib.so - -' - -test_expect_success SYMLINKS 'git clean symbolic link' ' - - mkdir -p build docs && - touch a.out src/part3.c docs/manual.txt obj.o build/lib.so && - ln -s docs/manual.txt src/part4.c && - git clean && - 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 src/part4.c && - test -f docs/manual.txt && - test -f obj.o && - test -f build/lib.so - -' - -test_expect_success 'git clean with wildcard' ' - - touch a.clean b.clean other.c && - git clean "*.clean" && - test -f Makefile && - test -f README && - test -f src/part1.c && - test -f src/part2.c && - test ! -f a.clean && - test ! -f b.clean && - test -f other.c - -' - -test_expect_success 'git clean -n' ' - - mkdir -p build docs && - touch a.out src/part3.c docs/manual.txt obj.o build/lib.so && - git clean -n && - 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 -f build/lib.so - -' - -test_expect_success 'git clean -d' ' - - mkdir -p build docs && - touch a.out src/part3.c docs/manual.txt obj.o build/lib.so && - git clean -d && - 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 -f build/lib.so - -' - -test_expect_success 'git clean -d src/ examples/' ' - - mkdir -p build docs examples && - touch a.out src/part3.c docs/manual.txt obj.o build/lib.so examples/1.c && - git clean -d src/ examples/ && - 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 examples/1.c && - test -f docs/manual.txt && - test -f obj.o && - test -f build/lib.so - -' - -test_expect_success 'git clean -x' ' - - mkdir -p build docs && - touch a.out src/part3.c docs/manual.txt obj.o build/lib.so && - git clean -x && - 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 -f build/lib.so - -' - -test_expect_success 'git clean -d -x' ' - - mkdir -p build docs && - touch a.out src/part3.c docs/manual.txt obj.o build/lib.so && - git clean -d -x && - 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 -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 && - touch a.out src/part3.c docs/manual.txt obj.o build/lib.so && - git clean -X && - 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 -f build/lib.so - -' - -test_expect_success 'git clean -d -X' ' - - mkdir -p build docs && - touch a.out src/part3.c docs/manual.txt obj.o build/lib.so && - git clean -d -X && - 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 '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 && - test_must_fail git clean - -' - -test_expect_success 'clean.requireForce' ' - - git config clean.requireForce true && - test_must_fail git clean - -' - -test_expect_success 'clean.requireForce and -n' ' - - mkdir -p build docs && - touch a.out src/part3.c docs/manual.txt obj.o build/lib.so && - git clean -n && - 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 -f build/lib.so - -' - -test_expect_success 'clean.requireForce and -f' ' - - git clean -f && - 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 -f build/lib.so - -' - -test_expect_success C_LOCALE_OUTPUT 'core.excludesfile' ' - - echo excludes >excludes && - echo included >included && - git config core.excludesfile excludes && - output=$(git clean -n excludes included 2>&1) && - expr "$output" : ".*included" >/dev/null && - ! expr "$output" : ".*excludes" >/dev/null - -' - -test_expect_success SANITY 'removal failure' ' - - mkdir foo && - touch foo/bar && - test_when_finished "chmod 755 foo" && - (exec <foo/bar && - chmod 0 foo && - test_must_fail git clean -f -d) -' - -test_expect_success 'nested git work tree' ' - rm -fr foo bar baz && - mkdir -p foo bar baz/boo && - ( - cd foo && - git init && - test_commit nested hello.world - ) && - ( - cd bar && - >goodbye.people - ) && - ( - cd baz/boo && - git init && - test_commit deeply.nested deeper.world - ) && - git clean -f -d && - test -f foo/.git/index && - test -f foo/hello.world && - test -f baz/boo/.git/index && - test -f baz/boo/deeper.world && - ! 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,SANITY '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 NOT 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_file repo/bar/baz/hello.world -' - -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 NOT 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_path_is_file repo/.git/HEAD && - 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 && - test_commit nested hello.world - ) && - ( - cd bar && - >goodbye.people - ) && - ( - cd baz/boo && - git init && - test_commit deeply.nested deeper.world - ) && - git clean -f -f -d && - ! test -d foo && - ! test -d bar && - ! test -d baz -' - -test_expect_success 'git clean -e' ' - rm -fr repo && - mkdir repo && - ( - cd repo && - git init && - touch known 1 2 3 && - git add known && - git clean -f -e 1 -e 2 && - test -e 1 && - test -e 2 && - ! (test -e 3) && - test -e known - ) -' - -test_expect_success SANITY 'git clean -d with an unreadable empty directory' ' - mkdir foo && - chmod a= foo && - git clean -dfx foo && - ! 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_expect_success 'git clean -d skips untracked dirs containing ignored files' ' - echo /foo/bar >.gitignore && - echo ignoreme >>.gitignore && - rm -rf foo && - mkdir -p foo/a/aa/aaa foo/b/bb/bbb && - touch foo/bar foo/baz foo/a/aa/ignoreme foo/b/ignoreme foo/b/bb/1 foo/b/bb/2 && - git clean -df && - test_path_is_dir foo && - test_path_is_file foo/bar && - test_path_is_missing foo/baz && - test_path_is_file foo/a/aa/ignoreme && - test_path_is_missing foo/a/aa/aaa && - test_path_is_file foo/b/ignoreme && - test_path_is_missing foo/b/bb -' - -test_expect_success 'git clean -d skips nested repo containing ignored files' ' - test_when_finished "rm -rf nested-repo-with-ignored-file" && - - git init nested-repo-with-ignored-file && - ( - cd nested-repo-with-ignored-file && - >file && - git add file && - git commit -m Initial && - - # This file is ignored by a .gitignore rule in the outer repo - # added in the previous test. - >ignoreme - ) && - - git clean -fd && - - test_path_is_file nested-repo-with-ignored-file/.git/index && - test_path_is_file nested-repo-with-ignored-file/ignoreme && - test_path_is_file nested-repo-with-ignored-file/file -' - -test_expect_success 'git clean handles being told what to clean' ' - mkdir -p d1 d2 && - touch d1/ut d2/ut && - git clean -f */ut && - test_path_is_missing d1/ut && - test_path_is_missing d2/ut -' - -test_expect_success 'git clean handles being told what to clean, with -d' ' - mkdir -p d1 d2 && - touch d1/ut d2/ut && - git clean -ffd */ut && - test_path_is_missing d1/ut && - test_path_is_missing d2/ut -' - -test_expect_success 'git clean works if a glob is passed without -d' ' - mkdir -p d1 d2 && - touch d1/ut d2/ut && - git clean -f "*ut" && - test_path_is_missing d1/ut && - test_path_is_missing d2/ut -' - -test_expect_success 'git clean works if a glob is passed with -d' ' - mkdir -p d1 d2 && - touch d1/ut d2/ut && - git clean -ffd "*ut" && - test_path_is_missing d1/ut && - test_path_is_missing d2/ut -' - -test_expect_success MINGW 'handle clean & core.longpaths = false nicely' ' - test_config core.longpaths false && - a50=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa && - mkdir -p $a50$a50/$a50$a50/$a50$a50 && - : >"$a50$a50/test.txt" 2>"$a50$a50/$a50$a50/$a50$a50/test.txt" && - # create a temporary outside the working tree to hide from "git clean" - test_must_fail git clean -xdf 2>.git/err && - # grepping for a strerror string is unportable but it is OK here with - # MINGW prereq - test_i18ngrep "too long" .git/err -' - -test_expect_success 'clean untracked paths by pathspec' ' - git init untracked && - mkdir untracked/dir && - echo >untracked/dir/file.txt && - git -C untracked clean -f dir/file.txt && - ls untracked/dir >actual && - test_must_be_empty actual -' - -test_done |