nixpkgs mirror (for testing) github.com/NixOS/nixpkgs
nix
at devShellTools-shell 88 lines 1.6 kB view raw
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)