1
0
mirror of https://github.com/minetest/minetest.git synced 2024-09-27 15:00:30 +02:00

Optimize folder handling in 'files' mod storage backend

This regressed in bf22569019.
This commit is contained in:
sfan5 2022-01-15 17:28:59 +01:00
parent b02b381af2
commit 42839fa1db

View File

@ -430,35 +430,28 @@ void ModMetadataDatabaseFiles::beginSave()
void ModMetadataDatabaseFiles::endSave() void ModMetadataDatabaseFiles::endSave()
{ {
if (m_modified.empty())
return;
if (!fs::CreateAllDirs(m_storage_dir)) { if (!fs::CreateAllDirs(m_storage_dir)) {
errorstream << "ModMetadataDatabaseFiles: Unable to save. '" << m_storage_dir errorstream << "ModMetadataDatabaseFiles: Unable to save. '"
<< "' tree cannot be created." << std::endl; << m_storage_dir << "' cannot be created." << std::endl;
return;
}
if (!fs::IsDir(m_storage_dir)) {
errorstream << "ModMetadataDatabaseFiles: Unable to save. '"
<< m_storage_dir << "' is not a directory." << std::endl;
return; return;
} }
for (auto it = m_modified.begin(); it != m_modified.end();) { for (auto it = m_modified.begin(); it != m_modified.end();) {
const std::string &modname = *it; const std::string &modname = *it;
if (!fs::PathExists(m_storage_dir)) {
if (!fs::CreateAllDirs(m_storage_dir)) {
errorstream << "ModMetadataDatabaseFiles[" << modname
<< "]: Unable to save. '" << m_storage_dir
<< "' tree cannot be created." << std::endl;
++it;
continue;
}
} else if (!fs::IsDir(m_storage_dir)) {
errorstream << "ModMetadataDatabaseFiles[" << modname << "]: Unable to save. '"
<< m_storage_dir << "' is not a directory." << std::endl;
++it;
continue;
}
const Json::Value &json = m_mod_meta[modname]; const Json::Value &json = m_mod_meta[modname];
if (!fs::safeWriteToFile(m_storage_dir + DIR_DELIM + modname, fastWriteJson(json))) { if (!fs::safeWriteToFile(m_storage_dir + DIR_DELIM + modname, fastWriteJson(json))) {
errorstream << "ModMetadataDatabaseFiles[" << modname errorstream << "ModMetadataDatabaseFiles[" << modname
<< "]: failed write file." << std::endl; << "]: failed to write file." << std::endl;
++it; ++it;
continue; continue;
} }
@ -484,8 +477,8 @@ void ModMetadataDatabaseFiles::listMods(std::vector<std::string> *res)
Json::Value *ModMetadataDatabaseFiles::getOrCreateJson(const std::string &modname) Json::Value *ModMetadataDatabaseFiles::getOrCreateJson(const std::string &modname)
{ {
auto found = m_mod_meta.find(modname); auto found = m_mod_meta.find(modname);
if (found == m_mod_meta.end()) { if (found != m_mod_meta.end())
fs::CreateAllDirs(m_storage_dir); return &found->second;
Json::Value meta(Json::objectValue); Json::Value meta(Json::objectValue);
@ -499,14 +492,10 @@ Json::Value *ModMetadataDatabaseFiles::getOrCreateJson(const std::string &modnam
if (!Json::parseFromStream(builder, is, &meta, &errs)) { if (!Json::parseFromStream(builder, is, &meta, &errs)) {
errorstream << "ModMetadataDatabaseFiles[" << modname errorstream << "ModMetadataDatabaseFiles[" << modname
<< "]: failed read data (Json decoding failure). Message: " << "]: failed to decode data: " << errs << std::endl;
<< errs << std::endl;
return nullptr; return nullptr;
} }
} }
return &(m_mod_meta[modname] = meta); return &(m_mod_meta[modname] = meta);
} else {
return &found->second;
}
} }