pytrainer: unpin python 3.10
[NixPkgs.git] / pkgs / build-support / fetchsourcehut / default.nix
blob42d437b3555e6ac9a5baa2f0527bcab08e74b92c
1 { fetchgit, fetchhg, fetchzip, lib }:
3 let
4   inherit (lib)
5     assertOneOf
6     makeOverridable
7     optionalString
8     ;
9 in
11 makeOverridable (
12 { owner
13 , repo, rev
14 , domain ? "sr.ht"
15 , vc ? "git"
16 , name ? "source"
17 , fetchSubmodules ? false
18 , ... # For hash agility
19 } @ args:
21 assert (assertOneOf "vc" vc [ "hg" "git" ]);
23 let
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   };
58 in cases.${fetcher}.fetch cases.${fetcher}.arguments // {
59   inherit rev;
60   meta.homepage = "${baseUrl}";