git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: nbelakovski@gmail.com
To: git@vger.kernel.org
Cc: peff@peff.net, gitster@pobox.com, rafa.almas@gmail.com,
	avarab@gmail.com, Nickolai Belakovski <nbelakovski@gmail.com>
Subject: [PATCH v9 2/3] branch: update output to include worktree info
Date: Fri, 15 Mar 2019 18:38:06 -0700	[thread overview]
Message-ID: <20190316013807.38756-3-nbelakovski@gmail.com> (raw)
In-Reply-To: <20190316013807.38756-1-nbelakovski@gmail.com>

From: Nickolai Belakovski <nbelakovski@gmail.com>

The output of git branch is modified to mark branches checked 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 communicate to the user that the branches that are
marked or colored will behave differently from other branches if the user
attempts to check them out or delete them, since branches checked out in
another worktree cannot be checked out or deleted.

Signed-off-by: Nickolai Belakovski <nbelakovski@gmail.com>
---
 Documentation/git-branch.txt |  6 ++++--
 builtin/branch.c             | 12 ++++++++----
 t/t3200-branch.sh            | 16 +++++++++++-----
 t/t3203-branch-output.sh     | 24 ++++++++++++++++++++++--
 4 files changed, 45 insertions(+), 13 deletions(-)

diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.txt
index 0cd87ddeff..7d18dffc4b 100644
--- a/Documentation/git-branch.txt
+++ b/Documentation/git-branch.txt
@@ -26,8 +26,10 @@ DESCRIPTION
 -----------
 
 If `--list` is given, or if there are no non-option arguments, existing
-branches are listed; the current branch will be highlighted with an
-asterisk.  Option `-r` causes the remote-tracking branches to be listed,
+branches are listed; the current branch will be highlighted in green and
+marked with an asterisk.  Any branches checked out in linked worktrees will
+be highlighted in cyan and marked with a plus sign. Option `-r` causes the
+remote-tracking branches to be listed,
 and option `-a` shows both local and remote branches. If a `<pattern>`
 is given, it is used as a shell wildcard to restrict the output to
 matching branches. If multiple patterns are given, a branch is shown if
diff --git a/builtin/branch.c b/builtin/branch.c
index 4c83055730..350b039063 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..88719cc02c 100755
--- a/t/t3200-branch.sh
+++ b/t/t3200-branch.sh
@@ -202,18 +202,22 @@ test_expect_success 'git branch -M baz bam should succeed when baz is checked ou
 	git worktree add -f bazdir2 baz &&
 	git branch -M baz bam &&
 	test $(git -C bazdir rev-parse --abbrev-ref HEAD) = bam &&
-	test $(git -C bazdir2 rev-parse --abbrev-ref HEAD) = bam
+	test $(git -C bazdir2 rev-parse --abbrev-ref HEAD) = bam &&
+	rm -r bazdir bazdir2 &&
+	git worktree prune
 '
 
 test_expect_success 'git branch -M baz bam should succeed within a worktree in which baz is checked out' '
 	git checkout -b baz &&
-	git worktree add -f bazdir3 baz &&
+	git worktree add -f bazdir baz &&
 	(
-		cd bazdir3 &&
+		cd bazdir &&
 		git branch -M baz bam &&
 		test $(git rev-parse --abbrev-ref HEAD) = bam
 	) &&
-	test $(git rev-parse --abbrev-ref HEAD) = bam
+	test $(git rev-parse --abbrev-ref HEAD) = bam &&
+	rm -r bazdir &&
+	git worktree prune
 '
 
 test_expect_success 'git branch -M master should work when master is checked out' '
@@ -774,7 +778,9 @@ test_expect_success 'test deleting branch without config' '
 test_expect_success 'deleting currently checked out branch fails' '
 	git worktree add -b my7 my7 &&
 	test_must_fail git -C my7 branch -d my7 &&
-	test_must_fail git branch -d my7
+	test_must_fail git branch -d my7 &&
+	rm -r my7 &&
+	git worktree prune
 '
 
 test_expect_success 'test --track without .fetch entries' '
diff --git a/t/t3203-branch-output.sh b/t/t3203-branch-output.sh
index be55148930..ceb74e0826 100755
--- a/t/t3203-branch-output.sh
+++ b/t/t3203-branch-output.sh
@@ -136,11 +136,13 @@ test_expect_success 'git branch `--show-current` works properly with worktrees'
 	branch-two
 	EOF
 	git checkout branch-one &&
-	git worktree add worktree branch-two &&
+	git worktree add worktree_dir branch-two &&
 	{
 		git branch --show-current &&
-		git -C worktree branch --show-current
+		git -C worktree_dir branch --show-current
 	} >actual &&
+	rm -r worktree_dir &&
+	git worktree prune &&
 	test_cmp expect actual
 '
 
@@ -284,6 +286,24 @@ test_expect_success 'git branch --format option' '
 	test_i18ncmp expect actual
 '
 
+test_expect_success 'worktree colors correct' '
+	cat >expect <<-EOF &&
+	* <GREEN>(HEAD detached from fromtag)<RESET>
+	  ambiguous<RESET>
+	  branch-one<RESET>
+	+ <CYAN>branch-two<RESET>
+	  master<RESET>
+	  ref-to-branch<RESET> -> branch-one
+	  ref-to-remote<RESET> -> origin/branch-one
+	EOF
+	git worktree add worktree_dir branch-two &&
+	git branch --color >actual.raw &&
+	rm -r worktree_dir &&
+	git worktree prune &&
+	test_decode_color <actual.raw >actual &&
+	test_cmp expect actual
+'
+
 test_expect_success "set up color tests" '
 	echo "<RED>master<RESET>" >expect.color &&
 	echo "master" >expect.bare &&
-- 
2.14.2


  parent reply	other threads:[~2019-03-16  1:38 UTC|newest]

Thread overview: 125+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <"<CAC05386q2iGoiJ_fRgwoOTF23exEN2D1+oh4VjajEvYQ58O1TQ@mail.gmail.com>
2018-09-27 15:13 ` [PATCH] branch: colorize branches checked out in a linked working tree the same way as the current branch is colorized Nickolai Belakovski
2018-09-27 15:33   ` Ævar Arnfjörð Bjarmason
2018-09-27 17:46     ` Nickolai Belakovski
     [not found]     ` <CAC05387S9P+w8yqqcjkQDnURYSgQmqtukxS4KvqJu-kDA+_o0g@mail.gmail.com>
2018-09-27 17:59       ` Ævar Arnfjörð Bjarmason
2018-10-02 20:41         ` Johannes Schindelin
2018-09-27 17:58   ` Duy Nguyen
2018-09-27 18:17   ` Jeff King
2018-09-27 18:39     ` Nickolai Belakovski
2018-09-27 18:51       ` Jeff King
2018-09-27 19:28     ` Rafael Ascensão
2018-09-27 19:35       ` Jeff King
2018-09-27 19:41         ` Jeff King
2018-09-27 21:22           ` Junio C Hamano
2018-09-28  1:05             ` Jeff King
2018-09-28  1:28               ` Junio C Hamano
2018-09-27 21:35         ` Rafael Ascensão
2018-09-28  1:07           ` Jeff King
2018-09-27 20:02       ` Ævar Arnfjörð Bjarmason
2018-09-27 20:16         ` Nickolai Belakovski
2018-09-27 20:40           ` Rafael Ascensão
2018-11-11 23:58             ` [PATCH v2 0/2] refactoring branch colorization to ref-filter nbelakovski
2018-11-11 23:58               ` [PATCH v2 1/2] ref-filter: add worktree atom nbelakovski
2018-11-12 10:11                 ` Junio C Hamano
2018-11-12 12:22                   ` Jeff King
2018-11-13  1:38                     ` Junio C Hamano
2018-11-21 14:05                       ` Nickolai Belakovski
2018-11-21 14:08                         ` Jeff King
2018-11-12 12:23                 ` Jeff King
2018-11-11 23:58               ` [PATCH v2 2/2] branch: Mark and colorize a branch differently if it is checked out in a linked worktree nbelakovski
2018-11-12 10:20                 ` Junio C Hamano
2018-11-12 12:14                   ` Jeff King
2018-11-12 18:07                     ` Rafael Ascensão
2018-11-13  1:45                       ` Junio C Hamano
2018-11-13 14:49                       ` Jeff King
2018-11-21 14:07                         ` Nickolai Belakovski
2018-12-16 21:57               ` [PATCH v3 0/3] nbelakovski
2018-12-16 21:57                 ` [PATCH v3 1/3] ref-filter: add worktreepath atom nbelakovski
2018-12-18 17:22                   ` Jeff King
2018-12-20  7:09                     ` Nickolai Belakovski
2018-12-20 14:59                       ` Jeff King
2018-12-24  8:47                         ` [PATCH v4 0/3] nbelakovski
2018-12-24  8:47                           ` [PATCH v4 1/3] ref-filter: add worktreepath atom nbelakovski
2019-01-03  5:40                             ` Jeff King
2019-01-03  9:31                               ` Eric Sunshine
2018-12-24  8:47                           ` [PATCH v4 2/3] branch: Mark and color a branch differently if it is checked out in a linked worktree nbelakovski
2018-12-24  8:47                           ` [PATCH v4 3/3] branch: Add an extra verbose output displaying worktree path for refs " nbelakovski
2019-01-03  5:42                             ` Jeff King
2019-01-03  5:22                           ` [PATCH v4 0/3] Jeff King
2018-12-16 21:57                 ` [PATCH v3 2/3] branch: Mark and color a branch differently if it is checked out in a linked worktree nbelakovski
2018-12-16 21:57                 ` [PATCH v3 3/3] branch: Add an extra verbose output displaying worktree path for refs " nbelakovski
2018-12-18 17:25                 ` [PATCH v3 0/3] Jeff King
2019-01-06  0:26   ` [PATCH v5 0/3] nbelakovski
2019-01-06  0:26     ` [PATCH v5 1/3] ref-filter: add worktreepath atom nbelakovski
2019-01-07 18:20       ` Junio C Hamano
2019-01-18 22:17         ` Nickolai Belakovski
2019-01-18 22:20           ` Nickolai Belakovski
2019-01-06  0:26     ` [PATCH v5 2/3] branch: Mark and color a branch differently if it is checked out in a linked worktree nbelakovski
2019-01-07 19:04       ` Junio C Hamano
2019-01-10 21:42         ` Philip Oakley
2019-01-13  1:41           ` Nickolai Belakovski
2019-01-14 18:18             ` Junio C Hamano
2019-01-18 22:18               ` Nickolai Belakovski
2019-01-06  0:26     ` [PATCH v5 3/3] branch: Add an extra verbose output displaying worktree path for refs " nbelakovski
2019-01-07 19:09       ` Junio C Hamano
2019-01-22 23:22   ` [PATCH v6 0/3] nbelakovski
2019-01-22 23:22     ` [PATCH v6 1/3] ref-filter: add worktreepath atom nbelakovski
2019-01-23 18:57       ` Junio C Hamano
2019-01-23 23:34         ` Nickolai Belakovski
2019-01-24 18:26           ` Junio C Hamano
2019-01-24 18:32             ` Jeff King
2019-01-24 19:27               ` Junio C Hamano
2019-01-24 19:34                 ` Jeff King
2019-01-24 19:30               ` Junio C Hamano
2019-01-24 21:26                 ` Jeff King
2019-01-31 20:53                   ` Nickolai Belakovski
2019-01-31 23:21                     ` Jeff King
2019-01-31 21:42                   ` Junio C Hamano
2019-01-31 23:20                     ` Jeff King
2019-01-22 23:23     ` [PATCH v6 2/3] branch: Mark and color a branch differently if it is checked out in a linked worktree nbelakovski
2019-01-22 23:23     ` [PATCH v6 3/3] branch: Add an extra verbose output displaying worktree path for refs " nbelakovski
2019-02-01 22:04   ` [PATCH v7 0/3] nbelakovski
2019-02-01 22:28     ` Junio C Hamano
2019-02-01 23:31       ` Nickolai Belakovski
2019-02-01 22:04   ` [PATCH v7 1/3] ref-filter: add worktreepath atom nbelakovski
2019-02-01 22:20     ` Eric Sunshine
2019-02-01 22:41       ` Nickolai Belakovski
2019-02-04 18:14         ` Junio C Hamano
2019-02-18 10:09           ` Nickolai Belakovski
2019-02-01 22:31     ` Junio C Hamano
2019-02-01 22:04   ` [PATCH v7 2/3] branch: Mark and color a branch differently if it is checked out in a linked worktree nbelakovski
2019-02-01 22:34     ` Junio C Hamano
2019-02-01 23:12       ` Nickolai Belakovski
2019-02-04 18:18         ` Junio C Hamano
2019-02-01 22:04   ` [PATCH v7 3/3] branch: Add an extra verbose output displaying worktree path for refs " nbelakovski
2019-02-01 22:27     ` Eric Sunshine
2019-02-01 22:45       ` Nickolai Belakovski
2019-02-01 22:53     ` Junio C Hamano
2019-02-01 23:06       ` Nickolai Belakovski
2019-02-02  1:22         ` [RFC] Sample of test for git branch -vv nbelakovski
2019-02-19  8:31   ` [PATCH v8 0/3] nbelakovski
2019-02-19  8:31     ` [PATCH v8 1/3] ref-filter: add worktreepath atom nbelakovski
2019-02-19  8:31     ` [PATCH v8 2/3] branch: update output to include worktree info nbelakovski
2019-02-21 12:44       ` Jeff King
2019-03-14  5:45         ` Nickolai Belakovski
2019-02-19  8:31     ` [PATCH v8 3/3] branch: add worktree info on verbose output nbelakovski
2019-02-21 12:59       ` Jeff King
2019-03-14  5:58         ` Nickolai Belakovski
2019-03-18  2:12           ` Junio C Hamano
2019-02-21 12:36     ` [PATCH v8 0/3] Jeff King
2019-03-14  6:10       ` Nickolai Belakovski
2019-03-16  1:38   ` [PATCH v9 0/3] nbelakovski
2019-03-16  1:38     ` [PATCH v9 1/3] ref-filter: add worktreepath atom nbelakovski
2019-03-16  1:38     ` nbelakovski [this message]
2019-03-16  1:38     ` [PATCH v9 3/3] branch: add worktree info on verbose output nbelakovski
2019-03-18 12:10       ` SZEDER Gábor
2019-03-18  5:30     ` [PATCH v9 0/3] Junio C Hamano
2019-04-29  5:19   ` [PATCH v10 0/3] nbelakovski
2019-04-29  5:19     ` [PATCH v10 1/3] ref-filter: add worktreepath atom nbelakovski
2019-04-29  5:19     ` [PATCH v10 2/3] branch: update output to include worktree info nbelakovski
2019-04-29  5:19     ` [PATCH v10 3/3] branch: add worktree info on verbose output nbelakovski
2019-04-29 14:12     ` [PATCH v10 0/3] SZEDER Gábor
2019-04-29 19:27       ` Nickolai Belakovski
2019-04-29 20:57     ` Johannes Schindelin
2019-04-29 21:33       ` Nickolai Belakovski
     [not found]       ` <CAC05385Mc7pqiCd5mb+1c4WM+v7K=h=GMHuvkw9xizhRFJXXBA@mail.gmail.com>
2019-04-30 21:46         ` Johannes Schindelin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190316013807.38756-3-nbelakovski@gmail.com \
    --to=nbelakovski@gmail.com \
    --cc=avarab@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=peff@peff.net \
    --cc=rafa.almas@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).