[RFC PATCH 0/4] pathspec labels [WAS: submodule groups]
- From
Stefan Beller <sbeller@google.com>
- Date
- May 13, 2016, 00:19 UTC
- Message-ID
- <20160513001936.7623-1-sbeller@google.com>
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.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
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)"Feedback welcome!
Thanks, Stefan
[1] http://thread.gmane.org/gmane.comp.version-control.git/294212 [2] http://thread.gmane.org/gmane.comp.version-control.git/294212/focus=294391
Stefan Beller (4): Documentation: correct typo in example for querying attributes pathspec: move long magic parsing out of prefix_pathspec pathspec: move prefix check out of the inner loop pathspec: record labels
Documentation/glossary-content.txt | 5 ++ Documentation/technical/api-gitattributes.txt | 2 +- attr.h | 1 + dir.c | 31 ++++++++ pathspec.c | 109 +++++++++++++++++--------- pathspec.h | 1 + t/t6134-pathspec-with-labels.sh | 91 +++++++++++++++++++++ 7 files changed, 201 insertions(+), 39 deletions(-) create mode 100755 t/t6134-pathspec-with-labels.sh
-- 2.8.2.400.g66c4903.dirty