On Sat, Nov 17, 2018 at 04:46:22PM +0900, Junio C Hamano wrote: > "brian m. carlson" <sand...@crustytoothpaste.net> writes: > > >> $ git request-pull HEAD^ git://foo.example.com/example | grep example > >> ssh://bar.example.com/example > >> > >> I think that if we use the "principle of least surprise," insteadOf > >> rules shouldn't be applied for git-request-pull URLs. > > > > I'd like to point out a different use that may change your view. I have > > an insteadOf alias, gh:, that points to GitHub. Performing the rewrite > > is definitely the right thing to do, since other users may not have my > > alias available. > > > > I agree that in your case, a rewrite seems less appropriate, but I think > > we should only skip the rewrite if the value already matches a valid > > URL. > > It would be tricky to define what a valid URL is, though. Do we > need some way to say "this is a private URL that should not be > given preference when composing a request-pull message"? E.g. > > [url "git://git.dev/"] > insteadOf = https://git.dev/ > > [url "https://github.com/"] > insteadOf = gh: > private > > The former does not mark https://git.dev/ a private one, so a > "request-pull https://git.dev/$thing" would show the original > "https://git.dev/$thing" without rewriting. The latter marks gh: a > private one so "request-pull gh:$thing" would be rewritten before > exposed to the public as "https://github.com/$thing" > > Or something like that?
One funny thing about this is that the "private" config key is url.https://github.com.private. But that's the public URL! It makes sense if you think of it as "this rewrite is private". And that would probably serve for most people's needs, though it gets funny when you have multiple conversions: [url "https://github.com/"] insteadOf = gh: insteadOf = git://github.com you may want to share that you are rewriting one of those, but not the other. I suspect it would be less confusing if the rewrite were inverted, like: [url "gh:"] rewriteTo = https://github.com rewritePrivate [url "git://github.com"] rewriteTo = https://github.com where the mapping of sections to rewrite rules must be one-to-one, not one-to-many (and you can see that the flip side is that we have to repeat ourselves). I hate to introduce two ways of doing the same thing, but maybe it is simple enough to explain that url.X.insteadOf=Y is identical to url.Y.rewriteTo=X. I do think people have gotten confused by the ordering of insteadOf over the years, so this would let them specify it in whichever way makes the most sense to them. -Peff