From patchwork Fri Aug 30 15:16:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Wijen X-Patchwork-Id: 11124257 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D4F481800 for ; Fri, 30 Aug 2019 15:16:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id BC71323407 for ; Fri, 30 Aug 2019 15:16:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727948AbfH3PQc (ORCPT ); Fri, 30 Aug 2019 11:16:32 -0400 Received: from smtp01.domein-it.com ([92.48.232.141]:59322 "EHLO smtp01.domein-it.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727135AbfH3PQc (ORCPT ); Fri, 30 Aug 2019 11:16:32 -0400 Received: by smtp01.domein-it.com (Postfix, from userid 1000) id 24CA280A51B1; Fri, 30 Aug 2019 17:16:31 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on smtp01.domein-it.com X-Spam-Level: X-Spam-Status: No, score=-0.3 required=5.0 tests=AWL,BAYES_40,SPF_HELO_NONE autolearn=no autolearn_force=no version=3.4.0 Received: from ferret.domein-it.nl (unknown [92.48.232.148]) by smtp01.domein-it.com (Postfix) with ESMTP id 3D435807B736; Fri, 30 Aug 2019 17:16:13 +0200 (CEST) Received: from 80-112-22-40.cable.dynamic.v4.ziggo.nl ([80.112.22.40]:54406 helo=ben.local) by ferret.domein-it.nl with esmtpa (Exim 4.92) (envelope-from ) id 1i3idF-0004lz-MG; Fri, 30 Aug 2019 17:16:09 +0200 From: Ben Wijen To: git@vger.kernel.org Cc: Junio C Hamano , Johannes Schindelin , Pratik Karki , Phillip Wood , Eric Sunshine , =?utf-8?q?Szeder_G=C3=A1bor?= , Ben Wijen Subject: [PATCH v6 1/2] builtin/rebase.c: make sure the active branch isn't moved when autostashing Date: Fri, 30 Aug 2019 17:16:05 +0200 Message-Id: <20190830151607.4208-2-ben@wijen.net> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190830151607.4208-1-ben@wijen.net> References: <20190829164757.7301-1-ben@wijen.net> <20190830151607.4208-1-ben@wijen.net> MIME-Version: 1.0 X-Domein-IT-MailScanner-Information: Please contact the ISP for more information X-Domein-IT-MailScanner-ID: 1i3idF-0004lz-MG X-Domein-IT-MailScanner: Not scanned: please contact your Internet E-Mail Service Provider for details X-Domein-IT-MailScanner-SpamCheck: X-Domein-IT-MailScanner-From: ben@wijen.net Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Consider the following scenario: git checkout not-the-master work work work git rebase --autostash upstream master Here 'rebase --autostash ' incorrectly moves the active branch (not-the-master) to master (before the rebase). The expected behavior: (58794775:/git-rebase.sh:526) AUTOSTASH=$(git stash create autostash) git reset --hard git checkout master git rebase upstream git stash apply $AUTOSTASH The actual behavior: (6defce2b:/builtin/rebase.c:1062) AUTOSTASH=$(git stash create autostash) git reset --hard master git checkout master git rebase upstream git stash apply $AUTOSTASH This commit reinstates the 'legacy script' behavior as introduced with 58794775: rebase: implement --[no-]autostash and rebase.autostash Signed-off-by: Ben Wijen --- builtin/rebase.c | 8 ++++++-- t/t3420-rebase-autostash.sh | 8 ++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/builtin/rebase.c b/builtin/rebase.c index 670096c065..abcbfb8f01 100644 --- a/builtin/rebase.c +++ b/builtin/rebase.c @@ -1968,9 +1968,13 @@ int cmd_rebase(int argc, const char **argv, const char *prefix) state_dir_path("autostash", &options); struct child_process stash = CHILD_PROCESS_INIT; struct object_id oid; + struct object_id head_oid; + if (get_oid("HEAD", &head_oid)) { + die(_("could not determine HEAD revision")); + } + struct commit *head = - lookup_commit_reference(the_repository, - &options.orig_head); + lookup_commit_reference(the_repository, &head_oid); argv_array_pushl(&stash.args, "stash", "create", "autostash", NULL); diff --git a/t/t3420-rebase-autostash.sh b/t/t3420-rebase-autostash.sh index b8f4d03467..1131e0016a 100755 --- a/t/t3420-rebase-autostash.sh +++ b/t/t3420-rebase-autostash.sh @@ -306,4 +306,12 @@ test_expect_success 'branch is left alone when possible' ' test unchanged-branch = "$(git rev-parse --abbrev-ref HEAD)" ' +test_expect_success 'never change active branch' ' + git checkout -b not-the-feature-branch unrelated-onto-branch && + test_when_finished "git reset --hard && git checkout master" && + echo changed >file0 && + git rebase --autostash not-the-feature-branch feature-branch && + test_cmp_rev not-the-feature-branch unrelated-onto-branch +' + test_done