From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
"Ben Peart" <benpeart@microsoft.com>,
"Johannes Sixt" <j6t@kdbg.org>,
"SZEDER Gábor" <szeder.dev@gmail.com>,
"Johannes Schindelin" <johannes.schindelin@gmx.de>
Subject: [PATCH v3 2/2] fsmonitor: force a refresh after the index was discarded
Date: Tue, 7 May 2019 13:10:21 +0200 [thread overview]
Message-ID: <20190507111021.12840-3-avarab@gmail.com> (raw)
In-Reply-To: <pull.165.v2.git.gitgitgadget@gmail.com>
From: Johannes Schindelin <johannes.schindelin@gmx.de>
With this change, the `index_state` struct becomes the new home for the
flag that says whether the fsmonitor hook has been run, i.e. it is now
per-index.
It also gets re-set when the index is discarded, fixing the bug
demonstrated by the "test_expect_failure" test added in the preceding
commit. In that case fsmonitor-enabled Git would miss updates under
certain circumstances, see that preceding commit for details.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
cache.h | 3 ++-
fsmonitor.c | 5 ++---
read-cache.c | 1 +
t/t7519-status-fsmonitor.sh | 2 +-
4 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/cache.h b/cache.h
index e928fe9d3b..08607ca7f2 100644
--- a/cache.h
+++ b/cache.h
@@ -341,7 +341,8 @@ struct index_state {
initialized : 1,
drop_cache_tree : 1,
updated_workdir : 1,
- updated_skipworktree : 1;
+ updated_skipworktree : 1,
+ fsmonitor_has_run_once : 1;
struct hashmap name_hash;
struct hashmap dir_hash;
struct object_id oid;
diff --git a/fsmonitor.c b/fsmonitor.c
index 665bd2d425..1dee0aded1 100644
--- a/fsmonitor.c
+++ b/fsmonitor.c
@@ -129,7 +129,6 @@ static void fsmonitor_refresh_callback(struct index_state *istate, const char *n
void refresh_fsmonitor(struct index_state *istate)
{
- static int has_run_once = 0;
struct strbuf query_result = STRBUF_INIT;
int query_success = 0;
size_t bol; /* beginning of line */
@@ -137,9 +136,9 @@ void refresh_fsmonitor(struct index_state *istate)
char *buf;
int i;
- if (!core_fsmonitor || has_run_once)
+ if (!core_fsmonitor || istate->fsmonitor_has_run_once)
return;
- has_run_once = 1;
+ istate->fsmonitor_has_run_once = 1;
trace_printf_key(&trace_fsmonitor, "refresh fsmonitor");
/*
diff --git a/read-cache.c b/read-cache.c
index d5a74b1861..c66b5c6b26 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -2323,6 +2323,7 @@ int discard_index(struct index_state *istate)
free_name_hash(istate);
cache_tree_free(&(istate->cache_tree));
istate->initialized = 0;
+ istate->fsmonitor_has_run_once = 0;
FREE_AND_NULL(istate->cache);
istate->cache_alloc = 0;
discard_split_index(istate);
diff --git a/t/t7519-status-fsmonitor.sh b/t/t7519-status-fsmonitor.sh
index afd8fa7532..81a375fa0f 100755
--- a/t/t7519-status-fsmonitor.sh
+++ b/t/t7519-status-fsmonitor.sh
@@ -346,7 +346,7 @@ test_expect_success UNTRACKED_CACHE 'ignore .git changes when invalidating UNTR'
test_cmp before after
'
-test_expect_failure 'discard_index() also discards fsmonitor info' '
+test_expect_success 'discard_index() also discards fsmonitor info' '
test_config core.fsmonitor "$TEST_DIRECTORY/t7519/fsmonitor-all" &&
test_might_fail git update-index --refresh &&
test-tool read-cache --print-and-refresh=tracked 2 >actual &&
--
2.21.0.593.g511ec345e18
prev parent reply other threads:[~2019-05-07 11:10 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-16 9:49 [PATCH 0/2] Fix fsmonitor after discard_index() Johannes Schindelin via GitGitGadget
2019-03-16 9:49 ` [PATCH 1/2] fsmonitor: demonstrate that it is not refreshed " Johannes Schindelin via GitGitGadget
2019-03-16 10:26 ` Johannes Sixt
2019-03-21 12:32 ` Johannes Schindelin
2019-03-16 9:49 ` [PATCH 2/2] fsmonitor: force a refresh after the index was discarded Johannes Schindelin via GitGitGadget
2019-03-18 11:05 ` [PATCH 0/2] Fix fsmonitor after discard_index() Ævar Arnfjörð Bjarmason
2019-03-21 14:36 ` Johannes Schindelin
2019-05-23 20:49 ` Johannes Schindelin
2019-03-21 13:57 ` [PATCH v2 " Johannes Schindelin via GitGitGadget
2019-03-21 13:57 ` [PATCH v2 1/2] fsmonitor: demonstrate that it is not refreshed " Johannes Schindelin via GitGitGadget
2019-03-21 13:57 ` [PATCH v2 2/2] fsmonitor: force a refresh after the index was discarded Johannes Schindelin via GitGitGadget
2019-03-22 11:04 ` SZEDER Gábor
2019-05-07 11:10 ` [PATCH v3 0/2] Fix fsmonitor after discard_index() Ævar Arnfjörð Bjarmason
2019-05-07 14:00 ` Junio C Hamano
2019-05-08 3:12 ` Junio C Hamano
2019-05-07 11:10 ` [PATCH v3 1/2] fsmonitor: demonstrate that it is not refreshed " Ævar Arnfjörð Bjarmason
2019-05-07 11:10 ` Ævar Arnfjörð Bjarmason [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190507111021.12840-3-avarab@gmail.com \
--to=avarab@gmail.com \
--cc=benpeart@microsoft.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=j6t@kdbg.org \
--cc=johannes.schindelin@gmx.de \
--cc=szeder.dev@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.