summaryrefslogtreecommitdiff
path: root/unpack-trees.c
diff options
context:
space:
mode:
authorMartin von Zweigbergk <martinvonz@gmail.com>2012-12-20 21:03:36 (GMT)
committerJunio C Hamano <gitster@pobox.com>2012-12-20 21:07:22 (GMT)
commit686b2de0ceb2c5a1fb6c8822a8aceb8a05e2fc76 (patch)
treeb621f7c3d0814d6658c86fa54a0773104e5ec9f3 /unpack-trees.c
parent7e2010537e96d0a1144520222f20ba1dc3d61441 (diff)
downloadgit-686b2de0ceb2c5a1fb6c8822a8aceb8a05e2fc76.zip
git-686b2de0ceb2c5a1fb6c8822a8aceb8a05e2fc76.tar.gz
git-686b2de0ceb2c5a1fb6c8822a8aceb8a05e2fc76.tar.bz2
oneway_merge(): only lstat() when told to update worktree
Although the subject line of 613f027 (read-tree -u one-way merge fix to check out locally modified paths., 2006-05-15) mentions "read-tree -u", it did not seem to check whether -u was in effect. Not checking whether -u is in effect makes e.g. "read-tree --reset" lstat() the worktree, even though the worktree stat should not matter for that operation. This speeds up e.g. "git reset" a little on the linux-2.6 repo (best of five, warm cache): Before After real 0m0.288s 0m0.233s user 0m0.190s 0m0.150s sys 0m0.090s 0m0.080s Signed-off-by: Martin von Zweigbergk <martinvonz@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'unpack-trees.c')
-rw-r--r--unpack-trees.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/unpack-trees.c b/unpack-trees.c
index 6d96366..61acc5e 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c
@@ -1834,7 +1834,7 @@ int oneway_merge(struct cache_entry **src, struct unpack_trees_options *o)
if (old && same(old, a)) {
int update = 0;
- if (o->reset && !ce_uptodate(old) && !ce_skip_worktree(old)) {
+ if (o->reset && o->update && !ce_uptodate(old) && !ce_skip_worktree(old)) {
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))