ls-files: excludes should not impact tracked files
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 in9ff768e, but only for --exclude-from. Later, commit63d285caccidentally 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 of9ff768e, while at the same time fixing the accidental behavior of63d285c. This is a good thing, though, as the way that9ff768ebehaved 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>
This commit is contained in:
committed by
Junio C Hamano
parent
f01f1099f4
commit
b5227d80ae
@ -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)
|
||||
@ -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);
|
||||
|
||||
32
t/t3003-ls-files-exclude.sh
Executable file
32
t/t3003-ls-files-exclude.sh
Executable file
@ -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
|
||||
Reference in New Issue
Block a user