Hello,
Some trailers refer to other commits. Let's call them xrefs
(cross-references). For example, a cherry pick trailer points to the
source commit. It is sometimes useful to build a reverse map of these
xrefs - ie. source -> cherry-pick instead of cherry-pick -> source.
This, e.g, can answer which releases a commit ended up in on
repositories which cherry-picks fixes back from the development
branch. Let's say the repository looks like the following.
D'---E'' release-B
/
C' E' release-D
/ /
A---B---C---D---E master
where the followings cherry-picks took place.
C -> C'
D -> D'
E -> E' -> E''
Using the reverse-mapping in this patchset, we can get the following
annotated log which succinctly shows which commit ended up where.
$ git log --notes=xref-cherry-picks --oneline | git name-rev --name-only
--stdin
4b165af commit E
Notes (xref-cherry-picks):
Cherry-picked-to: release-D
Cherry-picked-to: release-B
82bf1f3 commit D
Notes (xref-cherry-picks):
Cherry-picked-to: release-B~1
364eccf commit C
Notes (xref-cherry-picks):
Cherry-picked-to: release-B~2
ed3adf3 commit B
ddd1bf2 commit A
This patchset implements generic trailer cross-reference
reverse-mapping and the necessary hooks and samples to keep
cherry-pick reverse-maps up-to-date.
diffstat follows. Thanks.
Documentation/git-cherry-pick.txt | 5
Documentation/git-fetch.txt | 5
Documentation/git-notes.txt | 8
Documentation/git-reverse-trailer-xrefs.txt | 145 +++++++++++++++
Documentation/githooks.txt | 23 ++
Makefile | 1
builtin.h | 1
builtin/fetch.c | 72 +++++++
builtin/reverse-trailer-xrefs.c | 160 +++++++++++++++++
builtin/revert.c | 14 +
git.c | 1
notes-merge.c | 9
notes-utils.c | 2
notes-utils.h | 3
notes.c | 260 +++++++++++++++++++++++++++-
notes.h | 9
t/t3321-notes-xref-cherry-picks.sh | 124 +++++++++++++
templates/hooks--post-cherry-pick.sample | 8
templates/hooks--post-fetch.sample | 30 +++
trailer.c | 105 +++++++++++
trailer.h | 38 ++++
21 files changed, 1015 insertions(+), 8 deletions(-)
--
tejun