Use valid Semver versions for pre-releases (#5636)

* Fix ProjectVersion handling of pre-releases

* Add workaround for old, non-standard version

* Attempt to fix versioning

* More consistent comments

* Apply suggestions from code review

- Set CompareType's underlying type to int and revert change to ProjectVersion::compare's parameters
- Add "None" and "All" as names elements of CompareType enum
- Preserve hyphens in prerelease identifiers
- Pad invalid (too short) versions to prevent crashes or nasty behavior
- Compare numeric identifiers to non-numeric ones correctly
- Don't interpret identifiers of form "-#" as numeric (where '#' is any number of digits)
- Add tests to ensure fixes in this commit work and won't regress in the future

* CMAKE fixes from code review

Co-authored-by: Tres Finocchiaro <tres.finocchiaro@gmail.com>

* Remove unnecessary changes to CMake logic

* More const, more reference

* Apply suggestions from code review

Co-authored-by: Tres Finocchiaro <tres.finocchiaro@gmail.com>
This commit is contained in:
Spekular
2020-09-17 17:23:35 +02:00
committed by GitHub
parent f211c192e8
commit af328003a0
6 changed files with 159 additions and 122 deletions

View File

@@ -28,6 +28,9 @@
#define PROJECT_VERSION_H
#include <QtCore/QString>
#include <QtCore/QStringList>
#include <limits>
/*! \brief Version number parsing and comparison
*
@@ -36,16 +39,16 @@
class ProjectVersion
{
public:
enum CompareType { Major, Minor, Release, Stage, Build };
enum CompareType : int { None = 0, Major=1, Minor=2, Release=3, Stage=4, Build=5, All = std::numeric_limits<int>::max() };
ProjectVersion(QString version, CompareType c = Build);
ProjectVersion(const char * version, CompareType c = Build);
ProjectVersion(QString version, CompareType c = All);
ProjectVersion(const char * version, CompareType c = All);
int getMajor() const { return m_major; }
int getMinor() const { return m_minor; }
int getRelease() const { return m_release; }
QString getStage() const { return m_stage; }
int getBuild() const { return m_build; }
int getPatch() const { return m_patch; }
const QStringList& getLabels() const { return m_labels; }
CompareType getCompareType() const { return m_compareType; }
ProjectVersion setCompareType(CompareType compareType) { m_compareType = compareType; return * this; }
@@ -54,11 +57,10 @@ public:
private:
QString m_version;
int m_major;
int m_minor;
int m_release;
QString m_stage;
int m_build;
int m_major = 0;
int m_minor = 0;
int m_patch = 0;
QStringList m_labels;
CompareType m_compareType;
} ;