From patchwork Sun Dec 16 21:57:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nickolai Belakovski X-Patchwork-Id: 10732583 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 3DE9314E5 for ; Sun, 16 Dec 2018 21:58:14 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2A3AE28734 for ; Sun, 16 Dec 2018 21:58:14 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1E6F52899C; Sun, 16 Dec 2018 21:58:14 +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 836C428734 for ; Sun, 16 Dec 2018 21:58:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730975AbeLPV6M (ORCPT ); Sun, 16 Dec 2018 16:58:12 -0500 Received: from mail-pf1-f196.google.com ([209.85.210.196]:33395 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730853AbeLPV6M (ORCPT ); Sun, 16 Dec 2018 16:58:12 -0500 Received: by mail-pf1-f196.google.com with SMTP id c123so5362312pfb.0 for ; Sun, 16 Dec 2018 13:58: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=Ye0Cw6c8HkunQ928wrNVVJ41+b0yHraXF4fYUfXvPyE=; b=NbyIjEFc+aDu98Qke6vK7ypMiuRK1Alg46Pvkt8tHbfS1EeD3DeRGHkizZBqdn5Uvo /n5SbqSEspmwmvWLx1likvr16nHAc/h43Dr2LKGoBYaoY/Liba4+WLWJyHyHSYymzS5W X5LFGbF8nrkuvt9vdD+Zb+U46EdGAO5tmpfXMlrhS5L/fWX/+WR4fSvzlkDQpB+QGZ7K lTY7ahTEE6YrLQZbsceQBGUxSD7cHPClGppsTPQd+3+T7A/sZK+ds1plAWQoeVVLZ8e9 wETxrnVIW0XxdZqcAqcmQxfGp67XeJ0zNAXfOlmZJDZC3vV5VDV9VXjcJtEAUpll+P6c XNCw== 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=Ye0Cw6c8HkunQ928wrNVVJ41+b0yHraXF4fYUfXvPyE=; b=XbHgBM58c5oan4Q291QM1QqI9gYb+0K9yb8KOEB/W3GfizTm7r+osyLrwjlc0RFrER 5blN5Kr9LZn9wGar+lu6ps7TuRAuHtEL1Rt+nHbTRuEzZ2BTwjN4Sd/V2Lv1tv3rF6sR Rplh452eND7cRjFIkE6zhB7qXet4G6hC3heOE6JPxx13jdAg/dR79MVAG30UJeDY2qsA gFdHr7bnbjGxifnrYIPu72YjvFesPvxcXgT34PozPb3E7Egkz/GiHHhe16VU4Qa+Ez1i OQcMFoSTZ3rAutysUsBErIOIR6A5lg+UoQs7zqQY0oAuHQWvrwI5t/uZtr8tVIRp82fn eExg== X-Gm-Message-State: AA+aEWaD7YaiCIWjbOP4sv/RVQBOIkyggOiMCYlxnGpqHlc1V1ICnIAG kymZ1I6YsRyQvaX7B80xMXq4MC45 X-Google-Smtp-Source: AFSGD/WwTnU7CJ4l2jmjxGp0EtzRsiZq+1VZUh5heC54H8oTKhckq3tzdsvvEXgbdMVKSEmctfsAxQ== X-Received: by 2002:a63:2c82:: with SMTP id s124mr9839325pgs.73.1544997490766; Sun, 16 Dec 2018 13:58: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 k191sm12736056pgd.9.2018.12.16.13.58.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 16 Dec 2018 13:58: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 v3 1/3] ref-filter: add worktreepath atom Date: Sun, 16 Dec 2018 13:57:57 -0800 Message-Id: <20181216215759.24011-2-nbelakovski@gmail.com> X-Mailer: git-send-email 2.14.2 In-Reply-To: <20181216215759.24011-1-nbelakovski@gmail.com> References: <20181111235831.44824-1-nbelakovski@gmail.com> <20181216215759.24011-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 proving 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 | 4 +++ ref-filter.c | 70 ++++++++++++++++++++++++++++++++++++++ t/t6302-for-each-ref-filter.sh | 15 ++++++++ 3 files changed, 89 insertions(+) diff --git a/Documentation/git-for-each-ref.txt b/Documentation/git-for-each-ref.txt index 901faef1bf..9590f7beab 100644 --- a/Documentation/git-for-each-ref.txt +++ b/Documentation/git-for-each-ref.txt @@ -209,6 +209,10 @@ 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. ' ' 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..e8713484a1 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,12 @@ static struct expand_data { struct object_info info; } oi, oi_deref; +struct reftoworktreeinfo_entry { + struct hashmap_entry ent; // must be the first member! + char * ref; // key into map + struct worktree * wt; +}; + /* * An atom is a valid field atom listed below, possibly prefixed with * a "*" to denote deref_tag(). @@ -114,6 +124,7 @@ static struct used_atom { } objectname; struct refname_atom refname; char *head; + struct hashmap reftoworktreeinfo_map; } u; } *used_atom; static int used_atom_cnt, need_tagged, need_symref; @@ -420,6 +431,31 @@ static int head_atom_parser(const struct ref_format *format, struct used_atom *a return 0; } +static int worktree_atom_parser(const struct ref_format *format, + struct used_atom *atom, + const char *arg, + struct strbuf *unused_err) +{ + int i; + worktrees = get_worktrees(0); + + hashmap_init(&(atom->u.reftoworktreeinfo_map), NULL, NULL, 0); + + for (i = 0; worktrees[i]; i++) { + if (worktrees[i]->head_ref) { + struct reftoworktreeinfo_entry *entry; + FLEXPTR_ALLOC_STR(entry, ref, worktrees[i]->head_ref); + hashmap_entry_init(entry, strhash(entry->ref)); + + entry->wt = worktrees[i]; + + hashmap_add(&(atom->u.reftoworktreeinfo_map), entry); + } + } + + return 0; +} + static struct { const char *name; info_source source; @@ -461,6 +497,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 +1537,28 @@ static int get_object(struct ref_array_item *ref, int deref, struct object **obj return 0; } +static const char * get_worktree_info(const struct used_atom *atom, const struct ref_array_item *ref) +{ + struct strbuf val = STRBUF_INIT; + struct reftoworktreeinfo_entry * entry; + struct reftoworktreeinfo_entry * lookup_result; + + FLEXPTR_ALLOC_STR(entry, ref, ref->refname); + hashmap_entry_init(entry, strhash(entry->ref)); + lookup_result = hashmap_get(&(atom->u.reftoworktreeinfo_map), entry, NULL); + free(entry); + + if (lookup_result) + { + if (!strncmp(atom->name, "worktreepath", strlen(atom->name))) + strbuf_addstr(&val, lookup_result->wt->path); + } + else + strbuf_addstr(&val, " "); + + return strbuf_detach(&val, NULL); +} + /* * Parse the object referred by ref, and grab needed value. */ @@ -1537,6 +1596,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_info(atom, ref); + continue; + } else if (starts_with(name, "symref")) refname = get_symref(atom, ref); else if (starts_with(name, "upstream")) { @@ -2013,7 +2076,14 @@ void ref_array_clear(struct ref_array *array) int i; for (i = 0; i < used_atom_cnt; i++) + { + if (!strncmp(used_atom[i].name, "worktreepath", strlen("worktreepath"))) + { + hashmap_free(&(used_atom[i].u.reftoworktreeinfo_map), 1); + free_worktrees(worktrees); + } free((char *)used_atom[i].name); + } FREE_AND_NULL(used_atom); used_atom_cnt = 0; for (i = 0; i < array->nr; i++) diff --git a/t/t6302-for-each-ref-filter.sh b/t/t6302-for-each-ref-filter.sh index fc067ed672..add70a4c3e 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' ' + cat >expect <<-\EOF && + master: checked out in a worktree + master_worktree: checked out in a worktree + side: not checked out in a worktree + EOF + git for-each-ref --format="%(refname:short): %(if)%(worktreepath)%(then)checked out in a worktree%(else)not checked out in a worktree%(end)" refs/heads/ >actual && + test_cmp expect actual +' + test_done From patchwork Sun Dec 16 21:57:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nickolai Belakovski X-Patchwork-Id: 10732585 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 D81A614E5 for ; Sun, 16 Dec 2018 21:58:16 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C6FB928734 for ; Sun, 16 Dec 2018 21:58:16 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BB5EA2899C; Sun, 16 Dec 2018 21:58:16 +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 3A09B28734 for ; Sun, 16 Dec 2018 21:58:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730853AbeLPV6P (ORCPT ); Sun, 16 Dec 2018 16:58:15 -0500 Received: from mail-pf1-f178.google.com ([209.85.210.178]:43100 "EHLO mail-pf1-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730977AbeLPV6O (ORCPT ); Sun, 16 Dec 2018 16:58:14 -0500 Received: by mail-pf1-f178.google.com with SMTP id w73so5337221pfk.10 for ; Sun, 16 Dec 2018 13:58: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=04gmjA1tsZAFBadJev/euijJH2ZaHjDOhtyaoQxntNw=; b=ov9l2a6vj3EYekhI5TwBho36H6Fu3JJ+hCMdokwCO/Ekndn5Jo4LHmkNQ/pVnNw5Gn 54Iu2oiBZ56uc5UR6ZPl3/IBmr9bMCgm6lg2MI+YLpEQ/3FVxFalUz4QFdHhqlsr8k86 aenLYci3rWOKoKXOA+2MHvaf5M6hJrWnAF3QvKlRxj0dcrUIv0ekJNwg23lkRaHCyjGR aJIn3utEqbltC/vSwAk1qj761eLb+lXa6/Mw3rpw0kM4Xmz+Fiao6hyiTNm/4VpdF5nK QcjfhVnLv6d9eUOTwb76vnBiUdb3PFDGSB912OSvf8khJWeeqawCXoqHJPruF2tm+yA/ pFaQ== 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=NXCGI4X5zFM/0msbIi333r7F1m7RQZcqiIpnIOGn80T6Fl2krzyqXzxIhyQSWS1Hs3 QwoNyxNULLaFj2uBtWXBA59+4NmMw9PLI1ch0oZ9w/ipMXFMKYPFgCECddBmzqOVRmyP bEmiwFFR7OFx68ygq5Lzy2/CMKAJl2l2Yb8+HAvlCTeYAeGbMYPuR8CI0ZQWUgovC0QK h4CJXhFOSlGcMfm3h2uFrpOwVKYDEe+T1BPDkZeCH77RTl2f0+uBd9yoEm9u1yNtmTLc nB6A5u2fPZpabxGGUJe1AvH2v9qQ5eTAjiBTEhfoq8yPJfHbEUKcz14rXuYxogprQKtu /QaQ== X-Gm-Message-State: AA+aEWZsRpJIZApZBH+NahnInWF76/LjWAXRDUO1CBIHEO6zQl6fXw0D og5z4WtiE9G/wy612DKFJ983FmMk X-Google-Smtp-Source: AFSGD/Vc6faj79QCTrwyWTVmPW7Rrlkiqaqpxaze8d5ukhQQ12BRdtoY6SMIm/hNK+YTJY2iZmbu+w== X-Received: by 2002:a63:557:: with SMTP id 84mr9772466pgf.411.1544997492766; Sun, 16 Dec 2018 13:58: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 k191sm12736056pgd.9.2018.12.16.13.58.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 16 Dec 2018 13:58: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 v3 2/3] branch: Mark and color a branch differently if it is checked out in a linked worktree Date: Sun, 16 Dec 2018 13:57:58 -0800 Message-Id: <20181216215759.24011-3-nbelakovski@gmail.com> X-Mailer: git-send-email 2.14.2 In-Reply-To: <20181216215759.24011-1-nbelakovski@gmail.com> References: <20181111235831.44824-1-nbelakovski@gmail.com> <20181216215759.24011-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 Sun Dec 16 21:57:59 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nickolai Belakovski X-Patchwork-Id: 10732587 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 E8D8514E5 for ; Sun, 16 Dec 2018 21:58:18 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D854E28734 for ; Sun, 16 Dec 2018 21:58:18 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CCCC12899C; Sun, 16 Dec 2018 21:58:18 +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 84F7C28734 for ; Sun, 16 Dec 2018 21:58:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731005AbeLPV6R (ORCPT ); Sun, 16 Dec 2018 16:58:17 -0500 Received: from mail-pf1-f195.google.com ([209.85.210.195]:42510 "EHLO mail-pf1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730977AbeLPV6Q (ORCPT ); Sun, 16 Dec 2018 16:58:16 -0500 Received: by mail-pf1-f195.google.com with SMTP id 64so5338060pfr.9 for ; Sun, 16 Dec 2018 13:58:15 -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=FJbDoBnwcjGcGe93VBv1EW6nvhiD/4X+puF7QbGBXJtRde1FvybEbt+9Lc15PJo4BS OLe1E0E23vr46p9WyN88z1RT9uKsGrbjBLFOBJUtPbD1NKqmo+vq33rf8uabfffB5CNt C6WvAEJ+jnejZkbNwCD66KaEIfNyl91KND5e55TOELzzAdg0Np4ucoVMen1HgF7TonjU eWLHHbxHHmHcRmU+ijEoM+W4nkRryurbwCsrlCVqjg6sJdB2oC1oMD2MZYZ3QjM8o9iz WunUnCPKODKZgIJDfiGXtVM5ix9gLmLBZelqXZ/iCevMilyBDP3EnGb4r219aJJ1Xb4v S8rA== 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=IPjgxx+c996zw2a5mKl7KT6C1gQ1zY4YBDRBJgyiVfvk2D93J9WWfQoesxNNglFhVg N1UlHhsrjxWGLa5N6l7sNu0AKh3TzoGOzs9vhCKEdR2xII3UbyQirzsZNTWMkIedFP7G 3Bh3DM7yfnvRuy0geAY7JsNXZdOjWx4Te+IiIwOS54nyV92ghxEWhfJ0MCOj0VMaCRz2 yXJtDV4IXr8jxo+2c2ZhoTBPu3NcXaXX/mSjQmeGpMnWwHFtI3MVsCbYwX4sI8efpHEz gRzSkFg0Lyw8AK5h9NH/uePRHcwnrvVM5UySBm9qYYz5+wKDbwUEdYNMrtX+xgwGhnY1 jbFg== X-Gm-Message-State: AA+aEWYXDzgiNUoxSAPKZwj61VRxnbR/2oEI8jpEvaC3YK96KIcaZlHw MazTTFwV+tIstKGclHtOiA8bRuZx X-Google-Smtp-Source: AFSGD/XJ55LVquN3wayh/xFjmnUUcVGquPtAfEKSvikmJd3k9jRduOglnans2V5iRACp5fXOHVyUqw== X-Received: by 2002:a63:a553:: with SMTP id r19mr10013533pgu.53.1544997494710; Sun, 16 Dec 2018 13:58:14 -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 k191sm12736056pgd.9.2018.12.16.13.58.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 16 Dec 2018 13:58:14 -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 v3 3/3] branch: Add an extra verbose output displaying worktree path for refs checked out in a linked worktree Date: Sun, 16 Dec 2018 13:57:59 -0800 Message-Id: <20181216215759.24011-4-nbelakovski@gmail.com> X-Mailer: git-send-email 2.14.2 In-Reply-To: <20181216215759.24011-1-nbelakovski@gmail.com> References: <20181111235831.44824-1-nbelakovski@gmail.com> <20181216215759.24011-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)",