Hi, On Sat, 27 Jan 2018, Ævar Arnfjörð Bjarmason wrote:
> I just got around to testing this since it landed, for context some > previous poking of mine in [1]. > > Issues / stuff I've noticed: > > 1) We end up invalidating the untracked cache because stuff in .git/ > changed. For example: > > 01:09:24.975524 fsmonitor.c:173 fsmonitor process > '.git/hooks/fsmonitor-watchman' returned success > 01:09:24.975548 fsmonitor.c:138 fsmonitor_refresh_callback '.git' > 01:09:24.975556 fsmonitor.c:138 fsmonitor_refresh_callback > '.git/config' > 01:09:24.975568 fsmonitor.c:138 fsmonitor_refresh_callback > '.git/index' > 01:09:25.122726 fsmonitor.c:91 write fsmonitor extension > successful > > Am I missing something or should we do something like: > > diff --git a/fsmonitor.c b/fsmonitor.c > index 0af7c4edba..5067b89bda 100644 > --- a/fsmonitor.c > +++ b/fsmonitor.c > @@ -118,7 +118,12 @@ static int query_fsmonitor(int version, uint64_t > last_update, struct strbuf *que > > static void fsmonitor_refresh_callback(struct index_state *istate, const > char *name) > { > - int pos = index_name_pos(istate, name, strlen(name)); > + int pos; > + > + if (!strcmp(name, ".git") || starts_with(name, ".git/")) > + return; > + > + pos = index_name_pos(istate, name, strlen(name)); I would much rather have the fsmonitor hook already exclude those. If you *must* add these comparisons, you have to use fspathcmp() and fspathncmp() instead (because case-insensitivity). Ciao, Dscho