]> git.proxmox.com Git - libgit2.git/commitdiff
git_repository_init: include dotfiles when copying templates
authorEdward Thomson <ethomson@edwardthomson.com>
Sun, 27 Dec 2015 04:39:22 +0000 (22:39 -0600)
committerEdward Thomson <ethomson@edwardthomson.com>
Sun, 27 Dec 2015 04:41:00 +0000 (22:41 -0600)
Include dotfiles when copying template directory, which will handle
both a template directory itself that begins with a dotfile, and
any dotfiles inside the directory.

src/repository.c
tests/repo/init.c

index 6234cd595549b0f87082d10b4aa550f5034c353e..8a6fef0f6cd79223481c63adfd2e3817138cf9dc 100644 (file)
@@ -1438,7 +1438,9 @@ static int repo_init_structure(
                }
 
                if (tdir) {
-                       uint32_t cpflags = GIT_CPDIR_COPY_SYMLINKS | GIT_CPDIR_SIMPLE_TO_MODE;
+                       uint32_t cpflags = GIT_CPDIR_COPY_SYMLINKS |
+                               GIT_CPDIR_SIMPLE_TO_MODE |
+                               GIT_CPDIR_COPY_DOTFILES;
                        if (opts->mode != GIT_REPOSITORY_INIT_SHARED_UMASK)
                                        cpflags |= GIT_CPDIR_CHMOD_DIRS;
                        error = git_futils_cp_r(tdir, repo_dir, cpflags, dmode);
index b06a813471a60c652d549a331033a4cbada3f538..04d4a5c5ec770b9117fc1dfb4d3a92089f6706a2 100644 (file)
@@ -519,7 +519,8 @@ static void assert_mode_seems_okay(
 
 static const char *template_sandbox(const char *name)
 {
-       git_buf hooks_path = GIT_BUF_INIT, link_path = GIT_BUF_INIT;
+       git_buf hooks_path = GIT_BUF_INIT, link_path = GIT_BUF_INIT,
+               dotfile_path = GIT_BUF_INIT;
        const char *path = cl_fixture(name);
 
        cl_fixture_sandbox(name);
@@ -537,6 +538,12 @@ static const char *template_sandbox(const char *name)
        cl_must_pass(symlink("update.sample", link_path.ptr));
 #endif
 
+       /* create a file starting with a dot */
+       cl_git_pass(git_buf_joinpath(&dotfile_path, hooks_path.ptr, ".dotfile"));
+       cl_git_mkfile(dotfile_path.ptr, "something\n");
+       git_buf_free(&dotfile_path);
+
+       git_buf_free(&dotfile_path);
        git_buf_free(&link_path);
        git_buf_free(&hooks_path);
 
@@ -595,6 +602,10 @@ static void validate_templates(git_repository *repo, const char *template_path)
                template_path, git_repository_path(repo),
                "hooks/link.sample", filemode);
 
+       assert_hooks_match(
+               template_path, git_repository_path(repo),
+               "hooks/.dotfile", filemode);
+
        git_buf_free(&expected);
        git_buf_free(&actual);
        git_buf_free(&repo_description);