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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Stephan Beyer <s-beyer@xxxxxxx>

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@xxxxxxxxxxxxx>
---
 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


--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]