Subject: Re: [PATCH] add GIT_FAST_STAT mode for Cygwin

From: "Shawn O. Pearce" <[email-masked]>
Date: Tue, 23 Sep 2008 13:17:39 -0700

Dmitry Potapov <[email-masked]> 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.