mirror of
https://git.proxmox.com/git/libgit2
synced 2026-01-08 12:45:20 +00:00
Add support for git attribute macro definitions. Also, add support for cache flush API to clear the attribute file content cache when needed. Additionally, improved the handling of global and system files, making common utility functions in fileops and converting config and attr to both use the common functions. Adds a bunch more tests and fixed some memory leaks. Note that adding macros required me to use refcounted attribute assignment definitions, which complicated, but probably improved memory usage.
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
|