diff options
author | Edward Lee <e45lee@uwaterloo.ca> | 2014-05-16 08:09:20 -0400 |
---|---|---|
committer | Edward Lee <e45lee@uwaterloo.ca> | 2014-05-16 08:09:20 -0400 |
commit | bafaf790cd26e6dd827599f2d07d76e82f346e1a (patch) | |
tree | 44bc6dffc56bea4e89cb48c429e4df82fb1c8bc7 | |
parent | 228272ef5828e1e6d42f48acad3a557b340ddc90 (diff) | |
download | libgit2-bafaf790cd26e6dd827599f2d07d76e82f346e1a.tar.gz |
Fixed permissions on template directories.
-rw-r--r-- | src/repository.c | 28 |
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; |