Re: [PATCH v4.1 09/12] sequencer.c: teach append_signoff to avoid adding a duplicate newline
Brandon Casey draf...@gmail.com writes: Teach append_signoff to detect whether a blank line exists at the position that the signed-off-by line will be added, and refrain from adding an additional one if one already exists. Or, add an additional line if one is needed to make sure the new footer is separated from the message body by a blank line. Signed-off-by: Brandon Casey bca...@nvidia.com --- A slight tweak. And I promise, no more are coming. When I do $ git commit -s it should start my editor with this in the buffer: Signed-off-by: Junio C Hamano gits...@pobox.com and the cursor blinking at the beginning of the file. Annoyingly this step breaks it by removing the leading blank line. -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v4.1 09/12] sequencer.c: teach append_signoff to avoid adding a duplicate newline
On Thu, Feb 21, 2013 at 12:26 PM, Brandon Casey draf...@gmail.com wrote: But, this does not fix the same problem for 'cherry-pick --edit -s' when used to cherry-pick a commit without a sob. Correction: when used to cherry-pick a commit with an empty commit message. -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v4.1 09/12] sequencer.c: teach append_signoff to avoid adding a duplicate newline
On Thu, Feb 21, 2013 at 10:51 AM, Junio C Hamano gits...@pobox.com wrote: Brandon Casey draf...@gmail.com writes: Teach append_signoff to detect whether a blank line exists at the position that the signed-off-by line will be added, and refrain from adding an additional one if one already exists. Or, add an additional line if one is needed to make sure the new footer is separated from the message body by a blank line. Signed-off-by: Brandon Casey bca...@nvidia.com --- A slight tweak. And I promise, no more are coming. When I do $ git commit -s it should start my editor with this in the buffer: Signed-off-by: Junio C Hamano gits...@pobox.com and the cursor blinking at the beginning of the file. Annoyingly this step breaks it by removing the leading blank line. Yes. The fix described by John Keeping restores the above behavior for 'commit -s'. Or the fix I described which inserts two preceding newlines so it looks like this: Signed-off-by: Junio C Hamano gits...@pobox.com So then the cursor would be placed on the first line and a space would separate it from the sob which is arguably a better indication to the user that a blank line should separate the commit message body from the sob. But, this does not fix the same problem for 'cherry-pick --edit -s' when used to cherry-pick a commit without a sob. The cherry-pick part of it would add the extra preceding newlines, but then cherry-pick passes the buffer to 'git commit' via .git/MERGE_MSG which then cleans the buffer, removing the empty lines, in prepare_to_commit() before allowing the editor to operate on it. Using 'cherry-pick --edit -s' to cherry-pick a commit with an empty commit message is going to be a pretty rare corner case. It would be nice to have the same behavior for it that we decide to have for 'commit -s', but it's probably not worth going through contortions to make it happen. -Brandon -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v4.1 09/12] sequencer.c: teach append_signoff to avoid adding a duplicate newline
Brandon Casey draf...@gmail.com writes: Yes. The fix described by John Keeping restores the above behavior for 'commit -s'. Or the fix I described which inserts two preceding newlines so it looks like this: Signed-off-by: Junio C Hamano gits...@pobox.com So then the cursor would be placed on the first line and a space would separate it from the sob which is arguably a better indication to the user that a blank line should separate the commit message body from the sob. That sounds like an improvement to me. But, this does not fix the same problem for 'cherry-pick --edit -s' when used to cherry-pick a commit without a sob. ... Using 'cherry-pick --edit -s' to cherry-pick a commit with an empty commit message is going to be a pretty rare corner case We actively discourage an empty commit message by requiring users to say commit --allow-empty-message. I think it is in line with the philosophy for a Porcelain command git cherry-pick -s to punish users by making them work harder to use a commit with an empty message ;-). -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v4.1 09/12] sequencer.c: teach append_signoff to avoid adding a duplicate newline
On Fri, Feb 15, 2013 at 10:58:38AM -0800, Brandon Casey wrote: On Thu, Feb 14, 2013 at 9:58 AM, John Keeping j...@keeping.me.uk wrote: As Jonathan Nieder wondered before [1], this changes the behaviour when the commit message is empty. Before this commit, there is an empty line followed by the S-O-B line; now the S-O-B is on the first line of the commit. The previous behaviour seems better to me since the empty line is hinting that the user should fill something in. It looks particularly strange if your editor has syntax highlighting for commit messages such that the first line is in a different colour. Are you talking about the output produced by format-patch? Or are you talking about what happens when you do 'commit --amend -s' for a commit with an empty commit message. (The email that you referenced was about the behavior of format-patch). I'm talking about plain 'commit -s' which seems to use the same code path. I'm thinking you must be talking about the 'commit --amend -s' behavior since you mentioned your editor. Is there another case that is affected by this? Normally, any extra blank lines that precede or follow a commit message are removed before the commit object is created. So, I guess it wouldn't hurt to insert a newline (or maybe it should be two?) before the signoff in this case. Would this provide an improvement or change for any other commands than 'commit --amend -s'? If we want to do this, then I'd probably do it like this: - if (len msgbuf-buf[len - 1] != '\n') + if (!len || msgbuf-buf[len - 1] != '\n') append_newlines = \n\n; - else if (len 1 msgbuf-buf[len - 2] != '\n') + else if (len == 1 || msgbuf-buf[len - 2] != '\n') append_newlines = \n; This would ensure there were two newlines preceding the sob. The editor would place its cursor on the top line where the user should begin typing in a commit message. If an editor was not opened up (e.g. if 'git cherry-pick -s --allow-empty-message ...' was used) then the normal mechanism that removes extra blank lines would trigger to remove the extra blank lines. I think that's reasonable. Two blank lines seems like an improvement to me, FWIW. John -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v4.1 09/12] sequencer.c: teach append_signoff to avoid adding a duplicate newline
On Thu, Feb 14, 2013 at 9:58 AM, John Keeping j...@keeping.me.uk wrote: On Tue, Feb 12, 2013 at 02:33:42AM -0800, Brandon Casey wrote: Teach append_signoff to detect whether a blank line exists at the position that the signed-off-by line will be added, and refrain from adding an additional one if one already exists. Or, add an additional line if one is needed to make sure the new footer is separated from the message body by a blank line. Signed-off-by: Brandon Casey bca...@nvidia.com --- As Jonathan Nieder wondered before [1], this changes the behaviour when the commit message is empty. Before this commit, there is an empty line followed by the S-O-B line; now the S-O-B is on the first line of the commit. The previous behaviour seems better to me since the empty line is hinting that the user should fill something in. It looks particularly strange if your editor has syntax highlighting for commit messages such that the first line is in a different colour. [1] http://article.gmane.org/gmane.comp.version-control.git/214796 diff --git a/sequencer.c b/sequencer.c index 3364faa..084573b 100644 --- a/sequencer.c +++ b/sequencer.c @@ -1127,8 +1127,19 @@ void append_signoff(struct strbuf *msgbuf, int ignore_footer, unsigned flag) else has_footer = has_conforming_footer(msgbuf, sob, ignore_footer); - if (!has_footer) - strbuf_splice(msgbuf, msgbuf-len - ignore_footer, 0, \n, 1); + if (!has_footer) { + const char *append_newlines = NULL; + size_t len = msgbuf-len - ignore_footer; + + if (len msgbuf-buf[len - 1] != '\n') + append_newlines = \n\n; + else if (len 1 msgbuf-buf[len - 2] != '\n') + append_newlines = \n; To restore the old behaviour this needs something like this: else if (!len) append_newlines = \n; + if (append_newlines) + strbuf_splice(msgbuf, msgbuf-len - ignore_footer, 0, + append_newlines, strlen(append_newlines)); + } if (has_footer != 3 (!no_dup_sob || has_footer != 2)) strbuf_splice(msgbuf, msgbuf-len - ignore_footer, 0, Are you talking about the output produced by format-patch? Or are you talking about what happens when you do 'commit --amend -s' for a commit with an empty commit message. (The email that you referenced was about the behavior of format-patch). I'm thinking you must be talking about the 'commit --amend -s' behavior since you mentioned your editor. Is there another case that is affected by this? Normally, any extra blank lines that precede or follow a commit message are removed before the commit object is created. So, I guess it wouldn't hurt to insert a newline (or maybe it should be two?) before the signoff in this case. Would this provide an improvement or change for any other commands than 'commit --amend -s'? If we want to do this, then I'd probably do it like this: - if (len msgbuf-buf[len - 1] != '\n') + if (!len || msgbuf-buf[len - 1] != '\n') append_newlines = \n\n; - else if (len 1 msgbuf-buf[len - 2] != '\n') + else if (len == 1 || msgbuf-buf[len - 2] != '\n') append_newlines = \n; This would ensure there were two newlines preceding the sob. The editor would place its cursor on the top line where the user should begin typing in a commit message. If an editor was not opened up (e.g. if 'git cherry-pick -s --allow-empty-message ...' was used) then the normal mechanism that removes extra blank lines would trigger to remove the extra blank lines. I think that's reasonable. It seems 'git cherry-pick -s --edit' follows a different code path, and the commit message is stripped of newlines by 'git commit' before it is passed to the editor. 'cherry-pick -s --edit' and 'commit --amend -s' should probably have the same behavior and present the same buffer to the user for editing when they encounter a commit with an empty message. Maybe something like this is enough(?): diff --git a/builtin/commit.c b/builtin/commit.c index 7b9e2ac..0796412 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -124,8 +124,10 @@ static int opt_parse_m(const struct option *opt, const char if (unset) strbuf_setlen(buf, 0); else { + if (buf-len) + strbuf_addch(buf, '\n'); strbuf_addstr(buf, arg); - strbuf_addstr(buf, \n\n); + strbuf_complete_line(buf); } return 0; } @@ -673,9 +675,6 @@ static int prepare_to_commit(const char *index_file, const c if (s-fp == NULL) die_errno(_(could not open '%s'), git_path(commit_editmsg)); - if (clean_message_contents) - stripspace(sb, 0); - if (signoff) {
Re: [PATCH v4.1 09/12] sequencer.c: teach append_signoff to avoid adding a duplicate newline
On Tue, Feb 12, 2013 at 02:33:42AM -0800, Brandon Casey wrote: Teach append_signoff to detect whether a blank line exists at the position that the signed-off-by line will be added, and refrain from adding an additional one if one already exists. Or, add an additional line if one is needed to make sure the new footer is separated from the message body by a blank line. Signed-off-by: Brandon Casey bca...@nvidia.com --- As Jonathan Nieder wondered before [1], this changes the behaviour when the commit message is empty. Before this commit, there is an empty line followed by the S-O-B line; now the S-O-B is on the first line of the commit. The previous behaviour seems better to me since the empty line is hinting that the user should fill something in. It looks particularly strange if your editor has syntax highlighting for commit messages such that the first line is in a different colour. [1] http://article.gmane.org/gmane.comp.version-control.git/214796 diff --git a/sequencer.c b/sequencer.c index 3364faa..084573b 100644 --- a/sequencer.c +++ b/sequencer.c @@ -1127,8 +1127,19 @@ void append_signoff(struct strbuf *msgbuf, int ignore_footer, unsigned flag) else has_footer = has_conforming_footer(msgbuf, sob, ignore_footer); - if (!has_footer) - strbuf_splice(msgbuf, msgbuf-len - ignore_footer, 0, \n, 1); + if (!has_footer) { + const char *append_newlines = NULL; + size_t len = msgbuf-len - ignore_footer; + + if (len msgbuf-buf[len - 1] != '\n') + append_newlines = \n\n; + else if (len 1 msgbuf-buf[len - 2] != '\n') + append_newlines = \n; To restore the old behaviour this needs something like this: else if (!len) append_newlines = \n; + if (append_newlines) + strbuf_splice(msgbuf, msgbuf-len - ignore_footer, 0, + append_newlines, strlen(append_newlines)); + } if (has_footer != 3 (!no_dup_sob || has_footer != 2)) strbuf_splice(msgbuf, msgbuf-len - ignore_footer, 0, -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v4.1 09/12] sequencer.c: teach append_signoff to avoid adding a duplicate newline
Teach append_signoff to detect whether a blank line exists at the position that the signed-off-by line will be added, and refrain from adding an additional one if one already exists. Or, add an additional line if one is needed to make sure the new footer is separated from the message body by a blank line. Signed-off-by: Brandon Casey bca...@nvidia.com --- A slight tweak. And I promise, no more are coming. -Brandon sequencer.c | 15 +-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/sequencer.c b/sequencer.c index 3364faa..084573b 100644 --- a/sequencer.c +++ b/sequencer.c @@ -1127,8 +1127,19 @@ void append_signoff(struct strbuf *msgbuf, int ignore_footer, unsigned flag) else has_footer = has_conforming_footer(msgbuf, sob, ignore_footer); - if (!has_footer) - strbuf_splice(msgbuf, msgbuf-len - ignore_footer, 0, \n, 1); + if (!has_footer) { + const char *append_newlines = NULL; + size_t len = msgbuf-len - ignore_footer; + + if (len msgbuf-buf[len - 1] != '\n') + append_newlines = \n\n; + else if (len 1 msgbuf-buf[len - 2] != '\n') + append_newlines = \n; + + if (append_newlines) + strbuf_splice(msgbuf, msgbuf-len - ignore_footer, 0, + append_newlines, strlen(append_newlines)); + } if (has_footer != 3 (!no_dup_sob || has_footer != 2)) strbuf_splice(msgbuf, msgbuf-len - ignore_footer, 0, -- 1.8.1.1.252.gdb33759 -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html