diff --git a/loaih/__init__.py b/loaih/__init__.py index 5c6398e..fd94008 100644 --- a/loaih/__init__.py +++ b/loaih/__init__.py @@ -28,24 +28,26 @@ class Build(object): # Creating a tempfile self.builddir = tempfile.mkdtemp() self.tarballs = {} - self.appname = 'LibreOffice' if not self.query == 'daily' else 'LibreOfficeDev' + self.appname = 'LibreOffice' if not self.query == 'daily' and not self.query == 'prerelease' else 'LibreOfficeDev' self.version = v.version self.url = v.basedirurl self.built = False # Building expected AppImageName - languagepart = "." + self.languagepart = "." if ',' in self.language: - languagepart += self.language.replace(',', '-') + self.languagepart += self.language.replace(',', '-') else: - languagepart += self.language + self.languagepart += self.language - self.appimagefilename[u'x86'] = self.appname + '-' + self.version + languagepart + ('.help' if self.offline_help else '') + '-x86.AppImage' - self.appimagefilename[u'x86_64'] = self.appname + '-' + v.version + languagepart + ('.help' if self.offline_help else '') + '-x86_64.AppImage' + self.appimagefilename[u'x86'] = self.appname + '-' + self.version + self.languagepart + ('.help' if self.offline_help else '') + '-x86.AppImage' + self.appimagefilename[u'x86_64'] = self.appname + '-' + v.version + self.languagepart + ('.help' if self.offline_help else '') + '-x86_64.AppImage' def check(self, storage_path): """Checking if the requested AppImage has been already built.""" + self.storage_path += ('/daily' if self.query == 'daily' else '') + self.storage_path += ('/prerelease' if self.query == 'prerelease' else '') self.storage_path = storage_path + ('/portable' if self.portable else '') # Incompatibilities - if portable and updatable are asked together, # only portable will be built. @@ -196,8 +198,13 @@ class Build(object): # Building app if self.updatable: - zsync = self.appimagefilename[arch] + '.zsync' - subprocess.run("VERSION={version} ./appimagetool -u 'zsync|{zsync}' -v ./{appname}.AppDir/".format(version = appversion, zsync = self.appimagefilename[arch] + '.zsync', appname = self.appname), shell=True) + # for the daily build, updatable builds work if the latest one + # provide updates. + if self.query == 'daily': + zsync = self.appname + self.version.split('-')[0] + self.languagepart + ('.help' if self.offline_help else '') + '-' + arch + '.AppImage.zsync' + else: + zsync = self.appimagefilename[arch] + '.zsync' + subprocess.run("VERSION={version} ./appimagetool -u 'zsync|{zsync}' -v ./{appname}.AppDir/".format(version = appversion, zsync = zsync, appname = self.appname), shell=True) else: subprocess.run("VERSION={version} ./appimagetool -v ./{appname}.AppDir/".format(version = appversion, appname = self.appname), shell=True) diff --git a/loaih/versions.py b/loaih/versions.py index 7def95d..fa0d972 100644 --- a/loaih/versions.py +++ b/loaih/versions.py @@ -8,7 +8,8 @@ from packaging.version import parse as parse_version class BuildVersion(object): 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/" + DAILY = "https://dev-builds.libreoffice.org/daily/master/Linux-rpm_deb-x86_64@tb87-TDF/" + PRERELEASE = "https://dev-builds.libreoffice.org/pre-releases/deb/x86_64/" def __init__(self, query): self.query = query @@ -45,17 +46,33 @@ class BuildVersion(object): basedirurl = {} version = '' if branch == 'daily': - basedirurl = { 'x86_64': BuildVersion.DAILY, 'x86': '-' } - version = etree.HTML(urllib.request.urlopen(BuildVersion.DAILY).read()).xpath('//td/a')[1].text.split('_')[1] + # The daily builds can be mostly distinguished by the day of build + # (official version is constant. + + # The last built version is the next-to-last version [-2] on the page. + fulldailypath = etree.HTML(urllib.request.urlopen(BuildVersion.DAILY).read()).xpath('//td/a')[-2].text + dailyversion = fulldailypath.split('_')[0].replace('-', '') + version + newurl = str.join('/', [ BuildVersion.DAILY, fulldailypath, '' ]) + + basedirurl = { u'x86_64': newurl, u'x86': '-' } + version = etree.HTML(urllib.request.urlopen(newurl).read()).xpath('//td/a')[1].text.split('_')[1] + + return { 'version': version + '-' + dailyversion, 'basedirurl': basedirurl } + + if branch == 'prerelease': + version = etree.HTML(urllib.request.urlopen(BuildVersion.PRERELEASE).read()).xpath('//td/a')[1].text.split('_')[1] + basedirurl = { u'x86': '-', u'x86_64': BuildVersion.PRERELEASE } return { 'version': version, 'basedirurl': basedirurl } + # Stable releases. versions = etree.HTML(urllib.request.urlopen(BuildVersion.RELEASE).read()).xpath('//td/a') index = 1 if branch == 'still': - index = 2 + index = -2 elif branch == 'fresh': - index = 3 + index = -1 version = self.__getlatestrel(versions[index].text.strip('/')) return { 'version': version, 'basedirurl': self.__getbaseurl(version) } @@ -67,10 +84,10 @@ class BuildVersion(object): # x86 binaries are not anymore offered after 6.3.0. if parse_version(version) < parse_version('6.3.0'): - basedirurl['x86'] = url + 'x86/' + basedirurl[u'x86'] = url + 'x86/' else: - basedirurl['x86'] = '-' + basedirurl[u'x86'] = '-' - basedirurl['x86_64'] = url + 'x86_64/' + basedirurl[u'x86_64'] = url + 'x86_64/' return basedirurl