From patchwork Tue Jul 2 09:11:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rohit Ashiwal X-Patchwork-Id: 11027479 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 6C179138D for ; Tue, 2 Jul 2019 09:14:21 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 520E3288AA for ; Tue, 2 Jul 2019 09:14:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4674E288AE; Tue, 2 Jul 2019 09:14:21 +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 C8AD2288AA for ; Tue, 2 Jul 2019 09:14:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727125AbfGBJOU (ORCPT ); Tue, 2 Jul 2019 05:14:20 -0400 Received: from mail-pl1-f194.google.com ([209.85.214.194]:42695 "EHLO mail-pl1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725868AbfGBJOS (ORCPT ); Tue, 2 Jul 2019 05:14:18 -0400 Received: by mail-pl1-f194.google.com with SMTP id ay6so42987plb.9 for ; Tue, 02 Jul 2019 02:14:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Rb1nWn+A40/Zry7ruwBK+f18yIUJSKYTzlWcCA6FuC4=; b=cJs8HOOg2j2w1mD6ifiMh8B9RlnJhGuEmIihLcNOScsbCvCSQkwtG8KaQ/yyAsAVYK kdQcf1XMCmZsj2j/GQZuNxHml75KFOy2PwodUC497Z4Qh2bBYEO+WRfhDaNxFwYRO+dv xg6iZ83gvgFDSD1eAxSFhDPrGc+/lXEEzj+9Xhos8w1qDGVQU3IHQTxm2a/tpNr6eIBo 6aTG6NyFbgr8qmFLFYXEYda4JB42VTYqykYu2Epv66IfIZaYDNGSo/3MEBzUdkDYKV81 Saoc3F4++rXrINuuafP8kceWxLzSPUg8hn9z8dDv+o1KXqHw81TQhhUSXrR05iv3DMhd yckA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Rb1nWn+A40/Zry7ruwBK+f18yIUJSKYTzlWcCA6FuC4=; b=F89qtzXOs0BTVgqKd4n9CHwg2JF6MUld1QIDdsDo26AiCCSPE8HRkUuO0vfM5gzDWd KbS99fWw9iyZiaCaAAP7wT25RUYk92NvYcQIAIAFfBeqn/G8Ijw7h6yN7tqnpEuyxBzj VG+Enn7fLGyynH+vVuvp9VyAqXnwEppiM8R5zZ7LLpvoNc6qD4TOaoP74iRvaObUwTl0 ATmYuuPAG0cPV5SU6pz0azHhRE5DT9HBbryXXB+EB9TVyLMckN9lQqQ6vPYShXoC35FZ yIgwYSoJh56fM5uNlA2RaC7WRcFFye17Y/Jt14ce9TnnJ/xe0jrID/PJNXCnoN4WyegM wgJA== X-Gm-Message-State: APjAAAW9DCVpb+jUaMWa3l5vT7advrSFGN4Pdqhf9Kz5SowrqmJlyKu8 qQWbch2a5rMZltR6b3TneVo= X-Google-Smtp-Source: APXvYqw1SjeZprd9AmcUQSOMdMdsNsTQ3Wdssc3Md4rbzmQci1/Zyp8ovvO+urHX6I9JDM1aseu+yw== X-Received: by 2002:a17:902:20b:: with SMTP id 11mr34549300plc.78.1562058857568; Tue, 02 Jul 2019 02:14:17 -0700 (PDT) Received: from ar135.iitr.local ([103.37.200.218]) by smtp.gmail.com with ESMTPSA id q198sm20499178pfq.155.2019.07.02.02.14.13 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 02 Jul 2019 02:14:16 -0700 (PDT) From: Rohit Ashiwal To: rohit.ashiwal265@gmail.com Cc: git@vger.kernel.org, newren@gmail.com, t.gummerer@gmail.com, phillip.wood123@gmail.com, martin.agren@gmail.com, jrnieder@gmail.com Subject: [GSoC][PATCH v8 1/5] sequencer: add advice for revert Date: Tue, 2 Jul 2019 14:41:25 +0530 Message-Id: <20190702091129.7531-2-rohit.ashiwal265@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190702091129.7531-1-rohit.ashiwal265@gmail.com> References: <20190608191958.4593-1-rohit.ashiwal265@gmail.com> <20190702091129.7531-1-rohit.ashiwal265@gmail.com> MIME-Version: 1.0 Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP In the case of merge conflicts, while performing a revert, we are currently advised to use `git cherry-pick --`. Introduce a separate advice message for `git revert`. Also change the signature of `create_seq_dir` to handle which advice to display selectively. Signed-off-by: Rohit Ashiwal --- Documentation/config/advice.txt | 2 ++ advice.c | 2 ++ advice.h | 1 + sequencer.c | 35 +++++++++++++++++++++++++++------ 4 files changed, 34 insertions(+), 6 deletions(-) diff --git a/Documentation/config/advice.txt b/Documentation/config/advice.txt index ec4f6ae658..1cd9096c98 100644 --- a/Documentation/config/advice.txt +++ b/Documentation/config/advice.txt @@ -57,6 +57,8 @@ advice.*:: resolveConflict:: Advice shown by various commands when conflicts prevent the operation from being performed. + sequencerInUse:: + Advice shown when a sequencer command is already in progress. implicitIdentity:: Advice on how to set your identity configuration when your information is guessed from the system username and diff --git a/advice.c b/advice.c index ce5f374ecd..b101f0c264 100644 --- a/advice.c +++ b/advice.c @@ -15,6 +15,7 @@ int advice_status_u_option = 1; int advice_commit_before_merge = 1; int advice_reset_quiet_warning = 1; int advice_resolve_conflict = 1; +int advice_sequencer_in_use = 1; int advice_implicit_identity = 1; int advice_detached_head = 1; int advice_set_upstream_failure = 1; @@ -71,6 +72,7 @@ static struct { { "commitBeforeMerge", &advice_commit_before_merge }, { "resetQuiet", &advice_reset_quiet_warning }, { "resolveConflict", &advice_resolve_conflict }, + { "sequencerInUse", &advice_sequencer_in_use }, { "implicitIdentity", &advice_implicit_identity }, { "detachedHead", &advice_detached_head }, { "setupStreamFailure", &advice_set_upstream_failure }, diff --git a/advice.h b/advice.h index e50f02cdfe..ebc838d7bc 100644 --- a/advice.h +++ b/advice.h @@ -15,6 +15,7 @@ extern int advice_status_u_option; extern int advice_commit_before_merge; extern int advice_reset_quiet_warning; extern int advice_resolve_conflict; +extern int advice_sequencer_in_use; extern int advice_implicit_identity; extern int advice_detached_head; extern int advice_set_upstream_failure; diff --git a/sequencer.c b/sequencer.c index f88a97fb10..0ef2622a69 100644 --- a/sequencer.c +++ b/sequencer.c @@ -2650,15 +2650,38 @@ static int walk_revs_populate_todo(struct todo_list *todo_list, return 0; } -static int create_seq_dir(void) +static int create_seq_dir(struct repository *r) { - if (file_exists(git_path_seq_dir())) { - error(_("a cherry-pick or revert is already in progress")); - advise(_("try \"git cherry-pick (--continue | --quit | --abort)\"")); + enum replay_action action; + const char *in_progress_error = NULL; + const char *in_progress_advice = NULL; + + if (!sequencer_get_last_command(r, &action)) { + switch (action) { + case REPLAY_REVERT: + in_progress_error = _("revert is already in progress"); + in_progress_advice = + _("try \"git revert (--continue | --abort | --quit)\""); + break; + case REPLAY_PICK: + in_progress_error = _("cherry-pick is already in progress"); + in_progress_advice = + _("try \"git cherry-pick (--continue | --abort | --quit)\""); + break; + default: + BUG("unexpected action in create_seq_dir"); + } + } + if (in_progress_error) { + error("%s", in_progress_error); + if (advice_sequencer_in_use) + advise("%s", in_progress_advice); return -1; - } else if (mkdir(git_path_seq_dir(), 0777) < 0) + } + if (mkdir(git_path_seq_dir(), 0777) < 0) return error_errno(_("could not create sequencer directory '%s'"), git_path_seq_dir()); + return 0; } @@ -4237,7 +4260,7 @@ int sequencer_pick_revisions(struct repository *r, */ if (walk_revs_populate_todo(&todo_list, opts) || - create_seq_dir() < 0) + create_seq_dir(r) < 0) return -1; if (get_oid("HEAD", &oid) && (opts->action == REPLAY_REVERT)) return error(_("can't revert as initial commit")); From patchwork Tue Jul 2 09:11:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rohit Ashiwal X-Patchwork-Id: 11027481 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 11AF1746 for ; Tue, 2 Jul 2019 09:14:24 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EC069288AC for ; Tue, 2 Jul 2019 09:14:23 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E0631288AF; Tue, 2 Jul 2019 09:14:23 +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 88467288AC for ; Tue, 2 Jul 2019 09:14:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727143AbfGBJOW (ORCPT ); Tue, 2 Jul 2019 05:14:22 -0400 Received: from mail-pg1-f195.google.com ([209.85.215.195]:37972 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726283AbfGBJOW (ORCPT ); Tue, 2 Jul 2019 05:14:22 -0400 Received: by mail-pg1-f195.google.com with SMTP id z75so7387722pgz.5 for ; Tue, 02 Jul 2019 02:14:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=uWErZ4q/EYV5Los24o5miiBOLFeigR3z8zc0g/j9Ozg=; b=bmTN8MsaLmDmGvd7SeP0BqBjKbhjJMuzQ2jtrl0Z/xSvbpzPd6OIXccvV5bDSsdFaJ IP2wzlPF6GQJICoD/c8FnEYfzjleKsKp0pLVEFEWa7xOjPLZGw0eJo9wirLF2t5isDcb nTRXEh5jjjYeIpUl4LONNwDvo2mis0sFp6VZ5aoFvv4+43sZ7BTsUPNzSAY6NF1e+LYb OGcFpyjZxD5Rol6d/Q6oM3q1uLxWhCpqxXECV8vgU/QjAE8W2WG/4MJiusRayEOPdZ4W wp6s98uce1kdV2pCBeyrcOcg8mS5NwdVYGf2IF0HYeuUNDJPBQiCjzyRgiy5ZlfGhwCI GGeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=uWErZ4q/EYV5Los24o5miiBOLFeigR3z8zc0g/j9Ozg=; b=PDXrqTxuozFWISAIxpXLdi7vBrmoydaUJWMngk3FGzwy46kdwnUxfkYHQ0sNpEDXmg j7HhYeaoqQPLKH+yZF1KBj8tHzATszNn8laMj47fNf6kdShfmYei/HQq7LSBb/iRTxmQ 3yn6AbfkMCYAePCZYCdk5bbvAuUiTfFfXtTCFrRCejrNdjiko45MDS71yAiwr8eLf/ls KLZG1oudRMonDQrS0jYNsbob1/qjsrAeWhPM1fxzXXv9ySbM3axgam1WcZag2NeV69sb MbBaerpGAdIXtUmRrrteEfpb4HusN4O4hzSSBEBa8AAk+XFuNpydrqYkDSaGAkGxd7DN RNCg== X-Gm-Message-State: APjAAAWtjxf4E8QxvX8tPIYcJXv//0u2+SgLffjz+b5hE5sE2NImwxHw 06bfxcriEDatF4BDm10EF+s= X-Google-Smtp-Source: APXvYqx0pVzzzpqChs09mJMVtrMeLhAauZaULLgDFl0OJU68v5METIW0Z9TIMFqEvJyA/GmCz29nHQ== X-Received: by 2002:a17:90a:3ac2:: with SMTP id b60mr4461155pjc.74.1562058861491; Tue, 02 Jul 2019 02:14:21 -0700 (PDT) Received: from ar135.iitr.local ([103.37.200.218]) by smtp.gmail.com with ESMTPSA id q198sm20499178pfq.155.2019.07.02.02.14.17 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 02 Jul 2019 02:14:20 -0700 (PDT) From: Rohit Ashiwal To: rohit.ashiwal265@gmail.com Cc: git@vger.kernel.org, newren@gmail.com, t.gummerer@gmail.com, phillip.wood123@gmail.com, martin.agren@gmail.com, jrnieder@gmail.com Subject: [GSoC][PATCH v8 2/5] sequencer: rename reset_for_rollback to reset_merge Date: Tue, 2 Jul 2019 14:41:26 +0530 Message-Id: <20190702091129.7531-3-rohit.ashiwal265@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190702091129.7531-1-rohit.ashiwal265@gmail.com> References: <20190608191958.4593-1-rohit.ashiwal265@gmail.com> <20190702091129.7531-1-rohit.ashiwal265@gmail.com> MIME-Version: 1.0 Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP We are on a path to teach cherry-pick/revert how to skip commits. To achieve this, we could really make use of existing functions. reset_for_rollback is one such function, but the name does not intuitively suggest to use it to reset a merge, which it was born to perform, see 539047c ("revert: introduce --abort to cancel a failed cherry-pick", 2011-11-23). Change the name to reset_merge to make it more intuitive. Signed-off-by: Rohit Ashiwal --- sequencer.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sequencer.c b/sequencer.c index 0ef2622a69..cb856bcfc3 100644 --- a/sequencer.c +++ b/sequencer.c @@ -2732,7 +2732,7 @@ static int rollback_is_safe(void) return oideq(&actual_head, &expected_head); } -static int reset_for_rollback(const struct object_id *oid) +static int reset_merge(const struct object_id *oid) { const char *argv[4]; /* reset --merge + NULL */ @@ -2754,7 +2754,7 @@ static int rollback_single_pick(struct repository *r) return error(_("cannot resolve HEAD")); if (is_null_oid(&head_oid)) return error(_("cannot abort from a branch yet to be born")); - return reset_for_rollback(&head_oid); + return reset_merge(&head_oid); } int sequencer_rollback(struct repository *r, struct replay_opts *opts) @@ -2797,7 +2797,7 @@ int sequencer_rollback(struct repository *r, struct replay_opts *opts) warning(_("You seem to have moved HEAD. " "Not rewinding, check your HEAD!")); } else - if (reset_for_rollback(&oid)) + if (reset_merge(&oid)) goto fail; strbuf_release(&buf); return sequencer_remove_state(opts); From patchwork Tue Jul 2 09:11:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rohit Ashiwal X-Patchwork-Id: 11027483 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 96C61746 for ; Tue, 2 Jul 2019 09:14:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7C4E5288AA for ; Tue, 2 Jul 2019 09:14:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 70D74288AE; Tue, 2 Jul 2019 09:14: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 271C4288AA for ; Tue, 2 Jul 2019 09:14:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727161AbfGBJO0 (ORCPT ); Tue, 2 Jul 2019 05:14:26 -0400 Received: from mail-pg1-f193.google.com ([209.85.215.193]:46639 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726283AbfGBJO0 (ORCPT ); Tue, 2 Jul 2019 05:14:26 -0400 Received: by mail-pg1-f193.google.com with SMTP id i8so4171442pgm.13 for ; Tue, 02 Jul 2019 02:14:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=sjxQC9ExWqlfRwxfY1lcZGsCIZu7g+wklshVn6nyRpc=; b=mY5qAcPWuwppZRMzVsvcX2awehdZrVRj9nwre4Tb/vqyt3RpyYYhc1Uz0lF/Y/3qhs FeNhPw27OpmRwHhHJCbOzI1Wo29lDVjqro8b6qRsKnbRl2DMUpZHd66lTSbHWhhrutZ/ yzgIOwUjNbHcc4x6CSR5B5VG4UC8Msjr0ZRYz5HhBgRA+toQynU2kJUCrpJpd+5TPOQh pW9Sz0coN8cyxYuCRTvB+T2mkZ9wAwiM+aWeWfesu4wMd5XwJiu6Nxh8rDYMHPUWPVPX 11FcCkA6xbZaeXYRlRgMub7y0Lr6GNMybidHsRdl2sUNT601odxlg33CaES3dds+mTnE eg+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=sjxQC9ExWqlfRwxfY1lcZGsCIZu7g+wklshVn6nyRpc=; b=YRfEC/6HPnRPrL103GYjRtJLXYl96UehTFwTbPEUsorEM1t/xb5icnjDfLpKkvilYI I9N6CIgDe8WXF8Yw8FlIKjR+WliJfnQ2swZ3Dh4ND7/h/zQ705a7whh82RjrVIGwRqbB uPzT8GRm2s9RoUrVb7IYBKk64JtMDIb44rgitG3E0clTwXn7LsSW+qBEiE7L9ndsSQW5 ujJV/g9iwdSnTFsCagVcg/y2g6Zx2ZSKVdWn39YD3TSufYKD1rM+9UliuOhOIAotdNKY 4ZPHg+hfZ5m0BCY8VtI8RJ4z2y+N4Zz8g1Q564Voqo37VmY2e0F+JX7aj+dBVPi6Mtrk PBYA== X-Gm-Message-State: APjAAAV7L84fcUZFuai+R3CV9KlvqPEBsQ18pgtZeFV8mZBc3rhPltwJ kmBJg8fdN89aj99oSO3iXiU= X-Google-Smtp-Source: APXvYqznbI3DpP23R7C/64lHk/NMwkKK3+c6hPlBMpTuhop33FXFKjKjgZOtaRUk9Undo0cYBi08Ww== X-Received: by 2002:a17:90a:cb15:: with SMTP id z21mr4422365pjt.87.1562058865359; Tue, 02 Jul 2019 02:14:25 -0700 (PDT) Received: from ar135.iitr.local ([103.37.200.218]) by smtp.gmail.com with ESMTPSA id q198sm20499178pfq.155.2019.07.02.02.14.21 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 02 Jul 2019 02:14:24 -0700 (PDT) From: Rohit Ashiwal To: rohit.ashiwal265@gmail.com Cc: git@vger.kernel.org, newren@gmail.com, t.gummerer@gmail.com, phillip.wood123@gmail.com, martin.agren@gmail.com, jrnieder@gmail.com Subject: [GSoC][PATCH v8 3/5] sequencer: use argv_array in reset_merge Date: Tue, 2 Jul 2019 14:41:27 +0530 Message-Id: <20190702091129.7531-4-rohit.ashiwal265@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190702091129.7531-1-rohit.ashiwal265@gmail.com> References: <20190608191958.4593-1-rohit.ashiwal265@gmail.com> <20190702091129.7531-1-rohit.ashiwal265@gmail.com> MIME-Version: 1.0 Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Avoid using magic numbers for array size and index under `reset_merge` function. Use `argv_array` instead. This will make code shorter and easier to extend. Signed-off-by: Rohit Ashiwal --- sequencer.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/sequencer.c b/sequencer.c index cb856bcfc3..70efe36ee8 100644 --- a/sequencer.c +++ b/sequencer.c @@ -2734,13 +2734,18 @@ static int rollback_is_safe(void) static int reset_merge(const struct object_id *oid) { - const char *argv[4]; /* reset --merge + NULL */ + int ret; + struct argv_array argv = ARGV_ARRAY_INIT; - argv[0] = "reset"; - argv[1] = "--merge"; - argv[2] = oid_to_hex(oid); - argv[3] = NULL; - return run_command_v_opt(argv, RUN_GIT_CMD); + argv_array_pushl(&argv, "reset", "--merge", NULL); + + if (!is_null_oid(oid)) + argv_array_push(&argv, oid_to_hex(oid)); + + ret = run_command_v_opt(argv.argv, RUN_GIT_CMD); + argv_array_clear(&argv); + + return ret; } static int rollback_single_pick(struct repository *r) From patchwork Tue Jul 2 09:11:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rohit Ashiwal X-Patchwork-Id: 11027485 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 27993138D for ; Tue, 2 Jul 2019 09:14:33 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0BFC5288AA for ; Tue, 2 Jul 2019 09:14:33 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F2BBC288AE; Tue, 2 Jul 2019 09:14:32 +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 1FC3E288AA for ; Tue, 2 Jul 2019 09:14:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727163AbfGBJOb (ORCPT ); Tue, 2 Jul 2019 05:14:31 -0400 Received: from mail-pl1-f194.google.com ([209.85.214.194]:37810 "EHLO mail-pl1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726283AbfGBJOb (ORCPT ); Tue, 2 Jul 2019 05:14:31 -0400 Received: by mail-pl1-f194.google.com with SMTP id bh12so56953plb.4 for ; Tue, 02 Jul 2019 02:14:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7y/kL5Nok/GYir2EOd9bxMuhqFh5Z185neSHy7az5fM=; b=XCcvhQ7Slq0RvZ4SVY5VfSpg+4fQH6te6q7ytYVDodc5ztvXSEZuziZDqN3pu4xWor BTcFRD8dNtpJHxp2Ko06iHJEq48ozK08Tpvs8kCPBKzqutvTiuJjG289hP3DL5XGA8FZ R/sT1DcCOLwyP5nWcAsk8uVQ25eD9G/cZRxNjzKKAPXQ0Y6uUjtrRx7xSMN2s9HOlKxz g+geJ2+/WzNNwjI7zlepQxC7m5y0yJc4a+UGVhIq27UuJe87pjpuW4Y4epYnqw8COTNE m25x61V3PnxzA3ngg7HiVDyEMDcwt5uBbuum0aJ/lFD5QlgbdquQ8TEQ86M1WCj7fn/E 0LlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=7y/kL5Nok/GYir2EOd9bxMuhqFh5Z185neSHy7az5fM=; b=pJyncUwtlchVcHrkAawBqh2xBIuK5gL6KK7A1dqzG0cjb80IMGIjBp0pvUM83HKEd4 /2Jddc36l035KUMt9C0MGmqkcDBKI4ulJNU2A2YUSfxlNIUfiMWoNxpD7yS2t5LDHEyw uFJCDJNHuwVYU1nH/Zbd9DPQzAQlfjtHf55vFSgs2HCcFe2WD6U3IYOLMZxTQC7Z9e89 L9wJgaF/9psWjH8xpGbVUtrUunsVqRUBNLRX3fFk4XqXvRn1DpRtm8YKCQJ6F+nXGntY HNb2dKx/DivcOdk2R1jVE8Wtd48FItoDjpUkehE5/8W6g3mCbBK7WOhau0OM0obQ8GKK M/gg== X-Gm-Message-State: APjAAAVIoYIOEp/l1KXNsCUYZVjuPj7kEFfmJyzT6jrYVf+d7eKOVeni C/jNaxOH+OqEOIpV3zwh2R8= X-Google-Smtp-Source: APXvYqy/qEFWv1MKD0O4JeapBTihlSzzNktUy5SRsjsGXQyMxuhyXVAhTAbifZ77gNyiV2wN9v0hvA== X-Received: by 2002:a17:902:424:: with SMTP id 33mr34154037ple.151.1562058869552; Tue, 02 Jul 2019 02:14:29 -0700 (PDT) Received: from ar135.iitr.local ([103.37.200.218]) by smtp.gmail.com with ESMTPSA id q198sm20499178pfq.155.2019.07.02.02.14.25 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 02 Jul 2019 02:14:28 -0700 (PDT) From: Rohit Ashiwal To: rohit.ashiwal265@gmail.com Cc: git@vger.kernel.org, newren@gmail.com, t.gummerer@gmail.com, phillip.wood123@gmail.com, martin.agren@gmail.com, jrnieder@gmail.com Subject: [GSoC][PATCH v8 4/5] cherry-pick/revert: add --skip option Date: Tue, 2 Jul 2019 14:41:28 +0530 Message-Id: <20190702091129.7531-5-rohit.ashiwal265@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190702091129.7531-1-rohit.ashiwal265@gmail.com> References: <20190608191958.4593-1-rohit.ashiwal265@gmail.com> <20190702091129.7531-1-rohit.ashiwal265@gmail.com> MIME-Version: 1.0 Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP git am or rebase have a --skip flag to skip the current commit if the user wishes to do so. During a cherry-pick or revert a user could likewise skip a commit, but needs to use 'git reset' (or in the case of conflicts 'git reset --merge'), followed by 'git (cherry-pick | revert) --continue' to skip the commit. This is more annoying and sometimes confusing on the users' part. Add a `--skip` option to make skipping commits easier for the user and to make the commands more consistent. In the next commit, we will change the advice messages hence finishing the process of teaching revert and cherry-pick "how to skip commits". Signed-off-by: Rohit Ashiwal --- Documentation/git-cherry-pick.txt | 4 +- Documentation/git-revert.txt | 4 +- Documentation/sequencer.txt | 4 ++ builtin/revert.c | 5 ++ sequencer.c | 73 +++++++++++++++++++++ sequencer.h | 1 + t/t3510-cherry-pick-sequence.sh | 102 ++++++++++++++++++++++++++++++ 7 files changed, 187 insertions(+), 6 deletions(-) diff --git a/Documentation/git-cherry-pick.txt b/Documentation/git-cherry-pick.txt index 754b16ce0c..83ce51aedf 100644 --- a/Documentation/git-cherry-pick.txt +++ b/Documentation/git-cherry-pick.txt @@ -10,9 +10,7 @@ SYNOPSIS [verse] 'git cherry-pick' [--edit] [-n] [-m parent-number] [-s] [-x] [--ff] [-S[]] ... -'git cherry-pick' --continue -'git cherry-pick' --quit -'git cherry-pick' --abort +'git cherry-pick' (--continue | --skip | --abort | --quit) DESCRIPTION ----------- diff --git a/Documentation/git-revert.txt b/Documentation/git-revert.txt index 0c82ca5bc0..665e065ee3 100644 --- a/Documentation/git-revert.txt +++ b/Documentation/git-revert.txt @@ -9,9 +9,7 @@ SYNOPSIS -------- [verse] 'git revert' [--[no-]edit] [-n] [-m parent-number] [-s] [-S[]] ... -'git revert' --continue -'git revert' --quit -'git revert' --abort +'git revert' (--continue | --skip | --abort | --quit) DESCRIPTION ----------- diff --git a/Documentation/sequencer.txt b/Documentation/sequencer.txt index 5a57c4a407..3bceb56474 100644 --- a/Documentation/sequencer.txt +++ b/Documentation/sequencer.txt @@ -3,6 +3,10 @@ `.git/sequencer`. Can be used to continue after resolving conflicts in a failed cherry-pick or revert. +--skip:: + Skip the current commit and continue with the rest of the + sequence. + --quit:: Forget about the current operation in progress. Can be used to clear the sequencer state after a failed cherry-pick or diff --git a/builtin/revert.c b/builtin/revert.c index d4dcedbdc6..5dc5891ea2 100644 --- a/builtin/revert.c +++ b/builtin/revert.c @@ -102,6 +102,7 @@ static int run_sequencer(int argc, const char **argv, struct replay_opts *opts) OPT_CMDMODE(0, "quit", &cmd, N_("end revert or cherry-pick sequence"), 'q'), OPT_CMDMODE(0, "continue", &cmd, N_("resume revert or cherry-pick sequence"), 'c'), OPT_CMDMODE(0, "abort", &cmd, N_("cancel revert or cherry-pick sequence"), 'a'), + OPT_CMDMODE(0, "skip", &cmd, N_("skip current commit and continue"), 's'), OPT_CLEANUP(&cleanup_arg), OPT_BOOL('n', "no-commit", &opts->no_commit, N_("don't automatically commit")), OPT_BOOL('e', "edit", &opts->edit, N_("edit the commit message")), @@ -151,6 +152,8 @@ static int run_sequencer(int argc, const char **argv, struct replay_opts *opts) this_operation = "--quit"; else if (cmd == 'c') this_operation = "--continue"; + else if (cmd == 's') + this_operation = "--skip"; else { assert(cmd == 'a'); this_operation = "--abort"; @@ -210,6 +213,8 @@ static int run_sequencer(int argc, const char **argv, struct replay_opts *opts) return sequencer_continue(the_repository, opts); if (cmd == 'a') return sequencer_rollback(the_repository, opts); + if (cmd == 's') + return sequencer_skip(the_repository, opts); return sequencer_pick_revisions(the_repository, opts); } diff --git a/sequencer.c b/sequencer.c index 70efe36ee8..f5e3d60878 100644 --- a/sequencer.c +++ b/sequencer.c @@ -2762,6 +2762,15 @@ static int rollback_single_pick(struct repository *r) return reset_merge(&head_oid); } +static int skip_single_pick(void) +{ + struct object_id head; + + if (read_ref_full("HEAD", 0, &head, NULL)) + return error(_("cannot resolve HEAD")); + return reset_merge(&head); +} + int sequencer_rollback(struct repository *r, struct replay_opts *opts) { FILE *f; @@ -2811,6 +2820,70 @@ int sequencer_rollback(struct repository *r, struct replay_opts *opts) return -1; } +int sequencer_skip(struct repository *r, struct replay_opts *opts) +{ + enum replay_action action = -1; + sequencer_get_last_command(r, &action); + + /* + * Check whether the subcommand requested to skip the commit is actually + * in progress and that it's safe to skip the commit. + * + * opts->action tells us which subcommand requested to skip the commit. + * If the corresponding .git/_HEAD exists, we know that the + * action is in progress and we can skip the commit. + * + * Otherwise we check that the last instruction was related to the + * particular subcommand we're trying to execute and barf if that's not + * the case. + * + * Finally we check that the rollback is "safe", i.e., has the HEAD + * moved? In this case, it doesn't make sense to "reset the merge" and + * "skip the commit" as the user already handled this by committing. But + * we'd not want to barf here, instead give advice on how to proceed. We + * only need to check that when .git/_HEAD doesn't exist because + * it gets removed when the user commits, so if it still exists we're + * sure the user can't have committed before. + */ + switch (opts->action) { + case REPLAY_REVERT: + if (!file_exists(git_path_revert_head(r))) { + if (action != REPLAY_REVERT) + return error(_("no revert in progress")); + if (!rollback_is_safe()) + goto give_advice; + } + break; + case REPLAY_PICK: + if (!file_exists(git_path_cherry_pick_head(r))) { + if (action != REPLAY_PICK) + return error(_("no cherry-pick in progress")); + if (!rollback_is_safe()) + goto give_advice; + } + break; + default: + BUG("unexpected action in sequencer_skip"); + } + + if (skip_single_pick()) + return error(_("failed to skip the commit")); + if (!is_directory(git_path_seq_dir())) + return 0; + + return sequencer_continue(r, opts); + +give_advice: + error(_("there is nothing to skip")); + + if (advice_resolve_conflict) { + advise(_("have you committed already?\n" + "try \"git %s --continue\""), + action == REPLAY_REVERT ? "revert" : "cherry-pick"); + } + return -1; +} + static int save_todo(struct todo_list *todo_list, struct replay_opts *opts) { struct lock_file todo_lock = LOCK_INIT; diff --git a/sequencer.h b/sequencer.h index 0c494b83d4..731b9853eb 100644 --- a/sequencer.h +++ b/sequencer.h @@ -129,6 +129,7 @@ int sequencer_pick_revisions(struct repository *repo, struct replay_opts *opts); int sequencer_continue(struct repository *repo, struct replay_opts *opts); int sequencer_rollback(struct repository *repo, struct replay_opts *opts); +int sequencer_skip(struct repository *repo, struct replay_opts *opts); int sequencer_remove_state(struct replay_opts *opts); #define TODO_LIST_KEEP_EMPTY (1U << 0) diff --git a/t/t3510-cherry-pick-sequence.sh b/t/t3510-cherry-pick-sequence.sh index 941d5026da..20515ea37b 100755 --- a/t/t3510-cherry-pick-sequence.sh +++ b/t/t3510-cherry-pick-sequence.sh @@ -93,6 +93,108 @@ test_expect_success 'cherry-pick cleans up sequencer state upon success' ' test_path_is_missing .git/sequencer ' +test_expect_success 'cherry-pick --skip requires cherry-pick in progress' ' + pristine_detach initial && + test_must_fail git cherry-pick --skip +' + +test_expect_success 'revert --skip requires revert in progress' ' + pristine_detach initial && + test_must_fail git revert --skip +' + +test_expect_success 'cherry-pick --skip to skip commit' ' + pristine_detach initial && + test_must_fail git cherry-pick anotherpick && + test_must_fail git revert --skip && + git cherry-pick --skip && + test_cmp_rev initial HEAD && + test_path_is_missing .git/CHERRY_PICK_HEAD +' + +test_expect_success 'revert --skip to skip commit' ' + pristine_detach anotherpick && + test_must_fail git revert anotherpick~1 && + test_must_fail git cherry-pick --skip && + git revert --skip && + test_cmp_rev anotherpick HEAD +' + +test_expect_success 'skip "empty" commit' ' + pristine_detach picked && + test_commit dummy foo d && + test_must_fail git cherry-pick anotherpick && + git cherry-pick --skip && + test_cmp_rev dummy HEAD +' + +test_expect_success 'skip a commit and check if rest of sequence is correct' ' + pristine_detach initial && + echo e >expect && + cat >expect.log <<-EOF && + OBJID + :100644 100644 OBJID OBJID M foo + OBJID + :100644 100644 OBJID OBJID M foo + OBJID + :100644 100644 OBJID OBJID M unrelated + OBJID + :000000 100644 OBJID OBJID A foo + :000000 100644 OBJID OBJID A unrelated + EOF + test_must_fail git cherry-pick base..yetanotherpick && + test_must_fail git cherry-pick --skip && + echo d >foo && + git add foo && + git cherry-pick --continue && + { + git rev-list HEAD | + git diff-tree --root --stdin | + sed "s/$OID_REGEX/OBJID/g" + } >actual.log && + test_cmp expect foo && + test_cmp expect.log actual.log +' + +test_expect_success 'check advice when we move HEAD by committing' ' + pristine_detach initial && + cat >expect <<-EOF && + error: there is nothing to skip + hint: have you committed already? + hint: try "git cherry-pick --continue" + fatal: cherry-pick failed + EOF + test_must_fail git cherry-pick base..yetanotherpick && + echo c >foo && + git commit -a && + test_path_is_missing .git/CHERRY_PICK_HEAD && + test_must_fail git cherry-pick --skip 2>advice && + test_i18ncmp expect advice +' + +test_expect_success 'allow skipping commit but not abort for a new history' ' + pristine_detach initial && + cat >expect <<-EOF && + error: cannot abort from a branch yet to be born + fatal: cherry-pick failed + EOF + git checkout --orphan new_disconnected && + git reset --hard && + test_must_fail git cherry-pick anotherpick && + test_must_fail git cherry-pick --abort 2>advice && + git cherry-pick --skip && + test_i18ncmp expect advice +' + +test_expect_success 'allow skipping stopped cherry-pick because of untracked file modifications' ' + pristine_detach initial && + git rm --cached unrelated && + git commit -m "untrack unrelated" && + test_must_fail git cherry-pick initial base && + test_path_is_missing .git/CHERRY_PICK_HEAD && + git cherry-pick --skip +' + test_expect_success '--quit does not complain when no cherry-pick is in progress' ' pristine_detach initial && git cherry-pick --quit From patchwork Tue Jul 2 09:11:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rohit Ashiwal X-Patchwork-Id: 11027487 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 2D328138D for ; Tue, 2 Jul 2019 09:14:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 138A6288AA for ; Tue, 2 Jul 2019 09:14:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 07A82288AE; Tue, 2 Jul 2019 09:14:36 +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 8E87C288AA for ; Tue, 2 Jul 2019 09:14:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727167AbfGBJOe (ORCPT ); Tue, 2 Jul 2019 05:14:34 -0400 Received: from mail-pg1-f194.google.com ([209.85.215.194]:42478 "EHLO mail-pg1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726283AbfGBJOe (ORCPT ); Tue, 2 Jul 2019 05:14:34 -0400 Received: by mail-pg1-f194.google.com with SMTP id t132so4013675pgb.9 for ; Tue, 02 Jul 2019 02:14:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=hXlgn2RLQiB+pwvjujW1AIFhXcPY2wIhLojiaXmaZ0o=; b=IdptTJc/KAGbckFCE0N8nJ7Usj5i6vG3x1R5a/JTDh6uSRmMHSfT5/jtyHRvUmMdgD e5ZJMKZeNeXY6yqJCxoI7GTy4su4zQHTBB+GXMhzu+7s5CjY0Xe/n8vLTerm5t41bLmo OYf2AnOjyahsWjuPvwnJooYT3ja+ZLPtqJzN6WkvLrLLTKKL59jjuxsW1kD0DHuNtLbP H+VWTsVo8B+ttFhFtLt/xaB92vD+StaCtCga6E0iIW47B/4NJOu8DSTfnEnumCFUdjXQ o9uElhZXIw2Ry1c7784Dlw4gCC4X7vNExwI6dLkZHgrNTbaTnHvONRzFhT2VvbyS3EgD bIdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=hXlgn2RLQiB+pwvjujW1AIFhXcPY2wIhLojiaXmaZ0o=; b=H6imlJKiVgIWuYu95y2sMinFfMKqiYUWiS9vEaCcRrN2NRbAwWWJHCIXgb9k3xC1ZR yN45j9sqsk/2wyYbnBy7JoxajMm/LOumnHKqrk8pYMiRk/BAt35fsQDAfozoISwjekZ2 AQA7j0ghfQWcVXEIE2lhcHHiX/5MPuwIGZRhJ2OSMo6iaKcPgWGoEWq6FEZNUAba6R3p t9RmlA1CYHQ2Q+uzRzuCxDSW8sXhky9Ytalrp6yIcZOzYE+EHUu6WqUrBmgj4kwf5jr9 0ygeyvATpWVtkTrrzEVmAaWI6GyuiD7/X1ycbiLsSai05zVcksWeYaytnOMEuYrXFspq yJfw== X-Gm-Message-State: APjAAAUmw2YpRho7CkicswxelrYv1LnUSlnE+fGZWf7wyZ///hf5bXRp NMYj5NlIgaNZTGFGixUmYCiWfkXpWGE= X-Google-Smtp-Source: APXvYqwTmnISPfIJ6b5hPfB5oiD66ops7erYDMjIIE7nSCjnn4BNisgE3FS/wN4uWU5Gc1N3eUAvWQ== X-Received: by 2002:a65:514c:: with SMTP id g12mr11164074pgq.76.1562058873386; Tue, 02 Jul 2019 02:14:33 -0700 (PDT) Received: from ar135.iitr.local ([103.37.200.218]) by smtp.gmail.com with ESMTPSA id q198sm20499178pfq.155.2019.07.02.02.14.29 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 02 Jul 2019 02:14:32 -0700 (PDT) From: Rohit Ashiwal To: rohit.ashiwal265@gmail.com Cc: git@vger.kernel.org, newren@gmail.com, t.gummerer@gmail.com, phillip.wood123@gmail.com, martin.agren@gmail.com, jrnieder@gmail.com Subject: [GSoC][PATCH v8 5/5] cherry-pick/revert: advise using --skip Date: Tue, 2 Jul 2019 14:41:29 +0530 Message-Id: <20190702091129.7531-6-rohit.ashiwal265@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190702091129.7531-1-rohit.ashiwal265@gmail.com> References: <20190608191958.4593-1-rohit.ashiwal265@gmail.com> <20190702091129.7531-1-rohit.ashiwal265@gmail.com> MIME-Version: 1.0 Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The previous commit introduced a --skip flag for cherry-pick and revert. Update the advice messages, to tell users about this less cumbersome way of skipping commits. Also add tests to ensure everything is working fine. Signed-off-by: Rohit Ashiwal --- builtin/commit.c | 13 ++++++++----- sequencer.c | 9 ++++++--- t/t3510-cherry-pick-sequence.sh | 20 ++++++++++++++++++++ 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/builtin/commit.c b/builtin/commit.c index 1c9e8e2228..1f47c51bdc 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -60,15 +60,18 @@ N_("The previous cherry-pick is now empty, possibly due to conflict resolution.\ "\n"); static const char empty_cherry_pick_advice_single[] = -N_("Otherwise, please use 'git reset'\n"); +N_("Otherwise, please use 'git cherry-pick --skip'\n"); static const char empty_cherry_pick_advice_multi[] = -N_("If you wish to skip this commit, use:\n" +N_("and then use:\n" "\n" -" git reset\n" +" git cherry-pick --continue\n" "\n" -"Then \"git cherry-pick --continue\" will resume cherry-picking\n" -"the remaining commits.\n"); +"to resume cherry-picking the remaining commits.\n" +"If you wish to skip this commit, use:\n" +"\n" +" git cherry-pick --skip\n" +"\n"); static const char *color_status_slots[] = { [WT_STATUS_HEADER] = "header", diff --git a/sequencer.c b/sequencer.c index f5e3d60878..2e7b16b75f 100644 --- a/sequencer.c +++ b/sequencer.c @@ -2655,18 +2655,20 @@ static int create_seq_dir(struct repository *r) enum replay_action action; const char *in_progress_error = NULL; const char *in_progress_advice = NULL; + unsigned int advise_skip = file_exists(git_path_revert_head(r)) || + file_exists(git_path_cherry_pick_head(r)); if (!sequencer_get_last_command(r, &action)) { switch (action) { case REPLAY_REVERT: in_progress_error = _("revert is already in progress"); in_progress_advice = - _("try \"git revert (--continue | --abort | --quit)\""); + _("try \"git revert (--continue | %s--abort | --quit)\""); break; case REPLAY_PICK: in_progress_error = _("cherry-pick is already in progress"); in_progress_advice = - _("try \"git cherry-pick (--continue | --abort | --quit)\""); + _("try \"git cherry-pick (--continue | %s--abort | --quit)\""); break; default: BUG("unexpected action in create_seq_dir"); @@ -2675,7 +2677,8 @@ static int create_seq_dir(struct repository *r) if (in_progress_error) { error("%s", in_progress_error); if (advice_sequencer_in_use) - advise("%s", in_progress_advice); + advise(in_progress_advice, + advise_skip ? "--skip | " : ""); return -1; } if (mkdir(git_path_seq_dir(), 0777) < 0) diff --git a/t/t3510-cherry-pick-sequence.sh b/t/t3510-cherry-pick-sequence.sh index 20515ea37b..793bcc7fe3 100755 --- a/t/t3510-cherry-pick-sequence.sh +++ b/t/t3510-cherry-pick-sequence.sh @@ -172,6 +172,26 @@ test_expect_success 'check advice when we move HEAD by committing' ' test_i18ncmp expect advice ' +test_expect_success 'selectively advise --skip while launching another sequence' ' + pristine_detach initial && + cat >expect <<-EOF && + error: cherry-pick is already in progress + hint: try "git cherry-pick (--continue | --skip | --abort | --quit)" + fatal: cherry-pick failed + EOF + test_must_fail git cherry-pick picked..yetanotherpick && + test_must_fail git cherry-pick picked..yetanotherpick 2>advice && + test_i18ncmp expect advice && + cat >expect <<-EOF && + error: cherry-pick is already in progress + hint: try "git cherry-pick (--continue | --abort | --quit)" + fatal: cherry-pick failed + EOF + git reset --merge && + test_must_fail git cherry-pick picked..yetanotherpick 2>advice && + test_i18ncmp expect advice +' + test_expect_success 'allow skipping commit but not abort for a new history' ' pristine_detach initial && cat >expect <<-EOF &&