"Derrick Stolee via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > +static int path_matches_dir_pattern(const char *pathname, > + int pathlen, > + int *dtype, > + struct path_pattern *pattern, > + struct index_state *istate) > +{ > + *dtype = resolve_dtype(*dtype, istate, pathname, pathlen); > + if (*dtype != DT_DIR) > + return 0; > + > + return 1; > +} The function name and parameter list have "pattern" but as far as I can see any "matches" or "pattern" comes into the picture. The code in the caller after calling this function may be doing pattern matching, but not this one. What this helper is doing is "signal if the pathname in the working tree is supposed to be a directory with the return value, while filling *dtype with what kind of thing it is." path_must_be_dir_in_working_tree() or something, perhaps? > @@ -1327,11 +1340,10 @@ static struct path_pattern *last_matching_pattern_from_list(const char *pathname > const char *exclude = pattern->pattern; > int prefix = pattern->nowildcardlen; > > - if (pattern->flags & PATTERN_FLAG_MUSTBEDIR) { > - *dtype = resolve_dtype(*dtype, istate, pathname, pathlen); > - if (*dtype != DT_DIR) > - continue; > - } > + if ((pattern->flags & PATTERN_FLAG_MUSTBEDIR) && > + !path_matches_dir_pattern(pathname, pathlen, > + dtype, pattern, istate)) > + continue; > > if (pattern->flags & PATTERN_FLAG_NODIR) { > if (match_basename(basename,