On 11/05/2017 07:17 AM, Junio C Hamano wrote: > Junio C Hamano <gitster@xxxxxxxxx> writes: >> Rafael Ascensão <rafa.almas@xxxxxxxxx> writes: >> ... >>> Because changing the default behavior of that function has >>> implications on multiple commands which I think shouldn't change. But >>> at the same time, would be nice to have the logic that deals with >>> glob-ref patterns all in one place. >>> >>> What's the sane way to do this? >> >> Learn to type "--decorate-refs="refs/heads/[m]aster", and not twewak >> the code at all, perhaps. The users of existing "with no globbing, >> /* is appended" interface are already used to that way and they do >> not have to learn a new and inconsistent interface. >> >> After all, "I only want to see 'git log' output with 'master' >> decorated" (i.e. not specifying "this class of refs I can glob by >> using the naming convention I am using" and instead enumerating the >> ones you care about) does not sound like a sensible thing people >> often want to do, so making it follow the other codepath so that >> people can say "refs/tags" to get "refs/tags/*", while still allowing >> such a rare but specific and exact one possible, may not sound too >> bad to me. > > Having said all that, I can imagine another way out might be to > change the behaviour of this "normalize" thing to add two patterns, > the original pattern in addition to the original pattern plus "/*", > when it sees a pattern without any glob. Many users who relied on > the current behaviour fed "refs/tags" knowing that it will match > everything under "refs/tags" i.e. "refs/tags/*", and they cannot > have a ref that is exactly "refs/tags", so adding the original > pattern without an extra trailing "/*" would not hurt them. And > this will allow you to say "refs/heads/master" when you know you > want that exact ref, and in such a repository where that original > pattern without trailing "/*" would be useful, because you cannot > have "refs/heads/master/one" at the same time, having an extra > pattern that is the original plus "/*" would not hurt you, either. > > This however needs a bit of thought to see if there are corner cases > that may result in unexpected and unwanted fallout, and something I > am reluctant to declare unilaterally that it is a better way to go. There's some glob-matching code (somewhere? I don't know if it's allowed everywhere) that allows "**" to mean "zero or one path components. If "refs/tags" were massaged to be "refs/tags/**", then it would match not only refs/tags refs/tags/foo but also refs/tags/foo/bar , which is probably another thing that the user would expect to see. There's at least some precedent for this kind of expansion: `git for-each-ref refs/remotes` lists *all* references under that prefix, even if they have multiple levels. Michael