withNormalizedHash
lib.fetchers.withNormalizedHash
Wraps a function which accepts outputHash{,Algo}
into one which accepts hash
or sha{256,512}
Example
withNormalizedHash { hashTypes = [ "sha256" "sha512" ]; } (
{ outputHash, outputHashAlgo, ... }:
...
)
is a function which accepts one of hash
, sha256
, or sha512
(or the original's outputHash
and outputHashAlgo
).
Its functionArgs
metadata only lists hash
as a parameter, optional iff. outputHash
was an optional parameter of
the original function. sha256
, sha512
, outputHash
, or outputHashAlgo
are not mentioned in the functionArgs
metadata.
Type
withNormalizedHash :: { hashTypes :: List String } -> (AttrSet -> T) -> (AttrSet -> T)
Arguments
- hashTypes
- the set of attribute names accepted as hash inputs, in addition to
hash
- they must correspond to a valid value for
outputHashAlgo
, currently one of:md5
,sha1
,sha256
, orsha512
. - f
- the function to be wrapped
::: {.note}
In nixpkgs, mkDerivation
rejects MD5 outputHash
es, and SHA-1 is being deprecated.
As such, there is no reason to add md5
to hashTypes
, and
sha1
should only ever be included for backwards compatibility.
:::
Output
withNormalizedHash { inherit hashTypes; } f
is functionally equivalent to
args: f (normalizeHash {
inherit hashTypes;
required = !(lib.functionArgs f).outputHash;
} args)
However, withNormalizedHash
preserves functionArgs
metadata insofar as possible,
and is implemented somewhat more efficiently.
Noogle detected
Implementation
The following is the current implementation of this function.
withNormalizedHash =
{
hashTypes ? [ "sha256" ],
}:
fetcher:
let
inherit (lib.attrsets) genAttrs intersectAttrs removeAttrs;
inherit (lib.trivial) const functionArgs setFunctionArgs;
inherit (commonH hashTypes) hashSet;
fArgs = functionArgs fetcher;
normalize = normalizeHash {
inherit hashTypes;
required = !fArgs.outputHash;
};
in
# The o.g. fetcher must *only* accept outputHash and outputHashAlgo
assert fArgs ? outputHash && fArgs ? outputHashAlgo;
assert intersectAttrs fArgs hashSet == { };
setFunctionArgs (args: fetcher (normalize args)) (
removeAttrs fArgs [
"outputHash"
"outputHashAlgo"
]
// {
hash = fArgs.outputHash;
}
);