nixos/activation-script: Fix dependencies for dry activation

This commit is contained in:
Janne Heß 2021-09-12 11:34:13 +02:00
parent 79f637da44
commit 4db13430fb
No known key found for this signature in database
GPG Key ID: 69165158F05265DF

View File

@ -18,8 +18,17 @@ let
});
systemActivationScript = set: onlyDry: let
set' = filterAttrs (_: v: onlyDry -> v.supportsDryActivation) (mapAttrs (_: v: if isString v then (noDepEntry v) // { supportsDryActivation = false; } else v) set);
set' = mapAttrs (_: v: if isString v then (noDepEntry v) // { supportsDryActivation = false; } else v) set;
withHeadlines = addAttributeName set';
# When building a dry activation script, this replaces all activation scripts
# that do not support dry mode with a comment that does nothing. Filtering these
# activation scripts out so they don't get generated into the dry activation script
# does not work because when an activation script that supports dry mode depends on
# an activation script that does not, the dependency cannot be resolved and the eval
# fails.
withDrySnippets = mapAttrs (a: v: if onlyDry && !v.supportsDryActivation then v // {
text = "#### Activation script snippet ${a} does not support dry activation.";
} else v) withHeadlines;
in
''
#!${pkgs.runtimeShell}
@ -37,7 +46,7 @@ let
# Ensure a consistent umask.
umask 0022
${textClosureMap id (withHeadlines) (attrNames withHeadlines)}
${textClosureMap id (withDrySnippets) (attrNames withDrySnippets)}
'' + optionalString (!onlyDry) ''
# Make this configuration the current configuration.