|
4 | 4 |
|
5 | 5 | import os
|
6 | 6 | import platform
|
7 |
| -import sys |
| 7 | +import re |
8 | 8 | import subprocess
|
| 9 | +import sys |
9 | 10 |
|
10 | 11 | from distutils.command.build import build
|
11 | 12 | from setuptools import setup
|
|
34 | 35 |
|
35 | 36 |
|
36 | 37 | # version handling
|
| 38 | + |
| 39 | + |
| 40 | +def git_describe_to_python_version(version): |
| 41 | + """Convert output from git describe to PEP 440 conforming versions.""" |
| 42 | + |
| 43 | + version_info = version.split('-') |
| 44 | + if len(version_info) < 2: |
| 45 | + return 'unknown' |
| 46 | + |
| 47 | + # we always have $version-$release |
| 48 | + release_type = version_info[1] |
| 49 | + |
| 50 | + version_data = { |
| 51 | + 'version': version_info[0], |
| 52 | + 'release_type': release_type, |
| 53 | + } |
| 54 | + if len(version_info) == 4: |
| 55 | + version_data['commits'] = version_info[2] |
| 56 | + else: |
| 57 | + version_data['commits'] = 0 |
| 58 | + |
| 59 | + if release_type == 'release': |
| 60 | + if len(version_info) == 2: |
| 61 | + # format: $version-release |
| 62 | + # This is the case at time of the release. |
| 63 | + fmt = '{version}' |
| 64 | + elif len(version_info) == 4: |
| 65 | + # format: $version-release-$commits-$hash |
| 66 | + # This is the case after a release. |
| 67 | + fmt = '{version}-{commits}' |
| 68 | + elif release_type == 'dev': |
| 69 | + # format: $version-dev-$commits-$hash or $version-dev |
| 70 | + fmt = '{version}.dev{commits}' |
| 71 | + else: |
| 72 | + match = re.match(r'^(alpha|beta|rc)(\d*)$', release_type) |
| 73 | + if match is None: |
| 74 | + return 'unknown' |
| 75 | + |
| 76 | + if len(version_info) == 2: |
| 77 | + fmt = '{version}{release_type}' |
| 78 | + elif len(version_info) == 4: |
| 79 | + fmt = '{version}{release_type}-{commits}' |
| 80 | + |
| 81 | + return fmt.format(**version_data) |
| 82 | + |
| 83 | + |
37 | 84 | version_file = 'bpython/_version.py'
|
38 | 85 | version = 'unknown'
|
39 | 86 |
|
|
46 | 93 | stdout = stdout.decode('ascii')
|
47 | 94 |
|
48 | 95 | if proc.returncode == 0:
|
49 |
| - version_split = stdout.split('-') |
50 |
| - if len(version_split) == 4: |
51 |
| - # format: version-release-commits-hash |
52 |
| - version = '-'.join((version_split[0], version_split[2])) |
53 |
| - elif len(version_split) == 2: |
54 |
| - # format: version-release |
55 |
| - version = version_split[0] |
| 96 | + version = git_describe_to_python_version(stdout) |
56 | 97 | except OSError:
|
57 | 98 | pass
|
58 | 99 |
|
|
0 commit comments