dir.c: git-ls-files --directories: don't hide empty directories
'git-ls-files --ignored --directories' hides empty directories even though --no-empty-directory was not specified. Treat the DIR_HIDE_EMPTY_DIRECTORIES flag independently from DIR_SHOW_IGNORED to make all git-ls-files options work as expected. Signed-off-by: Karsten Blees <blees@dcon.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
0104c9e781
commit
184d2a8e96
6
dir.c
6
dir.c
@ -1120,15 +1120,13 @@ static enum directory_treatment treat_directory(struct dir_struct *dir,
|
|||||||
if ((dir->flags & DIR_SHOW_IGNORED) && !exclude) {
|
if ((dir->flags & DIR_SHOW_IGNORED) && !exclude) {
|
||||||
int ignored;
|
int ignored;
|
||||||
dir->flags &= ~DIR_SHOW_IGNORED;
|
dir->flags &= ~DIR_SHOW_IGNORED;
|
||||||
dir->flags |= DIR_HIDE_EMPTY_DIRECTORIES;
|
|
||||||
ignored = read_directory_recursive(dir, dirname, len, 1, simplify);
|
ignored = read_directory_recursive(dir, dirname, len, 1, simplify);
|
||||||
dir->flags &= ~DIR_HIDE_EMPTY_DIRECTORIES;
|
|
||||||
dir->flags |= DIR_SHOW_IGNORED;
|
dir->flags |= DIR_SHOW_IGNORED;
|
||||||
|
|
||||||
return ignored ? ignore_directory : show_directory;
|
return ignored ? ignore_directory : show_directory;
|
||||||
}
|
}
|
||||||
if (!(dir->flags & DIR_SHOW_IGNORED) &&
|
|
||||||
!(dir->flags & DIR_HIDE_EMPTY_DIRECTORIES))
|
if (!(dir->flags & DIR_HIDE_EMPTY_DIRECTORIES))
|
||||||
return show_directory;
|
return show_directory;
|
||||||
if (!read_directory_recursive(dir, dirname, len, 1, simplify))
|
if (!read_directory_recursive(dir, dirname, len, 1, simplify))
|
||||||
return ignore_directory;
|
return ignore_directory;
|
||||||
|
@ -214,6 +214,29 @@ test_expect_success 'subdirectory ignore (l1)' '
|
|||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'show/hide empty ignored directory (setup)' '
|
||||||
|
rm top/l1/l2/l1 &&
|
||||||
|
rm top/l1/.gitignore
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'show empty ignored directory with --directory' '
|
||||||
|
(
|
||||||
|
cd top &&
|
||||||
|
git ls-files -o -i --exclude l1 --directory
|
||||||
|
) >actual &&
|
||||||
|
echo l1/ >expect &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'hide empty ignored directory with --no-empty-directory' '
|
||||||
|
(
|
||||||
|
cd top &&
|
||||||
|
git ls-files -o -i --exclude l1 --directory --no-empty-directory
|
||||||
|
) >actual &&
|
||||||
|
>expect &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'pattern matches prefix completely' '
|
test_expect_success 'pattern matches prefix completely' '
|
||||||
: >expect &&
|
: >expect &&
|
||||||
git ls-files -i -o --exclude "/three/a.3[abc]" >actual &&
|
git ls-files -i -o --exclude "/three/a.3[abc]" >actual &&
|
||||||
|
@ -526,7 +526,7 @@ static void wt_status_collect_untracked(struct wt_status *s)
|
|||||||
dir.nr = 0;
|
dir.nr = 0;
|
||||||
dir.flags = DIR_SHOW_IGNORED;
|
dir.flags = DIR_SHOW_IGNORED;
|
||||||
if (s->show_untracked_files != SHOW_ALL_UNTRACKED_FILES)
|
if (s->show_untracked_files != SHOW_ALL_UNTRACKED_FILES)
|
||||||
dir.flags |= DIR_SHOW_OTHER_DIRECTORIES;
|
dir.flags |= DIR_SHOW_OTHER_DIRECTORIES | DIR_HIDE_EMPTY_DIRECTORIES;
|
||||||
fill_directory(&dir, s->pathspec);
|
fill_directory(&dir, s->pathspec);
|
||||||
for (i = 0; i < dir.nr; i++) {
|
for (i = 0; i < dir.nr; i++) {
|
||||||
struct dir_entry *ent = dir.entries[i];
|
struct dir_entry *ent = dir.entries[i];
|
||||||
|
Loading…
Reference in New Issue
Block a user