115 lines
3.9 KiB
Python
Executable file
115 lines
3.9 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
#
|
|
# update-appdata.py - Update the <releases/> section of resources/freedesktop/org.wireshark.Wireshark.metainfo.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 resources/freedesktop/org.wireshark.Wireshark.metainfo.xml
|
|
|
|
According to https://www.freedesktop.org/software/appstream/docs/chap-Metadata.html
|
|
the <releases/> tag in resources/freedesktop/org.wireshark.Wireshark.metainfo.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 resources/freedesktop/org.wireshark.Wireshark.metainfo.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, '..', 'resources', 'freedesktop', 'org.wireshark.Wireshark.metainfo.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 Exception:
|
|
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 Exception:
|
|
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 Exception:
|
|
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 Exception:
|
|
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()
|