2022-03-17 02:30:16 +01:00
|
|
|
#!/usr/bin/env python
|
|
|
|
# encoding: utf-8
|
|
|
|
|
|
|
|
import urllib.request
|
|
|
|
from lxml import etree
|
2022-03-19 00:50:07 +01:00
|
|
|
from packaging.version import parse as parse_version
|
|
|
|
import re, sys, json
|
2022-03-17 02:30:16 +01:00
|
|
|
|
2022-03-19 00:50:07 +01:00
|
|
|
ARCHIVE = "https://downloadarchive.documentfoundation.org/libreoffice/old/"
|
|
|
|
RELEASE = "https://download.documentfoundation.org/libreoffice/stable/"
|
|
|
|
DAILY = "https://dev-builds.libreoffice.org/daily/master/Linux-rpm_deb-x86_64@tb87-TDF/current/"
|
2022-03-17 02:30:16 +01:00
|
|
|
|
|
|
|
def getlatestrel(basever):
|
2022-03-19 00:50:07 +01:00
|
|
|
"""Search in downloadarchive for the latest version matching baseversion."""
|
|
|
|
versionlist = etree.HTML(urllib.request.urlopen(ARCHIVE).read()).xpath('//td/a')
|
2022-03-17 02:30:16 +01:00
|
|
|
# Getting a more polished matching list
|
2022-03-19 00:50:07 +01:00
|
|
|
cleanlist = list(dict.fromkeys([x.text.strip('/') for x in versionlist if x.text.startswith(basever)]))
|
|
|
|
|
2022-03-17 02:30:16 +01:00
|
|
|
# Sorting, then returning the last version
|
|
|
|
return sorted(cleanlist)[-1]
|
|
|
|
|
2022-03-19 00:50:07 +01:00
|
|
|
def getbranchrel(branch):
|
|
|
|
"""Based on branch names, get the release number."""
|
|
|
|
basedirurl = {}
|
|
|
|
version = ''
|
|
|
|
if branch == 'daily':
|
|
|
|
basedirurl = { 'x86_64': DAILY, 'x86': '-' }
|
|
|
|
version = etree.HTML(urllib.request.urlopen(DAILY).read()).xpath('//td/a')[1].text.split('_')[1]
|
2022-03-17 02:30:16 +01:00
|
|
|
|
2022-03-19 00:50:07 +01:00
|
|
|
return { 'version': version, 'basedirurl': basedirurl }
|
|
|
|
|
|
|
|
versions = etree.HTML(urllib.request.urlopen(RELEASE).read()).xpath('//td/a')
|
|
|
|
index = 1
|
|
|
|
if branch == 'still':
|
|
|
|
index = 2
|
|
|
|
elif branch == 'fresh':
|
|
|
|
index = 3
|
|
|
|
version = getlatestrel(versions[index].text.strip('/'))
|
2022-03-17 02:30:16 +01:00
|
|
|
|
2022-03-19 00:50:07 +01:00
|
|
|
return { 'version': version, 'basedirurl': getbaseurl(version) }
|
2022-03-17 02:30:16 +01:00
|
|
|
|
2022-03-19 00:50:07 +01:00
|
|
|
def getbaseurl(version):
|
|
|
|
"""Returns the links based on the numeric version."""
|
|
|
|
basediriurl = {}
|
|
|
|
url = ARCHIVE + '/' + version + '/deb/'
|
|
|
|
# x86 binaries are not anymore offered after 6.3.0.
|
|
|
|
if parse_version(version) < parse_version('6.3.0'):
|
|
|
|
basedirurl['x86'] = url + 'x86/'
|
|
|
|
else:
|
|
|
|
basedirurl['x86'] = '-'
|
|
|
|
|
|
|
|
basedirurl['x86_64'] = url + 'x86_64/'
|
2022-03-17 02:30:16 +01:00
|
|
|
|
2022-03-19 00:50:07 +01:00
|
|
|
return basedirurl
|
2022-03-17 02:30:16 +01:00
|
|
|
|
2022-03-19 00:50:07 +01:00
|
|
|
if __name__ == '__main__':
|
|
|
|
# Preparing variables for outputting
|
|
|
|
version = ''
|
|
|
|
basedirurl = {}
|
|
|
|
basever = 'fresh'
|
|
|
|
|
|
|
|
# At the end of the checks, we need a version string and a basedirurl, which
|
|
|
|
# should be a dictionaly for x86, x86_64 with the base of the directory where
|
|
|
|
# to download the files.
|
|
|
|
if len(sys.argv) > 1:
|
|
|
|
# A version has been specified.
|
|
|
|
basever = sys.argv[1]
|
|
|
|
|
|
|
|
# Once overridden with Argv, parse the inputs
|
|
|
|
if '.' in basever:
|
|
|
|
# Numbered version. Let's check it is a 4 dotted release
|
|
|
|
if len(basever.split('.')) == 4:
|
|
|
|
version = basever
|
|
|
|
else:
|
|
|
|
version = getlatestrel(basever)
|
|
|
|
|
|
|
|
basedirurl = getbaseurl(version)
|
|
|
|
else:
|
|
|
|
# String versions.
|
|
|
|
a = getbranchrel(basever)
|
|
|
|
version = a['version']
|
|
|
|
basedirurl = a['basedirurl']
|
2022-03-17 02:30:16 +01:00
|
|
|
|
2022-03-19 00:50:07 +01:00
|
|
|
output = """query: %s
|
|
|
|
version: %s
|
|
|
|
x86: %s
|
|
|
|
x86_64: %s""" % (basever, version, basedirurl['x86'] or '-', basedirurl['x86_64'])
|
|
|
|
print(output)
|