add fetchCrate function to fetch rust crates

authored by Pierre-Étienne Meunier and committed by Jörg Thalheim ea232fe2 a13fc5f4

+37
+35
pkgs/build-support/rust/fetchcrate.nix
···
··· 1 + { lib, fetchurl, unzip }: 2 + 3 + { crateName 4 + , version 5 + , sha256 6 + , ... } @ args: 7 + 8 + lib.overrideDerivation (fetchurl ({ 9 + 10 + name = "${crateName}-${version}.tar.gz"; 11 + url = "https://crates.io/api/v1/crates/${crateName}/${version}/download"; 12 + recursiveHash = true; 13 + 14 + downloadToTemp = true; 15 + 16 + postFetch = 17 + '' 18 + export PATH=${unzip}/bin:$PATH 19 + 20 + unpackDir="$TMPDIR/unpack" 21 + mkdir "$unpackDir" 22 + cd "$unpackDir" 23 + 24 + renamed="$TMPDIR/${crateName}-${version}.tar.gz" 25 + mv "$downloadedFile" "$renamed" 26 + unpackFile "$renamed" 27 + fn=$(cd "$unpackDir" && echo *) 28 + if [ -f "$unpackDir/$fn" ]; then 29 + mkdir $out 30 + fi 31 + mv "$unpackDir/$fn" "$out" 32 + ''; 33 + } // removeAttrs args [ "crateName" "version" ])) 34 + # Hackety-hack: we actually need unzip hooks, too 35 + (x: {nativeBuildInputs = x.nativeBuildInputs++ [unzip];})
+2
pkgs/top-level/all-packages.nix
··· 202 203 fetchzip = callPackage ../build-support/fetchzip { }; 204 205 fetchFromGitHub = { 206 owner, repo, rev, name ? "source", 207 fetchSubmodules ? false, private ? false,
··· 202 203 fetchzip = callPackage ../build-support/fetchzip { }; 204 205 + fetchCrate = callPackage ../build-support/rust/fetchcrate.nix { }; 206 + 207 fetchFromGitHub = { 208 owner, repo, rev, name ? "source", 209 fetchSubmodules ? false, private ? false,