When core.sharedRepository is used, set_shared_perm() in path.c needs lstat() to return the correct POSIX permissions.
The default for cygwin is core.ignoreCygwinFSTricks = false, which means that a simplified and fast implementation of lstat() is used.
Especially the file permission bits are wrong in cygwin_lstat_fn(): The read-only attribute of a file is used to calculate the permissions, resulting in either rw-r--r-- or r--r--r--
Use a compile switch IGNORECYGWINFSTRICKS to disable the usage of cygwin_lstat_fn() only in path.c
Signed-off-by: Torsten Bögershausen <tboegi@web.de> --- compat/cygwin.h | 2 ++ path.c | 2 ++ 2 files changed, 4 insertions(+)
Show changes to 2 files +4 −0
compat/cygwin.h, path.c
diff --git a/compat/cygwin.h b/compat/cygwin.h index a3229f5..984efbe 100644 --- a/compat/cygwin.h +++ b/compat/cygwin.h @@ -5,5 +5,7 @@ typedef int (*stat_fn_t)(const char*, struct stat*); extern stat_fn_t cygwin_stat_fn; extern stat_fn_t cygwin_lstat_fn; +#ifndef IGNORECYGWINFSTRICKS #define stat(path, buf) (*cygwin_stat_fn)(path, buf) #define lstat(path, buf) (*cygwin_lstat_fn)(path, buf) +#endif diff --git a/path.c b/path.c index d3d3f8b..0acfabf 100644 --- a/path.c +++ b/path.c @@ -10,6 +10,8 @@ * * which is what it's designed for. */ +#define IGNORECYGWINFSTRICKS + #include "cache.h" #include "strbuf.h" #include "string-list.h"
-- 1.8.1.3