2013/9/18 Johannes Sixt <j6t@xxxxxxxx>: > Am 17.09.2013 10:24, schrieb Jiang Xin: >> I have checked the behavior of UNC path on Windows (msysGit): >> >> * I can cd to a UNC path: >> >> cd //server1/share1/path >> >> * can cd to other share: >> >> cd ../../share2/path >> >> * and can cd to other server's share: >> >> cd ../../../server2/share/path >> >> That means relative_path(path1, path2) support UNC paths out of the box. >> We only need to check both path1 and path2 are UNC paths, or both not. > > Your tests are flawed. You issued the commands in bash, which (or rather > MSYS) does everything for you that you need to make it work. But in > reality it does not, because the system cannot apply .. to //server/share: > > $ git ls-remote //srv/public/../repos/his/setups.git > fatal: '//srv/public/../repos/his/setups.git' does not appear to be a > git repository > fatal: Could not read from remote repository. > > Please make sure you have the correct access rights > and the repository exists. > > even though the repository (and //srv/public, let me assure) exists: > > $ git ls-remote //srv/repos/his/setups.git > bea489b0611a72c41f133343fdccbd3e2b9f80b5 HEAD > ... After see this link (provided by Torsten): <http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx> I find the following commands could work: $ git ls-remote //srv/repos/his/setups.git $ git ls-remote //srv/repos/his/../his/setups.git $ git ls-remote //?/UNC/srv/repos/his/setups.git $ git ls-remote //?/UNC/srv/repos/../repos/his/setups.git But no luck for this one: $ git ls-remote //srv/repos/../repos/his/setups.git I trace it using gdb, and find it failed in "stat()/mingw_stat()" call of function "enter_repo" in path.c. But I can not find out why "git ls-remote //?/UNC/srv/repos/../repos/his/setups.git" could work (success in shell, failed in gdb). > Please let me suggest not to scratch where there is no itch. ;) Your > round v2 was good enough. > > If you really want to check UNC paths, then you must compare two path > components after the the double-slash, not just one. > I have already try this (honor two path components after //) during the reroll for patch v3. But I am not satisfied with it, and it seems like over-engineered: Rename "have_same_root" to "get_common_root_prefix_width", and it return -1 for no same_root found, otherwize return the length of root_prefix_width. Since restored the default behavior of setup.c in commit ("Use simpler relative_path when set_git_dir"), function "relative_path" are only used in "quote.c" and "builtin/clean.c", and two paths provided to "relative_path" are always (I can not find exception) relative paths. So no itch exist I think. -- Jiang Xin -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html