fix: Update npins version

This commit is contained in:
Gerg-L 2025-03-24 18:21:56 -04:00 committed by Gerg-L
parent a40c3ff4a2
commit f82ea9650b
2 changed files with 237 additions and 26 deletions

File diff suppressed because it is too large Load diff

View file

@ -1,5 +1,3 @@
# Based off of:
# https://github.com/NixOS/nixpkgs/blob/776c3bee4769c616479393aeefceefeda16b6fcb/pkgs/tools/nix/npins/source.nix
{
lib,
fetchurl,
@ -8,7 +6,16 @@
}:
builtins.mapAttrs
(
_: let
name: let
getUrl = {
url,
hash,
...
}:
fetchurl {
inherit url;
sha256 = hash;
};
getZip = {
url,
hash,
@ -23,19 +30,29 @@ builtins.mapAttrs
repository,
revision,
url ? null,
submodules,
hash,
...
} @ attrs:
assert repository ? type;
if url != null
if url != null && !submodules
then getZip attrs
else
assert repository.type == "Git"; let
urlToName = url: rev: let
matched = builtins.match "^.*/([^/]*)(\\.git)?$" repository.url;
short = builtins.substring 0 7 rev;
url' =
if repository.type == "Git"
then repository.url
else if repository.type == "GitHub"
then "https://github.com/${repository.owner}/${repository.repo}.git"
else if repository.type == "GitLab"
then "${repository.server}/${repository.repo_path}.git"
else throw "Unrecognized repository type ${repository.type}";
name = let
matched = builtins.match "^.*/([^/]*)(\\.git)?$" url';
short = builtins.substring 0 7 revision;
appendShort =
if (builtins.match "[a-f0-9]*" rev) != null
if (builtins.match "[a-f0-9]*" revision) != null
then "-${short}"
else "";
in "${
@ -43,43 +60,53 @@ builtins.mapAttrs
then "source"
else builtins.head matched
}${appendShort}";
name = urlToName repository.url revision;
in
fetchgit {
inherit name;
inherit (repository) url;
url = url';
rev = revision;
sha256 = hash;
fetchSubmodules = submodules;
};
mkPyPiSource = {
url,
hash,
...
}:
fetchurl {
inherit url;
sha256 = hash;
};
in
spec:
assert spec ? type; let
mayOverride = path: let
envVarName = "NPINS_OVERRIDE_${saneName}";
saneName = lib.stringAsChars (c:
if (builtins.match "[a-zA-Z0-9]" c) == null
then "_"
else c)
name;
ersatz = builtins.getEnv envVarName;
in
if ersatz == ""
then path
else
# this turns the string into an actual Nix path (for both absolute and
# relative paths)
builtins.trace "Overriding path of \"${name}\" with \"${ersatz}\" due to set \"${envVarName}\"" (
if builtins.substring 0 1 ersatz == "/"
then /. + ersatz
else /. + builtins.getEnv "PWD" + "/${ersatz}"
);
func =
{
Git = mkGitSource;
GitRelease = mkGitSource;
PyPi = mkPyPiSource;
PyPi = getUrl;
Channel = getZip;
Tarball = getUrl;
}
.${spec.type}
or (builtins.throw "Unknown source type ${spec.type}");
in
spec // {outPath = func spec;}
spec // {outPath = mayOverride (func spec);}
)
(
let
json = lib.importJSON ./sources.json;
in
assert lib.assertMsg (json.version == 3) "Npins version mismatch!";
assert lib.assertMsg (json.version == 5) "Npins version mismatch!";
json.pins
)