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, commit63d285c
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 of9ff768e
, while at the same time fixing the accidental behavior of63d285c
. This is a good thing, though, as the way that9ff768e
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>
This commit is contained in:
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
|
Loading…
Reference in New Issue
Block a user