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:
@ -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 \
|
||||||
|
@ -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 &&
|
||||||
|
Reference in New Issue
Block a user