summaryrefslogtreecommitdiff
path: root/ls-files.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2006-02-09 08:08:31 (GMT)
committerJunio C Hamano <junkio@cox.net>2006-02-09 08:08:31 (GMT)
commit701ca744e386c2429ca44072ea987bbb4bdac7ce (patch)
tree79a2cff6dc33fd5a2208990c97acf1c475b74cc5 /ls-files.c
parentd19e06fa8f86b611c10115903ef7e50d5de112f0 (diff)
downloadgit-701ca744e386c2429ca44072ea987bbb4bdac7ce.zip
git-701ca744e386c2429ca44072ea987bbb4bdac7ce.tar.gz
git-701ca744e386c2429ca44072ea987bbb4bdac7ce.tar.bz2
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>
Diffstat (limited to 'ls-files.c')
-rw-r--r--ls-files.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/ls-files.c b/ls-files.c
index 6af3b09..7024cf1 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)