Skip to content

Commit

Permalink
Clean up git-ls-file directory walking library interface
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Linus Torvalds authored and Junio C Hamano committed May 17, 2006
1 parent 453ec4b commit b4189aa
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 24 deletions.
28 changes: 27 additions & 1 deletion dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down Expand Up @@ -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;
Expand Down
2 changes: 0 additions & 2 deletions dir.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 changes: 1 addition & 21 deletions ls-files.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit b4189aa

Please sign in to comment.