Skip to content

Commit 1166d61

Browse files
dschoGit for Windows Build Agent
authored and
Git for Windows Build Agent
committed
Merge pull request #1354 from dscho/phase-out-show-ignored-directory-gracefully
Phase out `--show-ignored-directory` gracefully
2 parents 1c4ad23 + e05f083 commit 1166d61

File tree

2 files changed

+162
-0
lines changed

2 files changed

+162
-0
lines changed

builtin/commit.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1303,6 +1303,7 @@ int cmd_status(int argc, const char **argv, const char *prefix)
13031303
static int no_renames = -1;
13041304
static const char *rename_score_arg = (const char *)-1;
13051305
static int no_lock_index = 0;
1306+
static int show_ignored_directory = 0;
13061307
static struct wt_status s;
13071308
unsigned int progress_flag = 0;
13081309
int fd;
@@ -1341,6 +1342,10 @@ int cmd_status(int argc, const char **argv, const char *prefix)
13411342
{ OPTION_CALLBACK, 'M', "find-renames", &rename_score_arg,
13421343
N_("n"), N_("detect renames, optionally set similarity index"),
13431344
PARSE_OPT_OPTARG | PARSE_OPT_NONEG, opt_parse_rename_score },
1345+
OPT_BOOL(0, "show-ignored-directory", &show_ignored_directory,
1346+
N_("(DEPRECATED: use --ignore=matching instead) Only "
1347+
"show directories that match an ignore pattern "
1348+
"name.")),
13441349
OPT_BOOL(0, "no-lock-index", &no_lock_index,
13451350
N_("(DEPRECATED: use `git --no-optional-locks status` "
13461351
"instead) Do not lock the index")),
@@ -1363,6 +1368,12 @@ int cmd_status(int argc, const char **argv, const char *prefix)
13631368
setenv(GIT_OPTIONAL_LOCKS_ENVIRONMENT, "false", 1);
13641369
}
13651370

1371+
if (show_ignored_directory) {
1372+
warning("--show-ignored-directory was deprecated, use "
1373+
"--ignored=matching instead");
1374+
ignored_arg = "matching";
1375+
}
1376+
13661377
handle_untracked_files_arg(&s);
13671378
handle_ignored_arg(&s);
13681379

Lines changed: 151 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
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_i18ncmp 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_i18ncmp 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_i18ncmp 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_i18ncmp 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_i18ncmp expect output
148+
'
149+
150+
test_done
151+

0 commit comments

Comments
 (0)