nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 lib,
3 repoRevToNameMaybe,
4 fetchgit,
5 fetchhg,
6 fetchzip,
7}:
8
9let
10 inherit (lib)
11 assertOneOf
12 makeOverridable
13 optionalString
14 ;
15in
16
17makeOverridable (
18 {
19 owner,
20 repo,
21 rev,
22 name ? repoRevToNameMaybe repo rev "sourcehut",
23 domain ? "sr.ht",
24 vc ? "git",
25 fetchSubmodules ? false,
26 ... # For hash agility
27 }@args:
28
29 assert (
30 assertOneOf "vc" vc [
31 "hg"
32 "git"
33 ]
34 );
35
36 let
37 urlFor = resource: "https://${resource}.${domain}/${owner}/${repo}";
38 baseUrl = urlFor vc;
39 baseArgs = {
40 inherit name;
41 }
42 // removeAttrs args [
43 "owner"
44 "repo"
45 "rev"
46 "domain"
47 "vc"
48 "name"
49 "fetchSubmodules"
50 ];
51 vcArgs = baseArgs // {
52 inherit rev;
53 url = baseUrl;
54 };
55 fetcher = if fetchSubmodules then vc else "zip";
56 cases = {
57 git = {
58 fetch = fetchgit;
59 arguments = vcArgs // {
60 fetchSubmodules = true;
61 };
62 };
63 hg = {
64 fetch = fetchhg;
65 arguments = vcArgs // {
66 fetchSubrepos = true;
67 };
68 };
69 zip = {
70 fetch = fetchzip;
71 arguments = baseArgs // {
72 url = "${baseUrl}/archive/${rev}.tar.gz";
73 postFetch = optionalString (vc == "hg") ''
74 rm -f "$out/.hg_archival.txt"
75 ''; # impure file; see #12002
76 passthru = {
77 gitRepoUrl = urlFor "git";
78 };
79 };
80 };
81 };
82 in
83 cases.${fetcher}.fetch cases.${fetcher}.arguments
84 // {
85 inherit rev;
86 meta.homepage = "${baseUrl}";
87 }
88)