1 # SPDX-License-Identifier: GPL-2.0-only
 
   3 # This file is part of Nominatim. (https://nominatim.org)
 
   5 # Copyright (C) 2022 by the Nominatim developer community.
 
   6 # For a full list of authors see the git log.
 
   8 Version information for Nominatim.
 
  10 from typing import Optional, NamedTuple
 
  12 class NominatimVersion(NamedTuple):
 
  13     """ Version information for Nominatim. We follow semantic versioning.
 
  15         Major, minor and patch_level refer to the last released version.
 
  16         The database patch level tracks important changes between releases
 
  17         and must always be increased when there is a change to the database or code
 
  18         that requires a migration.
 
  20         When adding a migration on the development branch, raise the patch level
 
  21         to 99 to make sure that the migration is applied when updating from a
 
  22         patch release to the next minor version. Patch releases usually shouldn't
 
  23         have migrations in them. When they are needed, then make sure that the
 
  24         migration can be reapplied and set the migration version to the appropriate
 
  25         patch level when cherry-picking the commit with the migration.
 
  33     def __str__(self) -> str:
 
  34         return f"{self.major}.{self.minor}.{self.patch_level}-{self.db_patch_level}"
 
  37 NOMINATIM_VERSION = NominatimVersion(4, 2, 99, 2)
 
  39 POSTGRESQL_REQUIRED_VERSION = (9, 6)
 
  40 POSTGIS_REQUIRED_VERSION = (2, 2)
 
  42 # Cmake sets a variable @GIT_HASH@ by executing 'git --log'. It is not run
 
  43 # on every execution of 'make'.
 
  44 # cmake/tool-installed.tmpl is used to build the binary 'nominatim'. Inside
 
  45 # there is a call to set the variable value below.
 
  46 GIT_COMMIT_HASH : Optional[str] = None
 
  49 def parse_version(version: str) -> NominatimVersion:
 
  50     """ Parse a version string into a version consisting of a tuple of
 
  51         four ints: major, minor, patch level, database patch level
 
  53         This is the reverse operation of `version_str()`.
 
  55     parts = version.split('.')
 
  56     return NominatimVersion(*[int(x) for x in parts[:2] + parts[2].split('-')])