Re: [PATCH v2] dir.c: ignore paths containing .git when invalidating untracked cache
- From
Duy Nguyen <pclouds@gmail.com>
- Date
- Feb 13, 2018, 10:00 UTC
- Message-ID
- <CACsJy8AHa6QDmWu7TFjgW7m0pHysYkZq_WJ1QOVBVYaT4XdL4Q@mail.gmail.com>
- In-Reply-To
- <c755e388-89a5-fc0f-f872-16fd5d5686b0@gmail.com>
On Wed, Feb 7, 2018 at 11:59 PM, Ben Peart <peartben@gmail.com> wrote:
Show 35 quoted lines
> diff --git a/dir.c b/dir.c
> index 7c4b45e30e..d431da46f5 100644
> --- a/dir.c
> +++ b/dir.c
> @@ -1773,7 +1773,7 @@ static enum path_treatment treat_path(struct
> dir_struct *dir,
> if (!de)
> return treat_path_fast(dir, untracked, cdir, istate, path,
> baselen, pathspec);
> - if (is_dot_or_dotdot(de->d_name) || !strcmp(de->d_name, ".git"))
> + if (is_dot_or_dotdot(de->d_name) || !fspathcmp(de->d_name, ".git"))
> return path_none;
> strbuf_setlen(path, baselen);
> strbuf_addstr(path, de->d_name);
> diff --git a/fsmonitor.c b/fsmonitor.c
> index 0af7c4edba..019576f306 100644
> --- a/fsmonitor.c
> +++ b/fsmonitor.c
> @@ -118,8 +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 (!verify_path(name))
> + return;
> +
> + pos = index_name_pos(istate, name, strlen(name));
> if (pos >= 0) {
> struct cache_entry *ce = istate->cache[pos];
> ce->ce_flags &= ~CE_FSMONITOR_VALID;
>It's very tempting considering that the amount of changes is much smaller. But I think we should go with my version. The hope is when a _new_ call site appears, the author would think twice before passing zero or one to the safe_path argument.
Show 55 quoted lines
> diff --git a/t/t7519-status-fsmonitor.sh b/t/t7519-status-fsmonitor.sh > index eb2d13bbcf..756beb0d8e 100755 > --- a/t/t7519-status-fsmonitor.sh > +++ b/t/t7519-status-fsmonitor.sh > @@ -314,4 +314,43 @@ test_expect_success 'splitting the index results in the > same state' ' > test_cmp expect actual > ' > > +test_expect_success UNTRACKED_CACHE 'ignore .git changes when invalidating > UNTR' ' > + test_create_repo dot-git && > + ( > + cd dot-git && > + mkdir -p .git/hooks && > + : >tracked && > + : >modified && > + mkdir dir1 && > + : >dir1/tracked && > + : >dir1/modified && > + mkdir dir2 && > + : >dir2/tracked && > + : >dir2/modified && > + write_integration_script && > + git config core.fsmonitor .git/hooks/fsmonitor-test && > + git update-index --untracked-cache && > + git update-index --fsmonitor && > + GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace-before" \ > + git status && > + test-dump-untracked-cache >../before > + ) && > + cat >>dot-git/.git/hooks/fsmonitor-test <<-\EOF && > + printf ".git\0" > + printf ".git/index\0" > + printf "dir1/.git\0" > + printf "dir1/.git/index\0" > + EOF > + ( > + cd dot-git && > + GIT_TRACE_UNTRACKED_STATS="$TRASH_DIRECTORY/trace-after" \ > + git status && > + test-dump-untracked-cache >../after > + ) && > + grep "directory invalidation" trace-before >>before && > + grep "directory invalidation" trace-after >>after && > + # UNTR extension unchanged, dir invalidation count unchanged > + test_cmp before after > +' > + > test_done > > base-commit: 5be1f00a9a701532232f57958efab4be8c959a29 > -- > 2.15.0.windows.1 >
-- Duy