at 24.11-pre 62 lines 1.3 kB view raw
1{ fetchgit, fetchhg, fetchzip, lib }: 2 3let 4 inherit (lib) 5 assertOneOf 6 makeOverridable 7 optionalString 8 ; 9in 10 11makeOverridable ( 12{ owner 13, repo, rev 14, domain ? "sr.ht" 15, vc ? "git" 16, name ? "source" 17, fetchSubmodules ? false 18, ... # For hash agility 19} @ args: 20 21assert (assertOneOf "vc" vc [ "hg" "git" ]); 22 23let 24 urlFor = resource: "https://${resource}.${domain}/${owner}/${repo}"; 25 baseUrl = urlFor vc; 26 baseArgs = { 27 inherit name; 28 } // removeAttrs args [ 29 "owner" "repo" "rev" "domain" "vc" "name" "fetchSubmodules" 30 ]; 31 vcArgs = baseArgs // { 32 inherit rev; 33 url = baseUrl; 34 }; 35 fetcher = if fetchSubmodules then vc else "zip"; 36 cases = { 37 git = { 38 fetch = fetchgit; 39 arguments = vcArgs // { fetchSubmodules = true; }; 40 }; 41 hg = { 42 fetch = fetchhg; 43 arguments = vcArgs // { fetchSubrepos = true; }; 44 }; 45 zip = { 46 fetch = fetchzip; 47 arguments = baseArgs // { 48 url = "${baseUrl}/archive/${rev}.tar.gz"; 49 postFetch = optionalString (vc == "hg") '' 50 rm -f "$out/.hg_archival.txt" 51 ''; # impure file; see #12002 52 passthru = { 53 gitRepoUrl = urlFor "git"; 54 }; 55 }; 56 }; 57 }; 58in cases.${fetcher}.fetch cases.${fetcher}.arguments // { 59 inherit rev; 60 meta.homepage = "${baseUrl}"; 61} 62)