Skip to content

Commit

Permalink
Merge branch 'ml/cygwin-filemode'
Browse files Browse the repository at this point in the history
* ml/cygwin-filemode:
  compat/cygwin.c - Use cygwin's stat if core.filemode == true
  • Loading branch information
gitster committed Oct 19, 2008
2 parents 94d2b85 + 7faee6b commit 449acfa
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 5 deletions.
4 changes: 3 additions & 1 deletion Documentation/config.txt
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,9 @@ core.ignoreCygwinFSTricks::
one hierarchy using Cygwin mount. If true, Git uses native Win32 API
whenever it is possible and falls back to Cygwin functions only to
handle symbol links. The native mode is more than twice faster than
normal Cygwin l/stat() functions. True by default.
normal Cygwin l/stat() functions. True by default, unless core.filemode
is true, in which case ignoreCygwinFSTricks is ignored as Cygwin's
POSIX emulation is required to support core.filemode.

core.trustctime::
If false, the ctime differences between the index and the
Expand Down
18 changes: 14 additions & 4 deletions compat/cygwin.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,22 +91,32 @@ static int cygwin_stat(const char *path, struct stat *buf)
* functions should be used. The choice is determined by core.ignorecygwinfstricks.
* Reading this option is not always possible immediately as git_dir may be
* not be set yet. So until it is set, use cygwin lstat/stat functions.
* However, if the trust_executable_bit is set, we must use the Cygwin posix
* stat/lstat as the Windows stat fuctions do not determine posix filemode.
*/
static int native_stat = 1;
extern int trust_executable_bit;

static int git_cygwin_config(const char *var, const char *value, void *cb)
{
if (!strcmp(var, "core.ignorecygwinfstricks"))
if (!strcmp(var, "core.ignorecygwinfstricks")) {
native_stat = git_config_bool(var, value);
return 0;
return 0;
}
return git_default_config(var, value, cb);
}

static int init_stat(void)
{
if (have_git_dir()) {
git_config(git_cygwin_config, NULL);
cygwin_stat_fn = native_stat ? cygwin_stat : stat;
cygwin_lstat_fn = native_stat ? cygwin_lstat : lstat;
if (!trust_executable_bit && native_stat) {
cygwin_stat_fn = cygwin_stat;
cygwin_lstat_fn = cygwin_lstat;
} else {
cygwin_stat_fn = stat;
cygwin_lstat_fn = lstat;
}
return 0;
}
return 1;
Expand Down

0 comments on commit 449acfa

Please sign in to comment.