On Mon, May 15, 2017 at 10:05:29PM +0200, Johannes Sixt wrote: > I observe the following failure on Windws with origin/next, in > t5400-send-pack.sh > > +++ diff -u expect refs > --- expect Mon May 15 06:54:59 2017 > +++ refs Mon May 15 06:54:59 2017 > @@ -1,4 +1,3 @@ > 5285e1710002a06a379056b0d21357a999f3c642 refs/heads/master > -5285e1710002a06a379056b0d21357a999f3c642 refs/remotes/origin/HEAD > 5285e1710002a06a379056b0d21357a999f3c642 refs/remotes/origin/master > 53d9066ca10f2e103b33caf3a16a723553c33b00 .have > error: last command exited with $?=1 > not ok 16 - receive-pack de-dupes .have lines Interesting that it's the symref. I wonder if that is important (though they should always be implemented as a real symref file and not a symlink, so I don't think FS limitations would come into play). For sanity, you might want to double-check that the "shared-fork" repository has that symref on disk, and that for-each-ref reports it. But... > The trace file looks like this: > > -------- trace -------- > packet: receive-pack> 5285e1710002a06a379056b0d21357a999f3c642 refs/heads/master\0report-status delete-refs side-band-64k quiet atomic ofs-delta agent=git/2.13.0.497.g5af12421b0 > packet: receive-pack> 5285e1710002a06a379056b0d21357a999f3c642 refs/remotes/origin/HEAD Wait, there it is in the receive-pack output. But if we look at what "push" receives: > packet: push< 5285e1710002a06a379056b0d21357a999f3c642 refs/heads/master\0report-status delete-refs side-band-64k quiet atomic ofs-delta agent=git/2.13.0.497.g5af12421b0 > packet: receive-pack> 5285e1710002a06a379056b0d21357a999f3c642 refs/remotes/origin/master > packet: push< 5285e1710002a06a379056b0d21357a999f3c642 refs/remotes/origin/master It's skipped! So either: 1. receive-pack wrote the trace line without sending it (which seems an unlikely bug to differ between platforms) 2. push some didn't receive it (which makes no sense; this is a stream socket and it was able to parse the next pktline) 3. push did get it but for some reason didn't write the trace (also unlikely as with option 1) 4. There is something racy and unportable about both programs writing to the same trace file. It's opened with O_APPEND, which means that each write should atomically position the pointer at the end of the file. Is it possible there's a problem with that in the way O_APPEND works on Windows? If that was the case, though, I'd generally expect a sheared write or a partial overwrite. The two origin/HEAD lines from the two programs are the exact same length, but I'd find it more likely for the overwrite to happen with one of the follow-on lines. So all of those sound kind of implausible. If you run the test over and over, does it happen consistently, and is it always the same line? -Peff