Subject: Re: [PATCH] Disallow '\' in ref names

From: Johannes Sixt <[email-masked]>
Date: Fri, 08 May 2009 09:17:48 +0200

Andreas Ericsson schrieb:
> Robin Rosenberg wrote:
>> This is asking for trouble since '\' is a directory separator in
>> Windows and thus may produce unpredictable results.
>>
> 
> NAK. We allow / on unixy systems, and that's the path separator there.
> Junio even makes extensive use of it to create per-contributor
> namespaces for topic-branches.
> 
> Are you guessing this might be a problem in the future, or have you
> actually run into it?

This is not possible on Windows:

$ git update-ref refs/heads/foo\bar HEAD
fatal: Unable to create '.git/refs/heads/foo\bar.lock': No such file or
directory

The problem is that git doesn't create the directory .git/refs/heads/foo
because the ref handling only mkdir()s directories that were split off
from the ref at forward-slashes.

The decision not to mangle command line arguments that are refs (on
Windows) was intentional. (We do mangle pathspec, i.e. we convert '\' to
'/'.) But back then I did not think about what should happen if a ref
contains a backslash.

BTW, it's the same problem with backslash in path components: Just don't
do that if you want to be cross-platfrom.

-- Hannes