Johannes Sixt <j6t@xxxxxxxx> writes: >> static int init_stat(void) >> { >> - if (have_git_dir()) { >> - git_config(git_cygwin_config, NULL); >> + if (have_git_dir() && git_config(git_cygwin_config,NULL)) { >> if (!core_filemode && native_stat) { >> cygwin_stat_fn = cygwin_stat; >> cygwin_lstat_fn = cygwin_lstat; > > So, this means that if neither core.filemode nor > core.ignorecygwinfstricks is assigned a value, then regular (Cygwin's) > l/stat is used. Ok, that's what we need: the default value of > core.filemode is true, which means we need Cygwin's l/stat; it trumps > the default value of core.ignorecygwinfstricks, which is also > true. Good! > > BTW, it seems the patch fixes a bug when the two config parameters are > not assigned a value: the initialization looks like this[*]: > > static int native_stat = 1; > static int core_filemode; > > i.e., the default value of core.filemode seen by compat/cygwin.c is > actually false, and the fast native l/stat would be used, contrary to > the documentation. Am I missing something? Probably you are not missing anything. It is a regression introduced by 7974843 (compat/cygwin.c: make runtime detection of lstat/stat lessor impact, 2008-10-23). What the added "&& git_config()" is doing is that until we actually open and read .git/config and the like, we do not take that if (), meaning we leave the cygwin_stat_fn pointing at the cygwin_stat_stub (same for lstat), using the "unoptimized" cygwin version. Once we do read from config we are likely to have core.filemode defined (prepared by git init), so the "default" value here would probably not matter in practice. -- 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