diff options
author | Alex Vandiver <alexmv@dropbox.com> | 2017-11-09 11:58:10 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-11-10 14:05:01 +0900 |
commit | 3bd28eb29912801481b293691039b05caebf13a3 (patch) | |
tree | 61498c30c6f2e4fcfd2bddc97c8bea893752d8e6 /fsmonitor.h | |
parent | 6f1dc21d983a495877c8054d41d9b634e234ccc4 (diff) | |
download | git-3bd28eb29912801481b293691039b05caebf13a3.tar.gz |
fsmonitor: store fsmonitor bitmap before splitting index
ba1b9cac ("fsmonitor: delay updating state until after split index
is merged", 2017-10-27) resolved the problem of the fsmonitor data
being applied to the non-base index when reading; however, a similar
problem exists when writing the index. Specifically, writing of the
fsmonitor extension happens only after the work to split the index
has been applied -- as such, the information in the index is only
for the non-"base" index, and thus the extension information
contains only partial data.
When saving, compute the ewah bitmap before the index is split, and
store it in the fsmonitor_dirty field, mirroring the behavior that
occurred during reading. fsmonitor_dirty is kept from being leaked by
being freed when the extension data is written -- which always happens
precisely once, no matter the split index configuration.
Signed-off-by: Alex Vandiver <alexmv@dropbox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'fsmonitor.h')
-rw-r--r-- | fsmonitor.h | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/fsmonitor.h b/fsmonitor.h index 0de644e01a..cd3cc0ccf2 100644 --- a/fsmonitor.h +++ b/fsmonitor.h @@ -10,7 +10,14 @@ extern struct trace_key trace_fsmonitor; extern int read_fsmonitor_extension(struct index_state *istate, const void *data, unsigned long sz); /* - * Write the CE_FSMONITOR_VALID state into the fsmonitor index extension. + * Fill the fsmonitor_dirty ewah bits with their state from the index, + * before it is split during writing. + */ +extern void fill_fsmonitor_bitmap(struct index_state *istate); + +/* + * Write the CE_FSMONITOR_VALID state into the fsmonitor index + * extension. Reads from the fsmonitor_dirty ewah in the index. */ extern void write_fsmonitor_extension(struct strbuf *sb, struct index_state *istate); |