summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Lee <e45lee@uwaterloo.ca>2014-05-16 08:09:20 -0400
committerEdward Lee <e45lee@uwaterloo.ca>2014-05-16 08:09:20 -0400
commitbafaf790cd26e6dd827599f2d07d76e82f346e1a (patch)
tree44bc6dffc56bea4e89cb48c429e4df82fb1c8bc7
parent228272ef5828e1e6d42f48acad3a557b340ddc90 (diff)
downloadlibgit2-bafaf790cd26e6dd827599f2d07d76e82f346e1a.tar.gz
Fixed permissions on template directories.
-rw-r--r--src/repository.c28
1 files 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;