From: Johannes Sixt <j6t@kdbg.org>
To: Jeff King <peff@peff.net>
Cc: Michael Blume <blume.mike@gmail.com>,
Junio C Hamano <gitster@pobox.com>,
git@vger.kernel.org
Subject: Re: [PATCH] t1410: fix breakage on case-insensitive filesystems
Date: Thu, 13 Nov 2014 09:50:24 +0100 [thread overview]
Message-ID: <546470D0.3080809@kdbg.org> (raw)
In-Reply-To: <20141112215923.GB6801@peff.net>
Am 12.11.2014 22:59, schrieb Jeff King:
> On Wed, Nov 12, 2014 at 09:20:22PM +0100, Johannes Sixt wrote:
>
>> Am 09.11.2014 um 02:59 schrieb Jeff King:
>>> test_expect_success 'stale dirs do not cause d/f conflicts (reflogs off)' '
>>> - test_when_finished "git branch -d a || git branch -d a/b" &&
>>> + test_when_finished "git branch -d one || git branch -d one/two" &&
>>>
>>> - git branch a/b master &&
>>> - echo "a/b@{0} branch: Created from master" >expect &&
>>> - git log -g --format="%gd %gs" a/b >actual &&
>>> + git branch one/two master &&
>>> + echo "one/two@{0} branch: Created from master" >expect &&
>>> + git log -g --format="%gd %gs" one/two >actual &&
>>> test_cmp expect actual &&
>>> - git branch -d a/b &&
>>> + git branch -d one/two &&
>>>
>>> - # same as before, but we only create a reflog for "a" if
>>> + # same as before, but we only create a reflog for "one" if
>>> # it already exists, which it does not
>>> - git -c core.logallrefupdates=false branch a master &&
>>> + git -c core.logallrefupdates=false branch one master &&
>>> : >expect &&
>>> - git log -g --format="%gd %gs" a >actual &&
>>> + git log -g --format="%gd %gs" one >actual &&
>>> test_cmp expect actual
>>> '
>>>
>>
>> On Linux I observe
>>
>> Deleted branch one/two (was b60a214).
>> warning: unable to unlink .git/logs/refs/heads/one: Is a directory
>> Deleted branch one (was b60a214).
>> ok 15 - stale dirs do not cause d/f conflicts (reflogs off)
>>
>> (notice the warning)
>
> Yes, this is expected. The warning actually comes from the "git branch
> -d" run during cleanup. Branch "one" exists but has no reflog. Instead
> there is a crufty dir call "logs/refs/heads/one". The deletion process
> blindly calls "unlink" on it and complains when it fails for reasons
> other than ENOENT.
>
> We could suppress that warning, but I didn't think it was really worth
> the bother. This is such a funny setup (reflogs on, then off, then on,
> _and_ a d/f conflict in the branches) that I doubt it will come up much.
>
> I seem to recall that ancient versions of SunOS used to do bad things
> when you called "unlink" on a directory, but I do not know if that is
> still the case (I also would doubt this is the only place in git where
> we blindly do an "unlink if you can" without actually checking the file.
>
>> but on Windows the test fails with
>>
>> Deleted branch one/two (was b60a214).
>> error: Unable to append to .git/logs/refs/heads/one: Permission denied
>> fatal: Cannot update the ref 'refs/heads/one'.
>> not ok 15 - stale dirs do not cause d/f conflicts (reflogs off)
>
> That looks more like it is failing the actual test (i.e., the creation
> of branch "one" when there is cruft in the reflog). My guess is that
> calling open() on a directory is giving us EACCES instead of EISDIR. Can
> you verify that?
>
> If that is the case, then this isn't a new breakage, I think, but just
> code we weren't previously exercising. It would be interesting to know
> whether:
>
> git config core.logallrefupdates true
> git branch one/two
> git branch -d one/two
> git branch one
>
> works (even without my patch). If so, then there's probably something
> else going on.
Don't know what you mean with "my patch" (the one I was responding to
touches only t1410). But the sequence works as expected with a version
built in September:
C:\Temp\gittest>git init
Initialized empty Git repository in C:/Temp/gittest/.git/
C:\Temp\gittest>git commit --allow-empty -m init
[master (root-commit) 2e78994] init
C:\Temp\gittest>git branch one/two
C:\Temp\gittest>git branch -d one/two
Deleted branch one/two (was 2e78994).
C:\Temp\gittest>git branch one
C:\Temp\gittest>git version
git version 2.1.0.rc2.1268.g12ef091
> The relevant bits are in log_ref_setup. We try to open() once, and
> accept EISDIR as a hint that we may need to remove an empty directory
> and try again. If Windows gives us EACCES, then we may need to have that
> trigger the same code.
Thanks, that is a starting point.
-- Hannes
next prev parent reply other threads:[~2014-11-13 8:50 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-08 19:28 Test failure Michael Blume
2014-11-09 1:43 ` Jeff King
2014-11-09 1:59 ` [PATCH] t1410: fix breakage on case-insensitive filesystems Jeff King
2014-11-09 17:34 ` Michael Blume
2014-11-09 17:48 ` Junio C Hamano
2014-11-10 6:30 ` Jeff King
2014-11-10 6:47 ` Junio C Hamano
2014-11-10 7:04 ` Jeff King
2014-11-09 20:04 ` Torsten Bögershausen
2014-11-09 21:36 ` Michael Blume
2014-11-09 21:42 ` Torsten Bögershausen
2014-11-10 2:46 ` Michael Blume
2014-11-10 2:56 ` Junio C Hamano
2014-11-10 6:09 ` Jeff King
2014-11-12 20:20 ` Johannes Sixt
2014-11-12 21:59 ` Jeff King
2014-11-13 8:50 ` Johannes Sixt [this message]
2014-11-13 9:08 ` Jeff King
2014-11-13 16:30 ` Junio C Hamano
2014-11-14 19:11 ` Johannes Sixt
2014-11-14 19:23 ` Jeff King
2014-11-14 20:03 ` Junio C Hamano
2014-11-14 21:04 ` Andreas Schwab
2014-11-15 8:27 ` Johannes Sixt
2014-11-16 21:06 ` [PATCH v2] Windows: correct detection of EISDIR in mingw_open() Johannes Sixt
2014-11-09 5:44 ` Test failure Michael Blume
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=546470D0.3080809@kdbg.org \
--to=j6t@kdbg.org \
--cc=blume.mike@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--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 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).