From 7a10cc84a0cd532c8a248d26dedf61d15615fb4d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= <joerg@thalheim.io>
Date: Thu, 15 Jun 2017 22:12:31 +0100
Subject: [PATCH] rustRegistry: switch to mkDerivation

fixes #26582
---
 pkgs/build-support/rust/default.nix | 10 +++--
 pkgs/top-level/all-packages.nix     |  2 +
 pkgs/top-level/rust-packages.nix    | 60 +++++++++++++++--------------
 3 files changed, 40 insertions(+), 32 deletions(-)

diff --git a/pkgs/build-support/rust/default.nix b/pkgs/build-support/rust/default.nix
index 6e2c4455225..36130289fba 100644
--- a/pkgs/build-support/rust/default.nix
+++ b/pkgs/build-support/rust/default.nix
@@ -1,5 +1,10 @@
-{ stdenv, callPackage, path, cacert, git, rust }:
+{ stdenv, callPackage, path, cacert, git, rust, rustRegistry }:
+
+let
+  rustRegistry' = rustRegistry;
+in
 { name, depsSha256
+, rustRegistry ? rustRegistry'
 , src ? null
 , srcs ? null
 , sourceRoot ? null
@@ -8,13 +13,10 @@
 , cargoUpdateHook ? ""
 , cargoDepsHook ? ""
 , cargoBuildFlags ? []
-, registry ? null
 , ... } @ args:
 
 let
   lib = stdenv.lib;
-  rustRegistry = callPackage (path + /pkgs/top-level/rust-packages.nix)
-    (lib.optionalAttrs (registry != null) { src = registry; });
 
   fetchDeps = import ./fetchcargo.nix {
     inherit stdenv cacert git rust rustRegistry;
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index d7a34f55f7a..51014116137 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -5777,6 +5777,8 @@ with pkgs;
     inherit (darwin) apple_sdk;
   };
 
+  rustRegistry = callPackage ./rust-packages.nix { };
+
   rust = rustStable;
   rustStable = callPackage ../development/compilers/rust {
     inherit (llvmPackages_4) llvm;
diff --git a/pkgs/top-level/rust-packages.nix b/pkgs/top-level/rust-packages.nix
index 67351b7bec0..aed51a44873 100644
--- a/pkgs/top-level/rust-packages.nix
+++ b/pkgs/top-level/rust-packages.nix
@@ -4,39 +4,43 @@
 # version that we define here. If you're having problems downloading / finding
 # a Rust library, try updating this to a newer commit.
 
-{ runCommand, fetchFromGitHub, git
-, src ? fetchFromGitHub {
+{ stdenv, fetchFromGitHub, git }:
+
+stdenv.mkDerivation {
+  name = "rustRegistry-2017-06-25";
+
+  src = fetchFromGitHub {
     owner = "rust-lang";
     repo = "crates.io-index";
-    rev = "cda0f689f844710a3d73c7ff459efa64997f73b5";
-    sha256 = "1b3brl9nn3qqaysd8lx9gaazd863grqx547iw7y9j6mkcc7sakvc";
-  }
-}:
+    rev = "9714616bf3b7836cb827d8d1eabef017d730fb5e";
+    sha256 = "02lpmjsqwa16j14y3jzgw4dpzfy001nfyi78x9b8rgp1w3qdjbkr";
+  };
+  phases = [ "unpackPhase" "installPhase" ];
+  installPhase = ''
+    # For some reason, cargo doesn't like fetchgit's git repositories, not even
+    # if we set leaveDotGit to true, set the fetchgit branch to 'master' and clone
+    # the repository (tested with registry rev
+    # 965b634156cc5c6f10c7a458392bfd6f27436e7e), failing with the message:
+    #
+    # "Target OID for the reference doesn't exist on the repository"
+    #
+    # So we'll just have to create a new git repository from scratch with the
+    # contents downloaded with fetchgit...
 
-runCommand "rustRegistry" { inherit src; } ''
-  # For some reason, cargo doesn't like fetchgit's git repositories, not even
-  # if we set leaveDotGit to true, set the fetchgit branch to 'master' and clone
-  # the repository (tested with registry rev
-  # 965b634156cc5c6f10c7a458392bfd6f27436e7e), failing with the message:
-  #
-  # "Target OID for the reference doesn't exist on the repository"
-  #
-  # So we'll just have to create a new git repository from scratch with the
-  # contents downloaded with fetchgit...
+    mkdir -p $out
 
-  mkdir -p $out
+    cp -r ./* $out/
 
-  cp -r ${src}/* $out/
+    cd $out
 
-  cd $out
+    git="${git}/bin/git"
 
-  git="${git}/bin/git"
+    $git init
+    $git config --local user.email "example@example.com"
+    $git config --local user.name "example"
+    $git add .
+    $git commit --quiet -m 'Rust registry commit'
 
-  $git init
-  $git config --local user.email "example@example.com"
-  $git config --local user.name "example"
-  $git add .
-  $git commit --quiet -m 'Rust registry commit'
-
-  touch $out/touch . "$out/.cargo-index-lock"
-''
+    touch $out/touch . "$out/.cargo-index-lock"
+  '';
+}