summaryrefslogtreecommitdiff
path: root/unpack-trees.c
diff options
context:
space:
mode:
Diffstat (limited to 'unpack-trees.c')
-rw-r--r--unpack-trees.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/unpack-trees.c b/unpack-trees.c
index 33ea7810d8..a75b068d33 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c
@@ -275,9 +275,9 @@ static int check_submodule_move_head(const struct cache_entry *ce,
}
/*
- * Preform the loading of the repository's gitmodules file. This function is
+ * Perform the loading of the repository's gitmodules file. This function is
* used by 'check_update()' to perform loading of the gitmodules file in two
- * differnt situations:
+ * different situations:
* (1) before removing entries from the working tree if the gitmodules file has
* been marked for removal. This situation is specified by 'state' == NULL.
* (2) before checking out entries to the working tree if the gitmodules file
@@ -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
*/
@@ -2060,7 +2063,8 @@ static int merged_entry(const struct cache_entry *ce,
invalidate_ce_path(old, o);
}
- do_add_entry(o, merge, update, CE_STAGEMASK);
+ if (do_add_entry(o, merge, update, CE_STAGEMASK) < 0)
+ return -1;
return 1;
}
@@ -2384,7 +2388,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))