Convert output from git describe to PEP 440 conforming versions.
(version)
| 227 | |
| 228 | |
| 229 | def git_describe_to_python_version(version): |
| 230 | """Convert output from git describe to PEP 440 conforming versions.""" |
| 231 | |
| 232 | version_info = version.split("-") |
| 233 | if len(version_info) < 2: |
| 234 | return "unknown" |
| 235 | |
| 236 | # we always have $version-$release |
| 237 | release_type = version_info[1] |
| 238 | |
| 239 | version_data = { |
| 240 | "version": version_info[0], |
| 241 | "release_type": release_type, |
| 242 | } |
| 243 | if len(version_info) == 4: |
| 244 | version_data["commits"] = version_info[2] |
| 245 | else: |
| 246 | version_data["commits"] = 0 |
| 247 | |
| 248 | if release_type == "release": |
| 249 | if len(version_info) == 2: |
| 250 | # format: $version-release |
| 251 | # This is the case at time of the release. |
| 252 | fmt = "{version}" |
| 253 | elif len(version_info) == 4: |
| 254 | # format: $version-release-$commits-$hash |
| 255 | # This is the case after a release. |
| 256 | fmt = "{version}-{commits}" |
| 257 | elif release_type == "dev": |
| 258 | # format: $version-dev-$commits-$hash or $version-dev |
| 259 | fmt = "{version}.dev{commits}" |
| 260 | else: |
| 261 | match = re.match(r"^(alpha|beta|rc)(\d*)$", release_type) |
| 262 | if match is None: |
| 263 | return "unknown" |
| 264 | |
| 265 | if len(version_info) == 2: |
| 266 | fmt = "{version}{release_type}" |
| 267 | elif len(version_info) == 4: |
| 268 | fmt = "{version}{release_type}-{commits}" |
| 269 | |
| 270 | return fmt.format(**version_data) |
| 271 | |
| 272 | |
| 273 | version_file = "bpython/_version.py" |