#!/bin/sh test_description='test re-include patterns' . ./test-lib.sh test_expect_success 'setup' ' mkdir -p fooo foo/bar tmp && touch abc foo/def foo/bar/ghi foo/bar/bar ' test_expect_success 'no match, do not enter subdir and waste cycles' ' cat >.gitignore <<-\EOF && /tmp /foo !fooo/bar/bar EOF GIT_TRACE_EXCLUDE="$(pwd)/tmp/trace" git ls-files -o --exclude-standard >tmp/actual && ! grep "enter .foo/.\$" tmp/trace && cat >tmp/expected <<-\EOF && .gitignore abc EOF test_cmp tmp/expected tmp/actual ' test_expect_success 'match, excluded by literal pathname pattern' ' cat >.gitignore <<-\EOF && /tmp /fooo /foo !foo/bar/bar EOF cat >fooo/.gitignore <<-\EOF && !/* EOF git ls-files -o --exclude-standard >tmp/actual && cat >tmp/expected <<-\EOF && .gitignore abc foo/bar/bar EOF test_cmp tmp/expected tmp/actual ' test_expect_success 'match, excluded by wildcard pathname pattern' ' cat >.gitignore <<-\EOF && /tmp /fooo /fo? !foo/bar/bar EOF git ls-files -o --exclude-standard >tmp/actual && cat >tmp/expected <<-\EOF && .gitignore abc foo/bar/bar EOF test_cmp tmp/expected tmp/actual ' test_expect_success 'match, excluded by literal basename pattern' ' cat >.gitignore <<-\EOF && /tmp /fooo foo !foo/bar/bar EOF git ls-files -o --exclude-standard >tmp/actual && cat >tmp/expected <<-\EOF && .gitignore abc foo/bar/bar EOF test_cmp tmp/expected tmp/actual ' test_expect_success 'match, excluded by wildcard basename pattern' ' cat >.gitignore <<-\EOF && /tmp /fooo fo? !foo/bar/bar EOF git ls-files -o --exclude-standard >tmp/actual && cat >tmp/expected <<-\EOF && .gitignore abc foo/bar/bar EOF test_cmp tmp/expected tmp/actual ' test_expect_success 'match, excluded by literal mustbedir, basename pattern' ' cat >.gitignore <<-\EOF && /tmp /fooo foo/ !foo/bar/bar EOF git ls-files -o --exclude-standard >tmp/actual && cat >tmp/expected <<-\EOF && .gitignore abc foo/bar/bar EOF test_cmp tmp/expected tmp/actual ' test_expect_success 'match, excluded by literal mustbedir, pathname pattern' ' cat >.gitignore <<-\EOF && /tmp /fooo /foo/ !foo/bar/bar EOF git ls-files -o --exclude-standard >tmp/actual && cat >tmp/expected <<-\EOF && .gitignore abc foo/bar/bar EOF test_cmp tmp/expected tmp/actual ' test_expect_success 'prepare for nested negatives' ' cat >.git/info/exclude <<-\EOF && /.gitignore /tmp /foo /abc EOF git ls-files -o --exclude-standard >tmp/actual && test_must_be_empty tmp/actual && mkdir -p 1/2/3/4 && touch 1/f 1/2/f 1/2/3/f 1/2/3/4/f ' test_expect_success 'match, literal pathname, nested negatives' ' cat >.gitignore <<-\EOF && /1 !1/2 1/2/3 !1/2/3/4 EOF git ls-files -o --exclude-standard >tmp/actual && cat >tmp/expected <<-\EOF && 1/2/3/4/f 1/2/f EOF test_cmp tmp/expected tmp/actual ' test_done