Re: [RFC PATCH 0/4] pathspec labels [WAS: submodule groups]
- From
Duy Nguyen <pclouds@gmail.com>
- Date
- May 15, 2016, 10:06 UTC
- Message-ID
- <CACsJy8BK-u2VV3kkq3ANHCanYqMwphqgxZmooQfewA_J7e8MPw@mail.gmail.com>
- In-Reply-To
- <20160513001936.7623-1-sbeller@google.com>
On Fri, May 13, 2016 at 7:19 AM, Stefan Beller <sbeller@google.com> wrote:
Show 32 quoted lines
> After some fruitful discussion[1] in which Junio suggested trying a very > different route[2] that is more general and not submodule related, I considered > doing a mock for this. > > This lets you label arbitrary pathspecs, e.g. in git.git we may want to have: > > t/t[0-9]*.sh label=tests > > such that > > $ git log --author=Beller ":(label=tests)" > > would show all commits in which I touched tests. > > This has suprisingly few lines of code, as the first 3 patches are refactoring. > The actual new feature is in the last patch. > > This would solve the submodule issues I want to solve, as I can produce a > .gitattributes like: > > ./submodule1 label=default > ./submodule2 label=default > ./submodule3 label=optional-feature1 > > and then I'd instruct the users to clone like this: > > git clone .. superproject > cd superproject > git submodule update --init :(label:default) > > The second part of the submodule series to collapse these three commands > will come as an extra series later, then.
Yeah. I can see the use of this, even without submodules.
Show 7 quoted lines
> What annoys me here: > Attributes can only be set once at the moment, there is no way to collect all > attributes. If we'd have such a collection feature we would be able to > configure this: > > *.[ch] label=C,code > contrib/** label=oldstuff
Instead of putting everything in under the same attribute name "label", make one attribute per label? Would this work?
*.[ch] c-group code-group
And the pathspec magic name can be simply "attr", any git attribute can be used with it, e.g. :(attr:c-group)
Show 11 quoted lines
> and run this: > > git status ":(label:C oldstuff)" > > which would be the equivalent to > > contrib/**.[ch] > > as in this proposed implementation the labels which are given within one > pathspec item are logical AND. To get the logical OR, you'd have to give multiple > pathspec items, i.e. ":(label:C)" ":(label:oldstuff)"
It's even better if pathspec does not have to deal with combination logic. Can attr macros deal with that (or if it can't at the moment, can we improve it)?
-- Duy