diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2019-07-21 12:12:05 +0100 |
---|---|---|
committer | Edward Thomson <ethomson@edwardthomson.com> | 2019-08-11 20:47:59 +0100 |
commit | 22eb12afef4785fac47d56e2e8a13c840294ca4a (patch) | |
tree | e6b79c10f31cd4cc8b964970749e705d81e2dc52 | |
parent | e7fc8601ff9a68a5bfdc26e6073f7821b8f9b05c (diff) | |
download | libgit2-22eb12afef4785fac47d56e2e8a13c840294ca4a.tar.gz |
filter: add GIT_FILTER_NO_SYSTEM_ATTRIBUTES option
Allow system-wide attributes (the ones specified in
`/etc/gitattributes`) to be ignored if the flag
`GIT_FILTER_NO_SYSTEM_ATTRIBUTES` is specified.
-rw-r--r-- | include/git2/filter.h | 3 | ||||
-rw-r--r-- | src/filter.c | 11 |
2 files changed, 11 insertions, 3 deletions
diff --git a/include/git2/filter.h b/include/git2/filter.h index b81b25efc..a18f071ec 100644 --- a/include/git2/filter.h +++ b/include/git2/filter.h @@ -43,6 +43,9 @@ typedef enum { /** Don't error for `safecrlf` violations, allow them to continue. */ GIT_FILTER_ALLOW_UNSAFE = (1u << 0), + + /** Don't load `/etc/gitattributes` (or the system equivalent) */ + GIT_FILTER_NO_SYSTEM_ATTRIBUTES = (1u << 1), } git_filter_flag_t; /** diff --git a/src/filter.c b/src/filter.c index 6c929c030..c2f76039e 100644 --- a/src/filter.c +++ b/src/filter.c @@ -428,13 +428,18 @@ static int filter_list_check_attributes( git_filter_def *fdef, const git_filter_source *src) { - int error; - size_t i; const char **strs = git__calloc(fdef->nattrs, sizeof(const char *)); + uint32_t flags = 0; + size_t i; + int error; + GIT_ERROR_CHECK_ALLOC(strs); + if ((src->flags & GIT_FILTER_NO_SYSTEM_ATTRIBUTES) != 0) + flags |= GIT_ATTR_CHECK_NO_SYSTEM; + error = git_attr_get_many_with_session( - strs, repo, attr_session, 0, src->path, fdef->nattrs, fdef->attrs); + strs, repo, attr_session, flags, src->path, fdef->nattrs, fdef->attrs); /* if no values were found but no matches are needed, it's okay! */ if (error == GIT_ENOTFOUND && !fdef->nmatches) { |