diff options
Diffstat (limited to 'put_version_into_build_xml.py')
-rw-r--r-- | put_version_into_build_xml.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/put_version_into_build_xml.py b/put_version_into_build_xml.py new file mode 100644 index 000000000000..2408c86c8dc2 --- /dev/null +++ b/put_version_into_build_xml.py @@ -0,0 +1,56 @@ +import os +import re +import subprocess +import sys +import xml.etree.ElementTree as ET + + +def main(): + build_xml_filename = 'build.xml' + if not os.access(build_xml_filename, os.R_OK | os.W_OK): + print( + '%s not found. Skipping' % build_xml_filename, + file=sys.stderr) + return + + tree = ET.parse(build_xml_filename) + + try: + git_version = subprocess.check_output( + ['git', 'describe', '--long', '--tags']) + except subprocess.CalledProcessError: + print('Call to git failed. Skipping...', file=sys.stderr) + return + + mobj = re.match( + r'''(?x) + version + (?P<major>\d)\. + (?P<minor>\d)\. + (?P<release>\d)- + (?P<build>\d+)-.*''', + git_version.decode('utf-8')) + + if not mobj: + print('unexpected git version %s. Skipping...' % git_version) + return + + versions = { + 'major': mobj.group('major'), + 'minor': mobj.group('minor'), + 'release': mobj.group('release'), + 'build': mobj.group('build'), + } + + print('Set version to %s.%s.%s' % ( + versions['major'], versions['minor'], versions['release'])) + + for version_type in versions.keys(): + path = './target/property[@name="version.%s"]' % version_type + for element in tree.findall(path): + element.set('value', str(versions[version_type])) + + tree.write(build_xml_filename, encoding='UTF-8', xml_declaration=True) + +if __name__ == '__main__': + main() |