mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-15 09:55:11 +00:00

Per issue #533, the handling of relative paths in attribute and ignore files was not right. Fixed this by pre-joining the relative path of the attribute/ignore file onto the match string when a full path match is required. Unfortunately, fixing this required a bit more code than I would have liked because I had to juggle things around so that the fnmatch parser would have sufficient information to prepend the relative path when it was needed.
38 lines
1.2 KiB
Plaintext
38 lines
1.2 KiB
Plaintext
# Test file from gitattributes(5) example:
|
|
|
|
If you have these three gitattributes file:
|
|
|
|
(in $GIT_DIR/info/attributes)
|
|
|
|
a* foo !bar -baz
|
|
|
|
(in .gitattributes)
|
|
abc foo bar baz
|
|
|
|
(in t/.gitattributes)
|
|
ab* merge=filfre
|
|
abc -foo -bar
|
|
*.c frotz
|
|
|
|
the attributes given to path t/abc are computed as follows:
|
|
|
|
1. By examining t/.gitattributes (which is in the same directory as the path
|
|
in question), git finds that the first line matches. merge attribute is
|
|
set. It also finds that the second line matches, and attributes foo and
|
|
bar are unset.
|
|
2. Then it examines .gitattributes (which is in the parent directory), and
|
|
finds that the first line matches, but t/.gitattributes file already
|
|
decided how merge, foo and bar attributes should be given to this path,
|
|
so it leaves foo and bar unset. Attribute baz is set.
|
|
3. Finally it examines $GIT_DIR/info/attributes. This file is used to
|
|
override the in-tree settings. The first line is a match, and foo is set,
|
|
bar is reverted to unspecified state, and baz is unset.
|
|
|
|
As the result, the attributes assignment to t/abc becomes:
|
|
|
|
foo set to true
|
|
bar unspecified
|
|
baz set to false
|
|
merge set to string value "filfre"
|
|
frotz unspecified
|