[PATCH 1/1] bugfix for git-checkout-cache --prefix=/symlink/export_dir/ -a
- From
David Greaves <david@dgreaves.com>
- Date
- May 23, 2005, 08:49 UTC
- Message-ID
- <E1Da8d0-0002GR-4m@ash.dgreaves.com>
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 <david@dgreaves.com>
--- commit 18006ac69ae9db97b7d96fd0bfb1bdb6893e318d tree 37580a3d32262d2cee7d28b20474c0f2ceb6faaa parent 2aef5bbae99aeba3551408eae13faea02bf55b67 author David Greaves <david@dgreaves.com> Mon, 23 May 2005 09:42:04 +0100 committer David Greaves <david@dgreaves.com> 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;