From patchwork Tue Dec 25 13:55:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denton Liu X-Patchwork-Id: 10742563 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 1885513B5 for ; Tue, 25 Dec 2018 13:56:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 05A9C28AF6 for ; Tue, 25 Dec 2018 13:56:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EE24A28B10; Tue, 25 Dec 2018 13:56:28 +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 7FA2B28AF6 for ; Tue, 25 Dec 2018 13:56:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725884AbeLYNzw (ORCPT ); Tue, 25 Dec 2018 08:55:52 -0500 Received: from mail-io1-f65.google.com ([209.85.166.65]:42437 "EHLO mail-io1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725851AbeLYNzv (ORCPT ); Tue, 25 Dec 2018 08:55:51 -0500 Received: by mail-io1-f65.google.com with SMTP id x6so10688120ioa.9 for ; Tue, 25 Dec 2018 05:55:50 -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=j8EjbI+hGXSn8IYB8+4OUotgdBXqBF/67vooZn9G8w8=; b=sdGjDZ1dAHWr7FY8V6T7UkpgUWouMbkWlDd5NrJbmA48aC1K+THs2kLZKxaFSjrzvD 1mZhoWgPuQ0vuv2xCoiRpauMmF8pQfk1NTZ6dRO/ofE+pWzoCJqtlJzzdynpZI8oMWBp 53q5PPXOINTsvR+gc+G0IUiF8aPZn9mlg1A9SD/bVpDypbIiSHOD0XL6U3roeDky6uEa DXCW8xyO3WEZDV9OzJihc1QsRLy6qFd0fFiEwXF8gb0b9zEcNhJWovispf9Wpe3Doa7I ZK4GJoABF3MkCgoF6nCZYgI3LgJzcfT8ECITgqJW4v5DbWxrZl21jV5kUuPwJjE8iqku Alvg== 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=j8EjbI+hGXSn8IYB8+4OUotgdBXqBF/67vooZn9G8w8=; b=eXufCsbFfhzh9dCwvKmi8aA8wrLe03G7XEE2E9VWg+cNklje0ZyjTCrJZzKVXWEPWd T5ybDcUYV0GvVwGfUB6zdpewBMOTXMCmlm166890LMcZsvY0fdVpaSvbBS73fW4bTqpq I151iTDz7f5r9fL8yU8o9priJIonbXhlHeXLVlhbat+AgXadvBq8foPyo9NAV7HeHZGg 3Hp+XJDfQYvRjCRDPWCHWNrUrGB9gidZ/12rHqTHcYhiKOHk31r8mDYs1mBJhkBUqZuJ GYElt/Z9Vaj+HsSbRJcCFM0+72pZa+mRe6t7C9jcoK5OHuKBxX9jqrAIQ1iz2I2V6iIb gJKQ== X-Gm-Message-State: AJcUukd3QqZU431L0/lOaFxLa8758nE2wAz89YQEBiSEWpPOo7Wtc1NJ MTXJwH0lxEBJqXh5bjwKVWnjoLg8 X-Google-Smtp-Source: ALg8bN6V3G3XzGFesMlhw6aTEiFnVtq/NE8BZ6GxPrK7hfIaTNzflMfDE82miH8hN71Cug2PrnI37A== X-Received: by 2002:a6b:600b:: with SMTP id r11mr12021449iog.259.1545746150426; Tue, 25 Dec 2018 05:55:50 -0800 (PST) Received: from archbookpro.localdomain (CPE18593399858a-CM185933998587.cpe.net.cable.rogers.com. [99.245.246.183]) by smtp.gmail.com with ESMTPSA id n4sm2512387iog.36.2018.12.25.05.55.49 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 25 Dec 2018 05:55:49 -0800 (PST) Date: Tue, 25 Dec 2018 08:55:47 -0500 From: Denton Liu To: git@vger.kernel.org Cc: gitster@pobox.com Subject: [PATCH v5 1/4] commit: extract cleanup_mode functions to sequencer Message-ID: <006f2a7039a6f370f7b84552d5d19526564229e9.1545745331.git.liu.denton@gmail.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.11.1 (2018-12-01) 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 c021b119bb..9eb745b7ce 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -1164,20 +1164,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); @@ -1614,11 +1601,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 e1a4dd15f1..9c4eba06dc 100644 --- a/sequencer.c +++ b/sequencer.c @@ -506,6 +506,25 @@ static int fast_forward_to(const struct object_id *to, const struct object_id *f 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 strbuf *msgbuf) { int i; @@ -1003,6 +1022,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 5071a73563..e6d937dd3c 100644 --- a/sequencer.h +++ b/sequencer.h @@ -112,7 +112,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 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 Tue Dec 25 13:56:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Denton Liu X-Patchwork-Id: 10742569 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 6B80591E for ; Tue, 25 Dec 2018 13:56:30 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5A8D828AC8 for ; Tue, 25 Dec 2018 13:56:30 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4F1BF28B0A; Tue, 25 Dec 2018 13:56:30 +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 9FF7D28AFB for ; Tue, 25 Dec 2018 13:56:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725890AbeLYN4J (ORCPT ); Tue, 25 Dec 2018 08:56:09 -0500 Received: from mail-it1-f195.google.com ([209.85.166.195]:36445 "EHLO mail-it1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725851AbeLYN4I (ORCPT ); Tue, 25 Dec 2018 08:56:08 -0500 Received: by mail-it1-f195.google.com with SMTP id c9so17821472itj.1 for ; Tue, 25 Dec 2018 05:56:08 -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=drsZ+HTEEz4Pt42lm5MHaJSqyo9yzOvbp9jqI+JbbJ8=; b=T3YeZODRV04xzTiz+voeNzCeFs9nec5wcLPCSiPvmdpg7BzYtR8Pf5m0ZWuR7SJ4va 2mZbleaeEjuN3mL9jrjj3FgSK1cRu6PC2PyGLr/7wMhLVh6LIRXQCWe68mQI53yTW1UK 9xKwV0okP/tAYmitzb63obCg7SLFNQUE8Os1zkluhya6ijb9AXdhMr5V6Jtd3JifLW6g mbE+EOMdAaTlJg125lYJ9lN0Y4SAOx7V38nmT28wpgszi4QCc2Di0yWyacI3XqFviCjF tHpvQevFTvKh7oHy03y4ztbCqVk9+vo/eq1EFZNCFfcLLOZKIpAuN5fomQ1QKMovzDiC rv0g== 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=drsZ+HTEEz4Pt42lm5MHaJSqyo9yzOvbp9jqI+JbbJ8=; b=hvOcV8sAW3qRRCir0J8/iLUqbcJFbKA5keTHEUvlypV5HY6AXAujA7bvb8M1r/nclN kSYF/84SLIpEShpqfyYRIYNkfflUSLc98m/eQAhAwhz3Cm9N65Fq8NI1eejpbTZmHjd4 EgrHB1gm1fOfvxNEswiuGfg6YHE++k3pok96Jc4mLnmOzzL/jc0U6w3biN+J67Cso+dH qXF/WQqxSJ78jmNaOJ4uONIU4YzPipPQGIkel0c+u1tbSIRVh01N9hVQCizeqYDShWYh z0BDyKjlCSna7Txb3S+WAgzcuWls/JbUwrLoQDMKgJVIh39m1VOsXRzR1HlGrzcOtxRE RJzg== X-Gm-Message-State: AA+aEWadrPKQnh5LBIkW3y13azkSeRy8C1GK1sdx0eSjbM3hWkkpZN7+ GzF/34x72PiXCKTOLgE6by2qzjXE X-Google-Smtp-Source: AFSGD/US6+63UTnhCWY1iG9YWBJbOC0kjxvSU8V+ctSK0NaASpk59TT9QJC2UAaxiaBXlY1G+XNYdQ== X-Received: by 2002:a02:95e4:: with SMTP id b91mr9862906jai.15.1545746167666; Tue, 25 Dec 2018 05:56:07 -0800 (PST) Received: from archbookpro.localdomain (CPE18593399858a-CM185933998587.cpe.net.cable.rogers.com. [99.245.246.183]) by smtp.gmail.com with ESMTPSA id q9sm14878550ioh.32.2018.12.25.05.56.06 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 25 Dec 2018 05:56:07 -0800 (PST) Date: Tue, 25 Dec 2018 08:56:05 -0500 From: Denton Liu To: git@vger.kernel.org Cc: gitster@pobox.com Subject: [PATCH v5 2/4] t7600: clean up 'merge --squash c3 with c7' test Message-ID: <4361c3a31a703502fa7210bc2ac7b88a08b70126.1545745331.git.liu.denton@gmail.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.11.1 (2018-12-01) 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 Tue Dec 25 13:56:13 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denton Liu X-Patchwork-Id: 10742565 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 A9DE091E for ; Tue, 25 Dec 2018 13:56:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9531228AC8 for ; Tue, 25 Dec 2018 13:56:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 89F5428B0A; Tue, 25 Dec 2018 13:56: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 C096528AC8 for ; Tue, 25 Dec 2018 13:56:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725898AbeLYN4R (ORCPT ); Tue, 25 Dec 2018 08:56:17 -0500 Received: from mail-it1-f175.google.com ([209.85.166.175]:38522 "EHLO mail-it1-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725851AbeLYN4R (ORCPT ); Tue, 25 Dec 2018 08:56:17 -0500 Received: by mail-it1-f175.google.com with SMTP id h65so17804433ith.3 for ; Tue, 25 Dec 2018 05:56:16 -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=myMvp/5hcMaZvnsykSuIzmIl6V6WLA/4vauEvxYHO+M=; b=rmpH+k52D9d1Y3kRUjmgc1ExazWQFjeT4oWuQr7s8KFCW0rpS1oHcewtHZpK5ibs6F 3vKmfDxNCdljdpWIRDSoG4Hb8pRGNvclWRu50ZZNTi0BGGbJ3zTeCGdkCgUl2kKpGZZp +uJk1Rjnh4iVT4I5FU0txzHcB0WbbZeaiy6JUDP5yiXQL4yLN+8pm7b2kFwUsQk8gAwi B2S2pVry9nYaw2kYLD3A0Ghee+/aX9epVtDlo+as3hQJ3rHBwt+8accINI+KwxkDd2LY 1qegtyYDW3dXduG6sj/JNmAxWl5bvOV9dMgR8FrQuIDRqa2LzgcZBIpaQieTYLimF6Kd +mCA== 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=myMvp/5hcMaZvnsykSuIzmIl6V6WLA/4vauEvxYHO+M=; b=UmXftFNVQaf2Bk/2xinQX2XIRgVL4f7gUSm3E+rKzpc+3AFrKh4Kt1IeLBwqBX+wGt qNgO4EJdPEOm1ZEMA9hD8lWKz994pd9UM6WEwoHbUsbU3pwBOk68UN7+0Om9peIBmafi 80XiOOX4KC8EFkz8n2c/fzVvVpLAMMc5BSWDIJHA+Tkh4/B5Y8O3NFWWO7Ioq9p9Atz6 QGU3p/P8SH1nTB7I6YXTTeSZBZ9N98H6uoiZnWc/BdCq7dZCqJqqnSOi3Aivz9oy9Eog nNaTKu2/fM2Inu2Z+oGPOhBTVzfSMiR6oT60KfWMB05IiUReOR6YWC7JRpz+xBV4l0AL Hy8w== X-Gm-Message-State: AA+aEWadUICa6qxh5p9UvGoLJUMm+fn6KAjzte0WUVs9LQyR3AzciZ3f CRgvv3hltzlRqInk+kX1IxJnUbNU X-Google-Smtp-Source: AFSGD/VIJ44EEUeXrbxFP+zrfX1iTmxxgZJTYFhqxgRti9bTafDd3hvJdwwaLVIP9dHKMyiLDeGT7w== X-Received: by 2002:a24:1aca:: with SMTP id 193mr10822255iti.150.1545746175568; Tue, 25 Dec 2018 05:56:15 -0800 (PST) Received: from archbookpro.localdomain (CPE18593399858a-CM185933998587.cpe.net.cable.rogers.com. [99.245.246.183]) by smtp.gmail.com with ESMTPSA id p132sm9595961itb.35.2018.12.25.05.56.14 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 25 Dec 2018 05:56:15 -0800 (PST) Date: Tue, 25 Dec 2018 08:56:13 -0500 From: Denton Liu To: git@vger.kernel.org Cc: gitster@pobox.com Subject: [PATCH v5 3/4] merge: cleanup messages like commit Message-ID: <421942870ce23ed425139187332b9ebcd784124e.1545745331.git.liu.denton@gmail.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.11.1 (2018-12-01) 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 c3c976d471..ab0db46ede 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 1b90622b13..938be2f610 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 a24711374c..3dc2ff9a8d 100644 --- a/wt-status.c +++ b/wt-status.c @@ -991,13 +991,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 1fcf93afbf..739a3e4dfb 100644 --- a/wt-status.h +++ b/wt-status.h @@ -127,6 +127,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 wt_status *s); void wt_status_print(struct wt_status *s); From patchwork Tue Dec 25 13:56:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Denton Liu X-Patchwork-Id: 10742571 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 AE03913A4 for ; Tue, 25 Dec 2018 13:56:30 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9BF8F28AC8 for ; Tue, 25 Dec 2018 13:56:30 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8EAFA28AF6; Tue, 25 Dec 2018 13:56:30 +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 0E6D228B12 for ; Tue, 25 Dec 2018 13:56:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725916AbeLYN4Z (ORCPT ); Tue, 25 Dec 2018 08:56:25 -0500 Received: from mail-it1-f196.google.com ([209.85.166.196]:36472 "EHLO mail-it1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725851AbeLYN4Y (ORCPT ); Tue, 25 Dec 2018 08:56:24 -0500 Received: by mail-it1-f196.google.com with SMTP id c9so17821867itj.1 for ; Tue, 25 Dec 2018 05:56:23 -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=BV0PmdLoCBs8ZFd2/cIuPLmufbebmjFgE6Q/RFX2onQ=; b=pxXNuwt+yLxMnWXyN4rcjDfaF0pOGetQ89Eq6M99Fk0+IouGTu9Ynjx74XCJ1tXvT5 3qHu+POdwj/0O6ghU3gun6zc5z5agr7NfdNTOfXSP0sVMrXt4AookX9eo/zxgxzkcM59 yTMAn+WQatAQLoSA3cPhSI6eX3oz2QOq2sxbrW4fzSdJQoh6wk5/pIwUbWVH2mHmn76u i9FCWRozSRZpW0lAl2hgXxkkMRT9zlyJEWA3rISD/mEAqHul0eae/eqVbw1FxkX7dMkI KrfNbtyO+keLZqzt0gJsO4qen7RioAyhFlfy6iNcY/3JhEBo5V2Gil2BCTBzj8YgP5A9 sClA== 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=BV0PmdLoCBs8ZFd2/cIuPLmufbebmjFgE6Q/RFX2onQ=; b=n/g2IlEQCKrwCj2oqLsopdqkTdgvyyeyz24fq2MHxB/CfSRRjfNxqbS4QSCXZ9qgso t6eKIouNHrjWxf/CleASFkNtkWZUPfDtIuXKCmlqhSRzeZHeJVSX2hlBzNXH2Ao8/pLe D7kDF8AujhAtsF9S+TS9qCik0k9ckE8aif/D68VHEQNCkxQ7ihC/llTgm1JN38Z2e7cB 2ochs3s8wbvAYjyAyWkuepYy0aPhk/6hmiRVgHWHchC+C4GWbDtQwAwp4a1jG1S1SFeR sRaQVBYNUOx+N4r7P0uCY1d8PCoj573YMcx/LRhD3kmPSKMjy6fwKJl9flm+HsJfM7j8 ZKDw== X-Gm-Message-State: AA+aEWYeuTlq4nNk9ze24Db9ysekqYLwif3H3q1vvOq7hglqU1ZbohSK fcXxss+0Q3ScxtkXwbOK3pzcm/rC X-Google-Smtp-Source: AFSGD/VqLPxTj5ClbXYpz21zA5zMpVm1Of/+0IvVjy32yzq0GGsk/DNOsHJvX7r1wHbirkLhTEy93Q== X-Received: by 2002:a02:a484:: with SMTP id d4mr10475291jam.77.1545746182622; Tue, 25 Dec 2018 05:56:22 -0800 (PST) Received: from archbookpro.localdomain (CPE18593399858a-CM185933998587.cpe.net.cable.rogers.com. [99.245.246.183]) by smtp.gmail.com with ESMTPSA id 189sm11593699itw.33.2018.12.25.05.56.21 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 25 Dec 2018 05:56:22 -0800 (PST) Date: Tue, 25 Dec 2018 08:56:20 -0500 From: Denton Liu To: git@vger.kernel.org Cc: gitster@pobox.com Subject: [PATCH v5 4/4] merge: add scissors line on merge conflict Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.11.1 (2018-12-01) 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 9eb745b7ce..7923282ebb 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 ab0db46ede..6514267efc 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(&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' '