git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Zbigniew Jędrzejewski-Szmek" <zbyszek@in.waw.pl>
To: git@vger.kernel.org, gitster@pobox.com
Cc: "Michael J Gruber" <git@drmicha.warpmail.net>,
	pclouds@gmail.com, j.sixt@viscovery.net,
	"Zbigniew Jędrzejewski-Szmek" <zbyszek@in.waw.pl>
Subject: [PATCH v7 10/11] diff --stat: add config option to limit graph width
Date: Fri, 24 Feb 2012 21:32:17 +0100	[thread overview]
Message-ID: <1330115538-1576-10-git-send-email-zbyszek@in.waw.pl> (raw)
In-Reply-To: <1330115538-1576-1-git-send-email-zbyszek@in.waw.pl>

Config option diff.statGraphWidth=<width> is equivalent to
--stat-graph-width=<width>, except that the config option is ignored
by format-patch.

For the graph-width limiting to be usable, it should happen
'automatically' once configured, hence the config option.
Nevertheless, graph width limiting only makes sense when used on a
wide terminal, so it should not influence the output of format-patch,
which adheres to the 80-column standard.

Signed-off-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
---
 Documentation/diff-config.txt          |  4 ++++
 Documentation/diff-options.txt         | 16 +++++++++-------
 builtin/diff.c                         |  3 ++-
 builtin/log.c                          |  1 +
 builtin/merge.c                        |  1 +
 contrib/completion/git-completion.bash |  1 +
 diff.c                                 |  8 ++++++++
 t/t4052-stat-output.sh                 |  6 ++++++
 8 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/Documentation/diff-config.txt b/Documentation/diff-config.txt
index 1aed79e..6aa1be0 100644
--- a/Documentation/diff-config.txt
+++ b/Documentation/diff-config.txt
@@ -52,6 +52,10 @@ directories with less than 10% of the total amount of changed files,
 and accumulating child directory counts in the parent directories:
 `files,10,cumulative`.
 
+diff.statGraphWidth::
+	Limit the width of the graph part in --stat output. If set, applies
+	to all commands generating --stat outuput except format-patch.
+
 diff.external::
 	If this config variable is set, diff generation is not
 	performed using the internal diff machinery, but using the
diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt
index d34efd5..87f0a5f 100644
--- a/Documentation/diff-options.txt
+++ b/Documentation/diff-options.txt
@@ -54,13 +54,15 @@ endif::git-format-patch[]
 
 --stat[=<width>[,<name-width>[,<count>]]]::
 	Generate a diffstat. By default, as much space as necessary
-	will be used for the filename part, and the rest for
-	the graph part. Maximum width defaults to terminal width,
-	or 80 columns if not connected to a terminal, and can be
-	overriden by `<width>`. The width of the filename part can be
-	limited by giving another width `<name-width>` after a comma.
-	The width of the graph part can be limited by using
-	`--stat-graph-width=<width>`.
+	will be used for the filename part, and the rest for the graph
+	part. Maximum width defaults to terminal width, or 80 columns
+	if not connected to a terminal, and can be overriden by
+	`<width>`. The width of the filename part can be limited by
+	giving another width `<name-width>` after a comma. The width
+	of the graph part can be limited by using
+	`--stat-graph-width=<width>` (affects all commands generating
+	a stat graph) or by setting `diff.statGraphWidth=<width>`
+	(does not affect `git format-patch`).
 	By giving a third parameter `<count>`, you can limit the
 	output to the first `<count>` lines, followed by `...` if
 	there are more.
diff --git a/builtin/diff.c b/builtin/diff.c
index 81b6bae..424c815 100644
--- a/builtin/diff.c
+++ b/builtin/diff.c
@@ -285,8 +285,9 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
 	/* Otherwise, we are doing the usual "git" diff */
 	rev.diffopt.skip_stat_unmatch = !!diff_auto_refresh_index;
 
-	/* Scale to real terminal size */
+	/* Scale to real terminal size and respect statGraphWidth config */
 	rev.diffopt.stat_width = -1;
+	rev.diffopt.stat_graph_width = -1;
 
 	/* Default to let external and textconv be used */
 	DIFF_OPT_SET(&rev.diffopt, ALLOW_EXTERNAL);
diff --git a/builtin/log.c b/builtin/log.c
index 075a427..8a47012 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -78,6 +78,7 @@ static void cmd_log_init_defaults(struct rev_info *rev)
 	rev->verbose_header = 1;
 	DIFF_OPT_SET(&rev->diffopt, RECURSIVE);
 	rev->diffopt.stat_width = -1; /* use full terminal width */
+	rev->diffopt.stat_graph_width = -1; /* respect statGraphWidth config */
 	rev->abbrev_commit = default_abbrev_commit;
 	rev->show_root_diff = default_show_root;
 	rev->subject_prefix = fmt_patch_subject_prefix;
diff --git a/builtin/merge.c b/builtin/merge.c
index 7b368e7..24843ec 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -400,6 +400,7 @@ static void finish(struct commit *head_commit,
 		struct diff_options opts;
 		diff_setup(&opts);
 		opts.stat_width = -1; /* use full terminal width */
+		opts.stat_graph_width = -1; /* respect statGraphWidth config */
 		opts.output_format |=
 			DIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT;
 		opts.detect_rename = DIFF_DETECT_RENAME;
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 554e30e..3be9077 100755
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -2091,6 +2091,7 @@ _git_config ()
 		core.whitespace
 		core.worktree
 		diff.autorefreshindex
+		diff.statGraphWidth
 		diff.external
 		diff.ignoreSubmodules
 		diff.mnemonicprefix
diff --git a/diff.c b/diff.c
index 9012c09..f47bffa 100644
--- a/diff.c
+++ b/diff.c
@@ -31,6 +31,7 @@ static const char *external_diff_cmd_cfg;
 int diff_auto_refresh_index = 1;
 static int diff_mnemonic_prefix;
 static int diff_no_prefix;
+static int diff_stat_graph_width;
 static int diff_dirstat_permille_default = 30;
 static struct diff_options default_diff_options;
 
@@ -156,6 +157,10 @@ int git_diff_ui_config(const char *var, const char *value, void *cb)
 		diff_no_prefix = git_config_bool(var, value);
 		return 0;
 	}
+	if (!strcmp(var, "diff.statgraphwidth")) {
+		diff_stat_graph_width = git_config_int(var, value);
+		return 0;
+	}
 	if (!strcmp(var, "diff.external"))
 		return git_config_string(&external_diff_cmd_cfg, var, value);
 	if (!strcmp(var, "diff.wordregex"))
@@ -1444,6 +1449,9 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options)
 	else
 		width = options->stat_width ? options->stat_width : 80;
 
+	if (options->stat_graph_width == -1)
+		options->stat_graph_width = diff_stat_graph_width;
+
 	/*
 	 * Guarantee 3/8*16==6 for the graph part
 	 * and 5/8*16==10 for the filename part
diff --git a/t/t4052-stat-output.sh b/t/t4052-stat-output.sh
index e606202..0bdeab7 100755
--- a/t/t4052-stat-output.sh
+++ b/t/t4052-stat-output.sh
@@ -110,6 +110,12 @@ do
 		grep " | " output >actual &&
 		test_cmp "$expect" actual
 	'
+
+	test_expect_success "$cmd $verb statGraphWidth config" '
+		git -c diff.statGraphWidth=26 $cmd $args >output
+		grep " | " output >actual &&
+		test_cmp "$expect" actual
+	'
 done <<\EOF
 ignores expect80 format-patch -1 --stdout
 respects expect40 diff HEAD^ HEAD --stat
-- 
1.7.9.2.332.g05f13

  parent reply	other threads:[~2012-02-24 20:36 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-20 21:57 [PATCH 0/8 v6] diff --stat: use the full terminal width Zbigniew Jędrzejewski-Szmek
2012-02-20 21:57 ` [PATCH 1/8 v6] make lineno_width() from blame reusable for others Zbigniew Jędrzejewski-Szmek
2012-02-20 21:57 ` [PATCH 2/8 v6] diff --stat: tests for long filenames and big change counts Zbigniew Jędrzejewski-Szmek
2012-02-20 21:57 ` [PATCH 3/8 v6] diff --stat: use the full terminal width Zbigniew Jędrzejewski-Szmek
2012-02-20 21:57 ` [PATCH 4/8 v6] show " Zbigniew Jędrzejewski-Szmek
2012-02-20 21:57 ` [PATCH 5/8 v6] log " Zbigniew Jędrzejewski-Szmek
2012-02-20 21:57 ` [PATCH 6/8 v6] merge " Zbigniew Jędrzejewski-Szmek
2012-02-20 21:57 ` [PATCH 7/8 v6] diff --stat: limit graph part to 40 columns Zbigniew Jędrzejewski-Szmek
2012-02-20 21:57 ` [PATCH 8/8 v6] diff --stat: use less columns for change counts Zbigniew Jędrzejewski-Szmek
2012-02-20 23:41 ` [PATCH 0/8 v6] diff --stat: use the full terminal width Junio C Hamano
2012-02-21  0:26   ` Zbigniew Jędrzejewski-Szmek
2012-02-21  7:05     ` Junio C Hamano
2012-02-21 10:05       ` Zbigniew Jędrzejewski-Szmek
2012-02-21 20:10         ` Junio C Hamano
2012-02-22 11:24           ` Zbigniew Jędrzejewski-Szmek
2012-02-22 11:51             ` [PATCH 7.1/8] diff --stat: use a maximum of 5/8 for the filename part Zbigniew Jędrzejewski-Szmek
2012-02-22 11:51               ` [PATCH 7.2/8] diff --stat: add a test for output with COLUMNS=40 Zbigniew Jędrzejewski-Szmek
2012-02-22 11:51               ` [PATCH 7.3/8] diff --stat: limit graph part to 40 columns Zbigniew Jędrzejewski-Szmek
2012-02-22 19:41             ` [PATCH 0/8 v6] diff --stat: use the full terminal width Junio C Hamano
2012-02-24 20:31               ` [PATCH v7 0/11] " Zbigniew Jędrzejewski-Szmek
2012-02-24 20:32                 ` [PATCH v7 01/11] make lineno_width() from blame reusable for others Zbigniew Jędrzejewski-Szmek
2012-02-24 20:32                   ` [PATCH v7 02/11] diff --stat: tests for long filenames and big change counts Zbigniew Jędrzejewski-Szmek
2012-02-24 20:32                   ` [PATCH v7 03/11] diff --stat: use the full terminal width Zbigniew Jędrzejewski-Szmek
2012-02-24 20:32                   ` [PATCH v7 04/11] show " Zbigniew Jędrzejewski-Szmek
2012-02-24 20:32                   ` [PATCH v7 05/11] log " Zbigniew Jędrzejewski-Szmek
2012-02-24 20:32                   ` [PATCH v7 06/11] merge " Zbigniew Jędrzejewski-Szmek
2012-02-24 20:32                   ` [PATCH v7 07/11] diff --stat: use a maximum of 5/8 for the filename part Zbigniew Jędrzejewski-Szmek
2012-02-24 20:32                   ` [PATCH v7 08/11] diff --stat: add a test for output with COLUMNS=40 Zbigniew Jędrzejewski-Szmek
2012-02-24 20:32                   ` [PATCH v7 09/11] diff --stat: enable limiting of the graph part Zbigniew Jędrzejewski-Szmek
2012-02-24 20:32                   ` Zbigniew Jędrzejewski-Szmek [this message]
2012-02-24 20:32                   ` [PATCH v7 11/11] diff --stat: use less columns for change counts Zbigniew Jędrzejewski-Szmek
2012-02-21 15:16 ` [PATCH 0/8 v6] diff --stat: use the full terminal width Nguyen Thai Ngoc Duy
2012-02-21 16:11   ` Zbigniew Jędrzejewski-Szmek
2012-02-23  7:29     ` Miles Bader
2012-02-23  5:08 ` 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=1330115538-1576-10-git-send-email-zbyszek@in.waw.pl \
    --to=zbyszek@in.waw.pl \
    --cc=git@drmicha.warpmail.net \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=j.sixt@viscovery.net \
    --cc=pclouds@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.
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).