From: Junio C Hamano Date: Wed, 05 Dec 2012 23:43:47 GMT Subject: Re: [PATCH] Perform minimal stat comparison when some stat fields are not set Message-ID: <7vhao0jc98.fsf@alter.siamese.dyndns.org> In-Reply-To: <1354742425-71417-1-git-send-email-robin.rosenberg@dewire.com> Robin Rosenberg writes: > At least JGit does sets uid, gid, ctime, ino and dev fields to zero > on update. To Git this looks like the stat data does not match and > a full file compare will be forced even it size and mtime match. This > is in practice unnecessary. Sense JGit's presence by checking if ino > and dev is zero. > > Signed-off-by: Robin Rosenberg > --- > read-cache.c | 21 +++++++++++++-------- > 1 file changed, 13 insertions(+), 8 deletions(-) > > diff --git a/read-cache.c b/read-cache.c > index fda78bc..6f13a22 100644 > --- a/read-cache.c > +++ b/read-cache.c > @@ -197,21 +197,26 @@ static int ce_match_stat_basic(struct cache_entry *ce, struct stat *st) > } > if (ce->ce_mtime.sec != (unsigned int)st->st_mtime) > changed |= MTIME_CHANGED; > - if (trust_ctime && ce->ce_ctime.sec != (unsigned int)st->st_ctime) > + > + int minimal_stat = (ce->ce_ino == 0 && ce->ce_dev == 0); decl-after-stmt. Besides, is it sane to do this unconditionally to affect people who do not use JGit?