
Next, we're going to refactor update.sh and the first step is to ensure that we keep everything related to sources into its own subdirectory to not clutter up the main directory too much. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
160 lines
3.7 KiB
Bash
Executable File
160 lines
3.7 KiB
Bash
Executable File
#!/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/";
|
|
output_file="$(cd "$(dirname "$0")" && pwd)/sources.nix";
|
|
|
|
nix_getattr()
|
|
{
|
|
input_file="$1";
|
|
attr="$2";
|
|
|
|
var="$(nix-instantiate --eval-only -A "$attr" "$output_file")";
|
|
echo "$var" | tr -d '\\"';
|
|
}
|
|
|
|
### 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;
|
|
}
|
|
|
|
if [ -e "$output_file" ];
|
|
then
|
|
get_sha256()
|
|
{
|
|
channel="$1";
|
|
version="$2";
|
|
url="$3";
|
|
|
|
oldver="$(nix_getattr "$output_file" "$channel.version")";
|
|
|
|
echo -n "Checking if $oldver ($channel) is up to date..." >&2;
|
|
|
|
if [ "x$(get_newest_ver "$version" "$oldver")" != "x$oldver" ];
|
|
then
|
|
echo " no, getting sha256 for new version $version:" >&2;
|
|
sha256="$(nix-prefetch-url "$url")" || return 1;
|
|
else
|
|
echo " yes, keeping old sha256." >&2;
|
|
sha256="$(nix_getattr "$output_file" "$channel.sha256")" \
|
|
|| return 1;
|
|
fi;
|
|
|
|
sha_insert "$version" "$sha256";
|
|
echo "$sha256";
|
|
return 0;
|
|
}
|
|
else
|
|
get_sha256()
|
|
{
|
|
nix-prefetch-url "$3";
|
|
}
|
|
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;
|
|
url="${bucket_url%/}/chromium-$version.tar.xz";
|
|
sha256="$(get_sha256 "$channel" "$version" "$url")" || continue;
|
|
echo "$sha256:$version:$url";
|
|
return 0;
|
|
done;
|
|
}
|
|
|
|
get_channel_exprs()
|
|
{
|
|
for chline in $1;
|
|
do
|
|
channel="${chline%%,*}";
|
|
version="${chline##*,}";
|
|
|
|
url="${bucket_url%/}/chromium-$version.tar.xz";
|
|
|
|
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" "$url")";
|
|
if [ $? -ne 0 ];
|
|
then
|
|
echo "Whoops, failed to fetch $version, trying previous" \
|
|
"versions:" >&2;
|
|
|
|
sha_ver_url="$(get_prev_sha256 "$channel" "$version")";
|
|
sha256="${sha_ver_url%%:*}";
|
|
ver_url="${sha_ver_url#*:}";
|
|
version="${ver_url%%:*}";
|
|
url="${ver_url#*:}";
|
|
fi;
|
|
fi;
|
|
|
|
sha_insert "$version" "$sha256";
|
|
|
|
echo " $channel = {";
|
|
echo " version = \"$version\";";
|
|
echo " url = \"$url\";";
|
|
echo " sha256 = \"$sha256\";";
|
|
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 > "$output_file" <<-EOF
|
|
# This file is autogenerated from update.sh in the same directory.
|
|
{
|
|
$channel_exprs
|
|
}
|
|
EOF
|