Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at devShellTools-shell 49 lines 1.5 kB view raw
1wine_url_base=https://dl.winehq.org/wine 2 3sed_exprs=() 4 5get_source_attr() { 6 nix-instantiate --eval --json -E "(let pkgs = import ./. {}; in pkgs.callPackage $sources_file { inherit pkgs; }).$1" | jq -r 7} 8 9set_source_attr() { 10 path="$1" 11 name="$2" 12 value="$3" 13 line=$(nix-instantiate --eval -E "(builtins.unsafeGetAttrPos \"$name\" (let pkgs = import ./. {}; in pkgs.callPackage $sources_file { inherit pkgs; }).$path).line") 14 sed_exprs+=(-e "${line}s@[^ ].*\$@$name = $value;@") 15} 16 17set_version_and_hash() { 18 set_source_attr "$1" version "\"$2\"" 19 set_source_attr "$1" hash "\"$(to_sri "$3")\"" 20} 21 22get_latest_wine_version() { 23 list-directory-versions --pname=wine --url="$wine_url_base/source/$1/" | grep -v 'diff\|rc\|tar' | sort --reverse --version-sort -u | head -n 1 24} 25 26get_latest_lib_version() { 27 curl -s "$wine_url_base/$1/" | grep -o 'href="[0-9.]*/"' | sed 's_^href="\(.*\)/"_\1_' | sort --reverse --version-sort -u | head -n 1 28} 29 30to_sri() { 31 nix --extra-experimental-features nix-command hash to-sri --type sha256 "$1" 32} 33 34autobump() { 35 attr="$1" 36 latest="$2" 37 fetcher="${3:-nix-prefetch-url}" 38 more="${4:-}" 39 version=$(get_source_attr "$attr.version") 40 if [[ "$version" != "$latest" ]]; then 41 url=$(get_source_attr "$attr.url") 42 set_version_and_hash "$attr" "$latest" "$($fetcher "${url//$version/$latest}")" 43 [[ -z "$more" ]] || $more "$version" "$latest" 44 fi 45} 46 47do_update() { 48 [[ "${#sed_exprs[@]}" -eq 0 ]] || sed -i "${sed_exprs[@]}" "$sources_file" 49}