Skip to contentSkip to conversation

characterizing commits

DISCUSSION William Pursell 2 participants 2 messages Jun 15, 2016

lore
Share & tools
lore
#0 lore raw

I have a desire to add metadata to commits to characterize their importance/type. (Or I'd like another recommended method to achieve the following behavior).

A lot of commits in any given project can be grouped into different types. eg, looking at the history for git, there are a lot of merge commits, a lot of commits that only touch gitk, a lot of 'auto-generated manpages', a lot of 'typo in documentation' etc. In my own projects, I have a fairly high percentage of commits that are trivial (eg whitespace only, typos, etc). What I'm after is the ability to do something like:

git log --group=!trivial
git log --group=importance:3+

and only get the log for those commits that have been not been classified "trivial" or that have a precedence of 3 or greater.

For example, I'd like the following work flow:

$ git log --pretty=oneline
e62bb07a6894d282cdc0fdba6c67ae2ecd086cbb 5
b0986c6e8415c45e123e1838fbe8bf9e8518a90d 4
89916e36bae3208a76c338e91508759787563042 3
3942ef4e118dde3d844da5d84f466ac9666fae62 2
6fa2e40ed491d1dcbbfac9f2d301b517413bec3b 1
04dcd38a8cb6496e37594a273ca39542912ca1eb important
9bd23c2d08e254058a1a9709f963737dc9a71d16 trivial change
$ git group 6fa2e trivial
$ git group 9bd23 trivial
$ git log --pretty=oneline --group=!trivial
e62bb07a6894d282cdc0fdba6c67ae2ecd086cbb 5
b0986c6e8415c45e123e1838fbe8bf9e8518a90d 4
89916e36bae3208a76c338e91508759787563042 3
3942ef4e118dde3d844da5d84f466ac9666fae62 2
04dcd38a8cb6496e37594a273ca39542912ca1eb important

Is there already a mechanism for filtering commits that I could extend to accomplish this?

Signature · 1 line
William Pursell
#1 lore raw
Quoted 9 lines · William Pursell

A lot of commits in any given project can be grouped into different types. eg, looking at the history for git, there are a lot of merge commits, a lot of commits that only touch gitk, a lot of 'auto-generated manpages', a lot of 'typo in documentation' etc. In my own projects, I have a fairly high percentage of commits that are trivial (eg whitespace only, typos, etc). What I'm after is the ability to do something like:

Quoted 7 lines

git log --group=!trivial
git log --group=importance:3+

[...]

Is there already a mechanism for filtering commits that I could extend to accomplish this?

Generally you would put a pseudo-header into your commit message, like:

Status: trivial
Importance: 3

and then use --grep to filter matching commits:

  git log --grep="Status: trivial"
  git log --grep="Importance: [3-9]"

Obviously the syntax is a little bit clunkier. You could fix that with an option to parse arbitrary pseudo-headers (and even support numeric relations), something like:

  git log --filter='importance > 3'

which would be converted internally to a grep of the commit message like this:

/^importance: (\d+)/i

and compare the result to 3.

The nice thing about that approach is that the storage remains the same:
text in the commit message. That means it gets displayed when you look at the commit, people with older versions of git can still read it, etc.

One thing this _doesn't_ get you is annotating commits after the fact. This has been discussed in the past; try searching the list for "notes".

-Peff