Skip to content

Commit 4a28aac

Browse files
committed
Merge pull request #1354 from dscho/phase-out-show-ignored-directory-gracefully
Phase out `--show-ignored-directory` gracefully
2 parents 36a167b + 8a924f2 commit 4a28aac

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
@@ -1266,6 +1266,7 @@ static int git_status_config(const char *k, const char *v, void *cb)
12661266
int cmd_status(int argc, const char **argv, const char *prefix)
12671267
{
12681268
static int no_lock_index = 0;
1269+
static int show_ignored_directory = 0;
12691270
static struct wt_status s;
12701271
int fd;
12711272
struct object_id oid;
@@ -1299,6 +1300,10 @@ int cmd_status(int argc, const char **argv, const char *prefix)
12991300
N_("ignore changes to submodules, optional when: all, dirty, untracked. (Default: all)"),
13001301
PARSE_OPT_OPTARG, NULL, (intptr_t)"all" },
13011302
OPT_COLUMN(0, "column", &s.colopts, N_("list untracked files in columns")),
1303+
OPT_BOOL(0, "show-ignored-directory", &show_ignored_directory,
1304+
N_("(DEPRECATED: use --ignore=matching instead) Only "
1305+
"show directories that match an ignore pattern "
1306+
"name.")),
13021307
OPT_BOOL(0, "no-lock-index", &no_lock_index,
13031308
N_("(DEPRECATED: use `git --no-optional-locks status` "
13041309
"instead) Do not lock the index")),
@@ -1321,6 +1326,12 @@ int cmd_status(int argc, const char **argv, const char *prefix)
13211326
setenv(GIT_OPTIONAL_LOCKS_ENVIRONMENT, "false", 1);
13221327
}
13231328

1329+
if (show_ignored_directory) {
1330+
warning("--show-ignored-directory was deprecated, use "
1331+
"--ignored=matching instead");
1332+
ignored_arg = "matching";
1333+
}
1334+
13241335
handle_untracked_files_arg(&s);
13251336
handle_ignored_arg(&s);
13261337

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)