From 5eb227c31fab2ab3828d1453671ff373fb7f8796 Mon Sep 17 00:00:00 2001 From: networkException Date: Wed, 14 Feb 2024 00:14:47 +0100 Subject: [PATCH] chromium: cache chromium tarball hashes in update script this patch introduces an in memory cache for the result of hashing a chromium release tarball after recompressing and pruning it. previously updating chromium and ungoogled-chromium to the same chromium version would result in the expensive recompression happening twice. --- .../networking/browsers/chromium/update.py | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/pkgs/applications/networking/browsers/chromium/update.py b/pkgs/applications/networking/browsers/chromium/update.py index c231febabd60..dc1e31e81eaf 100755 --- a/pkgs/applications/networking/browsers/chromium/update.py +++ b/pkgs/applications/networking/browsers/chromium/update.py @@ -201,6 +201,8 @@ def print_updates(channels_old, channels_new): channels = {} last_channels = load_as_json(PIN_PATH) +src_hash_cache = {} + print(f'GET {RELEASES_URL}', file=sys.stderr) with urlopen(RELEASES_URL) as resp: @@ -240,13 +242,22 @@ with urlopen(RELEASES_URL) as resp: google_chrome_suffix = channel_name try: - channel['hash'] = prefetch_src_sri_hash( - channel_name_to_attr_name(channel_name), - release["version"] - ) + version = release["version"] + + if version in src_hash_cache: + print(f'Already got hash {src_hash_cache[version]} for {version}, skipping FOD prefetch for {channel_name_to_attr_name(channel_name)}') + + channel["hash"] = src_hash_cache[version] + else: + channel["hash"] = prefetch_src_sri_hash( + channel_name_to_attr_name(channel_name), + version + ) + src_hash_cache[version] = channel["hash"] + channel['hash_deb_amd64'] = nix_prefetch_url( f'{DEB_URL}/google-chrome-{google_chrome_suffix}/' + - f'google-chrome-{google_chrome_suffix}_{release["version"]}-1_amd64.deb') + f'google-chrome-{google_chrome_suffix}_{version}-1_amd64.deb') except subprocess.CalledProcessError: # This release isn't actually available yet. Continue to # the next one.