Message ID | 20190329110842.30604-1-phillip.wood123@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | sequencer: fix cleanup with --signoff and -x | expand |
Hi Phillip, On Fri, 29 Mar 2019, Phillip Wood wrote: > From: Phillip Wood <phillip.wood@dunelm.org.uk> > > Before commit 356ee4659b ("sequencer: try to commit without forking 'git > commit'", 2017-11-24) when --signoff or -x were given on the command > line the commit message was cleaned up with --cleanup=space or > commit.cleanup if it was set. Unfortunately this behavior was lost when > I implemented committing without forking. Fix this and add some tests to > catch future regressions. > > Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk> > --- Looks good to me! Thank you, Dscho > > This clashes with dl/merge-cleanup-scissors-fix, I've sent some > rebased patches to Denton and he's going to send a re-roll based on > those. > > sequencer.c | 24 +++++++++++++++++------- > sequencer.h | 1 + > t/t3511-cherry-pick-x.sh | 20 ++++++++++++++++++++ > 3 files changed, 38 insertions(+), 7 deletions(-) > > diff --git a/sequencer.c b/sequencer.c > index 0db410d590..15457bbe71 100644 > --- a/sequencer.c > +++ b/sequencer.c > @@ -172,17 +172,22 @@ static int git_sequencer_config(const char *k, const char *v, void *cb) > if (status) > return status; > > - if (!strcmp(s, "verbatim")) > + if (!strcmp(s, "verbatim")) { > opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE; > - else if (!strcmp(s, "whitespace")) > + opts->explicit_cleanup = 1; > + } else if (!strcmp(s, "whitespace")) { > opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SPACE; > - else if (!strcmp(s, "strip")) > + opts->explicit_cleanup = 1; > + } else if (!strcmp(s, "strip")) { > opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_ALL; > - else if (!strcmp(s, "scissors")) > + opts->explicit_cleanup = 1; > + } else if (!strcmp(s, "scissors")) { > opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SPACE; > - else > + opts->explicit_cleanup = 1; > + } else { > warning(_("invalid commit message cleanup mode '%s'"), > s); > + } > > free((char *)s); > return status; > @@ -1382,8 +1387,13 @@ static int try_to_commit(struct repository *r, > msg = &commit_msg; > } > > - cleanup = (flags & CLEANUP_MSG) ? COMMIT_MSG_CLEANUP_ALL : > - opts->default_msg_cleanup; > + if (flags & CLEANUP_MSG) > + cleanup = COMMIT_MSG_CLEANUP_ALL; > + else if ((opts->signoff || opts->record_origin) && > + !opts->explicit_cleanup) > + cleanup = COMMIT_MSG_CLEANUP_SPACE; > + else > + cleanup = opts->default_msg_cleanup; > > if (cleanup != COMMIT_MSG_CLEANUP_NONE) > strbuf_stripspace(msg, cleanup == COMMIT_MSG_CLEANUP_ALL); > diff --git a/sequencer.h b/sequencer.h > index 4d505b3590..82bc7a48d5 100644 > --- a/sequencer.h > +++ b/sequencer.h > @@ -47,6 +47,7 @@ struct replay_opts { > > char *gpg_sign; > enum commit_msg_cleanup_mode default_msg_cleanup; > + int explicit_cleanup; > > /* Merge strategy */ > char *strategy; > diff --git a/t/t3511-cherry-pick-x.sh b/t/t3511-cherry-pick-x.sh > index 9888bf34b9..84a587daf3 100755 > --- a/t/t3511-cherry-pick-x.sh > +++ b/t/t3511-cherry-pick-x.sh > @@ -298,4 +298,24 @@ test_expect_success 'cherry-pick preserves commit message' ' > test_cmp expect actual > ' > > +test_expect_success 'cherry-pick -x cleans commit message' ' > + pristine_detach initial && > + git cherry-pick -x mesg-unclean && > + git log -1 --pretty=format:%B >actual && > + printf "%s\n(cherry picked from commit %s)\n" \ > + "$mesg_unclean" $(git rev-parse mesg-unclean) | > + git stripspace >expect && > + test_cmp expect actual > +' > + > +test_expect_success 'cherry-pick -x respects commit.cleanup' ' > + pristine_detach initial && > + git -c commit.cleanup=strip cherry-pick -x mesg-unclean && > + git log -1 --pretty=format:%B >actual && > + printf "%s\n(cherry picked from commit %s)\n" \ > + "$mesg_unclean" $(git rev-parse mesg-unclean) | > + git stripspace -s >expect && > + test_cmp expect actual > +' > + > test_done > -- > 2.21.0 > >
diff --git a/sequencer.c b/sequencer.c index 0db410d590..15457bbe71 100644 --- a/sequencer.c +++ b/sequencer.c @@ -172,17 +172,22 @@ static int git_sequencer_config(const char *k, const char *v, void *cb) if (status) return status; - if (!strcmp(s, "verbatim")) + if (!strcmp(s, "verbatim")) { opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_NONE; - else if (!strcmp(s, "whitespace")) + opts->explicit_cleanup = 1; + } else if (!strcmp(s, "whitespace")) { opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SPACE; - else if (!strcmp(s, "strip")) + opts->explicit_cleanup = 1; + } else if (!strcmp(s, "strip")) { opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_ALL; - else if (!strcmp(s, "scissors")) + opts->explicit_cleanup = 1; + } else if (!strcmp(s, "scissors")) { opts->default_msg_cleanup = COMMIT_MSG_CLEANUP_SPACE; - else + opts->explicit_cleanup = 1; + } else { warning(_("invalid commit message cleanup mode '%s'"), s); + } free((char *)s); return status; @@ -1382,8 +1387,13 @@ static int try_to_commit(struct repository *r, msg = &commit_msg; } - cleanup = (flags & CLEANUP_MSG) ? COMMIT_MSG_CLEANUP_ALL : - opts->default_msg_cleanup; + if (flags & CLEANUP_MSG) + cleanup = COMMIT_MSG_CLEANUP_ALL; + else if ((opts->signoff || opts->record_origin) && + !opts->explicit_cleanup) + cleanup = COMMIT_MSG_CLEANUP_SPACE; + else + cleanup = opts->default_msg_cleanup; if (cleanup != COMMIT_MSG_CLEANUP_NONE) strbuf_stripspace(msg, cleanup == COMMIT_MSG_CLEANUP_ALL); diff --git a/sequencer.h b/sequencer.h index 4d505b3590..82bc7a48d5 100644 --- a/sequencer.h +++ b/sequencer.h @@ -47,6 +47,7 @@ struct replay_opts { char *gpg_sign; enum commit_msg_cleanup_mode default_msg_cleanup; + int explicit_cleanup; /* Merge strategy */ char *strategy; diff --git a/t/t3511-cherry-pick-x.sh b/t/t3511-cherry-pick-x.sh index 9888bf34b9..84a587daf3 100755 --- a/t/t3511-cherry-pick-x.sh +++ b/t/t3511-cherry-pick-x.sh @@ -298,4 +298,24 @@ test_expect_success 'cherry-pick preserves commit message' ' test_cmp expect actual ' +test_expect_success 'cherry-pick -x cleans commit message' ' + pristine_detach initial && + git cherry-pick -x mesg-unclean && + git log -1 --pretty=format:%B >actual && + printf "%s\n(cherry picked from commit %s)\n" \ + "$mesg_unclean" $(git rev-parse mesg-unclean) | + git stripspace >expect && + test_cmp expect actual +' + +test_expect_success 'cherry-pick -x respects commit.cleanup' ' + pristine_detach initial && + git -c commit.cleanup=strip cherry-pick -x mesg-unclean && + git log -1 --pretty=format:%B >actual && + printf "%s\n(cherry picked from commit %s)\n" \ + "$mesg_unclean" $(git rev-parse mesg-unclean) | + git stripspace -s >expect && + test_cmp expect actual +' + test_done