Merge pull request #120488 from jtojnar/cus-flake
common-updater-scripts: Support flake-compat repos
This commit is contained in:
commit
4c7a200156
@ -19,6 +19,7 @@ args=()
|
||||
for arg in "$@"; do
|
||||
case $arg in
|
||||
--system=*)
|
||||
system="${arg#*=}"
|
||||
systemArg="--system ${arg#*=}"
|
||||
;;
|
||||
--version-key=*)
|
||||
@ -59,6 +60,9 @@ newVersion=${args[1]}
|
||||
newHash=${args[2]}
|
||||
newUrl=${args[3]}
|
||||
|
||||
# Third-party repositories might not accept arguments in their default.nix.
|
||||
importTree="(let tree = import ./.; in if builtins.isFunction tree then tree {} else tree)"
|
||||
|
||||
if (( "${#args[*]}" < 2 )); then
|
||||
echo "$scriptName: Too few arguments"
|
||||
usage
|
||||
@ -75,11 +79,39 @@ if [[ -z "$versionKey" ]]; then
|
||||
versionKey=version
|
||||
fi
|
||||
|
||||
# Allow finding packages among flake outputs in repos using flake-compat.
|
||||
pname=$(nix-instantiate $systemArg --eval --strict -A "$attr.name" || echo)
|
||||
if [[ -z "$pname" ]]; then
|
||||
if [[ -z "$system" ]]; then
|
||||
system=$(nix-instantiate --eval -E 'builtins.currentSystem' | tr -d '"')
|
||||
fi
|
||||
|
||||
pname=$(nix-instantiate $systemArg --eval --strict -A "packages.$system.$attr.name" || echo)
|
||||
if [[ -n "$pname" ]]; then
|
||||
attr="packages.$system.$attr"
|
||||
else
|
||||
pname=$(nix-instantiate $systemArg --eval --strict -A "legacyPackages.$system.$attr.name" || echo)
|
||||
if [[ -n "$pname" ]]; then
|
||||
attr="legacyPackages.$system.$attr"
|
||||
else
|
||||
die "Could not find attribute '$attr'!"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -z "$nixFile" ]]; then
|
||||
nixFile=$(nix-instantiate $systemArg --eval --strict -A "$attr.meta.position" | sed -re 's/^"(.*):[0-9]+"$/\1/')
|
||||
if [[ ! -f "$nixFile" ]]; then
|
||||
die "Couldn't evaluate '$attr.meta.position' to locate the .nix file!"
|
||||
fi
|
||||
|
||||
# flake-compat will return paths in the Nix store, we need to correct for that.
|
||||
possiblyOutPath=$(nix-instantiate $systemArg --eval -E "with $importTree; outPath" | tr -d '"')
|
||||
if [[ -n "$possiblyOutPath" ]]; then
|
||||
outPathEscaped=$(echo "$possiblyOutPath" | sed 's#[$^*\\.[|]#\\&#g')
|
||||
pwdEscaped=$(echo "$PWD" | sed 's#[$^*\\.[|]#\\&#g')
|
||||
nixFile=$(echo "$nixFile" | sed "s|^$outPathEscaped|$pwdEscaped|")
|
||||
fi
|
||||
fi
|
||||
|
||||
oldHashAlgo=$(nix-instantiate $systemArg --eval --strict -A "$attr.src.drvAttrs.outputHashAlgo" | tr -d '"')
|
||||
@ -93,17 +125,16 @@ if [[ $(grep --count "$oldHash" "$nixFile") != 1 ]]; then
|
||||
die "Couldn't locate old source hash '$oldHash' (or it appeared more than once) in '$nixFile'!"
|
||||
fi
|
||||
|
||||
oldUrl=$(nix-instantiate $systemArg --eval -E "with import ./. {}; builtins.elemAt ($attr.src.drvAttrs.urls or [ $attr.src.url ]) 0" | tr -d '"')
|
||||
oldUrl=$(nix-instantiate $systemArg --eval -E "with $importTree; builtins.elemAt ($attr.src.drvAttrs.urls or [ $attr.src.url ]) 0" | tr -d '"')
|
||||
|
||||
if [[ -z "$oldUrl" ]]; then
|
||||
die "Couldn't evaluate source url from '$attr.src'!"
|
||||
fi
|
||||
|
||||
drvName=$(nix-instantiate $systemArg --eval -E "with import ./. {}; lib.getName $attr" | tr -d '"')
|
||||
oldVersion=$(nix-instantiate $systemArg --eval -E "with import ./. {}; $attr.${versionKey} or (lib.getVersion $attr)" | tr -d '"')
|
||||
oldVersion=$(nix-instantiate $systemArg --eval -E "with $importTree; $attr.${versionKey} or (builtins.parseDrvName $attr.name).version" | tr -d '"')
|
||||
|
||||
if [[ -z "$drvName" || -z "$oldVersion" ]]; then
|
||||
die "Couldn't evaluate name and version from '$attr.name'!"
|
||||
if [[ -z "$oldVersion" ]]; then
|
||||
die "Couldn't find out the old version of '$attr'!"
|
||||
fi
|
||||
|
||||
if [[ "$oldVersion" = "$newVersion" ]]; then
|
||||
@ -115,7 +146,7 @@ if [[ "$oldVersion" = "$newVersion" ]]; then
|
||||
fi
|
||||
|
||||
if [[ -n "$newRevision" ]]; then
|
||||
oldRevision=$(nix-instantiate $systemArg --eval -E "with import ./. {}; $attr.src.rev" | tr -d '"')
|
||||
oldRevision=$(nix-instantiate $systemArg --eval -E "with $importTree; $attr.src.rev" | tr -d '"')
|
||||
if [[ -z "$oldRevision" ]]; then
|
||||
die "Couldn't evaluate source revision from '$attr.src'!"
|
||||
fi
|
||||
|
Loading…
Reference in New Issue
Block a user