提交 1df092d2 编写于 作者: J Junio C Hamano

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: NJunio C Hamano <junkio@cox.net>
上级 fee88256
......@@ -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=<pattern> and lines read from --exclude-from=<file>
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=<pattern> from the command line; patterns are
ordered in the same order as they appear on the command line.
* lines read from --exclude-from=<file>; patterns are ordered
in the same order as they appear in the file.
* When --exclude-per-directory=<name> 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 \
......
......@@ -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 <<EOF
a.2
a.4
a.5
a.8
one/a.3
one/a.4
one/a.5
one/a.7
one/two/a.2
one/two/a.3
one/two/a.5
one/two/a.7
one/two/a.8
three/a.2
three/a.3
three/a.4
three/a.5
three/a.8
EOF
echo '.gitignore
output
expect
.gitignore
' >.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 &&
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册