Re: [PATCH] Disallow '\' in ref names
- From
Johannes Sixt <j.sixt@viscovery.net>
- Date
- May 8, 2009, 07:17 UTC
- Message-ID
- <4A03DC9C.2050204@viscovery.net>
- In-Reply-To
- <4A03D776.6070309@op5.se>
Andreas Ericsson schrieb:
Show 11 quoted lines
> 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