Skip to content

Commit

Permalink
ls-files: excludes should not impact tracked files
Browse files Browse the repository at this point in the history
In all parts of git, .gitignore and other exclude files
impact only how we treat untracked files; they should have
no effect on files listed in the index.

This behavior was originally implemented very early on in
9ff768e, but only for --exclude-from. Later, commit 63d285c
accidentally caused us to trigger the behavior for
--exclude-per-directory.

This patch totally ignores excludes for files found in the
index. This means we are reversing the original intent of
9ff768e, while at the same time fixing the accidental
behavior of 63d285c. This is a good thing, though, as the
way that 9ff768e behaved does not really make sense with the
way exclusions are used in modern git.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
peff authored and gitster committed Oct 12, 2009
1 parent f01f109 commit b5227d8
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 8 deletions.
8 changes: 0 additions & 8 deletions builtin-ls-files.c
Expand Up @@ -175,10 +175,6 @@ 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 (excluded(dir, ce->name, &dtype) !=
!!(dir->flags & DIR_SHOW_IGNORED))
continue;
if (show_unmerged && !ce_stage(ce))
continue;
if (ce->ce_flags & CE_UPDATE)
Expand All @@ -191,10 +187,6 @@ 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 (excluded(dir, ce->name, &dtype) !=
!!(dir->flags & DIR_SHOW_IGNORED))
continue;
if (ce->ce_flags & CE_UPDATE)
continue;
err = lstat(ce->name, &st);
Expand Down
32 changes: 32 additions & 0 deletions t/t3003-ls-files-exclude.sh
@@ -0,0 +1,32 @@
#!/bin/sh

test_description='ls-files --exclude does not affect index files'
. ./test-lib.sh

test_expect_success 'create repo with file' '
echo content >file &&
git add file &&
git commit -m file &&
echo modification >file
'

check_output() {
test_expect_success "ls-files output contains file ($1)" "
echo '$2' >expect &&
git ls-files --exclude-standard --$1 >output &&
test_cmp expect output
"
}

check_all_output() {
check_output 'cached' 'file'
check_output 'modified' 'file'
}

check_all_output
test_expect_success 'add file to gitignore' '
echo file >.gitignore
'
check_all_output

test_done

0 comments on commit b5227d8

Please sign in to comment.