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

[PATCH 12/13] sequencer: add "--cherry-pick" option to "git sequencer--helper"

From
Christian Couder <chriscool@tuxfamily.org>
Date
Aug 12, 2009, 05:15 UTC
Message-ID
<20090812051552.18155.34161.chriscool@tuxfamily.org>
In-Reply-To
<20090812051116.18155.70541.chriscool@tuxfamily.org>
From: Stephan Beyer <s-beyer@gmx.net>
This patch adds some code that comes from the sequencer GSoC project:
git://repo.or.cz/git/sbeyer.git
(commit e7b8dab0c2a73ade92017a52bb1405ea1534ef20)
Most of the code is taken from the insn_pick_act() function.
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
---
 builtin-sequencer--helper.c |   52 ++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 51 insertions(+), 1 deletions(-)
diff --git a/builtin-sequencer--helper.c b/builtin-sequencer--helper.c
index 61a8f2e..0f2255a 100644
--- a/builtin-sequencer--helper.c
+++ b/builtin-sequencer--helper.c
@@ -288,7 +288,7 @@ static int do_commit(unsigned char *parent_sha1)
 
 	if (update_ref(reflog, "HEAD", commit_sha1, NULL, 0, 0))
 		return error("Could not update HEAD to %s.",
-						sha1_to_hex(commit_sha1));
+			     sha1_to_hex(commit_sha1));
 
 	return 0;
 }
@@ -436,6 +436,7 @@ int cmd_sequencer__helper(int argc, const char **argv, const char *prefix)
 	char *patch_commit = NULL;
 	char *reset_commit = NULL;
 	char *ff_commit = NULL;
+	char *cp_commit = NULL;
 	struct option options[] = {
 		OPT_STRING(0, "make-patch", &patch_commit, "commit",
 			   "create a patch from commit"),
@@ -443,6 +444,8 @@ int cmd_sequencer__helper(int argc, const char **argv, const char *prefix)
 			   "reset to commit"),
 		OPT_STRING(0, "fast-forward", &ff_commit, "commit",
 			   "fast forward to commit"),
+		OPT_STRING(0, "cherry-pick", &cp_commit, "commit",
+			   "cherry pick commit"),
 		OPT_END()
 	};
 
@@ -488,5 +491,52 @@ int cmd_sequencer__helper(int argc, const char **argv, const char *prefix)
 			return reset_almost_hard(sha1);
 	}
 
+	if (cp_commit) {
+		struct commit *commit;
+		int failed;
+		const char *author;
+		int no_commit = 0;
+
+		if (argc != 0 && argc != 1)
+			usage_with_options(git_sequencer_helper_usage,
+					   options);
+
+		if (argc == 1 && *argv[0] && strcmp(argv[0], "0"))
+			no_commit = 1;
+
+		if (get_sha1("HEAD", head_sha1))
+			return error("You do not have a valid HEAD.");
+
+		commit = get_commit(cp_commit);
+		if (!commit)
+			return 1;
+
+		set_pick_subject(cp_commit, commit);
+
+		failed = pick_commit(commit, 0, 0, &next_commit.summary);
+
+		set_message_source(sha1_to_hex(commit->object.sha1));
+		author = strstr(commit->buffer, "\nauthor ");
+		if (author)
+			set_author_info(author + 8);
+
+		/* We do not want extra Conflicts: lines on cherry-pick,
+		   so just take the old commit message. */
+		if (failed) {
+			strbuf_setlen(&next_commit.summary, 0);
+			strbuf_addstr(&next_commit.summary,
+				      strstr(commit->buffer, "\n\n") + 2);
+			rerere();
+			make_patch(commit);
+			write_commit_summary_into(MERGE_MSG);
+			return error(pick_help_msg(commit->object.sha1, 0));
+		}
+
+		if (!no_commit && do_commit(head_sha1))
+			return error("Could not commit.");
+
+		return 0;
+	}
+
 	usage_with_options(git_sequencer_helper_usage, options);
 }
-- 
1.6.4.271.ge010d
Previous: Christian CouderNext: Christian Couder
Message 13 of 15 in “more changes to port rebase -i to C using sequencer code”
  1. 00/13 more changes to port rebase -i to C using sequencer codeChristian Couder, Aug 12, 2009
  2. 01/13 sequencer: add "do_fast_forward()" to perform a fast forwardChristian Couder, Aug 12, 2009
  3. 02/13 sequencer: add "--fast-forward" option to "git sequencer--helper"Christian Couder, Aug 12, 2009
  4. 03/13 sequencer: let "git sequencer--helper" callers set "allow_dirty"Christian Couder, Aug 12, 2009
  5. 04/13 rebase -i: use "git sequencer--helper --fast-forward"Christian Couder, Aug 12, 2009
  6. 05/13 revert: libify pickChristian Couder, Aug 12, 2009
  7. 06/13 pick: simplify "error(...)" followed by "return -1"Christian Couder, Aug 12, 2009
  8. 07/13 pick: rename "pick()" to "pick_commit()"Christian Couder, Aug 12, 2009
  9. 08/13 pick: remove useless PICK_REVERSE => PICK_ADD_NOTE codeChristian Couder, Aug 12, 2009
  10. 09/13 pick: simplify bogus comment about commiting immediatelyChristian Couder, Aug 12, 2009
  11. 10/13 pick: libify "pick_help_msg()"Christian Couder, Aug 12, 2009
  12. 11/13 sequencer: add "do_commit()" and related functionsChristian Couder, Aug 12, 2009
  13. 12/13 sequencer: add "--cherry-pick" option to "git sequencer--helper"Christian Couder, Aug 12, 2009
  14. 13/13 rebase -i: use "git sequencer--helper --cherry-pick"Christian Couder, Aug 12, 2009
  15. Junio C HamanoAug 12, 2009

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.