[prev in list] [next in list] [prev in thread] [next in thread] 

List:       git
Subject:    Re: [PATCH] add GIT_FAST_STAT mode for Cygwin
From:       Dmitry Potapov <dpotapov () gmail ! com>
Date:       2008-09-23 20:04:56
Message-ID: 20080923200456.GR21650 () dpotapov ! dyndns ! org
[Download RAW message or body]

On Tue, Sep 23, 2008 at 12:06:37PM -0700, Shawn O. Pearce wrote:
> 
> and then disable it on a per-repository basis if you and a specific
> repository which has this inner mount problem:
> 
>   git config core.cygwinnativestat false
> 
> Which is a lot more powerful than an environment variable.

I already said that I completely agree that is a good idea even I don't
know the real need for having per-repository configuration in practice.

>  
> > However, this option is Cygwin specific, so I am not sure where it
> > should be read. Should I place it in git_default_core_config like
> > this:
> > 
> > #ifdef __CYGWIN__
> > 	if (!strcmp(var, "core.cygwinnativestat")) {
> > 		cygwin_native_stat = git_config_bool(var, value);
> > 		return 0;
> > 	}
> > #endif
> 
> I would have the two initial stat functions swap themselves out with
> the default Cygin stat implementations, run a parse over the config
> to load that one bool, then install the proper implementations based
> upon its value.  Hence all Cygwin code is kept inside of the Cygwin
> compat code, and no #ifdef is necessary

Do I understand you correctly that you propose to add the code like
this in compat/cygwin.c:

static int native_stat;

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;
}

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);
}

Dmitry
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic