ps3-disc-dumper: 3.2.3 -> 4.2.5, .NET 6 -> 9 (#361506)
[NixPkgs.git] / pkgs / build-support / fetchrepoproject / default.nix
blobfb9ac85884645d394ada3e20db4c8c2e53504b09
2   lib,
3   stdenvNoCC,
4   gitRepo,
5   cacert,
6   copyPathsToStore,
7 }:
8 lib.fetchers.withNormalizedHash { } (
9   {
10     name,
11     manifest,
12     rev ? "HEAD",
13     outputHash,
14     outputHashAlgo,
15     # Optional parameters:
16     repoRepoURL ? "",
17     repoRepoRev ? "",
18     referenceDir ? "",
19     manifestName ? "",
20     localManifests ? [ ],
21     createMirror ? false,
22     useArchive ? false,
23   }:
25   assert repoRepoRev != "" -> repoRepoURL != "";
26   assert createMirror -> !useArchive;
28   let
29     inherit (lib)
30       concatMapStringsSep
31       concatStringsSep
32       fetchers
33       optionalString
34       ;
36     extraRepoInitFlags = [
37       (optionalString (repoRepoURL != "") "--repo-url=${repoRepoURL}")
38       (optionalString (repoRepoRev != "") "--repo-branch=${repoRepoRev}")
39       (optionalString (referenceDir != "") "--reference=${referenceDir}")
40       (optionalString (manifestName != "") "--manifest-name=${manifestName}")
41     ];
43     repoInitFlags = [
44       "--manifest-url=${manifest}"
45       "--manifest-branch=${rev}"
46       "--depth=1"
47       (optionalString createMirror "--mirror")
48       (optionalString useArchive "--archive")
49     ] ++ extraRepoInitFlags;
51     local_manifests = copyPathsToStore localManifests;
53   in
54   stdenvNoCC.mkDerivation {
55     inherit name;
57     inherit
58       cacert
59       manifest
60       rev
61       repoRepoURL
62       repoRepoRev
63       referenceDir
64       ; # TODO
66     inherit outputHash outputHashAlgo;
67     outputHashMode = "recursive";
69     preferLocalBuild = true;
70     enableParallelBuilding = true;
72     impureEnvVars = fetchers.proxyImpureEnvVars ++ [
73       "GIT_PROXY_COMMAND"
74       "SOCKS_SERVER"
75     ];
77     nativeBuildInputs = [
78       gitRepo
79       cacert
80     ];
82     GIT_SSL_CAINFO = "${cacert}/etc/ssl/certs/ca-bundle.crt";
84     buildCommand = ''
85       # Path must be absolute (e.g. for GnuPG: ~/.repoconfig/gnupg/pubring.kbx)
86       export HOME="$(pwd)"
88       mkdir $out
89       cd $out
91       mkdir .repo
92       ${optionalString (local_manifests != [ ]) ''
93         mkdir .repo/local_manifests
94         for local_manifest in ${concatMapStringsSep " " toString local_manifests}; do
95           cp $local_manifest .repo/local_manifests/$(stripHash $local_manifest)
96         done
97       ''}
99       repo init ${concatStringsSep " " repoInitFlags}
100       repo sync --jobs=$NIX_BUILD_CORES --current-branch
102       # TODO: The git-index files (and probably the files in .repo as well) have
103       # different contents each time and will therefore change the final hash
104       # (i.e. creating a mirror probably won't work).
105       ${optionalString (!createMirror) ''
106         rm -rf .repo
107         find -type d -name '.git' -prune -exec rm -rf {} +
108       ''}
109     '';
110   }