From: Shawn O. Pearce Date: Tue, 23 Sep 2008 20:17:39 GMT Subject: Re: [PATCH] add GIT_FAST_STAT mode for Cygwin Message-ID: <20080923201739.GK3669@spearce.org> In-Reply-To: <20080923200456.GR21650@dpotapov.dyndns.org> Dmitry Potapov wrote: > Do I understand you correctly that you propose to add the code like > this in compat/cygwin.c: Yes. But with minor changes (see below): > static int native_stat; static int native_stat = -1; > static int git_cygwin_config(const char *var, const char *value, void > *cb) > { > if (!strcmp(var, "core.cygwinnativestat")) > cygwin_native_stat = git_config_bool(var, value); > return 0; > } > > static void init_stat(void) > { > git_config(git_cygwin_config, NULL); > cygwin_stat_fn = native_stat ? cygwin_stat : stat; > cygwin_lstat_fn = native_stat ? cygwin_lstat : lstat; if (native_stat < 0 && have_git_dir()) { native_stat = 0; git_config(git_cygwin_config, NULL); cygwin_stat_fn = native_stat ? cygwin_stat : stat; cygwin_lstat_fn = native_stat ? cygwin_lstat : lstat; } and then you have to define have_git_dir() inside environment.c as: int have_git_dir(void) { return !!git_dir; } > static int cygwin_stat_choice(const char *file_name, struct stat *buf) > { > init_stat(); > return (*cygwin_stat_fn)(file_name, buf); > } > > static int cygwin_lstat_choice(const char *file_name, struct stat *buf) > { > init_stat(); > return (*cygwin_lstat_fn)(file_name, buf); > } -- Shawn.