"Jeff Hostetler via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > static void handle_path_without_trailing_slash( > struct index_state *istate, const char *name, int pos) > { > - int i; > - > /* > * Mark the untracked cache dirty for this path (regardless of > * whether or not we find an exact match for it in the index). > @@ -200,33 +212,28 @@ static void handle_path_without_trailing_slash( > > if (pos >= 0) { > /* > - * We have an exact match for this path and can just > - * invalidate it. > + * An exact match on a tracked file. We assume that we > + * do not need to scan forward for a sparse-directory > + * cache-entry with the same pathname, nor for a cone > + * at that directory. (That is, assume no D/F conflicts.) > */ > istate->cache[pos]->ce_flags &= ~CE_FSMONITOR_VALID; > } else { > + struct strbuf work_path = STRBUF_INIT; > + > /* > + strbuf_add(&work_path, name, strlen(name)); > + strbuf_addch(&work_path, '/'); > + pos = index_name_pos(istate, work_path.buf, work_path.len); > + handle_path_with_trailing_slash(istate, work_path.buf, pos); > + strbuf_release(&work_path); > } > } The "with trailing slash" variant is returning a useful value to this caller that ignores it, but we do not yet return a value from this function, so that is OK. The name being a name that may be in different case from what we know in the index is not yet handled in this step (we have "Assume it is case-correct" in the comment) and that applies for both the main array of cache entries as well as the untracked cache. It will be exciting to see how these are lifted. The main array has some helper functions that uses name-hash features to help icase matches, but I do not offhand recall what we have for the untracked cache side.