diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/crlf.c | 15 | ||||
-rw-r--r-- | src/filter.c | 27 |
2 files changed, 37 insertions, 5 deletions
diff --git a/src/crlf.c b/src/crlf.c index 2177bff98..cfc2d1eb1 100644 --- a/src/crlf.c +++ b/src/crlf.c @@ -107,8 +107,10 @@ static int crlf_load_attributes( return -1; } -static int has_cr_in_index(git_repository *repo, const char *path) +static int has_cr_in_index(const git_filter_source *src) { + git_repository *repo = git_filter_source_repo(src); + const char *path = git_filter_source_path(src); git_index *index; const git_index_entry *entry; git_blob *blob; @@ -180,7 +182,7 @@ static int crlf_apply_to_odb( * If the file in the index has any CR in it, do not convert. * This is the new safer autocrlf handling. */ - if (has_cr_in_index(src->repo, src->path)) + if (has_cr_in_index(src)) return GIT_ENOTFOUND; } @@ -290,7 +292,9 @@ static int crlf_check( GIT_UNUSED(mode); /* Load gitattributes for the path */ - if ((error = crlf_load_attributes(&ca, src->repo, src->path)) < 0) + error = crlf_load_attributes( + &ca, git_filter_source_repo(src), git_filter_source_path(src)); + if (error < 0) return error; /* @@ -303,8 +307,9 @@ static int crlf_check( return GIT_ENOTFOUND; if (ca.crlf_action == GIT_CRLF_GUESS) { - if ((error = git_repository__cvar( - &ca.auto_crlf, src->repo, GIT_CVAR_AUTO_CRLF)) < 0) + error = git_repository__cvar( + &ca.auto_crlf, git_filter_source_repo(src), GIT_CVAR_AUTO_CRLF); + if (error < 0) return error; if (ca.auto_crlf == GIT_AUTO_CRLF_FALSE) diff --git a/src/filter.c b/src/filter.c index 7935e6518..3d4c6d6ce 100644 --- a/src/filter.c +++ b/src/filter.c @@ -13,6 +13,13 @@ #include "git2/config.h" #include "blob.h" +struct git_filter_source { + git_repository *repo; + const char *path; + git_oid oid; /* zero if unknown (which is likely) */ + uint16_t filemode; /* zero if unknown */ +}; + typedef struct { git_filter *filter; void *payload; @@ -32,6 +39,26 @@ typedef struct { static git_array_t(git_filter_def) filter_registry = GIT_ARRAY_INIT; +git_repository *git_filter_source_repo(const git_filter_source *src) +{ + return src->repo; +} + +const char *git_filter_source_path(const git_filter_source *src) +{ + return src->path; +} + +uint16_t git_filter_source_filemode(const git_filter_source *src) +{ + return src->filemode; +} + +const git_oid *git_filter_source_id(const git_filter_source *src) +{ + return git_oid_iszero(&src->oid) ? NULL : &src->oid; +} + static int filter_load_defaults(void) { if (!git_array_size(filter_registry)) { |