Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
Break down no-lstat() condition checks in verify_uptodate()
author
Nguyễn Thái Ngọc Duy
<pclouds@gmail.com>
Sat, 30 Jul 2011 03:55:05 +0000
(10:55 +0700)
committer
Junio C Hamano
<gitster@pobox.com>
Mon, 1 Aug 2011 01:42:38 +0000
(18:42 -0700)
Make it easier to grok under what conditions we can skip lstat().
While at there, shorten ie_match_stat() line for the sake of my eyes.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
unpack-trees.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
dd008b3
)
diff --git
a/unpack-trees.c
b/unpack-trees.c
index 07f83642443601d107e0a2425407b3250c022dcd..e22b9ec408db64a5fa05328dfc06bdc99bdbce4d 100644
(file)
--- a/
unpack-trees.c
+++ b/
unpack-trees.c
@@
-1166,11
+1166,22
@@
static int verify_uptodate_1(struct cache_entry *ce,
{
struct stat st;
{
struct stat st;
- if (o->index_only || (!((ce->ce_flags & CE_VALID) || ce_skip_worktree(ce)) && (o->reset || ce_uptodate(ce))))
+ if (o->index_only)
+ return 0;
+
+ /*
+ * CE_VALID and CE_SKIP_WORKTREE cheat, we better check again
+ * if this entry is truly up-to-date because this file may be
+ * overwritten.
+ */
+ if ((ce->ce_flags & CE_VALID) || ce_skip_worktree(ce))
+ ; /* keep checking */
+ else if (o->reset || ce_uptodate(ce))
return 0;
if (!lstat(ce->name, &st)) {
return 0;
if (!lstat(ce->name, &st)) {
- unsigned changed = ie_match_stat(o->src_index, ce, &st, CE_MATCH_IGNORE_VALID|CE_MATCH_IGNORE_SKIP_WORKTREE);
+ int flags = CE_MATCH_IGNORE_VALID|CE_MATCH_IGNORE_SKIP_WORKTREE;
+ unsigned changed = ie_match_stat(o->src_index, ce, &st, flags);
if (!changed)
return 0;
/*
if (!changed)
return 0;
/*