diff options
author | Gerald Combs <gerald@wireshark.org> | 2019-10-18 11:57:46 -0700 |
---|---|---|
committer | Gerald Combs <gerald@wireshark.org> | 2019-10-22 17:09:41 +0000 |
commit | 4308ae3d4752efc81fc9098b3602c0e96bc54ab5 (patch) | |
tree | eb6681d6d7f3fe556fdb259c46277e294bb434a3 /tools | |
parent | 54fac1e3097142062f5ed8e1d34ed5a247d9ed70 (diff) |
tools: Add update-appdata.py
Add a script that fills in the <releases/> section of
wireshark.appdata.xml.
Change-Id: I643a8271f2bf1a5c2cd0be9930a6ca7c71935e42
Reviewed-on: https://code.wireshark.org/review/34824
Reviewed-by: Gerald Combs <gerald@wireshark.org>
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/update-appdata.py | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/tools/update-appdata.py b/tools/update-appdata.py new file mode 100755 index 0000000000..7259c200f5 --- /dev/null +++ b/tools/update-appdata.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python3 +# +# update-appdata.py - Update the <releases/> section of wireshark.appdata.xml. +# +# Wireshark - Network traffic analyzer +# By Gerald Combs <gerald@wireshark.org> +# Copyright 1998 Gerald Combs +# +# SPDX-License-Identifier: GPL-2.0-or-later +'''Update the <release> tag in wireshark.appdata.xml + +According to https://www.freedesktop.org/software/appstream/docs/chap-Metadata.html +the <releases/> tag in wireshark.appdata.xml should contain release +information sorted newest to oldest. + +As part of our release process, when we create release tag x.y.z, we tag +the next commit x.y.z+1rc0, e.g. + +v3.0.0 2019-02-28 release tag +v3.0.1rc0 2019-02-28 next commit after v3.0.0 +v3.0.1 2019-04-08 release tag +v3.0.2rc0 2019-04-08 next commit after v3.0.1 + +Find a list of release versions based on our most recent rc0 tag and +update the <releases/> section of wireshark.appdata.xml accordingly. +Assume that the tag for the most recent release doesn't exist and use +today's date for it. +''' + +from datetime import date +import io +import os.path +import re +import subprocess +import sys +import time + +def main(): + if sys.version_info[0] < 3: + print("This requires Python 3") + sys.exit(2) + + this_dir = os.path.dirname(__file__) + appdata_xml = os.path.join(this_dir, '..', 'wireshark.appdata.xml') + + try: + tag_cp = subprocess.run( + ['git', 'tag', '-l', 'wireshark-*'], + encoding='UTF-8', + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + if not 'wireshark-' in tag_cp.stdout: + print('Wireshark release tag not found') + sys.exit(1) + except: + print('`git tag` returned {}:'.format(tag_cp.returncode)) + raise + + try: + cur_rc0 = subprocess.run( + ['git', 'describe', '--match', 'v*rc0'], + check=True, + encoding='UTF-8', + stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout + except: + print('Unable to fetch most recent rc0.') + raise + + try: + ver_m = re.match('v(\d+\.\d+)\.(\d+)rc0.*', cur_rc0) + maj_min = ver_m.group(1) + next_micro = ver_m.group(2) + except: + print('Unable to fetch major.minor version.') + raise + + # https://www.freedesktop.org/software/appstream/docs/chap-Metadata.html#tag-releases + release_tag_fmt = '''\ + <release version="{0}.{1}" date="{2}"> + <url>https://www.wireshark.org/docs/relnotes/wireshark-{0}.{1}.html</url> + </release> +''' + release_tag_l = [ + release_tag_fmt.format(maj_min, next_micro, date.fromtimestamp(time.time()).isoformat()) + ] + for micro in range(int(next_micro) - 1, -1, -1): + try: + tag_date = subprocess.run( + ['git', 'log', '-1', '--format=%cd', '--date=format:%F', 'v{}.{}'.format(maj_min, micro)], + check=True, + encoding='UTF-8', + stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.strip() + release_tag_l.append(release_tag_fmt.format(maj_min, micro, tag_date)) + except: + print('Unable to fetch release tag') + raise + + ax_lines = [] + with io.open(appdata_xml, 'r', encoding='UTF-8') as ax_fd: + in_releases = False + for line in ax_fd: + if '</releases>' in line: + in_releases = False + if in_releases: + continue + ax_lines.append(line) + if '<releases>' in line: + in_releases = True + ax_lines.extend(release_tag_l) + + with io.open(appdata_xml, 'w', encoding='UTF-8') as ax_fd: + ax_fd.write(''.join(ax_lines)) + +if __name__ == '__main__': + main() |