Robin Rosenberg <robin.rosenberg@xxxxxxxxxx> writes: > Specifically the fields uid, gid, ctime, ino and dev are set to zero > by JGit. Other implementations, eg. Git in cygwin are allegedly also > somewhat incompatible with Git For Windows and on *nix platforms > the resolution of the timestamps may differ. > > Any stat checking by git will then need to check content, which may > be very slow, particularly on Windows. Since mtime and size > is typically enough we should allow the user to tell git to avoid > checking these fields if they are set to zero in the index. > > This change introduces a core.checkstat config option where the > the user can select to check all fields (default), or just size > and the whole second part of mtime (minimal). > > Signed-off-by: Robin Rosenberg <robin.rosenberg@xxxxxxxxxx> The "trust_ctime ? check_stat : trust_ctime/*false*/" gave me the same "Huh?" as it did to J6t, so I locally fixed them while applying. Also, even though we settled on "default/minimal", we may regret in the future if old implementations died on an unrecognized value, as that will forbid users from using an old Git and a new Git on the same repository at the same time, so I'd suggest removing the "if not default or minimal, die" and replacing it with "treat unknown token as a do-no-harm no-op". Interdiff would look like this. Thanks. config.c | 2 -- read-cache.c | 12 ++++++------ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/config.c b/config.c index 2b58c75..3f638e3 100644 --- a/config.c +++ b/config.c @@ -571,8 +571,6 @@ static int git_default_core_config(const char *var, const char *value) check_stat = 1; else if (!strcasecmp(value, "minimal")) check_stat = 0; - else - die_bad_config(var); } if (!strcmp(var, "core.quotepath")) { diff --git a/read-cache.c b/read-cache.c index 23db681..827ae55 100644 --- a/read-cache.c +++ b/read-cache.c @@ -197,16 +197,16 @@ 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 ? check_stat : trust_ctime/*false*/) - if (ce->ce_ctime.sec != (unsigned int)st->st_ctime) - changed |= CTIME_CHANGED; + if (trust_ctime && check_stat && + ce->ce_ctime.sec != (unsigned int)st->st_ctime) + changed |= CTIME_CHANGED; #ifdef USE_NSEC if (check_stat && ce->ce_mtime.nsec != ST_MTIME_NSEC(*st)) changed |= MTIME_CHANGED; - if (trust_ctime ? check_stat : trust_ctime/*false*/) - if (ce->ce_ctime.nsec != ST_CTIME_NSEC(*st)) - changed |= CTIME_CHANGED; + if (trust_ctime && check_stat && + ce->ce_ctime.nsec != ST_CTIME_NSEC(*st)) + changed |= CTIME_CHANGED; #endif if (check_stat) { -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html