forked from nix-community/NUR
-
Notifications
You must be signed in to change notification settings - Fork 0
/
repoSource.nix
43 lines (40 loc) · 1.2 KB
/
repoSource.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
{
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 sha256;
fetchSubmodules = submodules;
}