diff options
author | rubenwardy <rw@rubenwardy.com> | 2021-02-24 10:47:50 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-24 11:47:50 +0100 |
commit | 9f6167fc3bebb337ac065b638ba7222374c769d8 (patch) | |
tree | 5db33a9b4c807a53fe7e0da9b79798174f0ccf3e /src | |
parent | 92f4c68c0ce9dfcd6e1321325bab8d4bfcd626af (diff) | |
download | minetest-9f6167fc3bebb337ac065b638ba7222374c769d8.tar.gz minetest-9f6167fc3bebb337ac065b638ba7222374c769d8.tar.bz2 minetest-9f6167fc3bebb337ac065b638ba7222374c769d8.zip |
Deprecate not providing mod.conf
Diffstat (limited to 'src')
-rw-r--r-- | src/content/mods.cpp | 55 |
1 files changed, 37 insertions, 18 deletions
diff --git a/src/content/mods.cpp b/src/content/mods.cpp index 95ab0290a..434004b29 100644 --- a/src/content/mods.cpp +++ b/src/content/mods.cpp @@ -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) { @@ -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(); @@ -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")) { @@ -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); @@ -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."); } } |