]> asedeno.scripts.mit.edu Git - git.git/commitdiff
Merge branch 'maint-1.6.0' into maint
authorJunio C Hamano <gitster@pobox.com>
Wed, 6 May 2009 05:51:31 +0000 (22:51 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 6 May 2009 05:51:31 +0000 (22:51 -0700)
* maint-1.6.0:
  dir.c: Fix two minor grammatical errors in comments

1  2 
dir.c

diff --combined dir.c
index 2245749b3fe74f793bd1997d2238883abe61fc07,4e6b988d37a0fb58fde4a170ebf7fe3702a3a474..8b6c1f4755318375878e3cb7290441fcdf6a4eaa
--- 1/dir.c
--- 2/dir.c
+++ b/dir.c
@@@ -52,8 -52,13 +52,8 @@@ int common_prefix(const char **pathspec
        return prefix;
  }
  
 -static inline int special_char(unsigned char c1)
 -{
 -      return !c1 || c1 == '*' || c1 == '[' || c1 == '?' || c1 == '\\';
 -}
 -
  /*
-  * Does 'match' matches the given name?
+  * Does 'match' match the given name?
   * A match is found if
   *
   * (1) the 'match' string is leading directory of 'name', or
@@@ -75,7 -80,7 +75,7 @@@ static int match_one(const char *match
        for (;;) {
                unsigned char c1 = *match;
                unsigned char c2 = *name;
 -              if (special_char(c1))
 +              if (c1 == '\0' || is_glob_special(c1))
                        break;
                if (c1 != c2)
                        return 0;
   * and a mark is left in seen[] array for pathspec element that
   * actually matched anything.
   */
 -int match_pathspec(const char **pathspec, const char *name, int namelen, int prefix, char *seen)
 +int match_pathspec(const char **pathspec, const char *name, int namelen,
 +              int prefix, char *seen)
  {
 -      int retval;
 -      const char *match;
 +      int i, retval = 0;
 +
 +      if (!pathspec)
 +              return 1;
  
        name += prefix;
        namelen -= prefix;
  
 -      for (retval = 0; (match = *pathspec++) != NULL; seen++) {
 +      for (i = 0; pathspec[i] != NULL; i++) {
                int how;
 -              if (retval && *seen == MATCHED_EXACTLY)
 +              const char *match = pathspec[i] + prefix;
 +              if (seen && seen[i] == MATCHED_EXACTLY)
                        continue;
 -              match += prefix;
                how = match_one(match, name, namelen);
                if (how) {
                        if (retval < how)
                                retval = how;
 -                      if (*seen < how)
 -                              *seen = how;
 +                      if (seen && seen[i] < how)
 +                              seen[i] = how;
                }
        }
        return retval;
@@@ -290,7 -292,7 +290,7 @@@ static void prep_exclude(struct dir_str
        dir->basebuf[baselen] = '\0';
  }
  
- /* Scan the list and let the last match determines the fate.
+ /* Scan the list and let the last match determine the fate.
   * Return 1 for exclude, 0 for include and -1 for undecided.
   */
  static int excluded_1(const char *pathname,
@@@ -385,7 -387,7 +385,7 @@@ static struct dir_entry *dir_entry_new(
        return ent;
  }
  
 -struct dir_entry *dir_add_name(struct dir_struct *dir, const char *pathname, int len)
 +static struct dir_entry *dir_add_name(struct dir_struct *dir, const char *pathname, int len)
  {
        if (cache_name_exists(pathname, len, ignore_case))
                return NULL;
        return dir->entries[dir->nr++] = dir_entry_new(pathname, len);
  }
  
 -struct dir_entry *dir_add_ignored(struct dir_struct *dir, const char *pathname, int len)
 +static struct dir_entry *dir_add_ignored(struct dir_struct *dir, const char *pathname, int len)
  {
        if (cache_name_pos(pathname, len) >= 0)
                return NULL;
@@@ -588,8 -590,10 +588,8 @@@ static int read_directory_recursive(str
                        int len, dtype;
                        int exclude;
  
 -                      if ((de->d_name[0] == '.') &&
 -                          (de->d_name[1] == 0 ||
 -                           !strcmp(de->d_name + 1, ".") ||
 -                           !strcmp(de->d_name + 1, "git")))
 +                      if (is_dot_or_dotdot(de->d_name) ||
 +                           !strcmp(de->d_name, ".git"))
                                continue;
                        len = strlen(de->d_name);
                        /* Ignore overly long pathnames! */
@@@ -676,12 -680,17 +676,12 @@@ static int cmp_name(const void *p1, con
   */
  static int simple_length(const char *match)
  {
 -      const char special[256] = {
 -              [0] = 1, ['?'] = 1,
 -              ['\\'] = 1, ['*'] = 1,
 -              ['['] = 1
 -      };
        int len = -1;
  
        for (;;) {
                unsigned char c = *match++;
                len++;
 -              if (special[c])
 +              if (c == '\0' || is_glob_special(c))
                        return len;
        }
  }
@@@ -718,12 -727,8 +718,12 @@@ static void free_simplify(struct path_s
  
  int read_directory(struct dir_struct *dir, const char *path, const char *base, int baselen, const char **pathspec)
  {
 -      struct path_simplify *simplify = create_simplify(pathspec);
 +      struct path_simplify *simplify;
 +
 +      if (has_symlink_leading_path(strlen(path), path))
 +              return dir->nr;
  
 +      simplify = create_simplify(pathspec);
        read_directory_recursive(dir, path, base, baselen, 0, simplify);
        free_simplify(simplify);
        qsort(dir->entries, dir->nr, sizeof(struct dir_entry *), cmp_name);
@@@ -780,25 -785,6 +780,25 @@@ int is_inside_dir(const char *dir
        return get_relative_cwd(buffer, sizeof(buffer), dir) != NULL;
  }
  
 +int is_empty_dir(const char *path)
 +{
 +      DIR *dir = opendir(path);
 +      struct dirent *e;
 +      int ret = 1;
 +
 +      if (!dir)
 +              return 0;
 +
 +      while ((e = readdir(dir)) != NULL)
 +              if (!is_dot_or_dotdot(e->d_name)) {
 +                      ret = 0;
 +                      break;
 +              }
 +
 +      closedir(dir);
 +      return ret;
 +}
 +
  int remove_dir_recursively(struct strbuf *path, int only_empty)
  {
        DIR *dir = opendir(path->buf);
        len = path->len;
        while ((e = readdir(dir)) != NULL) {
                struct stat st;
 -              if ((e->d_name[0] == '.') &&
 -                  ((e->d_name[1] == 0) ||
 -                   ((e->d_name[1] == '.') && e->d_name[2] == 0)))
 -                      continue; /* "." and ".." */
 +              if (is_dot_or_dotdot(e->d_name))
 +                      continue;
  
                strbuf_setlen(path, len);
                strbuf_addstr(path, e->d_name);