git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v6 11/28] cherry-pick: copy notes and run hooks

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Aug 30, 2013, 05:56 UTC
Message-ID
<1377842182-18724-12-git-send-email-felipe.contreras@gmail.com>
In-Reply-To
<1377842182-18724-1-git-send-email-felipe.contreras@gmail.com>
If no action-name is specified, nothing is done.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 Documentation/config.txt   |  9 ++++-----
 Documentation/githooks.txt |  8 ++++----
 rewrite.c                  |  1 +
 sequencer.c                | 25 ++++++++++++++++++++++++-
 4 files changed, 33 insertions(+), 10 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index ec57a15..7e7f89f 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -1691,11 +1691,10 @@ GIT_NOTES_REF) is also implicitly added to the list of refs to be
 displayed.
 
 notes.rewrite.<command>::
-	When rewriting commits with <command> (currently `amend` or
-	`rebase`) and this variable is set to `true`, Git
-	automatically copies your notes from the original to the
-	rewritten commit.  Defaults to `true`, but see
-	"notes.rewriteRef" below.
+	When rewriting commits with <command> (currently `amend`, `rebase`, or
+	`cherry-pick`) and this variable is set to `true`, Git automatically
+	copies your notes from the original to the rewritten commit.  Defaults
+	to `true`, but see "notes.rewriteRef" below.
 
 notes.rewriteMode::
 	When copying notes during a rewrite (see the
diff --git a/Documentation/githooks.txt b/Documentation/githooks.txt
index d48bf4d..8cfa13b 100644
--- a/Documentation/githooks.txt
+++ b/Documentation/githooks.txt
@@ -352,10 +352,10 @@ post-rewrite
 ~~~~~~~~~~~~
 
 This hook is invoked by commands that rewrite commits (`git commit
---amend`, 'git-rebase'; currently 'git-filter-branch' does 'not' call
-it!).  Its first argument denotes the command it was invoked by:
-currently one of `amend` or `rebase`.  Further command-dependent
-arguments may be passed in the future.
+--amend`, `git rebase`, `git cherry-pick`; currently `git filter-branch` does
+'not' call it!).  Its first argument denotes the command it was invoked by
+(e.g. `rebase`).  Further command-dependent arguments may be passed in the
+future.
 
 The hook receives a list of the rewritten commits on stdin, in the
 format
diff --git a/rewrite.c b/rewrite.c
index 4dddcd9..4f95094 100644
--- a/rewrite.c
+++ b/rewrite.c
@@ -2,6 +2,7 @@
 #include "rewrite.h"
 #include "run-command.h"
 #include "notes-utils.h"
+#include "builtin.h"
 
 void add_rewritten(struct rewritten *list, unsigned char *from, unsigned char *to)
 {
diff --git a/sequencer.c b/sequencer.c
index 46848c4..076bb9d 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -22,6 +22,22 @@ const char sign_off_header[] = "Signed-off-by: ";
 static const char cherry_picked_prefix[] = "(cherry picked from commit ";
 static struct rewritten rewritten;
 
+static void finish(struct replay_opts *opts)
+{
+	const char *name;
+
+	if (opts->action != REPLAY_PICK)
+		return;
+
+	name = opts->action_name ? opts->action_name : "cherry-pick";
+
+	if (!*name)
+		return;
+
+	copy_rewrite_notes(&rewritten, name, "Notes added by 'git cherry-pick'");
+	run_rewrite_hook(&rewritten, name);
+}
+
 static int is_rfc2822_line(const char *buf, int len)
 {
 	int i;
@@ -1033,6 +1049,8 @@ static int pick_commits(struct commit_list *todo_list, struct replay_opts *opts)
 		}
 	}
 
+	finish(opts);
+
 	/*
 	 * Sequence of picks finished successfully; cleanup by
 	 * removing the .git/sequencer directory
@@ -1104,8 +1122,13 @@ static int sequencer_skip(struct replay_opts *opts)
 
 static int single_pick(struct commit *cmit, struct replay_opts *opts)
 {
+	int ret;
 	setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
-	return do_pick_commit(cmit, opts);
+	ret = do_pick_commit(cmit, opts);
+	if (ret)
+		return ret;
+	finish(opts);
+	return 0;
 }
 
 int sequencer_pick_revisions(struct replay_opts *opts)
-- 
1.8.4-fc
Previous: Felipe ContrerasNext: Felipe Contreras
Message 12 of 29 in “Massive improvents to rebase and cherry-pick”
  1. 00/28 Massive improvents to rebase and cherry-pickFelipe Contreras, Aug 30, 2013
  2. 01/28 cherry-pick: don't barf when there's nothing to doFelipe Contreras, Aug 30, 2013
  3. 02/28 cherry-pick: add --skip-empty optionFelipe Contreras, Aug 30, 2013
  4. 03/28 revert/cherry-pick: add --quiet optionFelipe Contreras, Aug 30, 2013
  5. 04/28 revert/cherry-pick: add --skip optionFelipe Contreras, Aug 30, 2013
  6. 05/28 builtin: add rewrite helperFelipe Contreras, Aug 30, 2013
  7. 06/28 cherry-pick: store rewritten commitsFelipe Contreras, Aug 30, 2013
  8. 07/28 cherry-pick: don't store skipped commitFelipe Contreras, Aug 30, 2013
  9. 08/28 builtin: move run_rewrite_hook() to rewrite.cFelipe Contreras, Aug 30, 2013
  10. 09/28 builtin: rewrite: add copy_rewrite_notes()Felipe Contreras, Aug 30, 2013
  11. 10/28 cherry-pick: add --action-name optionFelipe Contreras, Aug 30, 2013
  12. 11/28 cherry-pick: copy notes and run hooksFelipe Contreras, Aug 30, 2013
  13. 12/28 cherry-pick: remember rerere-autoupdateFelipe Contreras, Aug 30, 2013
  14. 13/28 rebase: split the cherry-pick stuffFelipe Contreras, Aug 30, 2013
  15. 14/28 rebase: cherry-pick: fix mode storageFelipe Contreras, Aug 30, 2013
  16. 15/28 rebase: cherry-pick: fix sequence continuationFelipe Contreras, Aug 30, 2013
  17. 16/28 rebase: cherry-pick: fix abort of cherry modeFelipe Contreras, Aug 30, 2013
  18. 17/28 rebase: cherry-pick: fix command invocationsFelipe Contreras, Aug 30, 2013
  19. 18/28 rebase: cherry-pick: fix status messagesFelipe Contreras, Aug 30, 2013
  20. 19/28 rebase: cherry-pick: automatically commit stageFelipe Contreras, Aug 30, 2013
  21. 20/28 rebase: cherry-pick: set correct action-nameFelipe Contreras, Aug 30, 2013
  22. 21/28 rebase: trivial cleanupFelipe Contreras, Aug 30, 2013
  23. 22/28 t: rebase-autostash: fix setupFelipe Contreras, Aug 30, 2013
  24. 23/28 sequencer: store progress informationFelipe Contreras, Aug 30, 2013
  25. 24/28 prompt: parse cherry-pick rebase modeFelipe Contreras, Aug 30, 2013
  26. 25/28 rebase: use 'cherrypick' mode instead of 'am'Felipe Contreras, Aug 30, 2013
  27. 26/28 rebase: cherry-pick: add merge optionsFelipe Contreras, Aug 30, 2013
  28. 27/28 rebase: remove merge modeFelipe Contreras, Aug 30, 2013
  29. 28/28 rebase: cherry-pick: add copyrightFelipe Contreras, Aug 30, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.