On Wed, Dec 07, 2016 at 02:13:35PM -0800, Brandon Williams wrote: > On 12/07, Junio C Hamano wrote: > > Torsten Bögershausen <tboegi@xxxxxx> writes: > > > > > But in any case it seems that e.g. > > > //SEFVER/SHARE/DIR1/DIR2/.. > > > must be converted into > > > //SEFVER/SHARE/DIR1 > > > > > > and > > > \\SEFVER\SHARE\DIR1\DIR2\.. > > > must be converted into > > > \\SEFVER\SHARE\DIR1 > > > > Additional questions that may be interesting are: > > > > //A/B/../C is it //A/C? is it an error? Yes, at least under Windows. If I have e.g. a Raspi with SAMBA, I can put a git Repository here: //raspi/torsten/projects/git If I use git push //raspi/torsten/../junio/projects/git that should be an error. > > //A/B/../../C/D is it //C/D? is it an error? > > Same for git push /raspi/../raspi2/torsten//projects/git > > > Also is //.. the same as //? I would assume so since /.. is / > Under Windows //.. is simply illegal, I would say. The documentation here https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx Mentions these 2 examples, what to feed into the WIN32 file API: a) \\?\D:\very-long-path b) \\server\share\path\file" c) "\\?\UNC\server\share\path" So whatever we do, the ".." resoltion is only allowed to look at "very-long-path" or "path". Some conversion may be done in mingw.c: https://github.com/github/git-msysgit/blob/master/compat/mingw.c So what I understand, '/' in Git are already converted into '\' if needed ? It seams that we may wnat a function get_start_of_path(uncpath), which returns: get_start_of_path_win("//?/D:/very-long-path") "/very-long-path" get_start_of_path_win("//server/share/path/file") "/path/file" get_start_of_path_win("//?/UNC/server/share/path") "/path" (I don't know if we need the variant with '\', but is would'n hurt): get_start_of_path_win("\\\\?\\D:\\very-long-path") "\\very-long-path" get_start_of_path_win("\\\\server\\share\\path\\file") "\\path\\file" get_start_of_path_win("\\\\?\\UNC\\server\\share\\path") "\\path" Then the non-windows version could simply return get_start_of_path_non_win(something) something Does this make sense ?