From f7fd439f082202ecb5dcd2100bed21e5906e0d61 Mon Sep 17 00:00:00 2001 From: Lightmann Date: Sat, 27 Jul 2024 20:02:00 -0400 Subject: [PATCH 1/5] Fix import --- src/dragon/lo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dragon/lo.py b/src/dragon/lo.py index f56fe1b08..535ab2bb5 100644 --- a/src/dragon/lo.py +++ b/src/dragon/lo.py @@ -3,7 +3,7 @@ from urllib import request import json, os, ssl, sys, tarfile from tqdm import tqdm -from dragon.util import dprintline, OutputColors, OutputWeight +from shared.util import dprintline, OutputColors, OutputWeight plat = platform.platform() host_os = plat.split('-')[0] From bdddfc0e35d8f1d826c1d37abeb23ea2f4cd53f4 Mon Sep 17 00:00:00 2001 From: Lightmann Date: Sat, 27 Jul 2024 20:02:33 -0400 Subject: [PATCH 2/5] Improve dragon lo initalization logging --- src/dragon/lo.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/dragon/lo.py b/src/dragon/lo.py index 535ab2bb5..2b5ff9e93 100644 --- a/src/dragon/lo.py +++ b/src/dragon/lo.py @@ -75,5 +75,11 @@ def fetch(): # tag format: llvm-objcs-0.0.1-llvm-17.0.0 if __name__ == "__main__": - if 'setup' in sys.argv[1] or 'update' in sys.argv[1]: - fetch() + if len(sys.argv) == 2: + if 'setup' in sys.argv[1] or 'update' in sys.argv[1]: + fetch() + else: + log(f'"dragon lo {sys.argv[1]}" is an invalid command') + log("Please run either 'dragon lo setup' or 'dragon lo update'") + else: + log("Please run either 'dragon lo setup' or 'dragon lo update'") \ No newline at end of file From db360c18b7ff64e19f25b2efd29b191de0ccd09e Mon Sep 17 00:00:00 2001 From: Lightmann Date: Sat, 27 Jul 2024 20:44:44 -0400 Subject: [PATCH 3/5] Generalize dragon lo platform identification --- src/dragon/lo.py | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/dragon/lo.py b/src/dragon/lo.py index 2b5ff9e93..ec2b81328 100644 --- a/src/dragon/lo.py +++ b/src/dragon/lo.py @@ -5,9 +5,8 @@ from tqdm import tqdm from shared.util import dprintline, OutputColors, OutputWeight -plat = platform.platform() -host_os = plat.split('-')[0] -host_arch = plat.split('-')[2] +host_os = "macos" if platform.system() == "Darwin" else platform.system().lower() +host_arch = platform.machine().lower() ssl._create_default_https_context = ssl._create_unverified_context @@ -62,13 +61,22 @@ def fetch(): return for asset in response['assets']: n = asset['name'] - n = n.replace('llvm-objcs-', '').replace('.tar.gz', '') - op_sys = n.split('-')[0] - arch = n.split('-')[1] - if op_sys.lower() == host_os.lower() and arch.lower() == host_arch.lower(): - log(f"Found build for {op_sys}-{arch}, installing") - install_from_url(ctx, asset['browser_download_url']) - return + parts = n.split('-') + op_sys = parts[2] + arch = parts[-1].split('.')[0] + # asset name format: + # llvm-objcs-macOS-x86_64.tar.gz + # llvm-objcs-ubuntu-22.04.2-x86_64.tar.gz + if arch.lower() == host_arch: + if op_sys.lower() == host_os: + log(f"Found build for {op_sys}-{arch}, installing") + install_from_url(ctx, asset['browser_download_url']) + return + elif op_sys.lower() == 'ubuntu' and host_os == 'linux': + # generalize to Debian base for now + log(f"Found build for {op_sys}-{arch}, installing") + install_from_url(ctx, asset['browser_download_url']) + return log(f"Couldn't find a build for {host_os}-{host_arch}") From 518ee14fafcfaedcca262533f200c8dff5e2cd6f Mon Sep 17 00:00:00 2001 From: Lightmann Date: Sat, 27 Jul 2024 20:45:09 -0400 Subject: [PATCH 4/5] Fix dragon lo download --- src/dragon/lo.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/dragon/lo.py b/src/dragon/lo.py index ec2b81328..28188c81f 100644 --- a/src/dragon/lo.py +++ b/src/dragon/lo.py @@ -27,7 +27,7 @@ def update_to(self, b=1, bsize=1, tsize=None): def download_url(url, output_path): with DownloadProgressBar(unit='B', unit_scale=True, miniters=1, desc=url.split('/')[-1], ) as t: - urllib.request.urlretrieve(url, filename=output_path, reporthook=t.update_to) + request.urlretrieve(url, filename=output_path, reporthook=t.update_to) def install_from_url(ctx, url: str): @@ -43,6 +43,7 @@ def install_from_url(ctx, url: str): pass tar.extractall(os.environ["DRAGON_ROOT_DIR"] + '/llvm-objcs') os.remove(fname) + log('All done!') def fetch(): From 77e89a627a7114b91b11110d51b353ba21e205e9 Mon Sep 17 00:00:00 2001 From: Lightmann Date: Sat, 27 Jul 2024 20:46:33 -0400 Subject: [PATCH 5/5] Flesh out dragon lo version check --- src/dragon/lo.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/dragon/lo.py b/src/dragon/lo.py index 28188c81f..81a304596 100644 --- a/src/dragon/lo.py +++ b/src/dragon/lo.py @@ -1,7 +1,7 @@ from ruyaml import YAML import platform from urllib import request -import json, os, ssl, sys, tarfile +import json, os, shutil, ssl, sys, tarfile from tqdm import tqdm from shared.util import dprintline, OutputColors, OutputWeight @@ -52,14 +52,21 @@ def fetch(): ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE response: dict = json.load(request.urlopen(iurl, context=ctx)) - if os.path.exists(f'{destination}/metadata.yml'): - with open(f'{destination}/metadata.yml', 'r') as fd: - yaml = YAML(typ='safe') # default, if not specfied, is 'rt' (round-trip) - metadata = yaml.load(fd) - version = metadata['version'] - if version == response['tag_name']: - log('Latest LLVM-ObjCS build already installed') - return + if os.path.exists(destination): + if os.path.exists(f'{destination}/metadata.yml'): + with open(f'{destination}/metadata.yml', 'r') as fd: + yaml = YAML(typ='safe') # default, if not specfied, is 'rt' (round-trip) + metadata = yaml.load(fd) + version = metadata['version'] + if version == response['tag_name']: + log('Latest LLVM-ObjCS build already installed') + return + else: + log('New LLVM-ObjCS available! Downloading ...') + shutil.rmtree(destination) + else: + log('No version info present to query. Skipping.') + return for asset in response['assets']: n = asset['name'] parts = n.split('-')