From 1df092d211868b3b74f5b3981fad9b195a0bedad Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Thu, 28 Jul 2005 23:53:29 -0700 Subject: Documentation and tests: ls-files exclude pattern. Update the tests and documentation to match the new "last one determines its fate" semantics. Signed-off-by: Junio C Hamano diff --git a/Documentation/git-ls-files.txt b/Documentation/git-ls-files.txt index 7ac6c7d..d207219 100644 --- a/Documentation/git-ls-files.txt +++ b/Documentation/git-ls-files.txt @@ -115,14 +115,14 @@ An exclude pattern file used by (2) and (3) contains one pattern per line. A line that starts with a '#' can be used as comment for readability. -The list of patterns that is in effect at a given time is -built and ordered in the following way: +There are three lists of patterns that are in effect at a given +time. They are built and ordered in the following way: - * --exclude= and lines read from --exclude-from= - come at the beginning of the list of patterns, in the order - given on the command line. Patterns that come from the file - specified with --exclude-from are ordered in the same order - as they appear in the file. + * --exclude= from the command line; patterns are + ordered in the same order as they appear on the command line. + + * lines read from --exclude-from=; patterns are ordered + in the same order as they appear in the file. * When --exclude-per-directory= is specified, upon entering a directory that has such a file, its contents are @@ -130,11 +130,12 @@ built and ordered in the following way: are popped off when leaving the directory. Each pattern in the pattern list specifies "a match pattern" and -optionally the fate --- either a file that matches the pattern -is considered excluded or included. By default, this being -"exclude" mechanism, the fate is "excluded". A filename is -examined against the patterns in the list, and the first match -determines its fate. +optionally the fate;n either a file that matches the pattern is +considered excluded or included. A filename is matched against +the patterns in the three lists; the --exclude-from list is +checked first, then the --exclude-per-directory list, and then +finally the --exclude list. The last match determines its fate. +If there is no match in the three lists, the fate is "included". A pattern specified on the command line with --exclude or read from the file specified with --exclude-from is relative to the @@ -168,9 +169,9 @@ An example: *.[oa] $ cat Documentation/.gitignore # ignore generated html files, + *.html # except foo.html which is maintained by hand !foo.html - *.html $ git-ls-files --ignored \ --exclude='Documentation/*.[0-9]' \ --exclude-from=.git/ignore \ diff --git a/t/t3001-ls-files-others-exclude.sh b/t/t3001-ls-files-others-exclude.sh index 4b9380f..dbff346 100755 --- a/t/t3001-ls-files-others-exclude.sh +++ b/t/t3001-ls-files-others-exclude.sh @@ -14,7 +14,7 @@ rm -fr one three for dir in . one one/two three do mkdir -p $dir && - for i in 1 2 3 4 5 + for i in 1 2 3 4 5 6 7 8 do >$dir/a.$i done @@ -24,31 +24,44 @@ cat >expect <.git/ignore +*.7 +!*.8' >.git/ignore echo '*.1 -/*.3' >.gitignore +/*.3 +!*.6' >.gitignore echo '*.2 -two/*.4' >one/.gitignore +two/*.4 +!*.7 +*.8' >one/.gitignore +echo '!*.2 +!*.8' >one/two/.gitignore test_expect_success \ - 'git-ls-files --others --exclude.' \ + 'git-ls-files --others with various exclude options.' \ 'git-ls-files --others \ + --exclude=\*.6 \ --exclude-per-directory=.gitignore \ --exclude-from=.git/ignore \ >output && -- cgit v0.10.2-6-g49f6