Skip to content

Commit

Permalink
init-db: die on config errors when initializing empty repo
Browse files Browse the repository at this point in the history
When creating an empty repository with `git init-db` we do not
check for error codes returned by `git_config_set` functions.
This may cause the user to end up with an inconsistent repository
without any indication for the user.

Fix this problem by dying early with an error message when we are
unable to write the configuration files to disk.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Patrick Steinhardt authored and Junio C Hamano committed Feb 22, 2016
1 parent 2ee35c4 commit 695009b
Showing 1 changed file with 10 additions and 10 deletions.
20 changes: 10 additions & 10 deletions builtin/init-db.c
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ static int create_default_files(const char *template_path)
/* This forces creation of new config file */
xsnprintf(repo_version_string, sizeof(repo_version_string),
"%d", GIT_REPO_VERSION);
git_config_set("core.repositoryformatversion", repo_version_string);
git_config_set_or_die("core.repositoryformatversion", repo_version_string);

/* Check filemode trustability */
path = git_path_buf(&buf, "config");
Expand All @@ -241,18 +241,18 @@ static int create_default_files(const char *template_path)
if (filemode && !reinit && (st1.st_mode & S_IXUSR))
filemode = 0;
}
git_config_set("core.filemode", filemode ? "true" : "false");
git_config_set_or_die("core.filemode", filemode ? "true" : "false");

if (is_bare_repository())
git_config_set("core.bare", "true");
git_config_set_or_die("core.bare", "true");
else {
const char *work_tree = get_git_work_tree();
git_config_set("core.bare", "false");
git_config_set_or_die("core.bare", "false");
/* allow template config file to override the default */
if (log_all_ref_updates == -1)
git_config_set("core.logallrefupdates", "true");
git_config_set_or_die("core.logallrefupdates", "true");
if (needs_work_tree_config(get_git_dir(), work_tree))
git_config_set("core.worktree", work_tree);
git_config_set_or_die("core.worktree", work_tree);
}

if (!reinit) {
Expand All @@ -265,12 +265,12 @@ static int create_default_files(const char *template_path)
S_ISLNK(st1.st_mode))
unlink(path); /* good */
else
git_config_set("core.symlinks", "false");
git_config_set_or_die("core.symlinks", "false");

/* Check if the filesystem is case-insensitive */
path = git_path_buf(&buf, "CoNfIg");
if (!access(path, F_OK))
git_config_set("core.ignorecase", "true");
git_config_set_or_die("core.ignorecase", "true");
probe_utf8_pathname_composition();
}

Expand Down Expand Up @@ -386,8 +386,8 @@ int init_db(const char *template_dir, unsigned int flags)
xsnprintf(buf, sizeof(buf), "%d", OLD_PERM_EVERYBODY);
else
die("BUG: invalid value for shared_repository");
git_config_set("core.sharedrepository", buf);
git_config_set("receive.denyNonFastforwards", "true");
git_config_set_or_die("core.sharedrepository", buf);
git_config_set_or_die("receive.denyNonFastforwards", "true");
}

if (!(flags & INIT_DB_QUIET)) {
Expand Down

0 comments on commit 695009b

Please sign in to comment.