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

[PATCH v6 06/28] cherry-pick: store rewritten commits

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Aug 30, 2013, 05:56 UTC
Message-ID
<1377842182-18724-7-git-send-email-felipe.contreras@gmail.com>
In-Reply-To
<1377842182-18724-1-git-send-email-felipe.contreras@gmail.com>
Will be useful for the next commits.
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 sequencer.c | 22 +++++++++++++++++++++-
 sequencer.h |  1 +
 2 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/sequencer.c b/sequencer.c
index d0e65de..468fa54 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -14,11 +14,13 @@
 #include "merge-recursive.h"
 #include "refs.h"
 #include "argv-array.h"
+#include "rewrite.h"
 
 #define GIT_REFLOG_ACTION "GIT_REFLOG_ACTION"
 
 const char sign_off_header[] = "Signed-off-by: ";
 static const char cherry_picked_prefix[] = "(cherry picked from commit ";
+static struct rewritten rewritten;
 
 static int is_rfc2822_line(const char *buf, int len)
 {
@@ -650,6 +652,14 @@ static int do_pick_commit(struct commit *commit, struct replay_opts *opts)
 	if (!opts->no_commit)
 		res = run_git_commit(defmsg, opts, allow);
 
+	if (!res && opts->action == REPLAY_PICK) {
+		unsigned char to[20];
+
+		if (read_ref("HEAD", to))
+			goto leave;
+
+		add_rewritten(&rewritten, commit->object.sha1, to);
+	}
 leave:
 	free_message(&msg);
 	free(defmsg);
@@ -1012,8 +1022,11 @@ static int pick_commits(struct commit_list *todo_list, struct replay_opts *opts)
 	for (cur = todo_list; cur; cur = cur->next) {
 		save_todo(cur, opts);
 		res = do_pick_commit(cur->item, opts);
-		if (res)
+		if (res) {
+			if (opts->action == REPLAY_PICK)
+				store_rewritten(&rewritten, git_path(SEQ_REWR_FILE));
 			return res;
+		}
 	}
 
 	/*
@@ -1042,6 +1055,8 @@ static int sequencer_continue(struct replay_opts *opts)
 		return continue_single_pick();
 	read_populate_opts(&opts);
 	read_populate_todo(&todo_list, opts);
+	if (opts->action == REPLAY_PICK)
+		load_rewritten(&rewritten, git_path(SEQ_REWR_FILE));
 
 	/* Verify that the conflict has been resolved */
 	if (file_exists(git_path("CHERRY_PICK_HEAD")) ||
@@ -1052,6 +1067,11 @@ static int sequencer_continue(struct replay_opts *opts)
 	}
 	if (index_differs_from("HEAD", 0))
 		return error_dirty_index(opts);
+	if (opts->action == REPLAY_PICK) {
+		unsigned char to[20];
+		if (!read_ref("HEAD", to))
+			add_rewritten(&rewritten, todo_list->item->object.sha1, to);
+	}
 	todo_list = todo_list->next;
 	return pick_commits(todo_list, opts);
 }
diff --git a/sequencer.h b/sequencer.h
index 74d592a..efec1b5 100644
--- a/sequencer.h
+++ b/sequencer.h
@@ -5,6 +5,7 @@
 #define SEQ_HEAD_FILE	"sequencer/head"
 #define SEQ_TODO_FILE	"sequencer/todo"
 #define SEQ_OPTS_FILE	"sequencer/opts"
+#define SEQ_REWR_FILE	"sequencer/rewritten"
 
 #define APPEND_SIGNOFF_DEDUP (1u << 0)
 
-- 
1.8.4-fc
Previous: Felipe ContrerasNext: Felipe Contreras
Message 7 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.