Skip to content

Commit

Permalink
read_directory(): further split treat_path()
Browse files Browse the repository at this point in the history
The next caller I'll be adding won't have an access to struct dirent
because it won't be reading from a directory stream.  Split the main
part of the function further into a separate function to make it usable
by a caller without passing a dirent as long as it knows what type is
feeding the function.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
gitster committed Jan 9, 2010
1 parent 53cc535 commit 16e2cfa
Showing 1 changed file with 29 additions and 21 deletions.
50 changes: 29 additions & 21 deletions dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -631,28 +631,12 @@ enum path_treatment {
path_recurse,
};

static enum path_treatment treat_path(struct dir_struct *dir,
struct dirent *de,
char *path, int path_max,
int baselen,
const struct path_simplify *simplify,
int *len)
static enum path_treatment treat_one_path(struct dir_struct *dir,
char *path, int *len,
const struct path_simplify *simplify,
int dtype, struct dirent *de)
{
int dtype, exclude;

if (is_dot_or_dotdot(de->d_name) || !strcmp(de->d_name, ".git"))
return path_ignored;
*len = strlen(de->d_name);
/* Ignore overly long pathnames! */
if (*len + baselen + 8 > path_max)
return path_ignored;
memcpy(path + baselen, de->d_name, *len + 1);
*len += baselen;
if (simplify_away(path, *len, simplify))
return path_ignored;

dtype = DTYPE(de);
exclude = excluded(dir, path, &dtype);
int exclude = excluded(dir, path, &dtype);
if (exclude && (dir->flags & DIR_COLLECT_IGNORED)
&& in_pathspec(path, *len, simplify))
dir_add_ignored(dir, path, *len);
Expand Down Expand Up @@ -703,6 +687,30 @@ static enum path_treatment treat_path(struct dir_struct *dir,
return path_handled;
}

static enum path_treatment treat_path(struct dir_struct *dir,
struct dirent *de,
char *path, int path_max,
int baselen,
const struct path_simplify *simplify,
int *len)
{
int dtype;

if (is_dot_or_dotdot(de->d_name) || !strcmp(de->d_name, ".git"))
return path_ignored;
*len = strlen(de->d_name);
/* Ignore overly long pathnames! */
if (*len + baselen + 8 > path_max)
return path_ignored;
memcpy(path + baselen, de->d_name, *len + 1);
*len += baselen;
if (simplify_away(path, *len, simplify))
return path_ignored;

dtype = DTYPE(de);
return treat_one_path(dir, path, len, simplify, dtype, de);
}

/*
* Read a directory tree. We currently ignore anything but
* directories, regular files and symlinks. That's because git
Expand Down

0 comments on commit 16e2cfa

Please sign in to comment.