Skip to content

Commit c18422e

Browse files
committed
status: reinstate --show-ignored-directory as a deprecated option
It was a bad idea to just remove that option from Git for Windows v2.15.0, as early users of that (still experimental) option would have been puzzled what they are supposed to do now. So let's reintroduce the flag, but make sure to show the user good advice how to fix this going forward. We'll remove this option in a more orderly fashion when we're certain that the option is no longer used (previous Visual Studio versions relied on it). The option is deprecated now, therefore we make sure that keeps saying so until we finally remove it. Signed-off-by: Johannes Schindelin <[email protected]>
1 parent b8f4c8c commit c18422e

File tree

2 files changed

+161
-0
lines changed

2 files changed

+161
-0
lines changed

builtin/commit.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1476,6 +1476,7 @@ int cmd_status(int argc, const char **argv, const char *prefix)
14761476
static int no_renames = -1;
14771477
static const char *rename_score_arg = (const char *)-1;
14781478
static int no_lock_index = 0;
1479+
static int show_ignored_directory = 0;
14791480
static struct wt_status s;
14801481
unsigned int progress_flag = 0;
14811482
int fd;
@@ -1514,6 +1515,10 @@ int cmd_status(int argc, const char **argv, const char *prefix)
15141515
OPT_CALLBACK_F('M', "find-renames", &rename_score_arg,
15151516
N_("n"), N_("detect renames, optionally set similarity index"),
15161517
PARSE_OPT_OPTARG | PARSE_OPT_NONEG, opt_parse_rename_score),
1518+
OPT_BOOL(0, "show-ignored-directory", &show_ignored_directory,
1519+
N_("(DEPRECATED: use --ignore=matching instead) Only "
1520+
"show directories that match an ignore pattern "
1521+
"name.")),
15171522
OPT_BOOL(0, "no-lock-index", &no_lock_index,
15181523
N_("(DEPRECATED: use `git --no-optional-locks status` "
15191524
"instead) Do not lock the index")),
@@ -1539,6 +1544,12 @@ int cmd_status(int argc, const char **argv, const char *prefix)
15391544
setenv(GIT_OPTIONAL_LOCKS_ENVIRONMENT, "false", 1);
15401545
}
15411546

1547+
if (show_ignored_directory) {
1548+
warning("--show-ignored-directory was deprecated, use "
1549+
"--ignored=matching instead");
1550+
ignored_arg = "matching";
1551+
}
1552+
15421553
handle_untracked_files_arg(&s);
15431554
handle_ignored_arg(&s);
15441555

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
#!/bin/sh
2+
#
3+
#
4+
5+
test_description='git status collapse ignored'
6+
7+
. ./test-lib.sh
8+
9+
10+
cat >.gitignore <<\EOF
11+
*.ign
12+
ignored_dir/
13+
!*.unignore
14+
EOF
15+
16+
# commit initial ignore file
17+
test_expect_success 'setup initial commit and ignore file' '
18+
git add . &&
19+
test_tick &&
20+
git commit -m "Initial commit"
21+
'
22+
23+
cat >expect <<\EOF
24+
? err
25+
? expect
26+
? output
27+
! dir/ignored/ignored_1.ign
28+
! dir/ignored/ignored_2.ign
29+
! ignored/ignored_1.ign
30+
! ignored/ignored_2.ign
31+
EOF
32+
33+
# Test status behavior on folder with ignored files
34+
test_expect_success 'setup folder with ignored files' '
35+
mkdir -p ignored dir/ignored &&
36+
touch ignored/ignored_1.ign ignored/ignored_2.ign \
37+
dir/ignored/ignored_1.ign dir/ignored/ignored_2.ign
38+
'
39+
40+
test_expect_success 'Verify behavior of status on folders with ignored files' '
41+
test_when_finished "git clean -fdx" &&
42+
git status --porcelain=v2 --ignored --untracked-files=all --show-ignored-directory >output 2>err &&
43+
test_cmp expect output &&
44+
grep "deprecated.*use --ignored=matching instead" err
45+
'
46+
47+
# Test status bahavior on folder with tracked and ignored files
48+
cat >expect <<\EOF
49+
? expect
50+
? output
51+
! dir/tracked_ignored/ignored_1.ign
52+
! dir/tracked_ignored/ignored_2.ign
53+
! tracked_ignored/ignored_1.ign
54+
! tracked_ignored/ignored_2.ign
55+
EOF
56+
57+
test_expect_success 'setup folder with tracked & ignored files' '
58+
mkdir -p tracked_ignored dir/tracked_ignored &&
59+
touch tracked_ignored/tracked_1 tracked_ignored/tracked_2 \
60+
tracked_ignored/ignored_1.ign tracked_ignored/ignored_2.ign \
61+
dir/tracked_ignored/tracked_1 dir/tracked_ignored/tracked_2 \
62+
dir/tracked_ignored/ignored_1.ign dir/tracked_ignored/ignored_2.ign &&
63+
64+
git add tracked_ignored/tracked_1 tracked_ignored/tracked_2 \
65+
dir/tracked_ignored/tracked_1 dir/tracked_ignored/tracked_2 &&
66+
test_tick &&
67+
git commit -m "commit tracked files"
68+
'
69+
70+
test_expect_success 'Verify status on folder with tracked & ignored files' '
71+
test_when_finished "git clean -fdx && git reset HEAD~1 --hard" &&
72+
git status --porcelain=v2 --ignored --untracked-files=all --show-ignored-directory >output &&
73+
test_cmp expect output
74+
'
75+
76+
77+
# Test status behavior on folder with untracked and ignored files
78+
cat >expect <<\EOF
79+
? dir/untracked_ignored/untracked_1
80+
? dir/untracked_ignored/untracked_2
81+
? expect
82+
? output
83+
? untracked_ignored/untracked_1
84+
? untracked_ignored/untracked_2
85+
! dir/untracked_ignored/ignored_1.ign
86+
! dir/untracked_ignored/ignored_2.ign
87+
! untracked_ignored/ignored_1.ign
88+
! untracked_ignored/ignored_2.ign
89+
EOF
90+
91+
test_expect_success 'setup folder with tracked & ignored files' '
92+
mkdir -p untracked_ignored dir/untracked_ignored &&
93+
touch untracked_ignored/untracked_1 untracked_ignored/untracked_2 \
94+
untracked_ignored/ignored_1.ign untracked_ignored/ignored_2.ign \
95+
dir/untracked_ignored/untracked_1 dir/untracked_ignored/untracked_2 \
96+
dir/untracked_ignored/ignored_1.ign dir/untracked_ignored/ignored_2.ign
97+
'
98+
99+
test_expect_success 'Verify status on folder with tracked & ignored files' '
100+
test_when_finished "git clean -fdx" &&
101+
git status --porcelain=v2 --ignored --untracked-files=all --show-ignored-directory >output &&
102+
test_cmp expect output
103+
'
104+
105+
# Test status behavior on ignored folder
106+
cat >expect <<\EOF
107+
? expect
108+
? output
109+
! ignored_dir/
110+
EOF
111+
112+
test_expect_success 'setup folder with tracked & ignored files' '
113+
mkdir ignored_dir &&
114+
touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
115+
ignored_dir/ignored_1.ign ignored_dir/ignored_2.ign
116+
'
117+
118+
test_expect_success 'Verify status on folder with tracked & ignored files' '
119+
test_when_finished "git clean -fdx" &&
120+
git status --porcelain=v2 --ignored --untracked-files=all --show-ignored-directory >output &&
121+
test_cmp expect output
122+
'
123+
124+
# Test status behavior on ignored folder with tracked file
125+
cat >expect <<\EOF
126+
? expect
127+
? output
128+
! ignored_dir/ignored_1
129+
! ignored_dir/ignored_1.ign
130+
! ignored_dir/ignored_2
131+
! ignored_dir/ignored_2.ign
132+
EOF
133+
134+
test_expect_success 'setup folder with tracked & ignored files' '
135+
mkdir ignored_dir &&
136+
touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
137+
ignored_dir/ignored_1.ign ignored_dir/ignored_2.ign \
138+
ignored_dir/tracked &&
139+
git add -f ignored_dir/tracked &&
140+
test_tick &&
141+
git commit -m "Force add file in ignored directory"
142+
'
143+
144+
test_expect_success 'Verify status on folder with tracked & ignored files' '
145+
test_when_finished "git clean -fdx && git reset HEAD~1 --hard" &&
146+
git status --porcelain=v2 --ignored --untracked-files=all --show-ignored-directory >output &&
147+
test_cmp expect output
148+
'
149+
150+
test_done

0 commit comments

Comments
 (0)