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

[PATCH v7 07/12] cherry-pick: store rewritten commits

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Apr 24, 2014, 02:44 UTC
Message-ID
<1398307491-21314-8-git-send-email-felipe.contreras@gmail.com>
In-Reply-To
<1398307491-21314-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 a258627..426fddd 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)
 {
@@ -651,6 +653,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);
@@ -1021,8 +1031,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;
+		}
 	}
 
 	/*
@@ -1051,6 +1064,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")) ||
@@ -1061,6 +1076,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.9.2+fc1.2.gfbaae8c
Previous: Felipe ContrerasNext: Felipe Contreras
Message 14 of 23 in “Improvements to cherry-pick”
  1. 00/12 Improvements to cherry-pickFelipe Contreras, Apr 24, 2014
  2. 01/12 cherry-pick: don't barf when there's nothing to doFelipe Contreras, Apr 24, 2014
  3. 02/12 cherry-pick: add --skip-empty optionFelipe Contreras, Apr 24, 2014
  4. 03/12 revert/cherry-pick: add --quiet optionFelipe Contreras, Apr 24, 2014
  5. Ramkumar RamachandraApr 24, 2014
  6. Felipe ContrerasApr 24, 2014
  7. 04/12 revert/cherry-pick: add --skip optionFelipe Contreras, Apr 24, 2014
  8. Ramkumar RamachandraApr 24, 2014
  9. 05/12 cherry-pick: remember rerere-autoupdateFelipe Contreras, Apr 24, 2014
  10. Eric SunshineApr 24, 2014
  11. 06/12 builtin: add rewrite helperFelipe Contreras, Apr 24, 2014
  12. Ramkumar RamachandraApr 24, 2014
  13. Felipe ContrerasApr 24, 2014
  14. 07/12 cherry-pick: store rewritten commitsFelipe Contreras, Apr 24, 2014
  15. 08/12 cherry-pick: don't store skipped commitFelipe Contreras, Apr 24, 2014
  16. 09/12 builtin: move run_rewrite_hook() to rewrite.cFelipe Contreras, Apr 24, 2014
  17. 10/12 builtin: rewrite: add copy_rewrite_notes()Felipe Contreras, Apr 24, 2014
  18. 11/12 cherry-pick: add --action-name optionFelipe Contreras, Apr 24, 2014
  19. 12/12 cherry-pick: copy notes and run hooksFelipe Contreras, Apr 24, 2014
  20. Ramkumar RamachandraApr 24, 2014
  21. Felipe ContrerasApr 24, 2014
  22. Ramkumar RamachandraApr 24, 2014
  23. Felipe ContrerasApr 24, 2014

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.