1
0

Compare commits

..

No commits in common. "b087e85ec5c3abfb1a0049065e2bb013e56b08aa" and "0bea7a81bc7120a748c2fa0e1a19e8136504f158" have entirely different histories.

View File

@ -10,6 +10,7 @@ import re
import shlex
import tempfile
import urllib.request
import hashlib
from lxml import etree
import loaih
@ -46,7 +47,7 @@ class Build(loaih.RemoteBuild):
self.portable = False
self.updatable = True
self.sign = True
self.repo_type = 'local'
self.remoterepo = False
self.remote_host = ''
self.remote_path = ''
self.storage_path = '/mnt/appimage'
@ -81,16 +82,7 @@ class Build(loaih.RemoteBuild):
"""Calculate exclusions and other variables."""
print("--- Calculate Phase ---")
# let's check here if we are on a remote repo or local.
if self.storage_path.startswith("http"):
# Final repository is remote
self.repo_type = 'remote'
print("Repo is remote.")
else:
self.repo_type = 'local'
print("Repo is local.")
# AppName
if self.query in { 'prerelease', 'daily' }:
self.appname = 'LibreOfficeDev'
@ -134,22 +126,11 @@ class Build(loaih.RemoteBuild):
if self.portable:
self.relative_path.append('portable')
# Fullpath might be intended two ways:
if self.repo_type == 'remote':
# Repository is remote
# we build full_path as it is absolute to the root of the
# storage_path.
self.full_path = '/'
if len(self.relative_path) >= 1:
self.full_path += str.join('/', self.relative_path)
else:
# Repository is local
# If it is remote or if it is local
fullpath_arr = self.storage_path.split('/')
# Joining relative path only if it is not null
if len(self.relative_path) > 0:
fullpath_arr.extend(self.relative_path)
self.full_path = re.sub(r"/+", '/', str.join('/', fullpath_arr))
fullpath_arr = self.storage_path.split('/')
# Joining relative path only if it is not null
if len(self.relative_path) > 0:
fullpath_arr.extend(self.relative_path)
self.full_path = re.sub(r"/+", '/', str.join('/', fullpath_arr))
def check(self):
@ -161,17 +142,26 @@ class Build(loaih.RemoteBuild):
self.calculate()
for arch in self.arch:
print(f"Searching for {self.appimagefilename[arch]}")
# First, check if by metadata the repo is remote or not.
if self.repo_type == 'remote':
if self.remoterepo or 'http' in self.storage_path:
self.remoterepo = True
# Remote storage. I have to query a remote site to know if it
# was already built.
name = self.appimagefilename[arch]
url = self.storage_path.rstrip('/') + self.full_path + '/'
if len(self.relative_path) == 0:
path_arr = [ self.storage_path, '' ]
elif len(self.relative_path) == 1:
path_arr = [ self.storage_path, self.relative_path[0], '' ]
else:
path_arr = self.relative_path
path_arr.insert(0, self.storage_path)
path = str.join('/', path_arr)
matching = []
try:
with urllib.request.urlopen(url) as response:
matching = etree.HTML(response.read()).xpath(
with urllib.request.urlopen(path) as url:
matching = etree.HTML(url.read()).xpath(
f"//a[contains(@href, '{name}')]/@href"
)
@ -185,6 +175,7 @@ class Build(loaih.RemoteBuild):
else:
# Repo is local
print(f"Searching for {self.appimagefilename[arch]}")
command = f"find {self.full_path} -name {self.appimagefilename[arch]}"
res = subprocess.run(shlex.split(command),
capture_output=True,
@ -198,10 +189,11 @@ class Build(loaih.RemoteBuild):
if res.stdout and len(res.stdout.strip("\n")) > 0:
# All good, the command was executed fine.
print(f"Build for {self.version} found.")
self.built[arch] = True
if self.built[arch]:
print(f"Found requested AppImage: {self.appimagefilename[arch]}.")
print(f"The requested AppImage already exists on storage for {arch}. I'll skip downloading, building and moving the results.")
def download(self):
@ -213,7 +205,7 @@ class Build(loaih.RemoteBuild):
for arch in self.arch:
# Checking if a valid path has been provided
if self.url[arch] == '-':
print(f"Cannot build for arch {arch}. Continuing with other arches.")
print(f"No build has been provided for the requested AppImage for {arch}. Continue with other options.")
# Faking already built it so to skip other checks.
self.built[arch] = True
continue
@ -444,10 +436,17 @@ class Build(loaih.RemoteBuild):
os.chdir(self.appnamedir)
# Two cases here: local and remote storage_path.
if self.repo_type == 'remote':
if self.remoterepo:
# Remote first.
# Build destination directory
remotepath = self.remote_path.rstrip('/') + self.full_path
if len(self.relative_path) == 0:
remotepath = str.join('/', [ self.remote_path, '' ])
elif len(self.relative_path) == 1:
remotepath = str.join('/', [ self.remote_path, self.relative_path[0], '' ])
else:
path_arr = self.relative_path
path_arr.insert(0, self.remote_path)
remotepath = str.join('/', path_arr)
try:
subprocess.run(
r"rsync -rlIvz --munge-links *.AppImage* " +