42 lines
1.1 KiB
Nix
42 lines
1.1 KiB
Nix
{
|
|
name, attr,
|
|
fetchgit, fetchzip, lib,
|
|
manifest, lockedRevisions
|
|
}:
|
|
|
|
let
|
|
parseGitlabUrl = url: with builtins; let
|
|
parts = lib.splitString "/" url;
|
|
len = length parts;
|
|
in {
|
|
domain = elemAt parts 2;
|
|
owner = elemAt parts (len - 2);
|
|
repo = elemAt parts (len - 1);
|
|
};
|
|
|
|
revision = lockedRevisions.${name};
|
|
submodules = attr.submodules or false;
|
|
type = attr.type or null;
|
|
|
|
localPath = ../repos + "/${name}";
|
|
in
|
|
if lib.pathExists localPath then
|
|
"${localPath}"
|
|
else if lib.hasPrefix "https://github.com" attr.url && !submodules then
|
|
fetchzip {
|
|
url = "${attr.url}/archive/${revision.rev}.zip";
|
|
inherit (revision) sha256;
|
|
}
|
|
else if (lib.hasPrefix "https://gitlab.com" attr.url || type == "gitlab") && !submodules then
|
|
let
|
|
gitlab = parseGitlabUrl attr.url;
|
|
in fetchzip {
|
|
url = "https://${gitlab.domain}/api/v4/projects/${gitlab.owner}%2F${gitlab.repo}/repository/archive.tar.gz?sha=${revision.rev}";
|
|
inherit (revision) sha256;
|
|
}
|
|
else
|
|
fetchgit {
|
|
inherit (attr) url;
|
|
inherit (revision) rev sha256;
|
|
fetchSubmodules = submodules;
|
|
}
|