Code

Merge branch 'maint'
authorJunio C Hamano <gitster@pobox.com>
Thu, 19 Jul 2007 00:00:36 +0000 (17:00 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 19 Jul 2007 00:00:36 +0000 (17:00 -0700)
* maint:
  Force listingblocks to be monospaced in manpages
  Do not expect unlink(2) to fail on a directory.

1  2 
Documentation/asciidoc.conf
entry.c

index 6b6220dfdbd6cacb8a05be4995279bbd0487fada,a0d8459e21e8ba91df8f3458c49ba1cd825d7706..af5b1558a63219a3eac2570e1cecc97e3008f96f
@@@ -27,7 -27,13 +27,13 @@@ ifdef::backend-docbook[
  [listingblock]
  <example><title>{title}</title>
  <literallayout>
+ ifdef::doctype-manpage[]
+ &#10;.ft C&#10;
+ endif::doctype-manpage[]
  |
+ ifdef::doctype-manpage[]
+ &#10;.ft&#10;
+ endif::doctype-manpage[]
  </literallayout>
  {title#}</example>
  endif::backend-docbook[]
@@@ -55,3 -61,5 +61,3 @@@ ifdef::backend-xhtml11[
  [gitlink-inlinemacro]
  <a href="{target}.html">{target}{0?({0})}</a>
  endif::backend-xhtml11[]
 -
 -
diff --combined entry.c
index c540ae13e858685faa8dbbada5b064074235ae6d,23687af7d5d140fa3ddc7a884acfa8a3412ed869..0625112339deee7418571b5d513f923d6f00092b
+++ b/entry.c
@@@ -8,17 -8,40 +8,40 @@@ static void create_directories(const ch
        const char *slash = path;
  
        while ((slash = strchr(slash+1, '/')) != NULL) {
+               struct stat st;
+               int stat_status;
                len = slash - path;
                memcpy(buf, path, len);
                buf[len] = 0;
+               if (len <= state->base_dir_len)
+                       /*
+                        * checkout-index --prefix=<dir>; <dir> is
+                        * allowed to be a symlink to an existing
+                        * directory.
+                        */
+                       stat_status = stat(buf, &st);
+               else
+                       /*
+                        * if there currently is a symlink, we would
+                        * want to replace it with a real directory.
+                        */
+                       stat_status = lstat(buf, &st);
+               if (!stat_status && S_ISDIR(st.st_mode))
+                       continue; /* ok, it is already a directory. */
+               /*
+                * We know stat_status == 0 means something exists
+                * there and this mkdir would fail, but that is an
+                * error codepath; we do not care, as we unlink and
+                * mkdir again in such a case.
+                */
                if (mkdir(buf, 0777)) {
-                       if (errno == EEXIST) {
-                               struct stat st;
-                               if (len > state->base_dir_len && state->force && !unlink(buf) && !mkdir(buf, 0777))
-                                       continue;
-                               if (!stat(buf, &st) && S_ISDIR(st.st_mode))
-                                       continue; /* ok */
-                       }
+                       if (errno == EEXIST && state->force &&
+                           !unlink(buf) && !mkdir(buf, 0777))
+                               continue;
                        die("cannot create directory at %s", buf);
                }
        }
@@@ -31,7 -54,7 +54,7 @@@ static void remove_subtree(const char *
        struct dirent *de;
        char pathbuf[PATH_MAX];
        char *name;
 -      
 +
        if (!dir)
                die("cannot opendir %s (%s)", path, strerror(errno));
        strcpy(pathbuf, path);
@@@ -145,7 -168,7 +168,7 @@@ static int write_entry(struct cache_ent
                                                 "symlink %s (%s)", path, strerror(errno));
                }
                break;
 -      case S_IFDIRLNK:
 +      case S_IFGITLINK:
                if (to_tempfile)
                        return error("git-checkout-index: cannot create temporary subproject %s", path);
                if (mkdir(path, 0777) < 0)
@@@ -194,7 -217,7 +217,7 @@@ int checkout_entry(struct cache_entry *
                unlink(path);
                if (S_ISDIR(st.st_mode)) {
                        /* If it is a gitlink, leave it alone! */
 -                      if (S_ISDIRLNK(ntohl(ce->ce_mode)))
 +                      if (S_ISGITLINK(ntohl(ce->ce_mode)))
                                return 0;
                        if (!state->force)
                                return error("%s is a directory", path);