fix: handle errors in nix::createDirs

the `std::filesystem::create_directories` can fail due to insufficient
permissions. We convert this error into a `SysError` and catch it
wherever required.
This commit is contained in:
siddhantCodes 2024-06-20 19:53:25 +05:30
parent 857e380c7d
commit 85b7989764
3 changed files with 8 additions and 4 deletions

View File

@ -107,8 +107,8 @@ ReadlineLikeInteracter::Guard ReadlineLikeInteracter::init(detail::ReplCompleter
rl_readline_name = "nix-repl";
try {
createDirs(dirOf(historyFile));
} catch (std::filesystem::filesystem_error & e) {
warn(e.what());
} catch (SystemError & e) {
logWarning(e.info());
}
#ifndef USE_READLINE
el_hist_size = 1000;

View File

@ -1304,7 +1304,7 @@ ref<Store> openStore(StoreReference && storeURI)
if (!pathExists(chrootStore)) {
try {
createDirs(chrootStore);
} catch (std::filesystem::filesystem_error & e) {
} catch (SystemError & e) {
return std::make_shared<LocalStore>(params);
}
warn("'%s' does not exist, so Nix will use '%s' as a chroot store", stateDir, chrootStore);

View File

@ -415,7 +415,11 @@ void deletePath(const fs::path & path)
void createDirs(const Path & path)
{
fs::create_directories(path);
try {
fs::create_directories(path);
} catch (fs::filesystem_error & e) {
throw SysError("creating directory '%1%'", path);
}
}