Clean up git-ls-file directory walking library interface
This moves the code to add the per-directory ignore files for the base directory into the library routine. That not only allows us to turn the function push_exclude_per_directory() static again, it also simplifies the library interface a lot (the caller no longer needs to worry about any of the per-directory exclude files at all). Signed-off-by: Linus Torvalds <torvalds@osdl.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
453ec4bdf4
commit
b4189aa848
28
dir.c
28
dir.c
@ -78,7 +78,7 @@ void add_excludes_from_file(struct dir_struct *dir, const char *fname)
|
||||
die("cannot use %s as an exclude file", fname);
|
||||
}
|
||||
|
||||
int push_exclude_per_directory(struct dir_struct *dir, const char *base, int baselen)
|
||||
static int push_exclude_per_directory(struct dir_struct *dir, const char *base, int baselen)
|
||||
{
|
||||
char exclude_file[PATH_MAX];
|
||||
struct exclude_list *el = &dir->exclude_list[EXC_DIRS];
|
||||
@ -289,6 +289,32 @@ static int cmp_name(const void *p1, const void *p2)
|
||||
|
||||
int read_directory(struct dir_struct *dir, const char *path, const char *base, int baselen)
|
||||
{
|
||||
/*
|
||||
* Make sure to do the per-directory exclude for all the
|
||||
* directories leading up to our base.
|
||||
*/
|
||||
if (baselen) {
|
||||
if (dir->exclude_per_dir) {
|
||||
char *p, *pp = xmalloc(baselen+1);
|
||||
memcpy(pp, base, baselen+1);
|
||||
p = pp;
|
||||
while (1) {
|
||||
char save = *p;
|
||||
*p = 0;
|
||||
push_exclude_per_directory(dir, pp, p-pp);
|
||||
*p++ = save;
|
||||
if (!save)
|
||||
break;
|
||||
p = strchr(p, '/');
|
||||
if (p)
|
||||
p++;
|
||||
else
|
||||
p = pp + baselen;
|
||||
}
|
||||
free(pp);
|
||||
}
|
||||
}
|
||||
|
||||
read_directory_recursive(dir, path, base, baselen);
|
||||
qsort(dir->entries, dir->nr, sizeof(struct dir_entry *), cmp_name);
|
||||
return dir->nr;
|
||||
|
2
dir.h
2
dir.h
@ -44,7 +44,5 @@ extern int excluded(struct dir_struct *, const char *);
|
||||
extern void add_excludes_from_file(struct dir_struct *, const char *fname);
|
||||
extern void add_exclude(const char *string, const char *base,
|
||||
int baselen, struct exclude_list *which);
|
||||
extern int push_exclude_per_directory(struct dir_struct *,
|
||||
const char *base, int baselen);
|
||||
|
||||
#endif
|
||||
|
22
ls-files.c
22
ls-files.c
@ -215,28 +215,8 @@ static void show_files(struct dir_struct *dir)
|
||||
const char *path = ".", *base = "";
|
||||
int baselen = prefix_len;
|
||||
|
||||
if (baselen) {
|
||||
if (baselen)
|
||||
path = base = prefix;
|
||||
if (dir->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(dir, pp, p-pp);
|
||||
*p++ = save;
|
||||
if (!save)
|
||||
break;
|
||||
p = strchr(p, '/');
|
||||
if (p)
|
||||
p++;
|
||||
else
|
||||
p = pp + baselen;
|
||||
}
|
||||
free(pp);
|
||||
}
|
||||
}
|
||||
read_directory(dir, path, base, baselen);
|
||||
if (show_others)
|
||||
show_other_files(dir);
|
||||
|
Loading…
Reference in New Issue
Block a user