Skip to content

Commit

Permalink
status: allow --untracked=false and friends
Browse files Browse the repository at this point in the history
It is natural to expect that the "--untracked" option and the
status.showuntrackedFiles configuration variable to take a Boolean
value ("do you want me to show untracked files?"), but the current
code takes nothing but "no" as "no, please do not show any".

Allow the usual Boolean values to be given, and treat 'true' as
"normal", and 'false' as "no".

Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
gitster committed Mar 13, 2024
1 parent 63acdc4 commit f66e1a0
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 12 deletions.
2 changes: 2 additions & 0 deletions Documentation/config/status.txt
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ status.showUntrackedFiles::
--
+
If this variable is not specified, it defaults to 'normal'.
All usual spellings for Boolean value `true` are taken as `normal`
and `false` as `no`.
This variable can be overridden with the -u|--untracked-files option
of linkgit:git-status[1] and linkgit:git-commit[1].

Expand Down
2 changes: 2 additions & 0 deletions Documentation/git-commit.txt
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,8 @@ The possible options are:
- 'normal' - Shows untracked files and directories
- 'all' - Also shows individual files in untracked directories.

All usual spellings for Boolean value `true` are taken as `normal`
and `false` as `no`.
The default can be changed using the status.showUntrackedFiles
configuration variable documented in linkgit:git-config[1].
--
Expand Down
2 changes: 2 additions & 0 deletions Documentation/git-status.txt
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ Consider enabling untracked cache and split index if supported (see
`git update-index --untracked-cache` and `git update-index
--split-index`), Otherwise you can use `no` to have `git status`
return more quickly without showing untracked files.
All usual spellings for Boolean value `true` are taken as `normal`
and `false` as `no`.

The default can be changed using the status.showUntrackedFiles
configuration variable documented in linkgit:git-config[1].
Expand Down
13 changes: 11 additions & 2 deletions builtin/commit.c
Original file line number Diff line number Diff line change
Expand Up @@ -1163,6 +1163,17 @@ static enum untracked_status_type parse_untracked_setting_name(const char *u)
* Please update $__git_untracked_file_modes in
* git-completion.bash when you add new options
*/
switch (git_parse_maybe_bool(u)) {
case 0:
u = "no";
break;
case 1:
u = "normal";
break;
default:
break;
}

if (!strcmp(u, "no"))
return SHOW_NO_UNTRACKED_FILES;
else if (!strcmp(u, "normal"))
Expand Down Expand Up @@ -1469,8 +1480,6 @@ static int git_status_config(const char *k, const char *v,
if (!strcmp(k, "status.showuntrackedfiles")) {
enum untracked_status_type u;

if (!v)
return config_error_nonbool(k);
u = parse_untracked_setting_name(v);
if (u == SHOW_UNTRACKED_FILES_ERROR)
return error(_("Invalid untracked files mode '%s'"), v);
Expand Down
32 changes: 22 additions & 10 deletions t/t7508-status.sh
Original file line number Diff line number Diff line change
Expand Up @@ -419,14 +419,19 @@ Changes not staged for commit:
Untracked files not listed (use -u option to show untracked files)
EOF
git status -uno >output &&
test_cmp expect output &&
git status -ufalse >output &&
test_cmp expect output
'

test_expect_success 'status (status.showUntrackedFiles no)' '
test_config status.showuntrackedfiles no &&
git status >output &&
test_cmp expect output
'
for no in no false 0
do
test_expect_success "status (status.showUntrackedFiles $no)" '
test_config status.showuntrackedfiles "$no" &&
git status >output &&
test_cmp expect output
'
done

test_expect_success 'status -uno (advice.statusHints false)' '
cat >expect <<EOF &&
Expand Down Expand Up @@ -488,14 +493,21 @@ Untracked files:
EOF
git status -unormal >output &&
test_cmp expect output &&
git status -utrue >output &&
test_cmp expect output &&
git status -uyes >output &&
test_cmp expect output
'

test_expect_success 'status (status.showUntrackedFiles normal)' '
test_config status.showuntrackedfiles normal &&
git status >output &&
test_cmp expect output
'
for normal in normal true 1
do
test_expect_success "status (status.showUntrackedFiles $normal)" '
test_config status.showuntrackedfiles $normal &&
git status >output &&
test_cmp expect output
'
done

cat >expect <<EOF
M dir1/modified
Expand Down

0 comments on commit f66e1a0

Please sign in to comment.