git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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
Previous: Ben PeartNext: Junio C Hamano
Message 24 of 30 in “Some rough edges of core.fsmonitor”
  1. Ævar Arnfjörð BjarmasonJan 27, 2018
  2. Duy NguyenJan 27, 2018
  3. trace: measure where the time is spent in the index-heavy operationsNguyễn Thái Ngọc Duy, Jan 27, 2018
  4. Thomas GummererJan 27, 2018
  5. trace: measure where the time is spent in the index-heavy operationsNguyễn Thái Ngọc Duy, Jan 27, 2018
  6. Ævar Arnfjörð BjarmasonJan 27, 2018
  7. Duy NguyenJan 27, 2018
  8. Duy NguyenJan 27, 2018
  9. Ævar Arnfjörð BjarmasonJan 27, 2018
  10. Ben PeartJan 30, 2018
  11. Duy NguyenJan 29, 2018
  12. Ben PeartJan 29, 2018
  13. Duy NguyenFeb 1, 2018
  14. Johannes SchindelinJan 28, 2018
  15. Ævar Arnfjörð BjarmasonJan 28, 2018
  16. Ben PeartJan 30, 2018
  17. Duy NguyenJan 31, 2018
  18. dir.c: ignore paths containing .git when invalidating untracked cacheNguyễn Thái Ngọc Duy, Feb 4, 2018
  19. Ben PeartFeb 5, 2018
  20. Duy NguyenFeb 6, 2018
  21. dir.c: ignore paths containing .git when invalidating untracked cacheNguyễn Thái Ngọc Duy, Feb 7, 2018
  22. dir.c: ignore paths containing .git when invalidating untracked cacheNguyễn Thái Ngọc Duy, Feb 7, 2018
  23. Ben PeartFeb 7, 2018
  24. Duy NguyenFeb 13, 2018
  25. Junio C HamanoFeb 13, 2018
  26. Duy NguyenFeb 14, 2018
  27. Junio C HamanoFeb 14, 2018
  28. Ben PeartJan 30, 2018
  29. Ævar Arnfjörð BjarmasonJan 30, 2018
  30. Ben PeartJan 31, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.