Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at flake-libs 88 lines 1.6 kB view raw
1{ 2 fetchgit, 3 fetchhg, 4 fetchzip, 5 lib, 6}: 7 8let 9 inherit (lib) 10 assertOneOf 11 makeOverridable 12 optionalString 13 ; 14in 15 16makeOverridable ( 17 { 18 owner, 19 repo, 20 rev, 21 domain ? "sr.ht", 22 vc ? "git", 23 name ? "source", 24 fetchSubmodules ? false, 25 ... # For hash agility 26 }@args: 27 28 assert ( 29 assertOneOf "vc" vc [ 30 "hg" 31 "git" 32 ] 33 ); 34 35 let 36 urlFor = resource: "https://${resource}.${domain}/${owner}/${repo}"; 37 baseUrl = urlFor vc; 38 baseArgs = 39 { 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)