1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
# Contains the openMSX version number and versioning related functions.
from executils import captureStdout
from makeutils import filterLines
from os import makedirs
from os.path import isdir
import re
# Name used for packaging.
packageName = 'openmsx-debugger'
# Version number.
packageVersionNumber = '0.10.0'
# Note: suffix should be empty or with dash, like "-rc1" or "-test1"
packageVersionSuffix = ''
packageVersion = packageVersionNumber + packageVersionSuffix
# Is this a release version ("True") or development version ("False").
releaseFlag = False
def _extractRevisionFromStdout(log, command, regex):
text = captureStdout(log, command)
if text is None:
# Error logging already done by captureStdout().
return None
# pylint 0.18.0 somehow thinks captureStdout() returns a list, not a string.
lines = text.split('\n') # pylint: disable-msg=E1103
for revision, in filterLines(lines, regex):
print >> log, 'Revision number found by "%s": %s' % (command, revision)
return revision
else:
print >> log, 'Revision number not found in "%s" output:' % command
print >> log, text
return None
def extractGitRevision(log):
return _extractRevisionFromStdout(
log, 'git describe', r'\S+?-(\S+)$'
)
def extractNumberFromGitRevision(revisionStr):
if revisionStr is None:
return None
return re.match(r'(\d+)+', revisionStr).group(0)
_cachedRevision = False # because None is a valid result
def extractRevision():
global _cachedRevision
if _cachedRevision is not False:
return _cachedRevision
if releaseFlag:
# Not necessary, we do not append revision for a release build.
return None
if not isdir('derived'):
makedirs('derived')
log = open('derived/version.log', 'w')
print >> log, 'Extracting revision info...'
try:
revision = extractGitRevision(log)
print >> log, 'Revision string: %s' % revision
print >> log, 'Revision number: %s' % extractNumberFromGitRevision(revision)
finally:
log.close()
_cachedRevision = revision
return revision
def extractRevisionNumber():
return int(extractNumberFromGitRevision(extractRevision()) or 1)
def extractRevisionString():
return extractRevision() or 'unknown'
def getVersionedPackageName():
if releaseFlag:
return '%s-%s' % (packageName, packageVersion)
else:
return '%s-%s-%s' % (
packageName, packageVersion, extractRevisionString()
)
|