Commit db628072 by Russell Belfer

Fixed leaks and added tests

parent dc34da6e
...@@ -713,31 +713,28 @@ static int repo_write_template( ...@@ -713,31 +713,28 @@ static int repo_write_template(
const char *git_dir, const char *file, mode_t mode, const char *content) const char *git_dir, const char *file, mode_t mode, const char *content)
{ {
git_buf path = GIT_BUF_INIT; git_buf path = GIT_BUF_INIT;
int fd; int fd, error = 0;
if (git_buf_joinpath(&path, git_dir, file) < 0) if (git_buf_joinpath(&path, git_dir, file) < 0)
return -1; return -1;
fd = p_open(git_buf_cstr(&path), O_WRONLY | O_CREAT | O_EXCL, mode); 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) if (fd >= 0) {
goto fail; error = p_write(fd, content, strlen(content));
p_close(fd); p_close(fd);
}
else if (errno != EEXIST)
error = fd;
return 0;
fail:
git_buf_free(&path); git_buf_free(&path);
if (error)
giterr_set(GITERR_OS, giterr_set(GITERR_OS,
"Failed to initialize repository with template '%s'", file); "Failed to initialize repository with template '%s'", file);
return -1;
return error;
} }
static int repo_init_structure(const char *git_dir, int is_bare) 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) ...@@ -141,3 +141,27 @@ void test_repo_init__reinit_too_recent_bare_repo(void)
cl_fixture_cleanup("reinit.git"); 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