Commit db628072 by Russell Belfer

Fixed leaks and added tests

parent dc34da6e
......@@ -713,31 +713,28 @@ static int repo_write_template(
const char *git_dir, const char *file, mode_t mode, const char *content)
{
git_buf path = GIT_BUF_INIT;
int fd;
int fd, error = 0;
if (git_buf_joinpath(&path, git_dir, file) < 0)
return -1;
fd = p_open(git_buf_cstr(&path), O_WRONLY | O_CREAT | O_EXCL, mode);
if (fd < 0) {
git_buf_free(&path);
if (errno == EEXIST)
return 0;
goto fail;
}
if (p_write(fd, content, strlen(content)) < 0)
goto fail;
p_close(fd);
if (fd >= 0) {
error = p_write(fd, content, strlen(content));
return 0;
p_close(fd);
}
else if (errno != EEXIST)
error = fd;
fail:
git_buf_free(&path);
giterr_set(GITERR_OS,
"Failed to initialize repository with template '%s'", file);
return -1;
if (error)
giterr_set(GITERR_OS,
"Failed to initialize repository with template '%s'", file);
return error;
}
static int repo_init_structure(const char *git_dir, int is_bare)
......
......@@ -141,3 +141,27 @@ void test_repo_init__reinit_too_recent_bare_repo(void)
cl_fixture_cleanup("reinit.git");
}
void test_repo_init__additional_templates(void)
{
git_buf path = GIT_BUF_INIT;
cl_set_cleanup(&cleanup_repository, "tester");
ensure_repository_init("tester", 0, "tester/.git/", "tester/");
cl_git_pass(
git_buf_joinpath(&path, git_repository_path(_repo), "description"));
cl_assert(git_path_isfile(git_buf_cstr(&path)));
cl_git_pass(
git_buf_joinpath(&path, git_repository_path(_repo), "info/exclude"));
cl_assert(git_path_isfile(git_buf_cstr(&path)));
cl_git_pass(
git_buf_joinpath(&path, git_repository_path(_repo), "hooks"));
cl_assert(git_path_isdir(git_buf_cstr(&path)));
/* won't confirm specific contents of hooks dir since it may vary */
git_buf_free(&path);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment