diff options
author | Junio C Hamano <junkio@cox.net> | 2006-02-09 00:08:31 -0800 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-02-09 00:08:31 -0800 |
commit | 701ca744e386c2429ca44072ea987bbb4bdac7ce (patch) | |
tree | 79a2cff6dc33fd5a2208990c97acf1c475b74cc5 | |
parent | d19e06fa8f86b611c10115903ef7e50d5de112f0 (diff) | |
download | git-701ca744e386c2429ca44072ea987bbb4bdac7ce.tar.gz git-701ca744e386c2429ca44072ea987bbb4bdac7ce.tar.xz |
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>
-rw-r--r-- | ls-files.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/ls-files.c b/ls-files.c index 6af3b091b..7024cf18e 100644 --- a/ls-files.c +++ b/ls-files.c @@ -474,8 +474,28 @@ static void show_files(void) const char *path = ".", *base = ""; int baselen = prefix_len; - if (baselen) + if (baselen) { 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); qsort(dir, nr_dir, sizeof(struct nond_on_fs *), cmp_name); if (show_others) |