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 <junkio@cox.net>
This commit is contained in:
Junio C Hamano
2005-07-28 23:53:29 -07:00
parent fee8825613
commit 1df092d211
2 changed files with 32 additions and 18 deletions

View File

@ -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 per line. A line that starts with a '#' can be used as comment
for readability. for readability.
The list of patterns that is in effect at a given time is There are three lists of patterns that are in effect at a given
built and ordered in the following way: time. They are built and ordered in the following way:
* --exclude=<pattern> and lines read from --exclude-from=<file> * --exclude=<pattern> from the command line; patterns are
come at the beginning of the list of patterns, in the order ordered in the same order as they appear on the command line.
given on the command line. Patterns that come from the file
specified with --exclude-from are ordered in the same order * lines read from --exclude-from=<file>; patterns are ordered
as they appear in the file. in the same order as they appear in the file.
* When --exclude-per-directory=<name> is specified, upon * When --exclude-per-directory=<name> is specified, upon
entering a directory that has such a file, its contents are 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. are popped off when leaving the directory.
Each pattern in the pattern list specifies "a match pattern" and Each pattern in the pattern list specifies "a match pattern" and
optionally the fate --- either a file that matches the pattern optionally the fate;n either a file that matches the pattern is
is considered excluded or included. By default, this being considered excluded or included. A filename is matched against
"exclude" mechanism, the fate is "excluded". A filename is the patterns in the three lists; the --exclude-from list is
examined against the patterns in the list, and the first match checked first, then the --exclude-per-directory list, and then
determines its fate. 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 A pattern specified on the command line with --exclude or read
from the file specified with --exclude-from is relative to the from the file specified with --exclude-from is relative to the
@ -168,9 +169,9 @@ An example:
*.[oa] *.[oa]
$ cat Documentation/.gitignore $ cat Documentation/.gitignore
# ignore generated html files, # ignore generated html files,
*.html
# except foo.html which is maintained by hand # except foo.html which is maintained by hand
!foo.html !foo.html
*.html
$ git-ls-files --ignored \ $ git-ls-files --ignored \
--exclude='Documentation/*.[0-9]' \ --exclude='Documentation/*.[0-9]' \
--exclude-from=.git/ignore \ --exclude-from=.git/ignore \

View File

@ -14,7 +14,7 @@ rm -fr one three
for dir in . one one/two three for dir in . one one/two three
do do
mkdir -p $dir && mkdir -p $dir &&
for i in 1 2 3 4 5 for i in 1 2 3 4 5 6 7 8
do do
>$dir/a.$i >$dir/a.$i
done done
@ -24,31 +24,44 @@ cat >expect <<EOF
a.2 a.2
a.4 a.4
a.5 a.5
a.8
one/a.3 one/a.3
one/a.4 one/a.4
one/a.5 one/a.5
one/a.7
one/two/a.2
one/two/a.3 one/two/a.3
one/two/a.5 one/two/a.5
one/two/a.7
one/two/a.8
three/a.2 three/a.2
three/a.3 three/a.3
three/a.4 three/a.4
three/a.5 three/a.5
three/a.8
EOF EOF
echo '.gitignore echo '.gitignore
output output
expect expect
.gitignore .gitignore
' >.git/ignore *.7
!*.8' >.git/ignore
echo '*.1 echo '*.1
/*.3' >.gitignore /*.3
!*.6' >.gitignore
echo '*.2 echo '*.2
two/*.4' >one/.gitignore two/*.4
!*.7
*.8' >one/.gitignore
echo '!*.2
!*.8' >one/two/.gitignore
test_expect_success \ test_expect_success \
'git-ls-files --others --exclude.' \ 'git-ls-files --others with various exclude options.' \
'git-ls-files --others \ 'git-ls-files --others \
--exclude=\*.6 \
--exclude-per-directory=.gitignore \ --exclude-per-directory=.gitignore \
--exclude-from=.git/ignore \ --exclude-from=.git/ignore \
>output && >output &&