Navigation Menu

Skip to content

Commit

Permalink
Deprecate not providing mod.conf
Browse files Browse the repository at this point in the history
  • Loading branch information
rubenwardy committed Feb 24, 2021
1 parent 92f4c68 commit 9f6167f
Showing 1 changed file with 37 additions and 18 deletions.
55 changes: 37 additions & 18 deletions src/content/mods.cpp
Expand Up @@ -28,6 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "settings.h"
#include "porting.h"
#include "convert_json.h"
#include "script/common/c_internal.h"

bool parseDependsString(std::string &dep, std::unordered_set<char> &symbols)
{
Expand All @@ -44,20 +45,24 @@ bool parseDependsString(std::string &dep, std::unordered_set<char> &symbols)
return !dep.empty();
}

void parseModContents(ModSpec &spec)
static void log_mod_deprecation(const ModSpec &spec, const std::string &warning)
{
// NOTE: this function works in mutual recursion with getModsInPath
Settings info;
info.readConfigFile((spec.path + DIR_DELIM + "mod.conf").c_str());

if (info.exists("name"))
spec.name = info.get("name");
auto handling_mode = get_deprecated_handling_mode();
if (handling_mode != DeprecatedHandlingMode::Ignore) {
std::ostringstream os;
os << warning << " (" << spec.name << " at " << spec.path << ")" << std::endl;

if (info.exists("author"))
spec.author = info.get("author");
if (handling_mode == DeprecatedHandlingMode::Error) {
throw ModError(os.str());
} else {
warningstream << os.str();
}
}
}

if (info.exists("release"))
spec.release = info.getS32("release");
void parseModContents(ModSpec &spec)
{
// NOTE: this function works in mutual recursion with getModsInPath

spec.depends.clear();
spec.optdepends.clear();
Expand All @@ -78,6 +83,20 @@ void parseModContents(ModSpec &spec)
spec.modpack_content = getModsInPath(spec.path, true);

} else {
Settings info;
info.readConfigFile((spec.path + DIR_DELIM + "mod.conf").c_str());

if (info.exists("name"))
spec.name = info.get("name");
else
log_mod_deprecation(spec, "Mods not having a mod.conf file with the name is deprecated.");

if (info.exists("author"))
spec.author = info.get("author");

if (info.exists("release"))
spec.release = info.getS32("release");

// Attempt to load dependencies from mod.conf
bool mod_conf_has_depends = false;
if (info.exists("depends")) {
Expand Down Expand Up @@ -109,6 +128,10 @@ void parseModContents(ModSpec &spec)
std::vector<std::string> dependencies;

std::ifstream is((spec.path + DIR_DELIM + "depends.txt").c_str());

if (is.good())
log_mod_deprecation(spec, "depends.txt is deprecated, please use mod.conf instead.");

while (is.good()) {
std::string dep;
std::getline(is, dep);
Expand All @@ -127,14 +150,10 @@ void parseModContents(ModSpec &spec)
}
}

if (info.exists("description")) {
if (info.exists("description"))
spec.desc = info.get("description");
} else {
std::ifstream is((spec.path + DIR_DELIM + "description.txt")
.c_str());
spec.desc = std::string((std::istreambuf_iterator<char>(is)),
std::istreambuf_iterator<char>());
}
else if (fs::ReadFile(spec.path + DIR_DELIM + "description.txt", spec.desc))
log_mod_deprecation(spec, "description.txt is deprecated, please use mod.conf instead.");
}
}

Expand Down

0 comments on commit 9f6167f

Please sign in to comment.