On Fri, Nov 14, 2014 at 08:11:18PM +0100, Johannes Sixt wrote:

> Not a comment, on this paragraph of yours, but while I was walking
> through the code with gdb, I was wondering why the reflog directory is
> being touched at all when core.logallrefupdates is off (in
> log_ref_setup via log_ref_write). With the patch below I now get the
> same unlink warning as on Linux.

It's because of the weird reflog rules: we will use a reflog file that
exists (no matter what core.logallrefupdates says), but only _create_ a
new one if the config tells us to. I think this dates back to the origin
of reflogs, where we weren't sure at first that you would always want
them on.

> --- 8< ---
> Subject: [PATCH] Windows: correct detection of EISDIR in mingw_open()
> 
> According to the Linux open(2) man page, open() returns EISDIR if a
> directory was attempted to be opened for writing. Our emulation in
> mingw_open() does not get this right: it checks only for O_CREAT. Fix
> it to check for one of the write flags.
> 
> This fixes a failure in reflog handling, which opens files with
> O_APPEND|O_WRONLY, but without O_CREAT, and expects EISDIR when the
> named file happens to be a directory.

Ah, so we do get EISDIR with O_CREAT. Which explains why the first test
passed and the second failed (we only pass O_CREAT when logallrefupdates
is on). The behavior you saw (and this fix) make perfect sense to me
then.

> Signed-off-by: Johannes Sixt <[email protected]>

I am not sure if I get to Acked-by things in compat/mingw, but I am
pretty sure this is the right fix. :)

-Peff
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to