Merge branch 'mh/safe-create-leading-directories'
Code clean-up and protection against concurrent write access to the ref namespace. * mh/safe-create-leading-directories: rename_tmp_log(): on SCLD_VANISHED, retry rename_tmp_log(): limit the number of remote_empty_directories() attempts rename_tmp_log(): handle a possible mkdir/rmdir race rename_ref(): extract function rename_tmp_log() remove_dir_recurse(): handle disappearing files and directories remove_dir_recurse(): tighten condition for removing unreadable dir lock_ref_sha1_basic(): if locking fails with ENOENT, retry lock_ref_sha1_basic(): on SCLD_VANISHED, retry safe_create_leading_directories(): add new error value SCLD_VANISHED cmd_init_db(): when creating directories, handle errors conservatively safe_create_leading_directories(): introduce enum for return values safe_create_leading_directories(): always restore slash at end of loop safe_create_leading_directories(): split on first of multiple slashes safe_create_leading_directories(): rename local variable safe_create_leading_directories(): add explicit "slash" pointer safe_create_leading_directories(): reduce scope of local variable safe_create_leading_directories(): fix format of "if" chaining
This commit is contained in:
@ -515,13 +515,14 @@ int cmd_init_db(int argc, const char **argv, const char *prefix)
|
||||
saved = shared_repository;
|
||||
shared_repository = 0;
|
||||
switch (safe_create_leading_directories_const(argv[0])) {
|
||||
case -3:
|
||||
case SCLD_OK:
|
||||
case SCLD_PERMS:
|
||||
break;
|
||||
case SCLD_EXISTS:
|
||||
errno = EEXIST;
|
||||
/* fallthru */
|
||||
case -1:
|
||||
die_errno(_("cannot mkdir %s"), argv[0]);
|
||||
break;
|
||||
default:
|
||||
die_errno(_("cannot mkdir %s"), argv[0]);
|
||||
break;
|
||||
}
|
||||
shared_repository = saved;
|
||||
|
Reference in New Issue
Block a user