X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/63da70685a6f0232b8f13bfa158772e035586347..a97bfaf26cbe74325d825c132ce4718bc84c37e5:/src/nominatim_db/version.py?ds=sidebyside diff --git a/src/nominatim_db/version.py b/src/nominatim_db/version.py index 525a0d99..fceee5d0 100644 --- a/src/nominatim_db/version.py +++ b/src/nominatim_db/version.py @@ -7,15 +7,58 @@ """ Version information for Nominatim. """ -from typing import Optional +from typing import NamedTuple, Optional # See also https://github.com/PyCQA/pylint/issues/6006 # pylint: disable=useless-import-alias,unused-import -from nominatim_core.version import (NominatimVersion as NominatimVersion, - parse_version as parse_version) +class NominatimVersion(NamedTuple): + """ Version information for Nominatim. We follow semantic versioning. -NOMINATIM_VERSION = NominatimVersion(4, 4, 99, 1) + Major, minor and patch_level refer to the last released version. + The database patch level tracks important changes between releases + and must always be increased when there is a change to the database or code + that requires a migration. + + When adding a migration on the development branch, raise the patch level + to 99 to make sure that the migration is applied when updating from a + patch release to the next minor version. Patch releases usually shouldn't + have migrations in them. When they are needed, then make sure that the + migration can be reapplied and set the migration version to the appropriate + patch level when cherry-picking the commit with the migration. + """ + + major: int + minor: int + patch_level: int + db_patch_level: int + + def __str__(self) -> str: + if self.db_patch_level is None: + return f"{self.major}.{self.minor}.{self.patch_level}" + + return f"{self.major}.{self.minor}.{self.patch_level}-{self.db_patch_level}" + + def release_version(self) -> str: + """ Return the release version in semantic versioning format. + + The release version does not include the database patch version. + """ + return f"{self.major}.{self.minor}.{self.patch_level}" + + + +def parse_version(version: str) -> NominatimVersion: + """ Parse a version string into a version consisting of a tuple of + four ints: major, minor, patch level, database patch level + + This is the reverse operation of `version_str()`. + """ + parts = version.split('.') + return NominatimVersion(*[int(x) for x in parts[:2] + parts[2].split('-')]) + + +NOMINATIM_VERSION = parse_version('4.4.99-1') POSTGRESQL_REQUIRED_VERSION = (9, 6) POSTGIS_REQUIRED_VERSION = (2, 2)