Merge pull request #24347 from spacekitteh/fetchGitRepo

fetchRepoProject: fixes; more options

authored by Michael Raskin and committed by GitHub 8a919af2 6ce0af29

+31 -9
+31 -9
pkgs/build-support/fetchrepoproject/default.nix
··· 1 - { stdenv, git, gitRepo, gnupg ? null, cacert }: 1 + { stdenv, git, gitRepo, gnupg ? null, cacert, copyPathsToStore }: 2 2 3 - { name, manifest, rev ? "HEAD", sha256 ? "", repoRepoURL ? "", repoRepoRev ? "", referenceDir ? "" 4 - , localManifests ? [] 3 + { name, manifest, rev ? "HEAD", sha256, repoRepoURL ? "", repoRepoRev ? "", referenceDir ? "" 4 + , localManifests ? [], createMirror ? false, useArchive ? !createMirror 5 5 }: 6 6 7 7 assert repoRepoRev != "" -> repoRepoURL != ""; 8 + assert createMirror -> !useArchive; 9 + 10 + with stdenv.lib; 11 + 12 + let 13 + repoInitFlags = [ 14 + "--manifest-url=${manifest}" 15 + "--manifest-branch=${rev}" 16 + "--depth=1" 17 + #TODO: fetching clone.bundle seems to fail spectacularly inside a sandbox. 18 + "--no-clone-bundle" 19 + (optionalString createMirror "--mirror") 20 + (optionalString useArchive "--archive") 21 + (optionalString (repoRepoURL != "") "--repo-url=${repoRepoURL}") 22 + (optionalString (repoRepoRev != "") "--repo-branch=${repoRepoRev}") 23 + (optionalString (referenceDir != "") "--reference=${referenceDir}") 24 + ]; 25 + 26 + local_manifests = copyPathsToStore localManifests; 27 + 28 + in 8 29 9 30 with stdenv.lib; 10 31 ··· 18 39 19 40 stdenv.mkDerivation { 20 41 buildCommand = '' 21 - mkdir ./.repo 42 + mkdir .repo 43 + ${optionalString (local_manifests != []) '' 22 44 mkdir ./.repo/local_manifests 23 - for local_manifest in ${concatMapStringsSep " " toString localManifests} 45 + for local_manifest in ${concatMapStringsSep " " toString local_manifests} 46 + 24 47 do 25 48 cp $local_manifest ./.repo/local_manifests/$(stripHash $local_manifest; echo $strippedName) 26 49 done 50 + ''} 27 51 28 52 export HOME=.repo 29 - repo init --manifest-url=${manifest} --manifest-branch=${rev} --depth=1 --no-clone-bundle \ 30 - ${concatStringsSep " " extraRepoInitFlags} 53 + repo init ${concatStringsSep " " repoInitFlags} 31 54 32 55 repo sync --jobs=$NIX_BUILD_CORES --current-branch 33 - rm -rf $out/.repo 56 + ${optionalString (!createMirror) "rm -rf $out/.repo"} 34 57 ''; 35 58 36 59 GIT_SSL_CAINFO = "${cacert}/etc/ssl/certs/ca-bundle.crt"; ··· 40 63 ]; 41 64 42 65 buildInputs = [git gitRepo cacert] ++ optional (gnupg != null) [gnupg] ; 43 - 44 66 outputHashAlgo = "sha256"; 45 67 outputHashMode = "recursive"; 46 68 outputHash = sha256;