Fix alpha legacy dir detection, Fix SemVer value ctor
This commit is contained in:
parent
bdaf1b01be
commit
d671e06c32
4 changed files with 24 additions and 6 deletions
|
@ -620,7 +620,7 @@ semver_numeric (semver_t *x) {
|
|||
return num;
|
||||
}
|
||||
|
||||
static char *semver_strdup(const char *src) {
|
||||
char *semver_strdup(const char *src) {
|
||||
if (src == NULL) return NULL;
|
||||
size_t len = strlen(src) + 1;
|
||||
char *res = malloc(len);
|
||||
|
|
|
@ -98,6 +98,9 @@ semver_is_valid (const char *s);
|
|||
int
|
||||
semver_clean (char *s);
|
||||
|
||||
char *
|
||||
semver_strdup(const char *src);
|
||||
|
||||
semver_t
|
||||
semver_copy(const semver_t *ver);
|
||||
|
||||
|
|
|
@ -100,7 +100,13 @@ void AppConfig::load()
|
|||
|
||||
// Figure out if datadir has legacy presets
|
||||
auto ini_ver = Semver::parse(get("version"));
|
||||
m_legacy_datadir = ini_ver ? *ini_ver < Semver(1, 40, 0) : true;
|
||||
m_legacy_datadir = false;
|
||||
if (ini_ver) {
|
||||
// Make 1.40.0 alphas compare well
|
||||
ini_ver->set_metadata(boost::none);
|
||||
ini_ver->set_prerelease(boost::none);
|
||||
m_legacy_datadir = ini_ver < Semver(1, 40, 0);
|
||||
}
|
||||
|
||||
// Override missing or keys with their defaults.
|
||||
this->set_defaults();
|
||||
|
|
|
@ -22,14 +22,15 @@ public:
|
|||
Semver() : ver(semver_zero()) {}
|
||||
|
||||
Semver(int major, int minor, int patch,
|
||||
boost::optional<std::string> metadata = boost::none,
|
||||
boost::optional<std::string> prerelease = boost::none)
|
||||
boost::optional<const std::string&> metadata = boost::none,
|
||||
boost::optional<const std::string&> prerelease = boost::none)
|
||||
: ver(semver_zero())
|
||||
{
|
||||
ver.major = major;
|
||||
ver.minor = minor;
|
||||
ver.patch = patch;
|
||||
ver.metadata = metadata ? std::strcpy(ver.metadata, metadata->c_str()) : nullptr;
|
||||
ver.prerelease = prerelease ? std::strcpy(ver.prerelease, prerelease->c_str()) : nullptr;
|
||||
set_metadata(metadata);
|
||||
set_prerelease(prerelease);
|
||||
}
|
||||
|
||||
static boost::optional<Semver> parse(const std::string &str)
|
||||
|
@ -82,6 +83,13 @@ public:
|
|||
int patch() const { return ver.patch; }
|
||||
const char* prerelease() const { return ver.prerelease; }
|
||||
const char* metadata() const { return ver.metadata; }
|
||||
|
||||
// Setters
|
||||
void set_maj(int maj) { ver.major = maj; }
|
||||
void set_min(int min) { ver.minor = min; }
|
||||
void set_patch(int patch) { ver.patch = patch; }
|
||||
void set_metadata(boost::optional<const std::string&> meta) { meta ? strdup(*meta) : nullptr; }
|
||||
void set_prerelease(boost::optional<const std::string&> pre) { pre ? strdup(*pre) : nullptr; }
|
||||
|
||||
// Comparison
|
||||
bool operator<(const Semver &b) const { return ::semver_compare(ver, b.ver) == -1; }
|
||||
|
@ -124,6 +132,7 @@ private:
|
|||
Semver(semver_t ver) : ver(ver) {}
|
||||
|
||||
static semver_t semver_zero() { return { 0, 0, 0, nullptr, nullptr }; }
|
||||
static char * strdup(const std::string &str) { return ::semver_strdup(const_cast<char*>(str.c_str())); }
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue