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.

Documentation/asciidoc.conf
entry.c

index 6b6220dfdbd6cacb8a05be4995279bbd0487fada..af5b1558a63219a3eac2570e1cecc97e3008f96f 100644 (file)
@@ -27,7 +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[]
diff --git a/entry.c b/entry.c
index c540ae13e858685faa8dbbada5b064074235ae6d..0625112339deee7418571b5d513f923d6f00092b 100644 (file)
--- a/entry.c
+++ b/entry.c
@@ -8,17 +8,40 @@ static void create_directories(const char *path, const struct checkout *state)
        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);
                }
        }