From: Alex Riesen <raa.lkml@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: Johannes Sixt <j.sixt@viscovery.net>, Jeff King <peff@peff.net>,
layer <layer@known.net>,
git@vger.kernel.org
Subject: [PATCH] Define a version of lstat(2) specially for copy operation
Date: Tue, 17 Mar 2009 22:38:21 +0100 [thread overview]
Message-ID: <20090317213820.GC13458@blimp.localdomain> (raw)
In-Reply-To: <7v63i7ridk.fsf@gitster.siamese.dyndns.org>
So that Cygwin port can continue work around its supporting
library and get access to its faked file attributes.
Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
---
Junio C Hamano, Tue, Mar 17, 2009 21:42:31 +0100:
> But isn't this something shops that do deploy Cygwin version of git want
> to see fixed, so that they can have a site-wide policy implemented in the
Frankly, I doubt they know or care.
> hooks copied from templates? I think we could pass mode 0 to copy_files()
> and have the function special case it (and allow a platform specific
> copy_files() implementated by Cygwin). lstat() in the copy_templates_1()
> codepath is primarily done to see if we need to descend into a directory
> or symlink() and our use of st.st_mode to pass to copy_files() is a no
> cost side effect on platforms with x-bit support.
And I don't think that the platform broken in so many ways deserves
that kind of treatement. Maybe this patch is enough. Will test it
tomorrow, when I get to mine so much hated Windows system.
> >> access(..., X_OK), not lstat(). We don't play games with access(), do we?
> > access(..., X_OK) will return -1.
>
> That codepath would also need to be fixed if Cygwin wants to use hooks, I
> would guess.
I hope not. In the reply to Johannes' example I was referring to the
copied file, the one which was created with open(..., O_CREAT..., 0666),
0666 being there because of our lstat stub.
builtin-init-db.c | 2 +-
git-compat-util.h | 5 +++++
2 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/builtin-init-db.c b/builtin-init-db.c
index ee3911f..f3f781b 100644
--- a/builtin-init-db.c
+++ b/builtin-init-db.c
@@ -66,7 +66,7 @@ static void copy_templates_1(char *path, int baselen,
else
exists = 1;
- if (lstat(template, &st_template))
+ if (lstat_for_copy(template, &st_template))
die("cannot stat template %s", template);
if (S_ISDIR(st_template.st_mode)) {
diff --git a/git-compat-util.h b/git-compat-util.h
index 878d83d..4c23478 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -85,11 +85,16 @@
#undef _XOPEN_SOURCE
#include <grp.h>
#define _XOPEN_SOURCE 600
+static inline int lstat_for_copy(const char *file_name, struct stat *buf)
+{
+ return lstat(file_name, buf);
+}
#include "compat/cygwin.h"
#else
#undef _ALL_SOURCE /* AIX 5.3L defines a struct list with _ALL_SOURCE. */
#include <grp.h>
#define _ALL_SOURCE 1
+#define lstat_for_copy lstat
#endif
#else /* __MINGW32__ */
/* pull in Windows compatibility stuff */
--
1.6.2.1.171.g3422
next prev parent reply other threads:[~2009-03-17 21:40 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-17 16:26 [PATCH] disable post-checkout test on Cygwin Alex Riesen
2009-03-17 16:52 ` Junio C Hamano
2009-03-17 16:59 ` Johannes Sixt
2009-03-17 20:28 ` Alex Riesen
2009-03-17 20:42 ` Junio C Hamano
2009-03-17 21:38 ` Alex Riesen [this message]
2009-03-18 3:17 ` [PATCH] Define a version of lstat(2) specially for copy operation Mark Levedahl
2009-03-18 7:22 ` Alex Riesen
2009-03-18 7:41 ` Junio C Hamano
2009-03-18 7:56 ` Johannes Sixt
2009-03-18 9:30 ` Junio C Hamano
2009-03-18 10:14 ` Johannes Sixt
2009-03-18 18:56 ` Junio C Hamano
2009-03-17 20:34 ` [PATCH] disable post-checkout test on Cygwin Alex Riesen
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=20090317213820.GC13458@blimp.localdomain \
--to=raa.lkml@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=j.sixt@viscovery.net \
--cc=layer@known.net \
--cc=peff@peff.net \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.