diff options
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/build-support/upstream-updater/update-upstream-data.sh')
-rwxr-xr-x | infra/libkookie/nixpkgs/pkgs/build-support/upstream-updater/update-upstream-data.sh | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/build-support/upstream-updater/update-upstream-data.sh b/infra/libkookie/nixpkgs/pkgs/build-support/upstream-updater/update-upstream-data.sh new file mode 100755 index 000000000000..38c0d13a723d --- /dev/null +++ b/infra/libkookie/nixpkgs/pkgs/build-support/upstream-updater/update-upstream-data.sh @@ -0,0 +1,182 @@ +#! /bin/sh + +set -x + +own_dir="$(cd "$(dirname "$0")"; sh -c pwd)" + +source "$own_dir/snippets.sh" + +[ -z "$1" ] && { + echo "Specify main expression filename." + exit 1; +} + +main_file="$1" +main_dir="$(cd "$(dirname "$main_file")" ; sh -c pwd)" +file_name="$(basename "$main_file")" +defs_file="$main_dir"/src-info-for-"$file_name" +src_file="$main_dir"/src-for-"$file_name" +# OK, [vcs] revert is always possible +new_src_file="$main_dir"/src-for-"$file_name" + +forcedUrl="$2" + +defs_dir="$("$own_dir"/attrset-to-dir.sh "$defs_file")" +src_defs_dir="$("$own_dir"/attrset-to-dir.sh "$src_file")" + +getAttr () { + file="$defs_dir"/"$1" + data="$( ( [ -f "$file" ] && cat "$file" ) || echo "$2" )" + echo "attribute $1 obtained as: [[$data]]" >&2 + echo "$data" +} + +method="$(getAttr method fetchurl)" +baseName="$(getAttr baseName 'unnamed-package')" +commonPrefetchVars=" version name hash" + +prefetchClause="" +[ fetchSFdirs = "$method" ] && { + if [ -z "$forcedUrl" ]; then + freshUrl="$("$own_dir"/urls-from-page.sh "$(getAttr downloadPage)" | + eval "egrep '$(getAttr sourceRegexp '[-][0-9.]+/$')'" | + eval "egrep -v '$(getAttr blacklistRegexp '^$')'" | + eval "$(getAttr choiceCommand 'head -n 1')" | + eval "$(getAttr versionToFileCommand "sed -re 's@/([^/]*-[0-9.]+)/@/\1/\1$(getAttr fileSuffix .tar.gz)@'")" + )" + + if ! egrep ':' <<< "$freshUrl" ; then + freshUrl="$(dirname "$(getAttr downloadPage).")/$freshUrl" + fi + + echo "Found download link: $freshUrl" >&2 + else + freshUrl="$forcedUrl" + fi + + freshUrl="$(echo "$freshUrl" | sed -re "$skipRedirectSF")" + echo "Sourceforge-corrected URL: $freshUrl" >&2 + + version="$(echo "$freshUrl" | + sed -re "$(getAttr versionExtractorSedScript "$extractVersionSF")")" + baseName="$(getAttr baseName "$(echo "$freshUrl" | sed -re 's@.*/project/([^/]+)/.*@\1@')")" + url="$freshUrl" + name="$baseName-$version" + advertisedUrl="$freshUrl" + + if [ x"$freshUrl" = x"$(cat "$src_defs_dir"/advertisedUrl)" ]; then + echo "Source link not changed" >&2 + exit + fi + hash=$(nix-prefetch-url "$freshUrl") + + prefetchVars="url advertisedUrl"; +} +[ fetchSF = "$method" ] && { + if [ -z "$forcedUrl" ]; then + freshUrl="$("$own_dir"/urls-from-page.sh "$(getAttr downloadPage)" | + eval "egrep \"$(getAttr sourceRegexp '.*[.]tar[.].*|.*[.]tgz$|.*[.]tbz2$')\"" | + eval "egrep -v \"$(getAttr blacklistRegexp '^$')\"" | + eval "$(getAttr choiceCommand 'head -1')")" + + if ! egrep ':' <<< "$freshUrl" ; then + freshUrl="$(dirname "$(getAttr downloadPage).")/$freshUrl" + fi + + echo "Found download link: $freshUrl" >&2 + else + freshUrl="$forcedUrl" + fi + + freshUrl="$(echo "$freshUrl" | sed -re "$skipRedirectSF")" + echo "Sourceforge-corrected URL: $freshUrl" >&2 + + version="$(echo "$freshUrl" | + sed -re "$(getAttr versionExtractorSedScript "$extractVersionSF")")" + baseName="$(getAttr baseName "$(echo "$freshUrl" | sed -re 's@.*/project/([^/]+)/.*@\1@')")" + url="$freshUrl" + name="$baseName-$version" + advertisedUrl="$freshUrl" + + if [ x"$freshUrl" = x"$(cat "$src_defs_dir"/advertisedUrl)" ]; then + echo "Source link not changed" >&2 + exit + fi + hash=$(nix-prefetch-url "$freshUrl") + + prefetchVars="url advertisedUrl"; +} +[ fetchurl = "$method" ] && { + if [ -z "$forcedUrl" ] ; then + freshUrl="$("$own_dir"/urls-from-page.sh "$(getAttr downloadPage)" | + eval "egrep \"$(getAttr sourceRegexp '.*[.]tar[.].*|.*[.]tgz$|.*[.]tbz2$')\"" | + eval "egrep -v \"$(getAttr blacklistRegexp '^$')\"" | + eval "$(getAttr choiceCommand 'head -1')")" + + if ! egrep ':' <<< "$freshUrl" ; then + freshUrl="$(dirname "$(getAttr downloadPage).")/$freshUrl" + fi + + echo "Found download link: $freshUrl" >&2 + else + freshUrl="$forcedUrl" + fi + + version="$(echo "$freshUrl" | + eval "sed -re \"$(getAttr versionExtractorSedScript \ + 's/.*-([0-9.]+)[.].*/\1/')\"")" + + mirrorUrl="$(echo "$freshUrl" | + eval "sed -r -e \"$(getAttr versionReferenceCreator \ + 's/-'"${version}"'[.]/-\${version}./')\"" | + eval "sed -r -e \"$(getAttr mirrorSedScript)\"")" + url="$mirrorUrl" + + name="$baseName-$version" + + advertisedUrl="$freshUrl" + url="$mirrorUrl" + + if [ x"$freshUrl" = x"$(cat "$src_defs_dir"/advertisedUrl)" ]; then + echo "Source link not changed" >&2 + exit + fi + hash=$(nix-prefetch-url "$freshUrl") + + prefetchVars="url advertisedUrl"; +} +[ "fetchgit" = "$method" ] && { + repoUrl="$(getAttr repoUrl)" + export NIX_PREFETCH_GIT_CHECKOUT_HOOK=" + cat .git/HEAD + " + export NIX_HASH_ALGO=sha256 + rev="$(getAttr rev '')"; + rev_and_hash="$("$own_dir"/../fetchgit/nix-prefetch-git "$repoUrl" "$rev" | tee /dev/stderr | tail -2)" + + rev="$(echo "$rev_and_hash" | head -1)" + url="$repoUrl"; + hash="$(echo "$rev_and_hash" | tail -1)" + version="$rev" + name="$baseName-$version" + + prefetchVars="rev url"; +} + +prefetchAssignments=""; +for i in $commonPrefetchVars $prefetchVars; do + prefetchAssignments="$prefetchAssignments $i=\"$(eval echo \"\$$i\")\";$(echo -e '\n ')" +done; + +extraAssignments="" +for i in $(getAttr extraVars ''); do + eval "$(getAttr "eval_$i" 'i=""')" + extraAssignments="$extraAssignments $i=\"$(eval echo \"\$$i\")\";$(echo -e '\n ')" +done + +cat << EOF > "$new_src_file" +rec { + $prefetchAssignments + $extraAssignments +} +EOF |