Make core.sharedRepository work under cygwin 1.7
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 the fast implementation in do_stat() is used instead of
lstat().
lstat() under cygwin uses the Windows security model to implement
POSIX-like permissions. The user, group or everyone bits can be set
individually.
do_stat() simplifes the file permission bits, and may return a wrong
value. The read-only attribute of a file is used to calculate the
permissions, resulting in either rw-r--r-- or r--r--r--
One effect of the simplified do_stat() is that t1301 fails.
Add a function cygwin_get_st_mode_bits() which returns the POSIX
permissions. When not compiling for cygwin, true_mode_bits() in
path.c is used.
Side note:
t1301 passes under cygwin 1.5.
The "user write" bit is synchronized with the "read only" attribute
of a file:
$ chmod 444 x
$ attrib x
A R C:\temp\pt\x
cygwin 1.7 would show
A C:\temp\pt\x
Signed-off-by: Torsten Bögershausen <tboegi@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
7b592fadf1
commit
0117c2f043
@ -4,6 +4,11 @@
|
||||
typedef int (*stat_fn_t)(const char*, struct stat*);
|
||||
extern stat_fn_t cygwin_stat_fn;
|
||||
extern stat_fn_t cygwin_lstat_fn;
|
||||
int cygwin_get_st_mode_bits(const char *path, int *mode);
|
||||
|
||||
#define get_st_mode_bits(p,m) cygwin_get_st_mode_bits((p),(m))
|
||||
#ifndef CYGWIN_C
|
||||
/* cygwin.c needs the original lstat() */
|
||||
#define stat(path, buf) (*cygwin_stat_fn)(path, buf)
|
||||
#define lstat(path, buf) (*cygwin_lstat_fn)(path, buf)
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user