60 lines
1.3 KiB
Nix
60 lines
1.3 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;
|
|
# Allow for deeper hierarchies than owner/repo (GL has groups and subgroups)
|
|
path = lib.drop 3 parts;
|
|
};
|
|
|
|
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;
|
|
escapedPath = builtins.concatStringsSep "%2F" gitlab.path;
|
|
in
|
|
fetchzip {
|
|
url = "https://${gitlab.domain}/api/v4/projects/${escapedPath}/repository/archive.tar.gz?sha=${revision.rev}";
|
|
inherit (revision) sha256;
|
|
}
|
|
else
|
|
fetchgit {
|
|
inherit (attr) url;
|
|
inherit (revision) rev;
|
|
}
|
|
// (
|
|
if fetchgit == builtins.fetchGit or null then
|
|
{ inherit submodules; }
|
|
else
|
|
{
|
|
inherit (revision) sha256;
|
|
fetchSubmodules = submodules;
|
|
}
|
|
)
|