Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
ls-files: honour per-directory ignore file from higher directories.
author
Junio C Hamano
<junkio@cox.net>
Thu, 9 Feb 2006 08:08:31 +0000
(
00:08
-0800)
committer
Junio C Hamano
<junkio@cox.net>
Thu, 9 Feb 2006 08:08:31 +0000
(
00:08
-0800)
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>
ls-files.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
d19e06f
)
diff --git
a/ls-files.c
b/ls-files.c
index 6af3b091b049d8ded1999405b4da7191f2b36a4c..7024cf18e1b739ed4944b89ddddaeff15d59f9ee 100644
(file)
--- 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;
const char *path = ".", *base = "";
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);
qsort(dir, nr_dir, sizeof(struct nond_on_fs *), cmp_name);
if (show_others)
read_directory(path, base, baselen);
qsort(dir, nr_dir, sizeof(struct nond_on_fs *), cmp_name);
if (show_others)