From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS31976 209.132.180.0/23 X-Spam-Status: No, score=-4.2 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by dcvr.yhbt.net (Postfix) with ESMTP id 67AC420A1E for ; Mon, 24 Dec 2018 08:48:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726912AbeLXIsM (ORCPT ); Mon, 24 Dec 2018 03:48:12 -0500 Received: from mail-pf1-f196.google.com ([209.85.210.196]:38323 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726788AbeLXIsM (ORCPT ); Mon, 24 Dec 2018 03:48:12 -0500 Received: by mail-pf1-f196.google.com with SMTP id q1so5567339pfi.5 for ; Mon, 24 Dec 2018 00:48:11 -0800 (PST) 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; bh=04gmjA1tsZAFBadJev/euijJH2ZaHjDOhtyaoQxntNw=; b=hrDkCWKOJSgl9jfrAEDVzlaTgzscLobm1/xIpFhQ80RZ5hnDpg4DoqqJX/ZCqvoOfN O/tqSiYC4wPkeqqg5heL3NygKegMi4CMzf0PAt+vwaDfd1ZNUyruv0DFbjMniykVC30R WPnKMGDSPTBeGB8ZzOfgV245YmNNadhB2jSIm0vsUVwIerT3nnGsjz2tuQAnPbo7Arhc L6lzSdDU140YgCmHdrj+1yMzFScm8I5HwO+CeKxoiihwcvdvt2mTztOA/IAhnSO7XOys fkzOUth8ku2dWI+5ezrzwt58PhsZ417V61TQwCNrdd0ODNbu1xPJeF0fLZAwAtNQHmC6 u74g== 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; bh=04gmjA1tsZAFBadJev/euijJH2ZaHjDOhtyaoQxntNw=; b=F5VVwgqHJ6CBfNwCF+u2+CsXTbakSuHrDU/NcqhGqb/luCFsXUnIEfYHZkUxTFxQyY e8PS6gTUykyT06r8vekdkj4nJMF2BglXMv07gdzSzp3X9H+SRz1V9oAYW0lR1ccsb+j3 rTB5UKIz3VVGlaJwEhkcDU+diBbYib7LXVE+oSKEVqvMClFfia9lPLqaATH8B8RRZ0Fu 4qxzd+JedyGcCKM6I4V0lgtZGiNQ73MMfbYTL/Ja5LD2fdXkvV8hx+SA8TP+wmAllmB/ q9ApSWe2UEAuBiKDx3cI49T5NE5ubFpBIyImVdudQO8xUVV2q7ls5SnsfsoxV5j8pX2/ rrIw== X-Gm-Message-State: AJcUukdptFzJVsEj3bt7fLjyi+ng1hPUY6Bmr897Shat02HS0jVy6Ej/ tGDff2vwwUj7eujnZsh59iQ8Vg+4 X-Google-Smtp-Source: ALg8bN7Bc+FIAcXIRiPtJil5dSPohqEhdI9de6Vv4FsfZWiwuhMJ7FIJ+H8V0CsqCSoPfCGGynSHYQ== X-Received: by 2002:a63:b649:: with SMTP id v9mr11682980pgt.436.1545641290798; Mon, 24 Dec 2018 00:48:10 -0800 (PST) Received: from localhost.localdomain (cpe-23-241-199-231.socal.res.rr.com. [23.241.199.231]) by smtp.gmail.com with ESMTPSA id m67sm57292021pfb.25.2018.12.24.00.48.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 24 Dec 2018 00:48:10 -0800 (PST) From: nbelakovski@gmail.com To: git@vger.kernel.org Cc: peff@peff.net, rafa.almas@gmail.com, gitster@pobox.com, avarab@gmail.com, Nickolai Belakovski Subject: [PATCH v4 2/3] branch: Mark and color a branch differently if it is checked out in a linked worktree Date: Mon, 24 Dec 2018 00:47:55 -0800 Message-Id: <20181224084756.49952-3-nbelakovski@gmail.com> X-Mailer: git-send-email 2.14.2 In-Reply-To: <20181224084756.49952-1-nbelakovski@gmail.com> References: <20181220145931.GB27361@sigill.intra.peff.net> <20181224084756.49952-1-nbelakovski@gmail.com> Sender: git-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Nickolai Belakovski In order to more clearly display which branches are active, the output of git branch is modified to mark branches checkout out in a linked worktree with a "+" and color them in cyan (in contrast to the current branch, which will still be denoted with a "*" and colored in green) This is meant to simplify workflows related to worktree, particularly due to the limitations of not being able to check out the same branch in two worktrees and the inability to delete a branch checked out in a worktree. When performing branch operations like checkout and delete, it would be useful to know more readily if the branches in which the user is interested are already checked out in a worktree. The git worktree list command contains the relevant information, however this is a much less frquently used command than git branch. --- builtin/branch.c | 12 ++++++++---- t/t3200-branch.sh | 8 ++++---- t/t3203-branch-output.sh | 21 +++++++++++++++++++++ 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/builtin/branch.c b/builtin/branch.c index 0c55f7f065..2a24153b78 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -47,6 +47,7 @@ static char branch_colors[][COLOR_MAXLEN] = { GIT_COLOR_NORMAL, /* LOCAL */ GIT_COLOR_GREEN, /* CURRENT */ GIT_COLOR_BLUE, /* UPSTREAM */ + GIT_COLOR_CYAN, /* WORKTREE */ }; enum color_branch { BRANCH_COLOR_RESET = 0, @@ -54,7 +55,8 @@ enum color_branch { BRANCH_COLOR_REMOTE = 2, BRANCH_COLOR_LOCAL = 3, BRANCH_COLOR_CURRENT = 4, - BRANCH_COLOR_UPSTREAM = 5 + BRANCH_COLOR_UPSTREAM = 5, + BRANCH_COLOR_WORKTREE = 6 }; static const char *color_branch_slots[] = { @@ -64,6 +66,7 @@ static const char *color_branch_slots[] = { [BRANCH_COLOR_LOCAL] = "local", [BRANCH_COLOR_CURRENT] = "current", [BRANCH_COLOR_UPSTREAM] = "upstream", + [BRANCH_COLOR_WORKTREE] = "worktree", }; static struct string_list output = STRING_LIST_INIT_DUP; @@ -342,9 +345,10 @@ static char *build_format(struct ref_filter *filter, int maxwidth, const char *r struct strbuf local = STRBUF_INIT; struct strbuf remote = STRBUF_INIT; - strbuf_addf(&local, "%%(if)%%(HEAD)%%(then)* %s%%(else) %s%%(end)", - branch_get_color(BRANCH_COLOR_CURRENT), - branch_get_color(BRANCH_COLOR_LOCAL)); + strbuf_addf(&local, "%%(if)%%(HEAD)%%(then)* %s%%(else)%%(if)%%(worktreepath)%%(then)+ %s%%(else) %s%%(end)%%(end)", + branch_get_color(BRANCH_COLOR_CURRENT), + branch_get_color(BRANCH_COLOR_WORKTREE), + branch_get_color(BRANCH_COLOR_LOCAL)); strbuf_addf(&remote, " %s", branch_get_color(BRANCH_COLOR_REMOTE)); diff --git a/t/t3200-branch.sh b/t/t3200-branch.sh index 478b82cf9b..e404f6e23c 100755 --- a/t/t3200-branch.sh +++ b/t/t3200-branch.sh @@ -292,7 +292,7 @@ test_expect_success 'git branch --list -v with --abbrev' ' test_expect_success 'git branch --column' ' COLUMNS=81 git branch --column=column >actual && cat >expected <<\EOF && - a/b/c bam foo l * master n o/p r + a/b/c + bam foo l * master n o/p r abc bar j/k m/m master2 o/o q EOF test_cmp expected actual @@ -307,7 +307,7 @@ test_expect_success 'git branch --column with an extremely long branch name' ' cat >expected <expected <<\EOF && - a/b/c bam foo l * master n o/p r + a/b/c + bam foo l * master n o/p r abc bar j/k m/m master2 o/o q EOF test_cmp expected actual @@ -349,7 +349,7 @@ test_expect_success 'git branch -v with column.ui ignored' ' cat >expected <<\EOF && a/b/c abc - bam ++ bam bar foo j/k diff --git a/t/t3203-branch-output.sh b/t/t3203-branch-output.sh index ee6787614c..94ab05ad59 100755 --- a/t/t3203-branch-output.sh +++ b/t/t3203-branch-output.sh @@ -240,6 +240,27 @@ test_expect_success 'git branch --format option' ' test_i18ncmp expect actual ' +test_expect_success '"add" a worktree' ' + mkdir worktree_dir && + git worktree add -b master_worktree worktree_dir master +' + +cat >expect <<'EOF' +* (HEAD detached from fromtag) + ambiguous + branch-one + branch-two + master ++ master_worktree + ref-to-branch -> branch-one + ref-to-remote -> origin/branch-one +EOF +test_expect_success TTY 'worktree colors correct' ' + test_terminal git branch >actual.raw && + test_decode_color actual && + test_cmp expect actual +' + test_expect_success "set up color tests" ' echo "master" >expect.color && echo "master" >expect.bare && -- 2.14.2