From: Junio C Hamano Date: Thu, 01 Jul 2021 17:42:39 GMT Subject: Re: [PATCH v2 0/2] mingw: handle absolute paths in expand_user_path() Message-ID: In-Reply-To: "Johannes Schindelin via GitGitGadget" writes: > In Git for Windows, we ran with a patch "in production" for quite a while > where paths starting with a slash (i.e. looking like Unix paths, not like > Windows paths) were interpreted as being relative to the runtime prefix, > when expanded via expand_user_path(). > > This was sent to the Git mailing list as a discussion starter, and it was > pointed out that this is neither portable nor unambiguous. > > After the dust settled, I thought about the presented ideas for a while > (quite a while...), and ended up with the following: any path starting with > / is expanded. This is ambiguous because it could be a valid > path. But then, it is unlikely, and if someone really wants to specify such > a path, it is easy to slap a ./ in front and they're done. I just went back to briefly scan the discussion in late 2018. I think the rough consensus back then was that * It indeed is a problem that there is no syntax for users of "relocatable Git" to use to point at things that come as part of the "relocatable Git" package. * A change to expand_user_path() would be too broad, it makes sense for this feature to be in git_config_pathname(); * We need to get the syntax right. As to the last item, there were a handful of choices raised: - Use "~~"--the downside is that this is not extensible. Use "~runtime-prefix/" would be a better choice (the likelyhood of , $RUNTIME_PREFIX, and any other random choice happens to be used as a valid directory name is just as slim as the likelyhood of "runtime-prefix" used as a valid username). - "$RUNTIME_PREFIX" to make it read like a variable---the downside was that it looked TOO MUCH like a variable and risked user confusion (e.g. it may be upsetting that "$HOME/.gitconfig" is not expanded like "~/.gitconfig" is). - %(RUNTIME-PREFIX) to make it similar to how Git replaces various tokens that are understood only in the context of Git. - ---the downside is that this is an unnecessary new syntax we do not have to introduce. If is unlikely to be used as a valid directory name, %(RUNTIME-PREFIX) is just as unlikely. There might have been other ideas floated back then. I have to say that the one you chose in this round is the least favourite of mine, and if you consulted me privately before redoing this round, I would probably have said %(RUNTIME_PREFIX) would make the most sense among the candidates. Thanks.