summaryrefslogtreecommitdiff
path: root/unpack-trees.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2019-12-05 20:52:48 (GMT)
committerJunio C Hamano <gitster@pobox.com>2019-12-05 20:52:48 (GMT)
commit473b431410f5dbaa0c6a7bcc1e49b73c505cfe89 (patch)
treebe799d4c6990b21611e20e2bbc4a6104fbb423d9 /unpack-trees.c
parente0f9ec90278ec989ac7840a69f42a414f0db23f5 (diff)
parent679f2f9fdd2173d87251aee357dd0e46ce977f42 (diff)
downloadgit-473b431410f5dbaa0c6a7bcc1e49b73c505cfe89.zip
git-473b431410f5dbaa0c6a7bcc1e49b73c505cfe89.tar.gz
git-473b431410f5dbaa0c6a7bcc1e49b73c505cfe89.tar.bz2
Merge branch 'us/unpack-trees-fsmonitor'
Users of oneway_merge() (like "reset --hard") learned to take advantage of fsmonitor to avoid unnecessary lstat(2) calls. * us/unpack-trees-fsmonitor: unpack-trees: skip stat on fsmonitor-valid files
Diffstat (limited to 'unpack-trees.c')
-rw-r--r--unpack-trees.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/unpack-trees.c b/unpack-trees.c
index 28cbd19..c647a5e 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c
@@ -1504,6 +1504,9 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
o->merge_size = len;
mark_all_ce_unused(o->src_index);
+ if (o->src_index->fsmonitor_last_update)
+ o->result.fsmonitor_last_update = o->src_index->fsmonitor_last_update;
+
/*
* Sparse checkout loop #1: set NEW_SKIP_WORKTREE on existing entries
*/
@@ -2384,7 +2387,8 @@ int oneway_merge(const struct cache_entry * const *src,
if (old && same(old, a)) {
int update = 0;
- if (o->reset && o->update && !ce_uptodate(old) && !ce_skip_worktree(old)) {
+ if (o->reset && o->update && !ce_uptodate(old) && !ce_skip_worktree(old) &&
+ !(old->ce_flags & CE_FSMONITOR_VALID)) {
struct stat st;
if (lstat(old->name, &st) ||
ie_match_stat(o->src_index, old, &st, CE_MATCH_IGNORE_VALID|CE_MATCH_IGNORE_SKIP_WORKTREE))