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 <j6t@xxxxxxxx> 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html