Re: [PATCH] add GIT_FAST_STAT mode for Cygwin
- From
Dmitry Potapov <dpotapov@gmail.com>
- Date
- Sep 23, 2008, 20:04 UTC
- Message-ID
- <20080923200456.GR21650@dpotapov.dyndns.org>
- In-Reply-To
- <20080923190637.GJ3669@spearce.org>
On Tue, Sep 23, 2008 at 12:06:37PM -0700, Shawn O. Pearce wrote:
Show 7 quoted lines
> > 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.
Show 17 quoted lines
>
> > 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 necessaryDo 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