From: Junio C Hamano Date: Sat, 23 Jan 2010 20:04:00 GMT Subject: Re: [PATCH] Handle double slashes in make_relative_path() Message-ID: <7vwrz8bnbj.fsf@alter.siamese.dyndns.org> In-Reply-To: <201001231409.30706.j6t@kdbg.org> Johannes Sixt writes: > On Samstag, 23. Januar 2010, Robin Rosenberg wrote: >> It seems this function does something unhealthy when you pass a path of the >> form //server/share. On windows dropping the double // at the beginning >> makes it a different path since // is the UNC prefix. > > There is no problem in practice. > > The function returns either the input unmodified, or it strips also at least > one directory component, except when base is only "/" (or "//" or "///"...). > I said in practice, because on Windows it does not make sense to invoke git > with (literally) > > git --git-dir=//server/share/repo.git --work-tree=/ ... > > i.e., without a drive prefix before the slash of --work-tree. If you did this: git --git-dir=//reposerver/repo.git --work-tree=//buildserver/workarea then we would say "one is not a prefix of the other", so it would be fine. At least I don't think the "recover from unintentionally doubled slashes in user supplied path" fix is introducing any new problem in that case. If on the other hand, if you did this: git --git-dir=//server/repo.git --work-tree=//server/workarea that also would be Ok. I think one issue is what happens when you did this: cd //server git --git-dir=//server/repo/repo.git --work-tree=repo Does msysgit implementation figures out that the work tree is located at "//server/repo" when get_git_work_tree() is asked to produce an absolute path so that it can be compared with //server/repo/repo.git with the code? If it does (with the leading double slash), then "doubled slahses fix" is a regression we should do something about it. If it doesn't, then it probably doesn't matter.