diff options
Diffstat (limited to 'pkgs/applications/networking/browsers/chromium/update.sh')
-rwxr-xr-x | pkgs/applications/networking/browsers/chromium/update.sh | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/pkgs/applications/networking/browsers/chromium/update.sh b/pkgs/applications/networking/browsers/chromium/update.sh new file mode 100755 index 000000000000..e82d22f34fd0 --- /dev/null +++ b/pkgs/applications/networking/browsers/chromium/update.sh @@ -0,0 +1,123 @@ +#!/bin/sh + +channels_url="http://omahaproxy.appspot.com/all?csv=1"; +history_url="http://omahaproxy.appspot.com/history"; +bucket_url="http://commondatastorage.googleapis.com/chromium-browser-official/"; +base_path="$(cd "$(dirname "$0")" && pwd)/source"; + +source "$(nix-build --no-out-link "$base_path/update.nix" -A updateHelpers)"; + +### poor mans key/value-store :-) ### + +ver_sha_table=""; # list of version:sha256 + +sha_lookup() +{ + version="$1"; + + for ver_sha in $ver_sha_table; + do + if [ "x${ver_sha%:*}" = "x$version" ]; + then + echo "${ver_sha##*:}"; + return 0; + fi; + done; + + return 1; +} + +sha_insert() +{ + version="$1"; + sha256="$2"; + + ver_sha_table="$ver_sha_table $version:$sha256"; +} + +get_newest_ver() +{ + versions="$(for v in $@; do echo "$v"; done)"; + if oldest="$(echo "$versions" | sort -V 2> /dev/null | tail -n1)"; + then + echo "$oldest"; + else + echo "$versions" | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n | tail -n1; + fi; +} + +fetch_filtered_history() +{ + curl -s "$history_url" | sed -nr 's/^'"linux,$1"',([^,]+).*$/\1/p'; +} + +get_prev_sha256() +{ + channel="$1"; + current_version="$2"; + + for version in $(fetch_filtered_history "$channel"); + do + [ "x$version" = "x$current_version" ] && continue; + sha256="$(get_sha256 "$channel" "$version")" || continue; + echo "$sha256:$version"; + return 0; + done; +} + +get_channel_exprs() +{ + for chline in $1; + do + channel="${chline%%,*}"; + version="${chline##*,}"; + + echo -n "Checking if sha256 of version $version is cached..." >&2; + if sha256="$(sha_lookup "$version")"; + then + echo " yes: $sha256" >&2; + else + echo " no." >&2; + sha256="$(get_sha256 "$channel" "$version")"; + if [ $? -ne 0 ]; + then + echo "Whoops, failed to fetch $version, trying previous" \ + "versions:" >&2; + + sha_ver="$(get_prev_sha256 "$channel" "$version")"; + sha256="${sha_ver%:*}"; + version="${sha_ver#*:}"; + fi; + fi; + + sha_insert "$version" "$sha256"; + + main="${sha256%%.*}"; + deb="${sha256#*.}"; + deb32="${deb%.*}"; + deb64="${deb#*.}"; + + echo " $channel = {"; + echo " version = \"$version\";"; + echo " sha256 = \"$main\";"; + if [ "x${deb#*[a-z0-9].[a-z0-9]}" != "x$deb" ]; + then + echo " sha256bin32 = \"$deb32\";"; + echo " sha256bin64 = \"$deb64\";"; + fi; + echo " };"; + done; +} + +cd "$(dirname "$0")"; + +omaha="$(curl -s "$channels_url")"; +versions="$(echo "$omaha" | sed -nr -e 's/^linux,([^,]+,[^,]+).*$/\1/p')"; +channel_exprs="$(get_channel_exprs "$versions")"; + +cat > "$base_path/sources.nix" <<-EOF +# This file is autogenerated from update.sh in the parent directory. +{ +$channel_exprs +} +EOF |