Re: [PATCH 1/2] relative_path should honor dos_drive_prefix
- From
Jiang Xin <worldhello.net@gmail.com>
- Date
- Sep 20, 2013, 01:26 UTC
- Message-ID
- <CANYiYbGK_KdF5Yvcus5C_cGz3EyGTaFvirsUH5q4Eu=3VC4=Wg@mail.gmail.com>
- In-Reply-To
- <5238AE60.1010700@kdbg.org>
2013/9/18 Johannes Sixt <j6t@kdbg.org>:
Show 35 quoted lines
> 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.gitBut 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).
Show 6 quoted lines
> 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