git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Johannes Sixt <j.sixt@viscovery.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: Alex Riesen <raa.lkml@gmail.com>, Jeff King <peff@peff.net>,
	layer <layer@known.net>,
	git@vger.kernel.org
Subject: Re: [PATCH] Define a version of lstat(2) specially for copy operation
Date: Wed, 18 Mar 2009 08:56:09 +0100	[thread overview]
Message-ID: <49C0A919.7070606@viscovery.net> (raw)
In-Reply-To: <7vmybjl1l6.fsf@gitster.siamese.dyndns.org>

Junio C Hamano schrieb:
> Alex Riesen <raa.lkml@gmail.com> writes:
> 
>> 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>
>> ...
>> 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)) {
> 
> Yuck; that's a bit too ugly for generic code.  Will there be other places
> that this needs to be used?  If so, we'd probably need to encourage its
> use where appropriate, which is even uglier but we cannot avoid it...
> 
> Also when the underlying system does not know the executable bit, how
> would this help?  I thought that earlier you said the part that checks if
> it wants to execute hooks with access(X_OK) will fail, so...

The "underlying system" in this case is Cygwin, and it *does* have an
executable bit.

But the FS gymnastics that implement it are slow and affect all lstat()
calls, so we have replaced lstat() with a simpler and faster
implementation. Only that the replacement doesn't know about the X bit
anymore; it always returns mode 0666.

Therefore, if a file is created whose mode is influenced by the fast
lstat(), then it will always be non-X. The access(, X_OK) call on the hook
script would do the right thing if only the script were created with the
correct mode. access(, X_OK) fails because the file was created with non-X
permissions.

-- Hannes

  reply	other threads:[~2009-03-18  7:57 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         ` [PATCH] Define a version of lstat(2) specially for copy operation Alex Riesen
2009-03-18  3:17           ` Mark Levedahl
2009-03-18  7:22           ` Alex Riesen
2009-03-18  7:41           ` Junio C Hamano
2009-03-18  7:56             ` Johannes Sixt [this message]
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=49C0A919.7070606@viscovery.net \
    --to=j.sixt@viscovery.net \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=layer@known.net \
    --cc=peff@peff.net \
    --cc=raa.lkml@gmail.com \
    /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).