Skip to content

Commit

Permalink
dir.c: git-status --ignored: don't list empty directories as ignored
Browse files Browse the repository at this point in the history
'git-status --ignored' lists empty untracked directories as ignored, even
though they don't have any ignored files.

When checking if a directory is already listed as untracked (i.e. shouldn't
be listed as ignored as well), don't assume that the directory has only
ignored files if it doesn't have untracked files, as the directory may be
empty.

Signed-off-by: Karsten Blees <blees@dcon.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Karsten Blees authored and Junio C Hamano committed Apr 15, 2013
1 parent 184d2a8 commit c94ab01
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 4 deletions.
5 changes: 3 additions & 2 deletions dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -1115,15 +1115,16 @@ static enum directory_treatment treat_directory(struct dir_struct *dir,

/*
* We are looking for ignored files and our directory is not ignored,
* check if it contains only ignored files
* check if it contains untracked files (i.e. is listed as untracked)
*/
if ((dir->flags & DIR_SHOW_IGNORED) && !exclude) {
int ignored;
dir->flags &= ~DIR_SHOW_IGNORED;
ignored = read_directory_recursive(dir, dirname, len, 1, simplify);
dir->flags |= DIR_SHOW_IGNORED;

return ignored ? ignore_directory : show_directory;
if (ignored)
return ignore_directory;
}

if (!(dir->flags & DIR_HIDE_EMPTY_DIRECTORIES))
Expand Down
26 changes: 24 additions & 2 deletions t/t7061-wtstatus-ignore.sh
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,35 @@ cat >expected <<\EOF
?? .gitignore
?? actual
?? expected
!! untracked-ignored/
EOF

test_expect_success 'status untracked directory with ignored files with --ignore' '
test_expect_success 'status empty untracked directory with --ignore' '
rm -rf ignored &&
mkdir untracked-ignored &&
mkdir untracked-ignored/test &&
git status --porcelain --ignored >actual &&
test_cmp expected actual
'

cat >expected <<\EOF
?? .gitignore
?? actual
?? expected
EOF

test_expect_success 'status empty untracked directory with --ignore -u' '
git status --porcelain --ignored -u >actual &&
test_cmp expected actual
'

cat >expected <<\EOF
?? .gitignore
?? actual
?? expected
!! untracked-ignored/
EOF

test_expect_success 'status untracked directory with ignored files with --ignore' '
: >untracked-ignored/ignored &&
: >untracked-ignored/test/ignored &&
git status --porcelain --ignored >actual &&
Expand Down

0 comments on commit c94ab01

Please sign in to comment.