]> git.proxmox.com Git - libgit2.git/commitdiff
Fixed permissions on template directories.
authorEdward Lee <e45lee@uwaterloo.ca>
Fri, 16 May 2014 12:09:20 +0000 (08:09 -0400)
committerEdward Lee <e45lee@uwaterloo.ca>
Fri, 16 May 2014 12:09:20 +0000 (08:09 -0400)
src/repository.c

index b0db5484a8e307d76f9e8f46c598623a5a905728..695351977877be2150f7d830a4ae03e94d13bd91 100644 (file)
@@ -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;