From bafaf790cd26e6dd827599f2d07d76e82f346e1a Mon Sep 17 00:00:00 2001 From: Edward Lee Date: Fri, 16 May 2014 08:09:20 -0400 Subject: [PATCH] Fixed permissions on template directories. --- src/repository.c | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/repository.c b/src/repository.c index b0db5484a..695351977 100644 --- a/src/repository.c +++ b/src/repository.c @@ -1190,6 +1190,7 @@ static int repo_init_structure( bool external_tpl = ((opts->flags & GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE) != 0); mode_t dmode = pick_dir_mode(opts); + bool chmod = opts->mode != GIT_REPOSITORY_INIT_SHARED_UMASK; /* Hide the ".git" directory */ #ifdef GIT_WIN32 @@ -1230,10 +1231,17 @@ static int repo_init_structure( default_template = true; } - if (tdir) - error = git_futils_cp_r(tdir, repo_dir, - GIT_CPDIR_COPY_SYMLINKS | GIT_CPDIR_CHMOD_DIRS | - GIT_CPDIR_SIMPLE_TO_MODE, dmode); + if (tdir) { + if (chmod) { + error = git_futils_cp_r(tdir, repo_dir, + GIT_CPDIR_COPY_SYMLINKS | GIT_CPDIR_CHMOD_DIRS | + GIT_CPDIR_SIMPLE_TO_MODE, dmode); + } else { + error = git_futils_cp_r(tdir, repo_dir, + GIT_CPDIR_COPY_SYMLINKS | + GIT_CPDIR_SIMPLE_TO_MODE, dmode); + } + } git_buf_free(&template_buf); git_config_free(cfg); @@ -1254,9 +1262,15 @@ static int repo_init_structure( * - only create files if no external template was specified */ for (tpl = repo_template; !error && tpl->path; ++tpl) { - if (!tpl->content) - error = git_futils_mkdir( - tpl->path, repo_dir, dmode, GIT_MKDIR_PATH | GIT_MKDIR_CHMOD); + if (!tpl->content) { + if (chmod) { + error = git_futils_mkdir( + tpl->path, repo_dir, dmode, GIT_MKDIR_PATH | GIT_MKDIR_CHMOD); + } else { + error = git_futils_mkdir( + tpl->path, repo_dir, dmode, GIT_MKDIR_PATH); + } + } else if (!external_tpl) { const char *content = tpl->content; -- 2.39.5