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
|
for arg in "$@"; do
|
||||||
case $arg in
|
case $arg in
|
||||||
--system=*)
|
--system=*)
|
||||||
|
system="${arg#*=}"
|
||||||
systemArg="--system ${arg#*=}"
|
systemArg="--system ${arg#*=}"
|
||||||
;;
|
;;
|
||||||
--version-key=*)
|
--version-key=*)
|
||||||
@ -59,6 +60,9 @@ newVersion=${args[1]}
|
|||||||
newHash=${args[2]}
|
newHash=${args[2]}
|
||||||
newUrl=${args[3]}
|
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
|
if (( "${#args[*]}" < 2 )); then
|
||||||
echo "$scriptName: Too few arguments"
|
echo "$scriptName: Too few arguments"
|
||||||
usage
|
usage
|
||||||
@ -75,11 +79,39 @@ if [[ -z "$versionKey" ]]; then
|
|||||||
versionKey=version
|
versionKey=version
|
||||||
fi
|
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
|
if [[ -z "$nixFile" ]]; then
|
||||||
nixFile=$(nix-instantiate $systemArg --eval --strict -A "$attr.meta.position" | sed -re 's/^"(.*):[0-9]+"$/\1/')
|
nixFile=$(nix-instantiate $systemArg --eval --strict -A "$attr.meta.position" | sed -re 's/^"(.*):[0-9]+"$/\1/')
|
||||||
if [[ ! -f "$nixFile" ]]; then
|
if [[ ! -f "$nixFile" ]]; then
|
||||||
die "Couldn't evaluate '$attr.meta.position' to locate the .nix file!"
|
die "Couldn't evaluate '$attr.meta.position' to locate the .nix file!"
|
||||||
fi
|
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
|
fi
|
||||||
|
|
||||||
oldHashAlgo=$(nix-instantiate $systemArg --eval --strict -A "$attr.src.drvAttrs.outputHashAlgo" | tr -d '"')
|
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'!"
|
die "Couldn't locate old source hash '$oldHash' (or it appeared more than once) in '$nixFile'!"
|
||||||
fi
|
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
|
if [[ -z "$oldUrl" ]]; then
|
||||||
die "Couldn't evaluate source url from '$attr.src'!"
|
die "Couldn't evaluate source url from '$attr.src'!"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
drvName=$(nix-instantiate $systemArg --eval -E "with import ./. {}; lib.getName $attr" | tr -d '"')
|
oldVersion=$(nix-instantiate $systemArg --eval -E "with $importTree; $attr.${versionKey} or (builtins.parseDrvName $attr.name).version" | tr -d '"')
|
||||||
oldVersion=$(nix-instantiate $systemArg --eval -E "with import ./. {}; $attr.${versionKey} or (lib.getVersion $attr)" | tr -d '"')
|
|
||||||
|
|
||||||
if [[ -z "$drvName" || -z "$oldVersion" ]]; then
|
if [[ -z "$oldVersion" ]]; then
|
||||||
die "Couldn't evaluate name and version from '$attr.name'!"
|
die "Couldn't find out the old version of '$attr'!"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$oldVersion" = "$newVersion" ]]; then
|
if [[ "$oldVersion" = "$newVersion" ]]; then
|
||||||
@ -115,7 +146,7 @@ if [[ "$oldVersion" = "$newVersion" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -n "$newRevision" ]]; then
|
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
|
if [[ -z "$oldRevision" ]]; then
|
||||||
die "Couldn't evaluate source revision from '$attr.src'!"
|
die "Couldn't evaluate source revision from '$attr.src'!"
|
||||||
fi
|
fi
|
||||||
|
Loading…
x
Reference in New Issue
Block a user