Thread (1 message) 1 message, 1 author, 2016-06-15

Re: [PATCH v3 1/2] status: introduce status.short to enable --short by default

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:57:40

Jorge Juan Garcia Garcia  [off-list ref]
writes:
quoted hunk
Some people always run 'git status -s'.
The configuration variable status.short allows to set it by default.

Signed-off-by: Jorge Juan Garcia Garcia <redacted>
Signed-off-by: Mathieu Lienard--Mayor <redacted>
Signed-off-by: Matthieu Moy <redacted>
---

Changes since v2:
 -removal of double quotes in test
 -use of git config --unset to clean up test environment

 Documentation/config.txt |    4 ++++
 builtin/commit.c         |    5 +++++
 t/t7508-status.sh        |   35 +++++++++++++++++++++++++++++++++++
 3 files changed, 44 insertions(+), 0 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 6e53fc5..1983bf7 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -2066,6 +2066,10 @@ status.relativePaths::
 	relative to the repository root (this was the default for Git
 	prior to v1.5.4).
 
+status.short::
+	Set to true to enable --short by default in linkgit:git-status[1].
+	The option --no-short takes precedence over this variable.
+
 status.showUntrackedFiles::
 	By default, linkgit:git-status[1] and linkgit:git-commit[1] show
 	files which are not currently tracked by Git. Directories which
diff --git a/builtin/commit.c b/builtin/commit.c
index 1621dfc..287f1cb 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -1112,6 +1112,11 @@ static int git_status_config(const char *k, const char *v, void *cb)
 			s->submodule_summary = -1;
 		return 0;
 	}
+	if (!strcmp(k, "status.short")) {
+		if (git_config_bool(k, v))
+			status_format = STATUS_FORMAT_SHORT;
And if the user has

	[status]
        	short = no

in $GIT_DIR/config for this particular project, perhaps in order to
override a blanket setting

	[status]
		short

that is in $HOME/.gitconfig, what should happen?

Perhaps you need

	if (git_config_bool(...))
        	status_format = STATUS_FORMAT_SHORT;
	else        	
        	status_format = STATUS_FORMAT_NONE; /* default */

or something here?
quoted hunk
+		return 0;
+	}
 	if (!strcmp(k, "status.color") || !strcmp(k, "color.status")) {
 		s->use_color = git_config_colorbool(k, v);
 		return 0;
diff --git a/t/t7508-status.sh b/t/t7508-status.sh
index e2ffdac..d99ca9f 100755
--- a/t/t7508-status.sh
+++ b/t/t7508-status.sh
@@ -1335,4 +1335,39 @@ test_expect_failure '.git/config ignore=all suppresses submodule summary' '
 	git config -f .gitmodules  --remove-section submodule.subname
 '
 
+test_expect_success 'Setup of test environment' '
+	git config status.showUntrackedFiles no
+'
+
+test_expect_success '"status.short=true" same as "-s"' '
+	git -c status.short=true status >actual &&
+	git status -s >expected_short &&
+	test_cmp actual expected_short
+'
+
+test_expect_success '"status.short=true" different from "--no-short"' '
+	git status --no-short >expected_noshort &&
+	test_must_fail test_cmp actual expected_noshort
+'
+
+test_expect_success '"status.short=true" weaker than "--no-short"' '
+	git -c status.short=true status --no-short >actual &&
+	test_cmp actual expected_noshort
+'
+
+test_expect_success '"status.short=false" same as "--no-short"' '
+	git -c status.short=false status >actual &&
+	git status -s >expected_short &&
+	test_cmp actual expected_noshort
+'
+
+test_expect_success '"status.short=false" weaker than "-s"' '
+	git -c status.short=false status -s >actual &&
+	test_cmp actual expected_short
+'
+
+test_expect_success 'Restore default test environment' '
+	git config --unset status.showUntrackedFiles
+'
A few observations.

 * It is very good that you check not just positive cases that show
   off how well this new feature works (i.e. status.short set
   without command line override gives a short output) but also
   negative cases that make sure the new feature does not kick in
   when it should not.  You test all four combinations, which is
   good.

 * If any of the first three fails, you may not have the correct
   string in expected_short or expected_noshort when running later
   tests that depend on them.

 * Similarly, if the first one to set showUntrackedFiles fails, the
   last one to --unset would also fail.

Perhaps limiting the number of tests that must pass (otherwise the
remainder becomes useless) by doing something like this is a better
alternative:


	test_expect_success 'setup for status.short' '
		git status --short >expected_short &&
                git status --no-short >expected_noshort
	'

	test_expect_success '-c status.short=true == status -s' '
        	test_config status.showUntrackedFile no &&
        	test_config status.short yes &&
                git status >actual &&
                test_cmp expected_short actual
	'

	test_expect_success 'status --no-short defeats status.short=true' '
        	test_config status.showUntrackedFile no &&
        	test_config status.short yes &&
                git status --no-short >actual &&
                test_cmp expected_noshort actual
	'

	... other two combinations here ...

Points to note:

 * test_config takes care of setting configuration variables and
   then unsetting them when the test is done.

 * test_cmp should compare expected with actual, not the other way,
   so that "./t7508-status.sh -v" shows the diff between the two 
   shows how the actual output differs from what is expected.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help