summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2007-07-19 00:00:36 (GMT)
committerJunio C Hamano <gitster@pobox.com>2007-07-19 00:00:36 (GMT)
commitc1c10a3f272ec0908e63bc105a5ffe94c1279fba (patch)
treee81e4266bdc05f7015507d89aa357e8cc2005308
parent726f9bced9717fb8b3c1e91228be1cdce514a98e (diff)
parent281a53bb79786a6d7e54f9715cc8ad46fc2bdb0e (diff)
downloadgit-c1c10a3f272ec0908e63bc105a5ffe94c1279fba.zip
git-c1c10a3f272ec0908e63bc105a5ffe94c1279fba.tar.gz
git-c1c10a3f272ec0908e63bc105a5ffe94c1279fba.tar.bz2
Merge branch 'maint'
* maint: Force listingblocks to be monospaced in manpages Do not expect unlink(2) to fail on a directory.
-rw-r--r--Documentation/asciidoc.conf6
-rw-r--r--entry.c37
2 files changed, 36 insertions, 7 deletions
diff --git a/Documentation/asciidoc.conf b/Documentation/asciidoc.conf
index 6b6220d..af5b155 100644
--- a/Documentation/asciidoc.conf
+++ b/Documentation/asciidoc.conf
@@ -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 c540ae1..0625112 100644
--- 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);
}
}