Re: [PATCH 05/24] dir.c: remove an implicit dependency on the_index in pathspec code
From: Brandon Williams <hidden>
Date: 2018-08-13 17:17:24
On 08/13, Nguyễn Thái Ngọc Duy wrote:
quoted hunk ↗ jump to hunk
diff --git a/dir.c b/dir.c index 29fbbd48c8..e25aed013b 100644 --- a/dir.c +++ b/dir.c@@ -276,12 +276,13 @@ static int do_read_blob(const struct object_id *oid, struct oid_stat *oid_stat, #define DO_MATCH_DIRECTORY (1<<1) #define DO_MATCH_SUBMODULE (1<<2) -static int match_attrs(const char *name, int namelen, +static int match_attrs(const struct index_state *istate, + const char *name, int namelen, const struct pathspec_item *item) { int i; - git_check_attr(&the_index, name, item->attr_check); + git_check_attr(istate, name, item->attr_check); for (i = 0; i < item->attr_match_nr; i++) { const char *value; int matched;@@ -318,7 +319,8 @@ static int match_attrs(const char *name, int namelen, * * It returns 0 when there is no match. */ -static int match_pathspec_item(const struct pathspec_item *item, int prefix, +static int match_pathspec_item(const struct index_state *istate, + const struct pathspec_item *item, int prefix, const char *name, int namelen, unsigned flags) { /* name/namelen has prefix cut off by caller */@@ -358,7 +360,7 @@ static int match_pathspec_item(const struct pathspec_item *item, int prefix, strncmp(item->match, name - prefix, item->prefix)) return 0; - if (item->attr_match_nr && !match_attrs(name, namelen, item)) + if (item->attr_match_nr && !match_attrs(istate, name, namelen, item)) return 0;
Yuck, all of this just because I added the ability to match against attrs with pathspecs. Part of me wonders if it would be better to put a pointer to the needed istate in the pathspec struct...but then I can think of a ton of reasons why that wouldn't be good either. So yes I think this is probably the right approach, I'm just sorry I made it this messy :/ -- Brandon Williams