Created
November 19, 2021 08:20
-
-
Save wica128/74f68bb57a2d960d0ad56ad8b1dad922 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/env python3 | |
# pylint: disable=line-too-long | |
''' | |
get_latest_rpm_version: Get latest version of a rpm for patch date. | |
Author: Jiri Hoogeveen | |
Email: wica128@gmail.com | |
''' | |
import re | |
from urllib import request as urlrequest | |
import bz2 | |
import sqlite3 | |
import os | |
import tempfile | |
def getLatestVersion(reposerver, repo, patchdate, package, proxy=None): | |
# Get url to primary sqlite db | |
baseurl = f'{reposerver}/{patchdate}/{repo}/' | |
req = urlrequest.Request(baseurl+"repodata/repomd.xml") | |
if proxy: | |
req.set_proxy(proxy, 'http') | |
response = urlrequest.urlopen(req) | |
html = response.read().decode('utf-8') | |
primurl = re.findall('href="(.*primary.sqlite.bz2)"', html)[0] | |
#print(f'INFO: primary.sqlite.bz2 url: {primurl}') | |
del req | |
# Get primary sqlite db file | |
req = urlrequest.Request(baseurl+primurl) | |
if proxy: | |
req.set_proxy(proxy, 'http') | |
with urlrequest.urlopen(req) as f: | |
bz2data = f.read() | |
# Decompress file | |
tmpfile = tempfile.NamedTemporaryFile(delete=False) | |
with open(tmpfile.name, 'wb') as output: | |
output.write(bz2.decompress(bz2data)) | |
# Query the sqlite db | |
con = sqlite3.connect(tmpfile.name) | |
cursor = con.cursor() | |
row = cursor.execute('select name, version, release, time_build from packages where name="kernel" order by time_build DESC limit 1').fetchall()[0] | |
# Cleanup | |
tmpfile.close() | |
os.unlink(tmpfile.name) | |
return f'{row[1]}-{row[2]}' | |
if __name__ == '__main__': | |
import argparse | |
parser = argparse.ArgumentParser(description='Get latest version of package for patch date') | |
parser.add_argument('--reposerver', required=True, help='repo server') | |
parser.add_argument('--repo', required=True, help='repo url') | |
parser.add_argument('--package', required=True, help='Package name') | |
parser.add_argument('--date', required=True, help='Patch date or current') | |
parser.add_argument('--proxy', help='Proxy server') | |
args = parser.parse_args() | |
print(getLatestVersion(args.reposerver, args.repo, args.date, args.package, args.proxy)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment