Skip to content

Commit

Permalink
ls-files: unbreak "ls-files -i"
Browse files Browse the repository at this point in the history
Commit b5227d8 changed the behavior of "ls-files" with
respect to includes, but accidentally broke the "-i" option
The original behavior was:

  1. if no "-i" is given, cull all results according to --exclude*
  2. if "-i" is given, show the inverse of (1)

The broken behavior was:

  1. if no "-i" is given:
     a. for "-o", cull results according to --exclude*
     b. for index files, always show all
  2. if "-i" is given:
     a. for "-o", shows the inverse of (1a)
     b. for index files, always show all

The fixed behavior keeps the new (1b) behavior introduced
by b5227d8, but fixes the (2b) behavior to show only ignored
files, not all files.

This patch also tweaks the documentation. The original text
was somewhat obscure in the first place, but it is also now
inaccurate (the relationship between (1b) and (2b) is not
quite a "reverse").

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jeff King authored and Junio C Hamano committed Oct 30, 2009
1 parent b5227d8 commit 500348a
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 2 deletions.
6 changes: 4 additions & 2 deletions Documentation/git-ls-files.txt
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,10 @@ OPTIONS

-i::
--ignored::
Show ignored files in the output.
Note that this also reverses any exclude list present.
Show only ignored files in the output. When showing files in the
index, print only those matched by an exclude pattern. When
showing "other" files, show only those matched by an exclude
pattern.

-s::
--stage::
Expand Down
8 changes: 8 additions & 0 deletions builtin-ls-files.c
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,10 @@ static void show_files(struct dir_struct *dir, const char *prefix)
if (show_cached | show_stage) {
for (i = 0; i < active_nr; i++) {
struct cache_entry *ce = active_cache[i];
int dtype = ce_to_dtype(ce);
if (dir->flags & DIR_SHOW_IGNORED &&
!excluded(dir, ce->name, &dtype))
continue;
if (show_unmerged && !ce_stage(ce))
continue;
if (ce->ce_flags & CE_UPDATE)
Expand All @@ -187,6 +191,10 @@ static void show_files(struct dir_struct *dir, const char *prefix)
struct cache_entry *ce = active_cache[i];
struct stat st;
int err;
int dtype = ce_to_dtype(ce);
if (dir->flags & DIR_SHOW_IGNORED &&
!excluded(dir, ce->name, &dtype))
continue;
if (ce->ce_flags & CE_UPDATE)
continue;
err = lstat(ce->name, &st);
Expand Down
8 changes: 8 additions & 0 deletions t/t3003-ls-files-exclude.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,12 @@ test_expect_success 'add file to gitignore' '
'
check_all_output

test_expect_success 'ls-files -i lists only tracked-but-ignored files' '
echo content >other-file &&
git add other-file &&
echo file >expect &&
git ls-files -i --exclude-standard >output &&
test_cmp expect output
'

test_done

0 comments on commit 500348a

Please sign in to comment.