From patchwork Wed Jan 23 05:06:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denton Liu X-Patchwork-Id: 10776527 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 96A5F1575 for ; Wed, 23 Jan 2019 05:06:24 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 84D2729F66 for ; Wed, 23 Jan 2019 05:06:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 78F702A517; Wed, 23 Jan 2019 05:06:24 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0CA7629F66 for ; Wed, 23 Jan 2019 05:06:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726015AbfAWFGW (ORCPT ); Wed, 23 Jan 2019 00:06:22 -0500 Received: from mail-pl1-f193.google.com ([209.85.214.193]:43935 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725899AbfAWFGW (ORCPT ); Wed, 23 Jan 2019 00:06:22 -0500 Received: by mail-pl1-f193.google.com with SMTP id gn14so512567plb.10 for ; Tue, 22 Jan 2019 21:06:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=LpmkQDrJ/bGlLdaqRV19Zh/O9dsNM1KJBQH7633r+L4=; b=J70McHsqm8eXQWm2QgYrzPMy14Sg4YobHAePGR0b3ztyQ5wjA4y2Ravd0a/GWCI1N+ vmF/JvP1PJL6ihe1zkR1OGZieFQO/gn3gmQnv0mP/7zeOSssWEYwS5ky8Mwx3M00CmuN Yv8+9X2LR6l4tGEYhfMu7uYPDgP2PHvLfypA0YOVkOzBYaAM5r9XxWWPDlFP49Ly8uJH cN3s0wSiX0+SwS9R0rZBMLdiwYmLomLWSMD6CRtYwDhzrCKFDqYCPmkrcmrfSUTphCBx 1BxyNfoFOKQh3zygzQK+oV0i3xQ9IWvi7RbmtzJ8EAilMdsbyCb8/TA+qp3Huxz8El8E x+BA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=LpmkQDrJ/bGlLdaqRV19Zh/O9dsNM1KJBQH7633r+L4=; b=Yln48LVdWY3z/pHKdF3vMwN3Oe4YT5JX46+qJsq8AP4qpsUzrFYxR/uOAtlnxQ5ekH y9ewA7lq2NGjYOZe8lPDUtjGMxsblRPj/mWTlcSj/sLOoupUhKjGn0/Bdq7nnOGK5070 E+4qvI07D1eFIFjqr8KISjAOyf7EYU65UHiGMaHRmjpBDswbhSRg8GCm6XZtX3P9SyR6 peCIoxmAllpGqBtqza0Ren1EKkCuyDDRm3BhwQyiDAlAMHxx5T8jlFSBVNyjsT1GqsTH QklCqtgEI8rHinUIQ63yOhVB9O3u3Q2kaz+TDS7TjxTw64fvwJx4nPHrv14k/XawRszA 1ZRg== X-Gm-Message-State: AJcUukeom2jdTyXnC1s60Yj/3ZiD7N52xvp4NdBYykrWSkFYHdKFq4Xc 0gOecPP1NjGstAwJ8vnLvosl/M+7 X-Google-Smtp-Source: ALg8bN7ZAXVjfUk9KmOytbxjmNWUtr+RU2B2jPXMqnjF3GGVtNZrfNb58Fq2ng3LRvcnOZrhZ56EBw== X-Received: by 2002:a17:902:b18b:: with SMTP id s11mr838788plr.56.1548219981051; Tue, 22 Jan 2019 21:06:21 -0800 (PST) Received: from archbookpro.localdomain (c-73-222-73-77.hsd1.ca.comcast.net. [73.222.73.77]) by smtp.gmail.com with ESMTPSA id 84sm24377004pfk.134.2019.01.22.21.06.20 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 22 Jan 2019 21:06:20 -0800 (PST) Date: Tue, 22 Jan 2019 21:06:18 -0800 From: Denton Liu To: git@vger.kernel.org Cc: gitster@pobox.com Subject: [PATCH v6 1/4] commit: extract cleanup_mode functions to sequencer Message-ID: <69199be34dbe0648f88fa7eb5f0cc11ed1e7feb7.1548219737.git.liu.denton@gmail.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.11.2 (2019-01-07) Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Signed-off-by: Denton Liu --- builtin/commit.c | 21 ++------------------- sequencer.c | 29 +++++++++++++++++++++++++++++ sequencer.h | 4 ++++ 3 files changed, 35 insertions(+), 19 deletions(-) diff --git a/builtin/commit.c b/builtin/commit.c index 004b816635..3ac0a21a22 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -1165,20 +1165,7 @@ static int parse_and_validate_options(int argc, const char *argv[], die(_("Only one of --include/--only/--all/--interactive/--patch can be used.")); if (argc == 0 && (also || (only && !amend && !allow_empty))) die(_("No paths with --include/--only does not make sense.")); - if (!cleanup_arg || !strcmp(cleanup_arg, "default")) - cleanup_mode = use_editor ? COMMIT_MSG_CLEANUP_ALL : - COMMIT_MSG_CLEANUP_SPACE; - else if (!strcmp(cleanup_arg, "verbatim")) - cleanup_mode = COMMIT_MSG_CLEANUP_NONE; - else if (!strcmp(cleanup_arg, "whitespace")) - cleanup_mode = COMMIT_MSG_CLEANUP_SPACE; - else if (!strcmp(cleanup_arg, "strip")) - cleanup_mode = COMMIT_MSG_CLEANUP_ALL; - else if (!strcmp(cleanup_arg, "scissors")) - cleanup_mode = use_editor ? COMMIT_MSG_CLEANUP_SCISSORS : - COMMIT_MSG_CLEANUP_SPACE; - else - die(_("Invalid cleanup mode %s"), cleanup_arg); + cleanup_mode = get_cleanup_mode(cleanup_arg, use_editor); handle_untracked_files_arg(s); @@ -1615,11 +1602,7 @@ int cmd_commit(int argc, const char **argv, const char *prefix) die(_("could not read commit message: %s"), strerror(saved_errno)); } - if (verbose || /* Truncate the message just before the diff, if any. */ - cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS) - strbuf_setlen(&sb, wt_status_locate_end(sb.buf, sb.len)); - if (cleanup_mode != COMMIT_MSG_CLEANUP_NONE) - strbuf_stripspace(&sb, cleanup_mode == COMMIT_MSG_CLEANUP_ALL); + cleanup_message(&sb, cleanup_mode, verbose); if (message_is_empty(&sb, cleanup_mode) && !allow_empty_message) { rollback_index_files(); diff --git a/sequencer.c b/sequencer.c index f5370f4965..4f79892801 100644 --- a/sequencer.c +++ b/sequencer.c @@ -510,6 +510,25 @@ static int fast_forward_to(struct repository *r, return 0; } +enum commit_msg_cleanup_mode get_cleanup_mode(const char *cleanup_arg, + int use_editor) +{ + if (!cleanup_arg || !strcmp(cleanup_arg, "default")) + return use_editor ? COMMIT_MSG_CLEANUP_ALL : + COMMIT_MSG_CLEANUP_SPACE; + else if (!strcmp(cleanup_arg, "verbatim")) + return COMMIT_MSG_CLEANUP_NONE; + else if (!strcmp(cleanup_arg, "whitespace")) + return COMMIT_MSG_CLEANUP_SPACE; + else if (!strcmp(cleanup_arg, "strip")) + return COMMIT_MSG_CLEANUP_ALL; + else if (!strcmp(cleanup_arg, "scissors")) + return use_editor ? COMMIT_MSG_CLEANUP_SCISSORS : + COMMIT_MSG_CLEANUP_SPACE; + else + die(_("Invalid cleanup mode %s"), cleanup_arg); +} + void append_conflicts_hint(struct index_state *istate, struct strbuf *msgbuf) { @@ -1012,6 +1031,16 @@ static int rest_is_empty(const struct strbuf *sb, int start) return 1; } +void cleanup_message(struct strbuf *msgbuf, + enum commit_msg_cleanup_mode cleanup_mode, int verbose) +{ + if (verbose || /* Truncate the message just before the diff, if any. */ + cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS) + strbuf_setlen(msgbuf, wt_status_locate_end(msgbuf->buf, msgbuf->len)); + if (cleanup_mode != COMMIT_MSG_CLEANUP_NONE) + strbuf_stripspace(msgbuf, cleanup_mode == COMMIT_MSG_CLEANUP_ALL); +} + /* * Find out if the message in the strbuf contains only whitespace and * Signed-off-by lines. diff --git a/sequencer.h b/sequencer.h index 9d83f0f3e9..57ad6fc7de 100644 --- a/sequencer.h +++ b/sequencer.h @@ -115,7 +115,11 @@ extern const char sign_off_header[]; */ void append_signoff(struct strbuf *msgbuf, size_t ignore_footer, unsigned flag); +enum commit_msg_cleanup_mode get_cleanup_mode(const char *cleanup_arg, + int use_editor); void append_conflicts_hint(struct index_state *istate, struct strbuf *msgbuf); +void cleanup_message(struct strbuf *msgbuf, + enum commit_msg_cleanup_mode cleanup_mode, int verbose); int message_is_empty(const struct strbuf *sb, enum commit_msg_cleanup_mode cleanup_mode); int template_untouched(const struct strbuf *sb, const char *template_file, From patchwork Wed Jan 23 05:06:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Denton Liu X-Patchwork-Id: 10776531 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2EDB11399 for ; Wed, 23 Jan 2019 05:06:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 19A8829F66 for ; Wed, 23 Jan 2019 05:06:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 09DCC2A517; Wed, 23 Jan 2019 05:06:27 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id ADE7129F66 for ; Wed, 23 Jan 2019 05:06:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726039AbfAWFGZ (ORCPT ); Wed, 23 Jan 2019 00:06:25 -0500 Received: from mail-pl1-f194.google.com ([209.85.214.194]:34721 "EHLO mail-pl1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725899AbfAWFGY (ORCPT ); Wed, 23 Jan 2019 00:06:24 -0500 Received: by mail-pl1-f194.google.com with SMTP id w4so536177plz.1 for ; Tue, 22 Jan 2019 21:06:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to :user-agent; bh=IZ8mdEK22Pj1VoQHBxtCd0iH0ktJ9irsWIGCgEvHl5M=; b=LzEftPODja1JpE9PaAeCqFML/rZbfpc1i7VcAovmrU9kVk6lilzK55//Rpycvh57D7 iBBGYc6kQTf0ON+2swvVgQVvqXN1QHGMJmW+MoH+y8bOTr+LZn1mbHotZUKqLJmRmES2 sB/4I3v4qlHyU+Lywu/ynxmLiEM8blHlur12CWa862pGulyq6tDPS25m5gfhrrqS7Ogn SDKOGYvpyeF4L//skvYieNn3WnlFgdFXSXSyhlPCHF7ZBIL0p4q12Dq2jxkj/mi0lTmw cfi0/1kRWN3CwDVzfd1ASpvrivvCyaogqqU3qqlZ8ezBmf83TYoU9lY6LJx7MgQ8Tn+a 9vIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=IZ8mdEK22Pj1VoQHBxtCd0iH0ktJ9irsWIGCgEvHl5M=; b=k52CNtc/mbz9QGUpys4CtKb6zBlG6ICoMEoGc/Kipivct3vSqZTB4ZRKe9M8AL/VRM wk0QtqaYFXoYKvr3si4rT1HbAYYeN9WT/J3BaqwzNxSBTEHVWf6Yc+R5m7BwNHUT21Sl DH2xDD26zI4m/0C0ewAqRTd5ri0xSNw/hOfvI2zHucg3xIAmku/WW+9dlaOkBfqJ6fU+ sy+ZKNJCz/qjbMOU0etvFdaGrAXI0IiPu5BAWKfX9GWsfz2MzmziAqgDTc3eFcFS5o88 cJ6cA3V7sOeuU8xBk5kO3jmMk0SICsh17e8Pgu4h3QpsIlAzNJtRBJ9quPMTNRmP7m3x hFYQ== X-Gm-Message-State: AJcUukcvMx3seHdgLMJxUBJLAokH0RV4LY1oP9uVDTD2LuIv8FmYfeJe 9htQ9Wx7VVIvrWYdptNlyfIxCeIt X-Google-Smtp-Source: ALg8bN5QsJQWxEZAgP/dBOFHlrPtP8+nNuhKAXi6dmX1MjsfoCW7nO4wADIrZ/BD7BtngyBpZ7v6cA== X-Received: by 2002:a17:902:4a0c:: with SMTP id w12mr843329pld.8.1548219983507; Tue, 22 Jan 2019 21:06:23 -0800 (PST) Received: from archbookpro.localdomain (c-73-222-73-77.hsd1.ca.comcast.net. [73.222.73.77]) by smtp.gmail.com with ESMTPSA id u8sm27307891pfl.16.2019.01.22.21.06.22 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 22 Jan 2019 21:06:23 -0800 (PST) Date: Tue, 22 Jan 2019 21:06:21 -0800 From: Denton Liu To: git@vger.kernel.org Cc: gitster@pobox.com Subject: [PATCH v6 2/4] t7600: clean up 'merge --squash c3 with c7' test Message-ID: <2b982fd6a1f443696b82a79cabedc16f6307d89b.1548219737.git.liu.denton@gmail.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.11.2 (2019-01-07) Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This cleans up the original test by removing some unnecessary braces and removing a pipe. Helped-by: SZEDER Gábor Signed-off-by: Denton Liu --- t/t7600-merge.sh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/t/t7600-merge.sh b/t/t7600-merge.sh index 106148254d..d879efd330 100755 --- a/t/t7600-merge.sh +++ b/t/t7600-merge.sh @@ -233,8 +233,7 @@ test_expect_success 'merge --squash c3 with c7' ' cat result.9z >file && git commit --no-edit -a && - { - cat <<-EOF + cat >expect <<-EOF && Squashed commit of the following: $(git show -s c7) @@ -242,8 +241,8 @@ test_expect_success 'merge --squash c3 with c7' ' # Conflicts: # file EOF - } >expect && - git cat-file commit HEAD | sed -e '1,/^$/d' >actual && + git cat-file commit HEAD >tmp && + sed -e '1,/^$/d' actual && test_cmp expect actual ' From patchwork Wed Jan 23 05:06:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denton Liu X-Patchwork-Id: 10776533 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id DCF2F1399 for ; Wed, 23 Jan 2019 05:06:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C9A6629F66 for ; Wed, 23 Jan 2019 05:06:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BDC162A517; Wed, 23 Jan 2019 05:06:29 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DE3E629F66 for ; Wed, 23 Jan 2019 05:06:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726100AbfAWFG1 (ORCPT ); Wed, 23 Jan 2019 00:06:27 -0500 Received: from mail-pl1-f195.google.com ([209.85.214.195]:39686 "EHLO mail-pl1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725899AbfAWFG1 (ORCPT ); Wed, 23 Jan 2019 00:06:27 -0500 Received: by mail-pl1-f195.google.com with SMTP id 101so523588pld.6 for ; Tue, 22 Jan 2019 21:06:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=uYbTX1zd4Xa8WzpMPe8+/xPHMNND3wQlQgfH5LrvwWI=; b=NHtlWGyS/I/YKYthASmnmNoxZbFBypjlBzsOB5HwOlAX/Km3Ie4tAK0/0GjBPdCAgX dDHsepFRHcJASj4Pe+EXmbkuEecS4fDWg6L/gUOt1x5fLX3kz2nhkinQUlo309YQqzGC i+UvsTC+1tHTbpQXuDW8qzECXbidRyKtoTiukA+i3sbBAYZnvHvCmqkkA+Fxa5pvanbO l3bzhlB6ETLzm5OoV2kMoBXk+CKN5iiKb5dYaWZ28UonlWCGoZI4Q607alJjtuKvyqV8 j4IXfR5huqutpXZYMYrOZiohW8OcOT8U5f4RpnbF9JCXQvY9V5RbTROR3noDm8SNP2Qj 0A9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=uYbTX1zd4Xa8WzpMPe8+/xPHMNND3wQlQgfH5LrvwWI=; b=s74+bZupvHRSUHp9yWi9cH4haR/i2hD/H3GpL43SWIRmeZexS4zbKpAMikaUASpAfT Is8Yb1UqNa2iNRQD5lM4rvTElhDraSduMIf4eorIxPaViIsK1g/LBhrX+wVi2ZW66jjE DVzxGTy7gLvQE3Y7jhzX6K8fBV2HtY0lQ+JMo10xDKegrFxfIkhfe/X8+Iuhp4RKjXCT caexHggwUDhgqbj5ucoRPzlleBrgmqhTln4PD34LbF6MLtkcGAc3C63qIBZ5QfEQMjnq zD/wsh06a0IAdwidtZyQgbdduzVaFzz5eZ0Q6iwebPfOpsTKMk+cFEsKy6d7ErQrdY16 eVpg== X-Gm-Message-State: AJcUukfAaeZQx1aw6ziM3X3n/SZk3uudIcZv5nfnah2L/oo0n7KFIca5 QH/aUN84q0Ce2hK5+NYM/xgeeBqC X-Google-Smtp-Source: ALg8bN4dCVNOEZlswNa29oBcv7DAzhLLC6tStDDltRzdq7THyvhP5F9s5domoFtA2XOtC3FOqUGXwg== X-Received: by 2002:a17:902:714c:: with SMTP id u12mr824770plm.234.1548219985966; Tue, 22 Jan 2019 21:06:25 -0800 (PST) Received: from archbookpro.localdomain (c-73-222-73-77.hsd1.ca.comcast.net. [73.222.73.77]) by smtp.gmail.com with ESMTPSA id v5sm35029436pgn.5.2019.01.22.21.06.25 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 22 Jan 2019 21:06:25 -0800 (PST) Date: Tue, 22 Jan 2019 21:06:23 -0800 From: Denton Liu To: git@vger.kernel.org Cc: gitster@pobox.com Subject: [PATCH v6 3/4] merge: cleanup messages like commit Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.11.2 (2019-01-07) Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This change allows git-merge messages to be cleaned up with the commit.cleanup configuration or --cleanup option, just like how git-commit does it. We also give git-pull the passthrough option of --cleanup so that it can also take advantage of this change. Finally, add testing to ensure that messages are properly cleaned up. Note that some newlines that were added to the commit message were removed so that if a file were read via -F, it would be copied faithfully. Signed-off-by: Denton Liu --- Documentation/merge-options.txt | 5 +++ builtin/merge.c | 31 +++++++++++++---- builtin/pull.c | 6 ++++ t/t7604-merge-custom-message.sh | 61 +++++++++++++++++++++++++++++++++ wt-status.c | 12 +++++-- wt-status.h | 1 + 6 files changed, 106 insertions(+), 10 deletions(-) diff --git a/Documentation/merge-options.txt b/Documentation/merge-options.txt index 63a3fc0954..22783651b6 100644 --- a/Documentation/merge-options.txt +++ b/Documentation/merge-options.txt @@ -27,6 +27,11 @@ they run `git merge`. To make it easier to adjust such scripts to the updated behaviour, the environment variable `GIT_MERGE_AUTOEDIT` can be set to `no` at the beginning of them. +--cleanup=:: + This option determines how the merge message will be cleaned up + before commiting or being passed on. See linkgit:git-commit[1] for more + details. + --ff:: When the merge resolves as a fast-forward, only update the branch pointer, without creating a merge commit. This is the default diff --git a/builtin/merge.c b/builtin/merge.c index dc0b7cc521..19fb3abb77 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -37,6 +37,7 @@ #include "tag.h" #include "alias.h" #include "commit-reach.h" +#include "wt-status.h" #define DEFAULT_TWOHEAD (1<<0) #define DEFAULT_OCTOPUS (1<<1) @@ -97,6 +98,9 @@ enum ff_type { static enum ff_type fast_forward = FF_ALLOW; +static const char *cleanup_arg; +static enum commit_msg_cleanup_mode cleanup_mode; + static int option_parse_message(const struct option *opt, const char *arg, int unset) { @@ -245,6 +249,7 @@ static struct option builtin_merge_options[] = { N_("perform a commit if the merge succeeds (default)")), OPT_BOOL('e', "edit", &option_edit, N_("edit message before committing")), + OPT_STRING(0, "cleanup", &cleanup_arg, N_("default"), N_("how to strip spaces and #comments from message")), OPT_SET_INT(0, "ff", &fast_forward, N_("allow fast-forward (default)"), FF_ALLOW), OPT_SET_INT_F(0, "ff-only", &fast_forward, N_("abort if fast-forward is not possible"), @@ -608,6 +613,8 @@ static int git_merge_config(const char *k, const char *v, void *cb) return git_config_string(&pull_twohead, k, v); else if (!strcmp(k, "pull.octopus")) return git_config_string(&pull_octopus, k, v); + else if (!strcmp(k, "commit.cleanup")) + return git_config_string(&cleanup_arg, k, v); else if (!strcmp(k, "merge.renormalize")) option_renormalize = git_config_bool(k, v); else if (!strcmp(k, "merge.ff")) { @@ -793,23 +800,32 @@ static void abort_commit(struct commit_list *remoteheads, const char *err_msg) exit(1); } +static const char comment_line_explanation[] = +N_("Lines starting with '%c' will be ignored.\n"); + static const char merge_editor_comment[] = N_("Please enter a commit message to explain why this merge is necessary,\n" "especially if it merges an updated upstream into a topic branch.\n" "\n" - "Lines starting with '%c' will be ignored, and an empty message aborts\n" - "the commit.\n"); + "An empty message aborts the commit.\n"); static void write_merge_heads(struct commit_list *); static void prepare_to_commit(struct commit_list *remoteheads) { struct strbuf msg = STRBUF_INIT; strbuf_addbuf(&msg, &merge_msg); - strbuf_addch(&msg, '\n'); if (squash) BUG("the control must not reach here under --squash"); - if (0 < option_edit) - strbuf_commented_addf(&msg, _(merge_editor_comment), comment_line_char); + if (0 < option_edit) { + strbuf_addch(&msg, '\n'); + if (cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS) + wt_status_append_cut_line(&msg); + else + strbuf_commented_addf(&msg, _(comment_line_explanation), comment_line_char); + + strbuf_commented_addf(&msg, "\n"); + strbuf_commented_addf(&msg, _(merge_editor_comment)); + } if (signoff) append_signoff(&msg, ignore_non_trailer(msg.buf, msg.len), 0); write_merge_heads(remoteheads); @@ -828,7 +844,7 @@ static void prepare_to_commit(struct commit_list *remoteheads) abort_commit(remoteheads, NULL); read_merge_msg(&msg); - strbuf_stripspace(&msg, 0 < option_edit); + cleanup_message(&msg, cleanup_mode, 0); if (!msg.len) abort_commit(remoteheads, _("Empty commit message.")); strbuf_release(&merge_msg); @@ -876,7 +892,6 @@ static int finish_automerge(struct commit *head, parents = remoteheads; if (!head_subsumed || fast_forward == FF_NO) commit_list_insert(head, &parents); - strbuf_addch(&merge_msg, '\n'); prepare_to_commit(remoteheads); if (commit_tree(merge_msg.buf, merge_msg.len, result_tree, parents, &result_commit, NULL, sign_commit)) @@ -1385,6 +1400,8 @@ int cmd_merge(int argc, const char **argv, const char *prefix) if (option_edit < 0) option_edit = default_edit_option(); + cleanup_mode = get_cleanup_mode(cleanup_arg, 0 < option_edit); + if (!use_strategies) { if (!remoteheads) ; /* already up-to-date */ diff --git a/builtin/pull.c b/builtin/pull.c index 74808b9455..0cb458137b 100644 --- a/builtin/pull.c +++ b/builtin/pull.c @@ -96,6 +96,7 @@ static char *opt_signoff; static char *opt_squash; static char *opt_commit; static char *opt_edit; +static char *opt_cleanup; static char *opt_ff; static char *opt_verify_signatures; static int opt_autostash = -1; @@ -163,6 +164,9 @@ static struct option pull_options[] = { OPT_PASSTHRU(0, "edit", &opt_edit, NULL, N_("edit message before committing"), PARSE_OPT_NOARG), + OPT_PASSTHRU(0, "cleanup", &opt_cleanup, NULL, + N_("how to strip spaces and #comments from message"), + PARSE_OPT_NOARG), OPT_PASSTHRU(0, "ff", &opt_ff, NULL, N_("allow fast-forward"), PARSE_OPT_NOARG), @@ -639,6 +643,8 @@ static int run_merge(void) argv_array_push(&args, opt_commit); if (opt_edit) argv_array_push(&args, opt_edit); + if (opt_cleanup) + argv_array_push(&args, opt_cleanup); if (opt_ff) argv_array_push(&args, opt_ff); if (opt_verify_signatures) diff --git a/t/t7604-merge-custom-message.sh b/t/t7604-merge-custom-message.sh index 89619cf446..3fcd58eb2c 100755 --- a/t/t7604-merge-custom-message.sh +++ b/t/t7604-merge-custom-message.sh @@ -47,4 +47,65 @@ test_expect_success 'merge --log appends to custom message' ' test_cmp exp.log actual ' +mesg_with_comment_and_newlines=' +# text + +' + +test_expect_success 'prepare file with comment line and trailing newlines' ' + printf "%s" "$mesg_with_comment_and_newlines" >expect +' + +test_expect_success 'cleanup commit messages (verbatim option)' ' + git reset --hard c1 && + git merge --cleanup=verbatim -F expect c2 && + git cat-file -p HEAD |sed -e "1,/^\$/d" >actual && + test_cmp expect actual +' + +test_expect_success 'cleanup commit messages (whitespace option)' ' + git reset --hard c1 && + { echo;echo "# text";echo; } >text && + echo "# text" >expect && + git merge --cleanup=whitespace -F text c2 && + git cat-file -p HEAD |sed -e "1,/^\$/d">actual && + test_cmp expect actual + +' + +test_expect_success 'cleanup merge messages (scissors option)' ' + git reset --hard c1 && + cat >text <8 ------------------------ +# to be kept, too +# ------------------------ >8 ------------------------ +to be removed +# ------------------------ >8 ------------------------ +to be removed, too +EOF + + cat >expect <8 ------------------------ +# to be kept, too +EOF + git merge --cleanup=scissors -e -F text c2 && + git cat-file -p HEAD |sed -e "1,/^\$/d">actual && + test_cmp expect actual +' + +test_expect_success 'cleanup commit messages (strip option)' ' + git reset --hard c1 && + { echo;echo "# text";echo sample;echo; } >text && + echo sample >expect && + git merge --cleanup=strip -F text c2 && + git cat-file -p HEAD |sed -e "1,/^\$/d">actual && + test_cmp expect actual + +' + test_done diff --git a/wt-status.c b/wt-status.c index 0fe3bcd4cd..2768205d78 100644 --- a/wt-status.c +++ b/wt-status.c @@ -995,13 +995,19 @@ size_t wt_status_locate_end(const char *s, size_t len) return len; } -void wt_status_add_cut_line(FILE *fp) +void wt_status_append_cut_line(struct strbuf *buf) { const char *explanation = _("Do not modify or remove the line above.\nEverything below it will be ignored."); + + strbuf_commented_addf(buf, "%s", cut_line); + strbuf_add_commented_lines(buf, explanation, strlen(explanation)); +} + +void wt_status_add_cut_line(FILE *fp) +{ struct strbuf buf = STRBUF_INIT; - fprintf(fp, "%c %s", comment_line_char, cut_line); - strbuf_add_commented_lines(&buf, explanation, strlen(explanation)); + wt_status_append_cut_line(&buf); fputs(buf.buf, fp); strbuf_release(&buf); } diff --git a/wt-status.h b/wt-status.h index 3a95975032..64f1ddc9fd 100644 --- a/wt-status.h +++ b/wt-status.h @@ -129,6 +129,7 @@ struct wt_status { }; size_t wt_status_locate_end(const char *s, size_t len); +void wt_status_append_cut_line(struct strbuf *buf); void wt_status_add_cut_line(FILE *fp); void wt_status_prepare(struct repository *r, struct wt_status *s); void wt_status_print(struct wt_status *s); From patchwork Wed Jan 23 05:06:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denton Liu X-Patchwork-Id: 10776535 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id EA5671399 for ; Wed, 23 Jan 2019 05:06:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D791629F66 for ; Wed, 23 Jan 2019 05:06:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CBC0D2A517; Wed, 23 Jan 2019 05:06:31 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 39B9D29F66 for ; Wed, 23 Jan 2019 05:06:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726108AbfAWFG3 (ORCPT ); Wed, 23 Jan 2019 00:06:29 -0500 Received: from mail-pl1-f195.google.com ([209.85.214.195]:36414 "EHLO mail-pl1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725899AbfAWFG3 (ORCPT ); Wed, 23 Jan 2019 00:06:29 -0500 Received: by mail-pl1-f195.google.com with SMTP id g9so532563plo.3 for ; Tue, 22 Jan 2019 21:06:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=hakPKX9YJGR3EtfTY9N1k+fe1u8NZdnBffqLQ0o/FGk=; b=fmrTxOY7Zmz8ohuNCe6BEroR2MIIjFW32lF8H7Qrv9qJFMrnDNadpi5jA2FgGF6M+r Cq2/5VF+fchbWFEfFYgOrYwjKrruUEjhOA//aj06fg7oA7ZLPm8NE0t07gGhTAy7riae GwlBrZbhY9ZJbGUasZDajlkBRgM52x7UN+VFDwTX9AV+tPXYL9jrLne28J6/LylMXvdi MVSFPPlXK1TtBxIO3sXac4omBIFUUuX9T5qIh1qp0Sq2+aHPtGqOOXZfM3jJOUPDbnu0 uKTih1+ZO8TGChMN6/J7IIdq8Q6RrgmV5aQt5uzUz50AkMt7Or1SRxr1joQPPdZICCuU LNyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=hakPKX9YJGR3EtfTY9N1k+fe1u8NZdnBffqLQ0o/FGk=; b=SyvIuhRHzWwim9gY2HUGERgKQ2eufWriO3U5Yi5PrQT4g/qGSyUW8RnMDwiJKj1LD/ bV6K5Y+TAq4092rgxPZJinpx8ByxEvA1Da35CAKRn6Hhvf8ykyha42suFJgDK5eLEQhd u+9dWpqq5ZKoSR+VUqKbh+GjxISOjXv9575jBhVu5PnjGDmVrT/o6Jq9J5WKOEWSmNMw VfRc8rg7xQUPBMpurXZJeAbaKWua99hoMciWf9u0wNxi0feOLEQcF4QQQ5ryfx2P50Qz x4KkY/k7u3vDz8jZ5YUFVWFr/23KTA53smQEx3kZOOSVEJb3jAFB55974F2jVGtcP+OO wlMg== X-Gm-Message-State: AJcUukfYmmxz/q2OJUNYBrWwBCprQa5Rc4kwmwlChvTIsBtGBN9UA8OI JEwkf5IDskHHGnirvcVE9FldXjdZ X-Google-Smtp-Source: ALg8bN71hYz4uzf+2nWd8oQDuH0PQ4FxiYAXMdG9U4PjytcUzaWQ4D7dKDKLl0tFzSLDa01JKxbHCg== X-Received: by 2002:a17:902:722:: with SMTP id 31mr804238pli.271.1548219988393; Tue, 22 Jan 2019 21:06:28 -0800 (PST) Received: from archbookpro.localdomain (c-73-222-73-77.hsd1.ca.comcast.net. [73.222.73.77]) by smtp.gmail.com with ESMTPSA id i1sm28937148pgb.46.2019.01.22.21.06.27 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 22 Jan 2019 21:06:27 -0800 (PST) Date: Tue, 22 Jan 2019 21:06:26 -0800 From: Denton Liu To: git@vger.kernel.org Cc: gitster@pobox.com Subject: [PATCH v6 4/4] merge: add scissors line on merge conflict Message-ID: <39640b9e9e1171f1978082dc15b70b9277fa30d0.1548219737.git.liu.denton@gmail.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.11.2 (2019-01-07) Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This fixes a bug where the scissors line is placed after the Conflicts: section, in the case where a merge conflict occurs and commit.cleanup = scissors. Next, if commit.cleanup = scissors is specified, don't produce a scissors line in commit if one already exists in the MERGE_MSG file. Signed-off-by: Denton Liu --- Documentation/merge-options.txt | 4 ++- builtin/commit.c | 20 ++++++++++---- builtin/merge.c | 14 ++++++++++ t/t7600-merge.sh | 46 +++++++++++++++++++++++++++++++++ 4 files changed, 78 insertions(+), 6 deletions(-) diff --git a/Documentation/merge-options.txt b/Documentation/merge-options.txt index 22783651b6..c2a263ba74 100644 --- a/Documentation/merge-options.txt +++ b/Documentation/merge-options.txt @@ -30,7 +30,9 @@ set to `no` at the beginning of them. --cleanup=:: This option determines how the merge message will be cleaned up before commiting or being passed on. See linkgit:git-commit[1] for more - details. + details. In addition, if the '' is given a value of `scissors`, + scissors will be prepended to MERGE_MSG before being passed on in the case + of a merge conflict. --ff:: When the merge resolves as a fast-forward, only update the branch diff --git a/builtin/commit.c b/builtin/commit.c index 3ac0a21a22..eb549b57a3 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -665,6 +665,7 @@ static int prepare_to_commit(const char *index_file, const char *prefix, const char *hook_arg2 = NULL; int clean_message_contents = (cleanup_mode != COMMIT_MSG_CLEANUP_NONE); int old_display_comment_prefix; + int merge_contains_scissors = 0; /* This checks and barfs if author is badly specified */ determine_author_info(author_ident); @@ -725,6 +726,8 @@ static int prepare_to_commit(const char *index_file, const char *prefix, strbuf_addbuf(&sb, &message); hook_arg1 = "message"; } else if (!stat(git_path_merge_msg(the_repository), &statbuf)) { + size_t merge_msg_start; + /* * prepend SQUASH_MSG here if it exists and a * "merge --squash" was originally performed @@ -735,8 +738,14 @@ static int prepare_to_commit(const char *index_file, const char *prefix, hook_arg1 = "squash"; } else hook_arg1 = "merge"; + + merge_msg_start = sb.len; if (strbuf_read_file(&sb, git_path_merge_msg(the_repository), 0) < 0) die_errno(_("could not read MERGE_MSG")); + + if (cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS && + wt_status_locate_end(sb.buf + merge_msg_start, sb.len - merge_msg_start) < sb.len - merge_msg_start) + merge_contains_scissors = 1; } else if (!stat(git_path_squash_msg(the_repository), &statbuf)) { if (strbuf_read_file(&sb, git_path_squash_msg(the_repository), 0) < 0) die_errno(_("could not read SQUASH_MSG")); @@ -804,7 +813,8 @@ static int prepare_to_commit(const char *index_file, const char *prefix, struct ident_split ci, ai; if (whence != FROM_COMMIT) { - if (cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS) + if (cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS && + !merge_contains_scissors) wt_status_add_cut_line(s->fp); status_printf_ln(s, GIT_COLOR_NORMAL, whence == FROM_MERGE @@ -829,10 +839,10 @@ static int prepare_to_commit(const char *index_file, const char *prefix, _("Please enter the commit message for your changes." " Lines starting\nwith '%c' will be ignored, and an empty" " message aborts the commit.\n"), comment_line_char); - else if (cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS && - whence == FROM_COMMIT) - wt_status_add_cut_line(s->fp); - else /* COMMIT_MSG_CLEANUP_SPACE, that is. */ + else if (cleanup_mode == COMMIT_MSG_CLEANUP_SCISSORS) { + if (whence == FROM_COMMIT && !merge_contains_scissors) + wt_status_add_cut_line(s->fp); + } else /* COMMIT_MSG_CLEANUP_SPACE, that is. */ status_printf(s, GIT_COLOR_NORMAL, _("Please enter the commit message for your changes." " Lines starting\n" diff --git a/builtin/merge.c b/builtin/merge.c index 19fb3abb77..fbf4a24850 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -912,6 +912,20 @@ static int suggest_conflicts(void) filename = git_path_merge_msg(the_repository); fp = xfopen(filename, "a"); + /* + * We can't use cleanup_mode because if we're not using the editor, + * get_cleanup_mode will return COMMIT_MSG_CLEANUP_SPACE instead, even + * though the message is meant to be processed later by git-commit. + * Thus, we will get the cleanup mode is returned we _are_ using an + * editor. + */ + if (get_cleanup_mode(cleanup_arg, 1) == COMMIT_MSG_CLEANUP_SCISSORS) { + fputc('\n', fp); + wt_status_add_cut_line(fp); + /* comments out the newline from append_conflicts_hint */ + fputc(comment_line_char, fp); + } + append_conflicts_hint(&the_index, &msgbuf); fputs(msgbuf.buf, fp); strbuf_release(&msgbuf); diff --git a/t/t7600-merge.sh b/t/t7600-merge.sh index d879efd330..2cb57e5878 100755 --- a/t/t7600-merge.sh +++ b/t/t7600-merge.sh @@ -246,6 +246,52 @@ test_expect_success 'merge --squash c3 with c7' ' test_cmp expect actual ' +test_expect_success 'merge c3 with c7 with commit.cleanup = scissors' ' + git config commit.cleanup scissors && + git reset --hard c3 && + test_must_fail git merge c7 && + cat result.9z >file && + git commit --no-edit -a && + + cat >expect <<-EOF && + Merge tag '"'"'c7'"'"' + + # ------------------------ >8 ------------------------ + # Do not modify or remove the line above. + # Everything below it will be ignored. + # + # Conflicts: + # file + EOF + git cat-file commit HEAD >tmp && + sed -e '1,/^$/d' actual && + test_i18ncmp expect actual +' + +test_expect_success 'merge c3 with c7 with --squash commit.cleanup = scissors' ' + git config commit.cleanup scissors && + git reset --hard c3 && + test_must_fail git merge --squash c7 && + cat result.9z >file && + git commit --no-edit -a && + + cat >expect <<-EOF && + Squashed commit of the following: + + $(git show -s c7) + + # ------------------------ >8 ------------------------ + # Do not modify or remove the line above. + # Everything below it will be ignored. + # + # Conflicts: + # file + EOF + git cat-file commit HEAD >tmp && + sed -e '1,/^$/d' actual && + test_i18ncmp expect actual +' + test_debug 'git log --graph --decorate --oneline --all' test_expect_success 'merge c1 with c2 and c3' '