From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH v5 09/12] branch: add --column
Date: Sat, 4 Feb 2012 22:59:13 +0700 [thread overview]
Message-ID: <1328371156-4009-10-git-send-email-pclouds@gmail.com> (raw)
In-Reply-To: <1328371156-4009-1-git-send-email-pclouds@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
Documentation/config.txt | 4 +++
Documentation/git-branch.txt | 9 +++++++
Makefile | 2 +-
builtin/branch.c | 38 +++++++++++++++++++++++++++++--
t/t3200-branch.sh | 50 ++++++++++++++++++++++++++++++++++++++++++
5 files changed, 99 insertions(+), 4 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 5216598..c14db27 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -847,6 +847,10 @@ column.ui::
+
This option defaults to 'never'.
+column.branch::
+ Specify whether to output branch listing in `git branch` in columns.
+ See `column.ui` for details.
+
commit.status::
A boolean to enable/disable inclusion of status information in the
commit message template when using an editor to prepare the commit
diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.txt
index 0427e80..ba5cccb 100644
--- a/Documentation/git-branch.txt
+++ b/Documentation/git-branch.txt
@@ -10,6 +10,7 @@ SYNOPSIS
[verse]
'git branch' [--color[=<when>] | --no-color] [-r | -a]
[--list] [-v [--abbrev=<length> | --no-abbrev]]
+ [--column[=<options>] | --no-column]
[(--merged | --no-merged | --contains) [<commit>]] [<pattern>...]
'git branch' [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
'git branch' (-m | -M) [<oldbranch>] <newbranch>
@@ -107,6 +108,14 @@ OPTIONS
default to color output.
Same as `--color=never`.
+--column[=<options>]::
+--no-column::
+ Display branch listing in columns. See configuration variable
+ column.branch for option syntax.`--column` and `--no-column`
+ without options are equivalent to 'always' and 'never' respectively.
++
+This option is only applicable in non-verbose mode.
+
-r::
--remotes::
List or delete (if used with -d) the remote-tracking branches.
diff --git a/Makefile b/Makefile
index 92700ca..061f6e5 100644
--- a/Makefile
+++ b/Makefile
@@ -2116,7 +2116,7 @@ builtin/prune.o builtin/reflog.o reachable.o: reachable.h
builtin/commit.o builtin/revert.o wt-status.o: wt-status.h
builtin/tar-tree.o archive-tar.o: tar.h
connect.o transport.o url.o http-backend.o: url.h
-column.o help.o pager.o: column.h
+builtin/branch.o column.o help.o pager.o: column.h
http-fetch.o http-walker.o remote-curl.o transport.o walker.o: walker.h
http.o http-walker.o http-push.o http-fetch.o remote-curl.o: http.h url.h
diff --git a/builtin/branch.c b/builtin/branch.c
index 7095718..5014b9d 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -15,6 +15,8 @@
#include "branch.h"
#include "diff.h"
#include "revision.h"
+#include "string-list.h"
+#include "column.h"
static const char * const builtin_branch_usage[] = {
"git branch [options] [-r | -a] [--merged | --no-merged]",
@@ -53,6 +55,9 @@ static enum merge_filter {
} merge_filter;
static unsigned char merge_filter_ref[20];
+static struct string_list output = STRING_LIST_INIT_DUP;
+static unsigned int colopts;
+
static int parse_branch_color_slot(const char *var, int ofs)
{
if (!strcasecmp(var+ofs, "plain"))
@@ -70,6 +75,9 @@ static int parse_branch_color_slot(const char *var, int ofs)
static int git_branch_config(const char *var, const char *value, void *cb)
{
+ int status = git_column_config(var, value, "branch", &colopts);
+ if (status <= 0)
+ return status;
if (!strcmp(var, "color.branch")) {
branch_use_color = git_config_colorbool(var, value);
return 0;
@@ -474,7 +482,12 @@ static void print_ref_item(struct ref_item *item, int maxwidth, int verbose,
else if (verbose)
/* " f7c0c00 [ahead 58, behind 197] vcs-svn: drop obj_pool.h" */
add_verbose_info(&out, item, verbose, abbrev);
- printf("%s\n", out.buf);
+ if (colopts & COL_ENABLED) {
+ assert(!verbose && "--column and --verbose are incompatible");
+ string_list_append(&output, out.buf);
+ }
+ else
+ printf("%s\n", out.buf);
strbuf_release(&name);
strbuf_release(&out);
}
@@ -727,6 +740,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
PARSE_OPT_LASTARG_DEFAULT | PARSE_OPT_NONEG,
opt_parse_merge_filter, (intptr_t) "HEAD",
},
+ OPT_COLUMN(0, "column", &colopts, "list branches in columns" ),
OPT_END(),
};
@@ -749,6 +763,8 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
}
hashcpy(merge_filter_ref, head_sha1);
+
+ colopts = (colopts & ~COL_ENABLED_SET) | COL_ANSI;
argc = parse_options(argc, argv, prefix, options, builtin_branch_usage,
0);
@@ -761,11 +777,27 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
if (abbrev == -1)
abbrev = DEFAULT_ABBREV;
+ if (verbose) {
+ /* only die when --column is given explicitly */
+ if ((colopts & (COL_ENABLED_SET | COL_ENABLED)) == (COL_ENABLED_SET | COL_ENABLED))
+ die(_("--column and --verbose are incompatible"));
+ else
+ colopts = 0;
+ }
+
if (delete)
return delete_branches(argc, argv, delete > 1, kinds);
- else if (list)
- return print_ref_list(kinds, detached, verbose, abbrev,
+ else if (list) {
+ int ret;
+ if (verbose)
+ colopts = 0;
+
+ ret = print_ref_list(kinds, detached, verbose, abbrev,
with_commit, argv);
+ print_columns(&output, colopts, NULL);
+ string_list_clear(&output, 0);
+ return ret;
+ }
else if (edit_description) {
const char *branch_name;
if (detached)
diff --git a/t/t3200-branch.sh b/t/t3200-branch.sh
index ea82424..9728ee6 100755
--- a/t/t3200-branch.sh
+++ b/t/t3200-branch.sh
@@ -163,6 +163,56 @@ test_expect_success 'git branch --list -d t should fail' '
test_path_is_missing .git/refs/heads/t
'
+test_expect_success 'git branch --column' '
+ COLUMNS=80 git branch --column=column >actual &&
+ cat >expected <<\EOF &&
+ 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
+'
+
+test_expect_success 'git branch with column.*' '
+ git config column.ui column &&
+ git config column.branch "dense" &&
+ COLUMNS=80 git branch >actual &&
+ git config --unset column.branch &&
+ git config --unset column.ui &&
+ cat >expected <<\EOF &&
+ 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
+'
+
+test_expect_success 'git branch --column -v should fail' '
+ test_must_fail git branch --column -v
+'
+
+test_expect_success 'git branch -v with column.ui ignored' '
+ git config column.ui column &&
+ COLUMNS=80 git branch -v | cut -c -10 >actual &&
+ git config --unset column.ui &&
+ cat >expected <<\EOF &&
+ a/b/c
+ abc
+ bam
+ bar
+ foo
+ j/k
+ l
+ m/m
+* master
+ master2
+ n
+ o/o
+ o/p
+ q
+ r
+EOF
+ test_cmp expected actual
+'
+
mv .git/config .git/config-saved
test_expect_success 'git branch -m q q2 without config should succeed' '
--
1.7.8.36.g69ee2
next prev parent reply other threads:[~2012-02-04 15:56 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-03 13:34 [PATCH v4 00/13] Column display again Nguyễn Thái Ngọc Duy
2012-02-03 13:34 ` [PATCH v4 01/13] Save terminal width before setting up pager Nguyễn Thái Ngọc Duy
2012-02-03 13:34 ` [PATCH v4 02/13] column: add API to print items in columns Nguyễn Thái Ngọc Duy
2012-02-03 22:55 ` Junio C Hamano
2012-02-03 23:16 ` Junio C Hamano
2012-02-03 13:34 ` [PATCH v4 03/13] parseopt: make OPT_INTEGER support hexadecimal as well Nguyễn Thái Ngọc Duy
2012-02-03 22:59 ` Junio C Hamano
2012-02-04 4:55 ` Nguyen Thai Ngoc Duy
2012-02-04 5:32 ` Junio C Hamano
2012-02-04 6:15 ` Nguyen Thai Ngoc Duy
2012-02-03 13:34 ` [PATCH v4 04/13] Add git-column and column mode parsing Nguyễn Thái Ngọc Duy
2012-02-03 13:34 ` [PATCH v4 05/13] Stop starting pager recursively Nguyễn Thái Ngọc Duy
2012-02-03 13:34 ` [PATCH v4 06/13] column: add columnar layout Nguyễn Thái Ngọc Duy
2012-02-03 13:34 ` [PATCH v4 07/13] column: support columns with different widths Nguyễn Thái Ngọc Duy
2012-02-03 13:34 ` [PATCH v4 08/13] column: add column.ui for default column output settings Nguyễn Thái Ngọc Duy
2012-02-03 23:04 ` Junio C Hamano
2012-02-03 13:34 ` [PATCH v4 09/13] help: reuse print_columns() for help -a Nguyễn Thái Ngọc Duy
2012-02-03 23:05 ` Junio C Hamano
2012-02-03 13:34 ` [PATCH v4 10/13] branch: add --column Nguyễn Thái Ngọc Duy
2012-02-03 23:11 ` Junio C Hamano
2012-02-04 5:01 ` Nguyen Thai Ngoc Duy
2012-02-03 13:34 ` [PATCH v4 11/13] status: " Nguyễn Thái Ngọc Duy
2012-02-03 23:19 ` Junio C Hamano
2012-02-03 13:34 ` [PATCH v4 12/13] column: support piping stdout to external git-column process Nguyễn Thái Ngọc Duy
2012-02-03 13:34 ` [PATCH v4 13/13] tag: add --column Nguyễn Thái Ngọc Duy
2012-02-03 23:30 ` Junio C Hamano
2012-02-04 15:59 ` [PATCH v5 00/12] Column display Nguyễn Thái Ngọc Duy
2012-02-04 15:59 ` [PATCH v5 01/12] Save terminal width before setting up pager Nguyễn Thái Ngọc Duy
2012-02-04 15:59 ` [PATCH v5 02/12] column: add API to print items in columns Nguyễn Thái Ngọc Duy
2012-02-04 15:59 ` [PATCH v5 03/12] Add git-column and column mode parsing Nguyễn Thái Ngọc Duy
2012-02-04 16:11 ` [PATCH v6 " Nguyễn Thái Ngọc Duy
2012-02-04 15:59 ` [PATCH v5 04/12] Stop starting pager recursively Nguyễn Thái Ngọc Duy
2012-02-04 15:59 ` [PATCH v5 05/12] column: add columnar layout Nguyễn Thái Ngọc Duy
2012-02-04 15:59 ` [PATCH v5 06/12] column: support columns with different widths Nguyễn Thái Ngọc Duy
2012-02-04 15:59 ` [PATCH v5 07/12] column: add column.ui for default column output settings Nguyễn Thái Ngọc Duy
2012-02-04 16:12 ` [PATCH v6 " Nguyễn Thái Ngọc Duy
2012-02-04 15:59 ` [PATCH v5 08/12] help: reuse print_columns() for help -a Nguyễn Thái Ngọc Duy
2012-02-04 15:59 ` Nguyễn Thái Ngọc Duy [this message]
2012-02-06 17:31 ` [PATCH v5 09/12] branch: add --column Junio C Hamano
2012-02-04 15:59 ` [PATCH v5 10/12] status: " Nguyễn Thái Ngọc Duy
2012-02-04 15:59 ` [PATCH v5 11/12] column: support piping stdout to external git-column process Nguyễn Thái Ngọc Duy
2012-02-04 15:59 ` [PATCH v5 12/12] tag: add --column Nguyễn Thái Ngọc Duy
2012-02-06 17:58 ` [PATCH v5 00/12] Column display Junio C Hamano
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1328371156-4009-10-git-send-email-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.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.
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 NNTP newsgroup(s).