From 99d946173870453e3a218f06db7367ce82e8ceab Mon Sep 17 00:00:00 2001 From: Harry Chen Date: Fri, 6 Mar 2020 23:09:27 +0800 Subject: [PATCH] Allow full download of some repos Signed-off-by: Harry Chen --- github-release.py | 63 ++++++++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 26 deletions(-) diff --git a/github-release.py b/github-release.py index 4c8298d..ad1204f 100755 --- a/github-release.py +++ b/github-release.py @@ -12,7 +12,8 @@ import requests BASE_URL = os.getenv("TUNASYNC_UPSTREAM_URL", "https://api.github.com/repos/") WORKING_DIR = os.getenv("TUNASYNC_WORKING_DIR") -REPOS = ["googlefonts/noto-fonts", +REPOS = [ + "googlefonts/noto-fonts", "googlefonts/noto-cjk", "googlefonts/noto-emoji", "be5invis/Sarasa-Gothic", @@ -27,6 +28,11 @@ REPOS = ["googlefonts/noto-fonts", "rust-analyzer/rust-analyzer", ] +FULL_DOWNLOAD_REPOS = [ + "xxr3376/Learn-Project", + "robertying/learnX", + ] + # connect and read timeout value TIMEOUT_OPTION = (7, 10) @@ -102,33 +108,16 @@ def main(): remote_filelist = [] cleaning = False - for repo in args.repo: - repo_local = working_dir / Path(repo) - print(f"syncing {repo} to {repo_local}") - try: - r = requests.get(f"{args.base_url}{repo}/releases") - r.raise_for_status() - releases = r.json() - except: - traceback.print_exc() - break - - for latest in releases: - if not latest['draft'] and not latest['prerelease']: - break - else: - print("Error: No release version found") - continue - - name = ensure_safe_name(latest['name'] or latest['tag_name']) + def download(release, repo_dir): + name = ensure_safe_name(release['name'] or release['tag_name']) if len(name) == 0: print("Error: Unnamed release") continue - if len(latest['assets']) == 0: - url = latest['tarball_url'] - updated = datetime.strptime(latest['published_at'], '%Y-%m-%dT%H:%M:%SZ').timestamp() - dst_file = repo_local / name / 'repo-snapshot.tar.gz' + if len(release['assets']) == 0: + url = release['tarball_url'] + updated = datetime.strptime(release['published_at'], '%Y-%m-%dT%H:%M:%SZ').timestamp() + dst_file = repo_dir / name / 'repo-snapshot.tar.gz' remote_filelist.append(dst_file.relative_to(working_dir)) if dst_file.is_file(): @@ -137,10 +126,10 @@ def main(): dst_file.parent.mkdir(parents=True, exist_ok=True) task_queue.put((url, dst_file, working_dir, updated)) - for asset in latest['assets']: + for asset in release['assets']: url = asset['browser_download_url'] updated = datetime.strptime(asset['updated_at'], '%Y-%m-%dT%H:%M:%SZ').timestamp() - dst_file = repo_local / name / ensure_safe_name(asset['name']) + dst_file = repo_dir / name / ensure_safe_name(asset['name']) remote_filelist.append(dst_file.relative_to(working_dir)) if dst_file.is_file(): @@ -160,6 +149,28 @@ def main(): dst_file.parent.mkdir(parents=True, exist_ok=True) task_queue.put((url, dst_file, working_dir, updated)) + + + for repo in args.repo: + repo_dir = working_dir / Path(repo) + print(f"syncing {repo} to {repo_dir}") + + try: + r = requests.get(f"{args.base_url}{repo}/releases") + r.raise_for_status() + releases = r.json() + except: + traceback.print_exc() + break + + for release in releases: + if not release['draft'] and not release['prerelease']: + download(release, repo_dir) + if repo not in FULL_DOWNLOAD_REPOS: # only download the latest release + break + else: + print("Error: No release version found") + continue else: cleaning = True