From patchwork Mon Dec 24 08:47:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nickolai Belakovski X-Patchwork-Id: 10742075 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 F072713B5 for ; Mon, 24 Dec 2018 08:48:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E0E1126E47 for ; Mon, 24 Dec 2018 08:48:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D50DD283B2; Mon, 24 Dec 2018 08:48:10 +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 47CF826E47 for ; Mon, 24 Dec 2018 08:48:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726905AbeLXIsJ (ORCPT ); Mon, 24 Dec 2018 03:48:09 -0500 Received: from mail-pf1-f196.google.com ([209.85.210.196]:43685 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726788AbeLXIsI (ORCPT ); Mon, 24 Dec 2018 03:48:08 -0500 Received: by mail-pf1-f196.google.com with SMTP id w73so5558802pfk.10 for ; Mon, 24 Dec 2018 00:48:08 -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=WwTD7BGFzoqOdBKlsUL3EGdIHTJsTF4mKcWcWx06BjQ=; b=bp2m3PsLAfczjo94Dt0sXZd+fFgDku7i5EWeWjgJbOB5TIvZIxCSn8XkkyUCY2GK/K WIsVOQCfr1g4aesPck0LGvVukO8+FDJDKgHyM21nau2Hxj1GiOD+H3UC4a6b10QfkBxC 9QQWu+XO5il/9eqqzhBmqRyXBkvIDhCeRDDSqsj2WBELkhozKdDJSAYL+A6H/2Yyijyq ELdC/8KesenPy3NTruLv1FY4cT/lKML2pBPIZrTE9InLm7JGc7p/UP156zT77bexeudv GlTpZnH1NHeNMLsycllk7wk0BqOZwQtgzhz4LhLqOkmSup9XDypuwGMv1nR7YNnAcC4g mkDQ== 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=WwTD7BGFzoqOdBKlsUL3EGdIHTJsTF4mKcWcWx06BjQ=; b=S5cpl1MH3wSkqv4+w5AKkLt7ScqlaP86f+v0IPp2HyB+XVfTc6gHC9S+rM49kY0LQO PXuTISL2eCc6SBAGi1ckk7bzDjQ0MbmhmL0RzzBzfhVmIDpRL22f29cVKhX08UUCzRNM I6OIgBZJ3oiiWvBLIHREB7WWDxhk174Qo8WOZlYfTt7jNAOaSoOLTqL/ZSVzOIxyoiSg dQEQc0jk2hbQMyuw5x2W2sEwr7PVL+PKc9UfyurQ70O0S1jTio8Fp0cqfQ76hm616PD2 JYnvxkxvzRnkhFYjl8d2pTkJH2kbR7HEXSgaoAZ0M495GmpjRciRbur2XoMNqxRUiWg1 I68Q== X-Gm-Message-State: AJcUukebzzkYdh/Na+t/7KIsb0YmSB2CFN0X3PDuhLXSGJTUvH7YEA3F hjkPbFEE2HY7UHO+979z1ehs9axj X-Google-Smtp-Source: ALg8bN4JizuElPbpFsjxuccD3CfQ0W1lf+z0pwdqs9Epo/WX0bHrB5f3zdVDvH2t1gjgdFSKGG8hOQ== X-Received: by 2002:a63:4246:: with SMTP id p67mr11549023pga.335.1545641287646; Mon, 24 Dec 2018 00:48:07 -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.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 24 Dec 2018 00:48:07 -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 1/3] ref-filter: add worktreepath atom Date: Mon, 24 Dec 2018 00:47:54 -0800 Message-Id: <20181224084756.49952-2-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 X-Virus-Scanned: ClamAV using ClamSMTP From: Nickolai Belakovski Add an atom providing the path of the linked worktree where this ref is checked out, if it is checked out in any linked worktrees, and empty string otherwise. --- Documentation/git-for-each-ref.txt | 5 +++ ref-filter.c | 72 +++++++++++++++++++++++++++++++++++++- t/t6302-for-each-ref-filter.sh | 15 ++++++++ 3 files changed, 91 insertions(+), 1 deletion(-) diff --git a/Documentation/git-for-each-ref.txt b/Documentation/git-for-each-ref.txt index 901faef1bf..caba1c23b8 100644 --- a/Documentation/git-for-each-ref.txt +++ b/Documentation/git-for-each-ref.txt @@ -209,6 +209,11 @@ symref:: `:lstrip` and `:rstrip` options in the same way as `refname` above. +worktreepath:: + The absolute path to the worktree in which the ref is checked + out, if it is checked out in any linked worktree. Empty string + otherwise. + In addition to the above, for commit and tag objects, the header field names (`tree`, `parent`, `object`, `type`, and `tag`) can be used to specify the value in the header field. diff --git a/ref-filter.c b/ref-filter.c index 5de616befe..240e7b80f8 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -20,6 +20,8 @@ #include "commit-slab.h" #include "commit-graph.h" #include "commit-reach.h" +#include "worktree.h" +#include "hashmap.h" static struct ref_msg { const char *gone; @@ -34,6 +36,8 @@ static struct ref_msg { "ahead %d, behind %d" }; +static struct worktree **worktrees; + void setup_ref_filter_porcelain_msg(void) { msgs.gone = _("gone"); @@ -75,6 +79,11 @@ static struct expand_data { struct object_info info; } oi, oi_deref; +struct ref_to_worktree_entry { + struct hashmap_entry ent; /* must be the first member! */ + struct worktree *wt; /* key is wt->head_ref */ +}; + /* * An atom is a valid field atom listed below, possibly prefixed with * a "*" to denote deref_tag(). @@ -116,7 +125,8 @@ static struct used_atom { char *head; } u; } *used_atom; -static int used_atom_cnt, need_tagged, need_symref; +static int used_atom_cnt, need_tagged, need_symref, has_worktree; +static struct hashmap ref_to_worktree_map; /* * Expand string, append it to strbuf *sb, then return error code ret. @@ -420,6 +430,42 @@ static int head_atom_parser(const struct ref_format *format, struct used_atom *a return 0; } +static int worktree_hashmap_cmpfnc(const void *unused_lookupdata, const void *existing_hashmap_entry_to_test, + const void *unused_key, const void *keydata_aka_refname) +{ + const struct ref_to_worktree_entry *e = existing_hashmap_entry_to_test; + return strcmp(e->wt->head_ref, keydata_aka_refname); +} + +static int worktree_atom_parser(const struct ref_format *format, + struct used_atom *atom, + const char *arg, + struct strbuf *unused_err) +{ + int i; + if (has_worktree) + return 0; + + worktrees = get_worktrees(0); + + hashmap_init(&ref_to_worktree_map, worktree_hashmap_cmpfnc, NULL, 0); + + for (i = 0; worktrees[i]; i++) { + if (worktrees[i]->head_ref) { + struct ref_to_worktree_entry *entry; + entry = xmalloc(sizeof(*entry)); + entry->wt = worktrees[i]; + hashmap_entry_init(entry, strhash(worktrees[i]->head_ref)); + + hashmap_add(&ref_to_worktree_map, entry); + } + } + + has_worktree = 1; + + return 0; +} + static struct { const char *name; info_source source; @@ -461,6 +507,7 @@ static struct { { "flag", SOURCE_NONE }, { "HEAD", SOURCE_NONE, FIELD_STR, head_atom_parser }, { "color", SOURCE_NONE, FIELD_STR, color_atom_parser }, + { "worktreepath", SOURCE_NONE, FIELD_STR, worktree_atom_parser }, { "align", SOURCE_NONE, FIELD_STR, align_atom_parser }, { "end", SOURCE_NONE }, { "if", SOURCE_NONE, FIELD_STR, if_atom_parser }, @@ -1500,6 +1547,20 @@ static int get_object(struct ref_array_item *ref, int deref, struct object **obj return 0; } +static const char *get_worktree_path(const struct used_atom *atom, const struct ref_array_item *ref) +{ + struct strbuf val = STRBUF_INIT; + struct hashmap_entry entry; + struct ref_to_worktree_entry *lookup_result; + + hashmap_entry_init(&entry, strhash(ref->refname)); + lookup_result = hashmap_get(&ref_to_worktree_map, &entry, ref->refname); + + strbuf_addstr(&val, lookup_result ? lookup_result->wt->path : ""); + + return strbuf_detach(&val, NULL); +} + /* * Parse the object referred by ref, and grab needed value. */ @@ -1537,6 +1598,10 @@ static int populate_value(struct ref_array_item *ref, struct strbuf *err) if (starts_with(name, "refname")) refname = get_refname(atom, ref); + else if (starts_with(name, "worktreepath")) { + v->s = get_worktree_path(atom, ref); + continue; + } else if (starts_with(name, "symref")) refname = get_symref(atom, ref); else if (starts_with(name, "upstream")) { @@ -2020,6 +2085,11 @@ void ref_array_clear(struct ref_array *array) free_array_item(array->items[i]); FREE_AND_NULL(array->items); array->nr = array->alloc = 0; + if (has_worktree) + { + hashmap_free(&ref_to_worktree_map, 1); + free_worktrees(worktrees); + } } static void do_merge_filter(struct ref_filter_cbdata *ref_cbdata) diff --git a/t/t6302-for-each-ref-filter.sh b/t/t6302-for-each-ref-filter.sh index fc067ed672..d70517a6ae 100755 --- a/t/t6302-for-each-ref-filter.sh +++ b/t/t6302-for-each-ref-filter.sh @@ -441,4 +441,19 @@ test_expect_success '--merged is incompatible with --no-merged' ' test_must_fail git for-each-ref --merged HEAD --no-merged HEAD ' +test_expect_success '"add" a worktree' ' + mkdir worktree_dir && + git worktree add -b master_worktree worktree_dir master +' + +test_expect_success 'validate worktree atom' ' + { + echo master: $PWD && + echo master_worktree: $PWD/worktree_dir && + echo side: not checked out + } > expect && + git for-each-ref --format="%(refname:short): %(if)%(worktreepath)%(then)%(worktreepath)%(else)not checked out%(end)" refs/heads/ >actual && + test_cmp expect actual +' + test_done From patchwork Mon Dec 24 08:47:55 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nickolai Belakovski X-Patchwork-Id: 10742077 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 146E76C5 for ; Mon, 24 Dec 2018 08:48:14 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 04A8D26E47 for ; Mon, 24 Dec 2018 08:48:14 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id ED2A6283B2; Mon, 24 Dec 2018 08:48:13 +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 6C85226E47 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 X-Virus-Scanned: ClamAV using ClamSMTP 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 && From patchwork Mon Dec 24 08:47:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nickolai Belakovski X-Patchwork-Id: 10742079 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 557066C5 for ; Mon, 24 Dec 2018 08:48:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 46CD326E47 for ; Mon, 24 Dec 2018 08:48:15 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3B562283B2; Mon, 24 Dec 2018 08:48:15 +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 E94C626E47 for ; Mon, 24 Dec 2018 08:48:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726918AbeLXIsO (ORCPT ); Mon, 24 Dec 2018 03:48:14 -0500 Received: from mail-pg1-f193.google.com ([209.85.215.193]:41326 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726913AbeLXIsO (ORCPT ); Mon, 24 Dec 2018 03:48:14 -0500 Received: by mail-pg1-f193.google.com with SMTP id m1so5362872pgq.8 for ; Mon, 24 Dec 2018 00:48:13 -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=XhC1SAWGvS243nhf21eDQu7vxRqmiTk0D1KP5SxjkmU=; b=E0KPzFx6CSWbe0l9PZbG2qIxc4MSl430MwTVOcs6E3lPFulD18AH1d8h8BtPP1WHz2 Cji0gGQvB7ijRVrjHoqwlwq1CMb1/pUavIyZzi9w0tnfR+qqFLZeVw3Uqbvm61n5fH2s Zm4nscWfsccvS3aam3cKPDLdfg5HRAsUgXles41+DEGEFR5/e07zTYy/LLG8z1NX/zMf K5cmIDU6QtWXy7K74f52AXrjvER6PDRIBJhMb7N6nO1ra7FtZnoYnIoUfW1jPvFzN3DA 0UcZtxLdbnDW3vHH8YRvqgk14e2fG2TZ31r5ua73BqJ3yWBnzfIkDvduPgSUuNLOrXie 7DIw== 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=XhC1SAWGvS243nhf21eDQu7vxRqmiTk0D1KP5SxjkmU=; b=fHqplnTmVDQFCQb9UR+SgskOn3vvLifZRYcWlLRisrUzGxFSHmJuOUDWK7aqH9rXQ4 Yp4Z0Vbqh4QqnG9k7h81Xw1Uq4nu9k0vVvauNHA3YZZ+K08SjBJeM/gpm964Sr/6Wugp o1BgYFp2b81dhE7lSmmfVuaLOlWUGoiApasudTL8C+EqWEZ0MOAEPPgboaPXtlYyMbAv u+YHidyDGNP9ZeNu0Knw4C49GN2c/d5gxBIDqyDV49JX6RdT+1xoUiej04O7en3yeJyF ETAzgPSUXMCS1UHRp2kF2KTynrnT+nW9C5fMawppQkDhHuG5OVIIrCxzvSOslv1FMcy+ iRRg== X-Gm-Message-State: AJcUukcKXT65RZseQ/X+lCocMVzAN9C9Qy/zWSnIi1bS4uuSx7PfoZ7f ecTYVlTT9aZ1nm4L03DtIX+03uzy X-Google-Smtp-Source: ALg8bN4b6S6iCm99ejluVI4RIGdTAIbWw9BExPwaNFvcsKAb1OwUlKDJHS0hw6BDh/VnyYUTtnWiWQ== X-Received: by 2002:a63:e615:: with SMTP id g21mr11844900pgh.290.1545641292989; Mon, 24 Dec 2018 00:48:12 -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.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 24 Dec 2018 00:48:12 -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 3/3] branch: Add an extra verbose output displaying worktree path for refs checked out in a linked worktree Date: Mon, 24 Dec 2018 00:47:56 -0800 Message-Id: <20181224084756.49952-4-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 X-Virus-Scanned: ClamAV using ClamSMTP From: Nickolai Belakovski --- builtin/branch.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/builtin/branch.c b/builtin/branch.c index 2a24153b78..56589a3684 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -366,6 +366,10 @@ static char *build_format(struct ref_filter *filter, int maxwidth, const char *r strbuf_addstr(&local, branch_get_color(BRANCH_COLOR_RESET)); strbuf_addf(&local, " %s ", obname.buf); + if (filter->verbose > 2) + strbuf_addf(&local, "%s%%(if:notequals=*)%%(HEAD)%%(then)%%(if)%%(worktreepath)%%(then)%%(worktreepath) %%(end)%%(end)%s", + branch_get_color(BRANCH_COLOR_WORKTREE), branch_get_color(BRANCH_COLOR_RESET)); + if (filter->verbose > 1) strbuf_addf(&local, "%%(if)%%(upstream)%%(then)[%s%%(upstream:short)%s%%(if)%%(upstream:track)" "%%(then): %%(upstream:track,nobracket)%%(end)] %%(end)%%(contents:subject)",