[PATCH 1/1] bugfix for git-checkout-cache --prefix=/symlink/export_dir/ -a
From: David Greaves <hidden>
Date: 2016-06-15 22:41:58
If there's a prefix then allow symlinks to directories in it. This fixes a bug where git-checkout-cache --prefix=/symlink/export_dir/ -a otherwise fails. Signed-off-by: David Greaves <redacted> --- commit 18006ac69ae9db97b7d96fd0bfb1bdb6893e318d tree 37580a3d32262d2cee7d28b20474c0f2ceb6faaa parent 2aef5bbae99aeba3551408eae13faea02bf55b67 author David Greaves [off-list ref] Mon, 23 May 2005 09:42:04 +0100 committer David Greaves [off-list ref] Mon, 23 May 2005 09:42:04 +0100 checkout-cache.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-) Index: checkout-cache.c ===================================================================
--- 99282828d5af15b0af0d0eac13a5b1194e88342c/checkout-cache.c (mode:100644)
+++ 37580a3d32262d2cee7d28b20474c0f2ceb6faaa/checkout-cache.c (mode:100644)@@ -37,20 +37,25 @@ #include "cache.h" static int force = 0, quiet = 0, not_new = 0, refresh_cache = 0; +const char *base_dir = ""; static void create_directories(const char *path) { int len = strlen(path); char *buf = xmalloc(len + 1); const char *slash = path; + int baselen = strlen(base_dir); while ((slash = strchr(slash+1, '/')) != NULL) { + struct stat st; len = slash - path; memcpy(buf, path, len); buf[len] = 0; + if (slash - path <= baselen && + !stat(buf, &st) && S_ISDIR(st.st_mode)) + continue; /* allow symlinks only in --prefix */ if (mkdir(buf, 0755)) { if (errno == EEXIST) { - struct stat st; if (!lstat(buf, &st) && S_ISDIR(st.st_mode)) continue; /* ok */ if (force && !unlink(buf) && !mkdir(buf, 0755))
@@ -229,7 +234,6 @@ int main(int argc, char **argv) { int i, force_filename = 0; - const char *base_dir = ""; struct cache_file cache_file; int newfd = -1;