git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jonathan Nieder <jrnieder@gmail.com>
To: Ramkumar Ramachandra <artagnon@gmail.com>
Cc: Git List <git@vger.kernel.org>,
	Junio C Hamano <gitster@pobox.com>,
	Christian Couder <chriscool@tuxfamily.org>,
	Daniel Barkalow <barkalow@iabervon.org>,
	Jeff King <peff@peff.net>
Subject: Re: [PATCH 18/18] revert: Introduce --continue to continue the operation
Date: Wed, 27 Jul 2011 17:42:58 +0200	[thread overview]
Message-ID: <20110727154258.GE24785@elie> (raw)
In-Reply-To: <CALkWK0nX5GsfGi9ifxkfvoZWxVzFKBs8X60Svda0rQWKzz0aww@mail.gmail.com>

Ramkumar Ramachandra wrote:
>> Ramkumar Ramachandra wrote:

>>> during commit time.  One glitch to note is that the "--signoff" option
>>> specified at cherry-pick invocation time is not reflected in the
>>> commit message provided by CHERRY_PICK_HEAD
[...]
> The previous discussion thread for your reference [1] -- I thought we
> agreed that it was a glitch.

Ok.  I thought it had come up before and that there was not wide
agreement but probably I imagined it.  How about the patch below
(needs commit message, tests)?

Anyway, this is simple program logic that would be easy to change, not
a short-lived fault like the term "glitch" usually refers to.

> Neither of us can find any traces of it
> being intentional, and the commit that introduced this option doesn't
> say this: v1.5.6-rc0~83^2 (Allow cherry-pick (and revert) to add
> signoff line, 2008-04-26).

At the time, -x was not propagated to "git commit", either.  I guess
it was not considered notable that -s worked the same way, as in
"Of course 'git commit -c $original_commit' is going to discard
MERGE_MSG."

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
---
 builtin/commit.c |   62 +---------------------------------------------
 builtin/revert.c |    5 ++-
 commit.c         |   71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 commit.h         |    3 ++
 4 files changed, 79 insertions(+), 62 deletions(-)

diff --git c/builtin/commit.c i/builtin/commit.c
index e1af9b19..55ae8294 100644
--- c/builtin/commit.c
+++ i/builtin/commit.c
@@ -524,8 +524,6 @@ static int is_a_merge(const unsigned char *sha1)
 	return !!(commit->parents && commit->parents->next);
 }
 
-static const char sign_off_header[] = "Signed-off-by: ";
-
 static void determine_author_info(struct strbuf *author_ident)
 {
 	char *name, *email, *date;
@@ -574,47 +572,6 @@ static void determine_author_info(struct strbuf *author_ident)
 					      IDENT_ERROR_ON_NO_NAME));
 }
 
-static int ends_rfc2822_footer(struct strbuf *sb)
-{
-	int ch;
-	int hit = 0;
-	int i, j, k;
-	int len = sb->len;
-	int first = 1;
-	const char *buf = sb->buf;
-
-	for (i = len - 1; i > 0; i--) {
-		if (hit && buf[i] == '\n')
-			break;
-		hit = (buf[i] == '\n');
-	}
-
-	while (i < len - 1 && buf[i] == '\n')
-		i++;
-
-	for (; i < len; i = k) {
-		for (k = i; k < len && buf[k] != '\n'; k++)
-			; /* do nothing */
-		k++;
-
-		if ((buf[k] == ' ' || buf[k] == '\t') && !first)
-			continue;
-
-		first = 0;
-
-		for (j = 0; i + j < len; j++) {
-			ch = buf[i + j];
-			if (ch == ':')
-				break;
-			if (isalnum(ch) ||
-			    (ch == '-'))
-				continue;
-			return 0;
-		}
-	}
-	return 1;
-}
-
 static char *cut_ident_timestamp_part(char *string)
 {
 	char *ket = strrchr(string, '>');
@@ -734,23 +691,8 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
 	if (clean_message_contents)
 		stripspace(&sb, 0);
 
-	if (signoff) {
-		struct strbuf sob = STRBUF_INIT;
-		int i;
-
-		strbuf_addstr(&sob, sign_off_header);
-		strbuf_addstr(&sob, fmt_name(getenv("GIT_COMMITTER_NAME"),
-					     getenv("GIT_COMMITTER_EMAIL")));
-		strbuf_addch(&sob, '\n');
-		for (i = sb.len - 1; i > 0 && sb.buf[i - 1] != '\n'; i--)
-			; /* do nothing */
-		if (prefixcmp(sb.buf + i, sob.buf)) {
-			if (!i || !ends_rfc2822_footer(&sb))
-				strbuf_addch(&sb, '\n');
-			strbuf_addbuf(&sb, &sob);
-		}
-		strbuf_release(&sob);
-	}
+	if (signoff)
+		add_signoff(&sb);
 
 	if (fwrite(sb.buf, 1, sb.len, s->fp) < sb.len)
 		die_errno(_("could not write commit template"));
diff --git c/builtin/revert.c i/builtin/revert.c
index 1f27c633..79ed9883 100644
--- c/builtin/revert.c
+++ i/builtin/revert.c
@@ -369,8 +369,6 @@ static int run_git_commit(const char *defmsg)
 
 	args[i++] = "commit";
 	args[i++] = "-n";
-	if (signoff)
-		args[i++] = "-s";
 	if (!edit) {
 		args[i++] = "-F";
 		args[i++] = defmsg;
@@ -485,6 +483,9 @@ static int do_pick_commit(void)
 			write_cherry_pick_head();
 	}
 
+	if (signoff)
+		add_signoff(&msgbuf);
+
 	if (!strategy || !strcmp(strategy, "recursive") || action == REVERT) {
 		res = do_recursive_merge(base, next, base_label, next_label,
 					 head, &msgbuf);
diff --git c/commit.c i/commit.c
index ac337c7d..5022db6e 100644
--- c/commit.c
+++ i/commit.c
@@ -10,6 +10,7 @@
 int save_commit_buffer = 1;
 
 const char *commit_type = "commit";
+const char sign_off_header[] = "Signed-off-by: ";
 
 static struct commit *check_commit(struct object *obj,
 				   const unsigned char *sha1,
@@ -348,6 +349,76 @@ int find_commit_subject(const char *commit_buffer, const char **subject)
 	return eol - p;
 }
 
+static int ends_rfc2822_footer(struct strbuf *sb)
+{
+	int ch;
+	int hit = 0;
+	int i, j, k;
+	int len = sb->len;
+	int first = 1;
+	const char *buf = sb->buf;
+
+	for (i = len - 1; i > 0; i--) {
+		if (hit && buf[i] == '\n')
+			break;
+		hit = (buf[i] == '\n');
+	}
+
+	while (i < len - 1 && buf[i] == '\n')
+		i++;
+
+	for (; i < len; i = k) {
+		for (k = i; k < len && buf[k] != '\n'; k++)
+			; /* do nothing */
+		k++;
+
+		if ((buf[k] == ' ' || buf[k] == '\t') && !first)
+			continue;
+
+		first = 0;
+
+		for (j = 0; i + j < len; j++) {
+			ch = buf[i + j];
+			if (ch == ':')
+				break;
+			if (isalnum(ch) ||
+			    (ch == '-'))
+				continue;
+			return 0;
+		}
+	}
+	return 1;
+}
+
+void add_signoff(struct strbuf *sb)
+{
+	struct strbuf sob = STRBUF_INIT;
+	const char *p;
+
+	strbuf_addstr(&sob, sign_off_header);
+	strbuf_addstr(&sob, fmt_name(getenv("GIT_COMMITTER_NAME"),
+				     getenv("GIT_COMMITTER_EMAIL")));
+	strbuf_addch(&sob, '\n');
+
+	/* final line */
+	p = memrchr(sb->buf, '\n', sb->len ? sb->len - 1 : 0);
+	if (!p)
+		p = sb->buf;
+	else
+		p++;
+
+	/*
+	 * If the line does not already contain our sign-off,
+	 * add it.
+	 */
+	if (prefixcmp(p, sob.buf)) {
+		if (p == sb->buf || !ends_rfc2822_footer(sb))
+			strbuf_addch(sb, '\n');
+		strbuf_addbuf(sb, &sob);
+	}
+	strbuf_release(&sob);
+}
+
 struct commit_list *commit_list_insert(struct commit *item, struct commit_list **list_p)
 {
 	struct commit_list *new_list = xmalloc(sizeof(struct commit_list));
diff --git c/commit.h i/commit.h
index a2d571b9..3d198afb 100644
--- c/commit.h
+++ i/commit.h
@@ -23,6 +23,7 @@ struct commit {
 
 extern int save_commit_buffer;
 extern const char *commit_type;
+extern const char sign_off_header[];
 
 /* While we can decorate any object with a name, it's only used for commits.. */
 extern struct decoration name_decoration;
@@ -44,6 +45,8 @@ int parse_commit(struct commit *item);
 /* Find beginning and length of commit subject. */
 int find_commit_subject(const char *commit_buffer, const char **subject);
 
+void add_signoff(struct strbuf *sb);
+
 struct commit_list *commit_list_insert(struct commit *item,
 					struct commit_list **list);
 unsigned commit_list_count(const struct commit_list *l);
-- 

  reply	other threads:[~2011-07-27 15:43 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-27  3:18 [PATCH 00/18] GSoC update: Sequencer for inclusion v3 Ramkumar Ramachandra
2011-07-27  3:18 ` [PATCH 01/18] advice: Introduce error_resolve_conflict Ramkumar Ramachandra
2011-07-27  3:18 ` [PATCH 02/18] config: Introduce functions to write non-standard file Ramkumar Ramachandra
2011-07-27  3:39   ` Jonathan Nieder
2011-07-27  5:42   ` Jeff King
2011-07-28 15:40     ` Ramkumar Ramachandra
2011-07-27  3:19 ` [PATCH 03/18] revert: Simplify and inline add_message_to_msg Ramkumar Ramachandra
2011-07-27  4:18   ` Jonathan Nieder
2011-07-27 17:26     ` Ramkumar Ramachandra
2011-07-27 17:42       ` Jonathan Nieder
2011-07-27 17:49         ` Ramkumar Ramachandra
2011-07-27 17:51           ` Jonathan Nieder
2011-07-27  3:19 ` [PATCH 04/18] revert: Don't check lone argument in get_encoding Ramkumar Ramachandra
2011-07-27  4:32   ` Jonathan Nieder
2011-07-28 15:43     ` Ramkumar Ramachandra
2011-07-27  3:19 ` [PATCH 05/18] revert: Rename no_replay to record_origin Ramkumar Ramachandra
2011-07-27  3:19 ` [PATCH 06/18] revert: Propogate errors upwards from do_pick_commit Ramkumar Ramachandra
2011-07-27  4:39   ` Jonathan Nieder
2011-07-27  9:47     ` Ramkumar Ramachandra
2011-07-27  3:19 ` [PATCH 07/18] revert: Eliminate global "commit" variable Ramkumar Ramachandra
2011-07-27  4:43   ` Jonathan Nieder
2011-07-27  8:59     ` Ramkumar Ramachandra
2011-07-27  3:19 ` [PATCH 08/18] revert: Introduce struct to keep command-line options Ramkumar Ramachandra
2011-07-27  3:19 ` [PATCH 09/18] revert: Separate cmdline parsing from functional code Ramkumar Ramachandra
2011-07-27  3:19 ` [PATCH 10/18] revert: Don't create invalid replay_opts in parse_args Ramkumar Ramachandra
2011-07-27  4:46   ` Jonathan Nieder
2011-07-31 12:31   ` Christian Couder
2011-08-01 17:37     ` Ramkumar Ramachandra
2011-07-27  3:19 ` [PATCH 11/18] revert: Save data for continuing after conflict resolution Ramkumar Ramachandra
2011-07-27  5:02   ` Jonathan Nieder
2011-07-27 10:19     ` Ramkumar Ramachandra
2011-07-27 15:56       ` Jonathan Nieder
2011-07-27 18:03         ` Ramkumar Ramachandra
2011-07-27 22:51   ` Junio C Hamano
2011-07-27  3:19 ` [PATCH 12/18] revert: Save command-line options for continuing operation Ramkumar Ramachandra
2011-07-27  5:05   ` Jonathan Nieder
2011-07-27  9:51     ` Ramkumar Ramachandra
2011-07-27 14:21       ` Jonathan Nieder
2011-07-27 15:49         ` Ramkumar Ramachandra
2011-07-27 22:51   ` Junio C Hamano
2011-07-27  3:19 ` [PATCH 13/18] revert: Make pick_commits functionally act on a commit list Ramkumar Ramachandra
2011-07-27  3:19 ` [PATCH 14/18] revert: Introduce --reset to remove sequencer state Ramkumar Ramachandra
2011-07-27  5:11   ` Jonathan Nieder
2011-07-27 10:12     ` Ramkumar Ramachandra
2011-07-27 14:28       ` Jonathan Nieder
2011-07-27 14:35         ` Ramkumar Ramachandra
2011-07-27  3:19 ` [PATCH 15/18] reset: Make reset remove the " Ramkumar Ramachandra
2011-07-27  5:16   ` Jonathan Nieder
2011-07-28 15:42     ` Ramkumar Ramachandra
2011-07-28 15:59       ` Jonathan Nieder
2011-07-27  3:19 ` [PATCH 16/18] revert: Remove sequencer state when no commits are pending Ramkumar Ramachandra
2011-07-27  5:17   ` Jonathan Nieder
2011-07-27  9:42     ` Ramkumar Ramachandra
2011-07-27 14:10       ` Jonathan Nieder
2011-07-27 14:30         ` Ramkumar Ramachandra
2011-07-27 15:48           ` Jonathan Nieder
2011-07-27 15:52             ` Ramkumar Ramachandra
2011-07-28 16:16             ` Ramkumar Ramachandra
2011-07-29 19:16               ` Jonathan Nieder
2011-07-29 19:56                 ` Ramkumar Ramachandra
2011-07-30 13:10                   ` Jonathan Nieder
2011-07-30 14:43                     ` Ramkumar Ramachandra
2011-07-30 14:48                       ` Jonathan Nieder
2011-07-27  3:19 ` [PATCH 17/18] revert: Don't implictly stomp pending sequencer operation Ramkumar Ramachandra
2011-07-27  5:19   ` Jonathan Nieder
2011-07-27  9:59     ` Ramkumar Ramachandra
2011-07-27 14:33       ` Jonathan Nieder
2011-07-27 17:06         ` Ramkumar Ramachandra
2011-07-27  3:19 ` [PATCH 18/18] revert: Introduce --continue to continue the operation Ramkumar Ramachandra
2011-07-27  5:22   ` Jonathan Nieder
2011-07-27  9:36     ` Ramkumar Ramachandra
2011-07-27 15:42       ` Jonathan Nieder [this message]
2011-07-27 15:56         ` Ramkumar Ramachandra
2011-07-27 22:52   ` Junio C Hamano
2011-07-28 13:16     ` Ramkumar Ramachandra
2011-07-27 22:59 ` [PATCH 00/18] GSoC update: Sequencer for inclusion v3 Junio C Hamano
2011-07-28 16:26   ` Ramkumar Ramachandra
2011-07-28 16:32     ` Ramkumar Ramachandra
2011-07-28 16:39       ` Jonathan Nieder
  -- strict thread matches above, loose matches on Subject: below --
2011-07-19 17:17 [GSoC update] Sequencer for inclusion v2 Ramkumar Ramachandra
2011-07-19 17:17 ` [PATCH 18/18] revert: Introduce --continue to continue the operation Ramkumar Ramachandra

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110727154258.GE24785@elie \
    --to=jrnieder@gmail.com \
    --cc=artagnon@gmail.com \
    --cc=barkalow@iabervon.org \
    --cc=chriscool@tuxfamily.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=peff@peff.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).