diff --git a/read-tree.c b/read-tree.c
index 8b91affe899e065349979c8f4b347560ecd0063a..3f0233954725397c8783f544f2f8d27125b82a13 100644 (file)
--- a/read-tree.c
+++ b/read-tree.c
invalidate_ce_path(old);
}
}
+ else
+ invalidate_ce_path(merge);
merge->ce_flags &= ~htons(CE_STAGEMASK);
add_cache_entry(merge, ADD_CACHE_OK_TO_ADD);
return 1;
if (!a) {
invalidate_ce_path(old);
- return 0;
+ return deleted_entry(old, NULL);
}
if (old && same(old, a)) {
+ struct stat st;
+ if (lstat(old->name, &st) || ce_match_stat(old, &st, 1))
+ old->ce_flags |= htons(CE_UPDATE);
return keep_entry(old);
}
return merged_entry(a, NULL);
if (1 < index_only + update)
usage(read_tree_usage);
- if (get_sha1(arg, sha1) < 0)
- usage(read_tree_usage);
+ if (get_sha1(arg, sha1))
+ die("Not a valid object name %s", arg);
if (list_tree(sha1) < 0)
die("failed to unpack tree object %s", arg);
stage++;
* valid cache-tree because the index must match exactly
* what came from the tree.
*/
- if (trees->item && !prefix && (!merge || (stage == 2))) {
+ if (trees && trees->item && (!merge || (stage == 2))) {
cache_tree_free(&active_cache_tree);
prime_cache_tree();
}