7615cf94d2
Fix memory leaks resulting from a missing clear_pathspec().
- archive.c: Plug a leak in the "struct archiver_args", and
clear_pathspec() the "pathspec" member that the "parse_pathspec_arg()"
call in this function populates.
- builtin/clean.c: Fix a memory leak that's been with us since
893d839970
(clean: convert to use parse_pathspec, 2013-07-14).
- builtin/reset.c: Add clear_pathspec() calls to cmd_reset(),
including to the codepaths where we'd return early.
- builtin/stash.c: Call clear_pathspec() on the pathspec initialized
in push_stash().
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
487 lines
11 KiB
Bash
Executable File
487 lines
11 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
test_description='git clean -i basic tests'
|
|
|
|
TEST_PASSES_SANITIZE_LEAK=true
|
|
. ./test-lib.sh
|
|
. "$TEST_DIRECTORY"/lib-terminal.sh
|
|
|
|
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 -i (c: clean hotkey)' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
|
|
docs/manual.txt obj.o build/lib.so &&
|
|
echo c | git clean -i &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test ! -f a.out &&
|
|
test -f docs/manual.txt &&
|
|
test ! -f src/part3.c &&
|
|
test ! -f src/part3.h &&
|
|
test ! -f src/part4.c &&
|
|
test ! -f src/part4.h &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git clean -i (cl: clean prefix)' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
|
|
docs/manual.txt obj.o build/lib.so &&
|
|
echo cl | git clean -i &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test ! -f a.out &&
|
|
test -f docs/manual.txt &&
|
|
test ! -f src/part3.c &&
|
|
test ! -f src/part3.h &&
|
|
test ! -f src/part4.c &&
|
|
test ! -f src/part4.h &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git clean -i (quit)' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
|
|
docs/manual.txt obj.o build/lib.so &&
|
|
echo quit | git clean -i &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test -f a.out &&
|
|
test -f docs/manual.txt &&
|
|
test -f src/part3.c &&
|
|
test -f src/part3.h &&
|
|
test -f src/part4.c &&
|
|
test -f src/part4.h &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git clean -i (Ctrl+D)' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
|
|
docs/manual.txt obj.o build/lib.so &&
|
|
echo "\04" | git clean -i &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test -f a.out &&
|
|
test -f docs/manual.txt &&
|
|
test -f src/part3.c &&
|
|
test -f src/part3.h &&
|
|
test -f src/part4.c &&
|
|
test -f src/part4.h &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git clean -id (filter all)' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
|
|
docs/manual.txt obj.o build/lib.so &&
|
|
test_write_lines f "*" "" c |
|
|
git clean -id &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test -f a.out &&
|
|
test -f docs/manual.txt &&
|
|
test -f src/part3.c &&
|
|
test -f src/part3.h &&
|
|
test -f src/part4.c &&
|
|
test -f src/part4.h &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git clean -id (filter patterns)' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
|
|
docs/manual.txt obj.o build/lib.so &&
|
|
test_write_lines f "part3.* *.out" "" c |
|
|
git clean -id &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test -f a.out &&
|
|
test ! -f docs/manual.txt &&
|
|
test -f src/part3.c &&
|
|
test -f src/part3.h &&
|
|
test ! -f src/part4.c &&
|
|
test ! -f src/part4.h &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git clean -id (filter patterns 2)' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
|
|
docs/manual.txt obj.o build/lib.so &&
|
|
test_write_lines f "* !*.out" "" c |
|
|
git clean -id &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test ! -f a.out &&
|
|
test -f docs/manual.txt &&
|
|
test -f src/part3.c &&
|
|
test -f src/part3.h &&
|
|
test -f src/part4.c &&
|
|
test -f src/part4.h &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git clean -id (select - all)' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
|
|
docs/manual.txt obj.o build/lib.so &&
|
|
test_write_lines s "*" "" c |
|
|
git clean -id &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test ! -f a.out &&
|
|
test ! -f docs/manual.txt &&
|
|
test ! -f src/part3.c &&
|
|
test ! -f src/part3.h &&
|
|
test ! -f src/part4.c &&
|
|
test ! -f src/part4.h &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git clean -id (select - none)' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
|
|
docs/manual.txt obj.o build/lib.so &&
|
|
test_write_lines s "" c |
|
|
git clean -id &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test -f a.out &&
|
|
test -f docs/manual.txt &&
|
|
test -f src/part3.c &&
|
|
test -f src/part3.h &&
|
|
test -f src/part4.c &&
|
|
test -f src/part4.h &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git clean -id (select - number)' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
|
|
docs/manual.txt obj.o build/lib.so &&
|
|
test_write_lines s 3 "" c |
|
|
git clean -id &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test -f a.out &&
|
|
test -f docs/manual.txt &&
|
|
test ! -f src/part3.c &&
|
|
test -f src/part3.h &&
|
|
test -f src/part4.c &&
|
|
test -f src/part4.h &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git clean -id (select - number 2)' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
|
|
docs/manual.txt obj.o build/lib.so &&
|
|
test_write_lines s "2 3" 5 "" c |
|
|
git clean -id &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test -f a.out &&
|
|
test ! -f docs/manual.txt &&
|
|
test ! -f src/part3.c &&
|
|
test -f src/part3.h &&
|
|
test ! -f src/part4.c &&
|
|
test -f src/part4.h &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git clean -id (select - number 3)' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
|
|
docs/manual.txt obj.o build/lib.so &&
|
|
test_write_lines s "3,4 5" "" c |
|
|
git clean -id &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test -f a.out &&
|
|
test -f docs/manual.txt &&
|
|
test ! -f src/part3.c &&
|
|
test ! -f src/part3.h &&
|
|
test ! -f src/part4.c &&
|
|
test -f src/part4.h &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git clean -id (select - filenames)' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out foo.txt bar.txt baz.txt &&
|
|
test_write_lines s "a.out fo ba bar" "" c |
|
|
git clean -id &&
|
|
test -f Makefile &&
|
|
test ! -f a.out &&
|
|
test ! -f foo.txt &&
|
|
test ! -f bar.txt &&
|
|
test -f baz.txt &&
|
|
rm baz.txt
|
|
|
|
'
|
|
|
|
test_expect_success 'git clean -id (select - range)' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
|
|
docs/manual.txt obj.o build/lib.so &&
|
|
test_write_lines s "1,3-4" 2 "" c |
|
|
git clean -id &&
|
|
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/part3.h &&
|
|
test -f src/part4.c &&
|
|
test -f src/part4.h &&
|
|
test ! -f docs/manual.txt &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git clean -id (select - range 2)' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
|
|
docs/manual.txt obj.o build/lib.so &&
|
|
test_write_lines s "4- 1" "" c |
|
|
git clean -id &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test ! -f a.out &&
|
|
test -f docs/manual.txt &&
|
|
test -f src/part3.c &&
|
|
test ! -f src/part3.h &&
|
|
test ! -f src/part4.c &&
|
|
test ! -f src/part4.h &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git clean -id (inverse select)' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
|
|
docs/manual.txt obj.o build/lib.so &&
|
|
test_write_lines s "*" "-5- 1 -2" "" c |
|
|
git clean -id &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test ! -f a.out &&
|
|
test -f docs/manual.txt &&
|
|
test ! -f src/part3.c &&
|
|
test ! -f src/part3.h &&
|
|
test -f src/part4.c &&
|
|
test -f src/part4.h &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git clean -id (ask)' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
|
|
docs/manual.txt obj.o build/lib.so &&
|
|
test_write_lines a Y y no yes bad "" |
|
|
git clean -id &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test ! -f a.out &&
|
|
test ! -f docs/manual.txt &&
|
|
test -f src/part3.c &&
|
|
test ! -f src/part3.h &&
|
|
test -f src/part4.c &&
|
|
test -f src/part4.h &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git clean -id (ask - Ctrl+D)' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
|
|
docs/manual.txt obj.o build/lib.so &&
|
|
test_write_lines a Y no yes "\04" |
|
|
git clean -id &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test ! -f a.out &&
|
|
test -f docs/manual.txt &&
|
|
test ! -f src/part3.c &&
|
|
test -f src/part3.h &&
|
|
test -f src/part4.c &&
|
|
test -f src/part4.h &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git clean -id with prefix and path (filter)' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
|
|
docs/manual.txt obj.o build/lib.so &&
|
|
(cd build/ &&
|
|
test_write_lines f docs "*.h" "" c |
|
|
git clean -id ..) &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test ! -f a.out &&
|
|
test -f docs/manual.txt &&
|
|
test ! -f src/part3.c &&
|
|
test -f src/part3.h &&
|
|
test ! -f src/part4.c &&
|
|
test -f src/part4.h &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git clean -id with prefix and path (select by name)' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
|
|
docs/manual.txt obj.o build/lib.so &&
|
|
(cd build/ &&
|
|
test_write_lines s ../docs/ ../src/part3.c ../src/part4.c "" c |
|
|
git clean -id ..) &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test -f a.out &&
|
|
test ! -f docs/manual.txt &&
|
|
test ! -f src/part3.c &&
|
|
test -f src/part3.h &&
|
|
test ! -f src/part4.c &&
|
|
test -f src/part4.h &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success 'git clean -id with prefix and path (ask)' '
|
|
|
|
mkdir -p build docs &&
|
|
touch a.out src/part3.c src/part3.h src/part4.c src/part4.h \
|
|
docs/manual.txt obj.o build/lib.so &&
|
|
(cd build/ &&
|
|
test_write_lines a Y y no yes bad "" |
|
|
git clean -id ..) &&
|
|
test -f Makefile &&
|
|
test -f README &&
|
|
test -f src/part1.c &&
|
|
test -f src/part2.c &&
|
|
test ! -f a.out &&
|
|
test ! -f docs/manual.txt &&
|
|
test -f src/part3.c &&
|
|
test ! -f src/part3.h &&
|
|
test -f src/part4.c &&
|
|
test -f src/part4.h &&
|
|
test -f obj.o &&
|
|
test -f build/lib.so
|
|
|
|
'
|
|
|
|
test_expect_success TTY 'git clean -i paints the header in HEADER color' '
|
|
>a.out &&
|
|
echo q |
|
|
test_terminal git clean -i |
|
|
test_decode_color |
|
|
head -n 1 >header &&
|
|
# not i18ngrep
|
|
grep "^<BOLD>" header
|
|
'
|
|
|
|
test_done
|