Skip to content

Instantly share code, notes, and snippets.

@wica128
Created November 19, 2021 08:20
Show Gist options
  • Save wica128/74f68bb57a2d960d0ad56ad8b1dad922 to your computer and use it in GitHub Desktop.
Save wica128/74f68bb57a2d960d0ad56ad8b1dad922 to your computer and use it in GitHub Desktop.
#!/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