{ writeScript, runtimeShell }: writeScript "update-mendeley" '' #!${runtimeShell} function follow() { local URL=$1 while true; do NEWURL=$(curl -m20 -sI "$URL" -o /dev/null -w '%{redirect_url}') [ -z "$NEWURL" ] && break [[ $NEWURL = $URL ]] && (echo "redirect loop?!"; exit 1) echo "Following $URL -> $NEWURL ..." >&2 URL=$NEWURL done echo $URL } amd64URL=$(follow https://www.mendeley.com/repositories/ubuntu/stable/amd64/mendeleydesktop-latest) amd64V=$(basename $amd64URL|grep -m1 -o "[0-9]\+\.[0-9]\+\(\.[0-9]\+\)\?") i386URL=$(follow https://www.mendeley.com/repositories/ubuntu/stable/i386/mendeleydesktop-latest) i386V=$(basename $i386URL|grep -m1 -o "[0-9]\+\.[0-9]\+\(\.[0-9]\+\)\?") echo "amd64 version: $amd64V" echo "i386 version: $i386V" if [[ $amd64V != $i386V ]]; then echo "Versions not the same!" exit 1 fi if grep -q -F "$amd64V" ${./default.nix}; then echo "No new version yet, nothing to do." echo "Have a nice day!" exit 0 fi amd64OldHash=$(nix-instantiate --eval --strict -A "mendeley.src.drvAttrs.outputHash" --argstr system "x86_64-linux"| tr -d '"') i386OldHash=$(nix-instantiate --eval --strict -A "mendeley.src.drvAttrs.outputHash" --argstr system "i686-linux"| tr -d '"') echo "Prefetching amd64..." amd64NewHash=$(nix-prefetch-url $amd64URL) echo "Prefetching i386..." i386NewHash=$(nix-prefetch-url $i386URL) # Don't actually update, just report that an update is available cat <<EOF Time to update to $amd64V ! 32bit (i386): Old: $i386OldHash New: $i386NewHash 64bit (amd64): Old: $amd64OldHash New: $amd64NewHash Exiting so this information is seen... (no update is actually performed here) EOF exit 1 ''