git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Torsten Bögershausen" <tboegi@web.de>
To: Junio C Hamano <gitster@pobox.com>
Cc: Ramsay Jones <ramsay@ramsay1.demon.co.uk>,
	git@vger.kernel.org, j6t@kdbg.org, tboegi@web.de
Subject: Re: [RFC] test-lib.sh: No POSIXPERM for cygwin
Date: Tue, 19 Mar 2013 20:49:58 +0100	[thread overview]
Message-ID: <201303192049.58755.tboegi@web.de> (raw)

On Friday 08 February 2013 07:08:14 Torsten Bögershausen wrote:
> On 07.02.13 20:35, Junio C Hamano wrote:
> > Ramsay Jones <ramsay@ramsay1.demon.co.uk> writes:
> >
> >> Torsten Bögershausen wrote:
> >>> t0070 and t1301 fail when running the test suite under cygwin.
> >>> Skip the failing tests by unsetting POSIXPERM.
> >> t1301 does not fail for me. (WIN XP (SP3) on NTFS)
> > Others run Cygwin with vfat or some other filesystem, and some of
> > them do not cope will with POSIXPERM, perhaps?
> >
> > Not having POSIXPERM by default for Cygwin may be a saner default
> > than having one, if we have to pick one.
> >
> > It may be debatable to have this default as platform attribute,
> > though.
> >
> Yes, 1301 passes on cygwin 1.5, but not on 1.7.
> And it breaks on VFAT, for all kind of OS.
> 
> Thanks for comments, I'll put more investigations on my todo stack.
> /Torsten

It turns out that cygwin 1.7 handles the read only attribute different then
cygwin 1.5.
Under cygwin 1.5 the "read only" attribute is synchronized with the
"user write" bit from the permissions.

tb@PC /cygdrive/c/temp/pt
$ echo x >x
$ chmod 444 x
$ attrib x
A    R     C:\temp\pt\x
Cygwin 1.7 does not do the synchronization, which means that some files
seem to be writable when do_stat() is used, but the permissions are r--r--r--

We can improve Git to work for cygwin 1.7, a suggestion for a patch
may look like this:

-- >8 --
Subject: [PATCH] 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 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(+)

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.2.341.g543621f

             reply	other threads:[~2013-03-19 19:50 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-19 19:49 Torsten Bögershausen [this message]
2013-03-19 21:03 ` [RFC] test-lib.sh: No POSIXPERM for cygwin Junio C Hamano
2013-03-19 21:10   ` Junio C Hamano
  -- strict thread matches above, loose matches on Subject: below --
2013-03-23 12:40 Torsten Bögershausen
2013-03-24  2:49 ` Eric Sunshine
2013-03-25 15:53   ` Torsten Bögershausen
2013-01-27 14:57 Torsten Bögershausen
2013-02-06  9:34 ` Erik Faye-Lund
2013-02-06 20:16   ` Torsten Bögershausen
2013-02-07 18:25 ` Ramsay Jones
2013-02-07 19:35   ` Junio C Hamano
2013-02-08  6:08     ` Torsten Bögershausen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201303192049.58755.tboegi@web.de \
    --to=tboegi@web.de \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=j6t@kdbg.org \
    --cc=ramsay@ramsay1.demon.co.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).