#!/bin/sh test_description='git clean -i basic tests' . ./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 "^" header ' test_done