зеркало из https://github.com/microsoft/git.git
ls-files: honour per-directory ignore file from higher directories.
When git-ls-files -o --exclude-per-directory=.gitignore is run from a subdirectory, it did not read from .gitignore from its parent directory. Reading from them makes output from these two commands consistent: $ git ls-files -o --exclude-per-directory=.gitignore Documentation $ cd Documentation && git ls-files -o --exclude-per-directory=.gitignore Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Родитель
d19e06fa8f
Коммит
701ca744e3
22
ls-files.c
22
ls-files.c
|
@ -474,8 +474,28 @@ static void show_files(void)
|
||||||
const char *path = ".", *base = "";
|
const char *path = ".", *base = "";
|
||||||
int baselen = prefix_len;
|
int baselen = prefix_len;
|
||||||
|
|
||||||
if (baselen)
|
if (baselen) {
|
||||||
path = base = prefix;
|
path = base = prefix;
|
||||||
|
if (exclude_per_dir) {
|
||||||
|
char *p, *pp = xmalloc(baselen+1);
|
||||||
|
memcpy(pp, prefix, baselen+1);
|
||||||
|
p = pp;
|
||||||
|
while (1) {
|
||||||
|
char save = *p;
|
||||||
|
*p = 0;
|
||||||
|
push_exclude_per_directory(pp, p-pp);
|
||||||
|
*p++ = save;
|
||||||
|
if (!save)
|
||||||
|
break;
|
||||||
|
p = strchr(p, '/');
|
||||||
|
if (p)
|
||||||
|
p++;
|
||||||
|
else
|
||||||
|
p = pp + baselen;
|
||||||
|
}
|
||||||
|
free(pp);
|
||||||
|
}
|
||||||
|
}
|
||||||
read_directory(path, base, baselen);
|
read_directory(path, base, baselen);
|
||||||
qsort(dir, nr_dir, sizeof(struct nond_on_fs *), cmp_name);
|
qsort(dir, nr_dir, sizeof(struct nond_on_fs *), cmp_name);
|
||||||
if (show_others)
|
if (show_others)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче