callHackage: make 'all-cabal-hashes' repository overridable

This commit changes callHackage to use a deterministic version of the Hackage
checkout from https://github.com/commercialhaskell/all-cabal-hashes by default.
This means that packages uploaded to Hackage after today will be available to
callHackage only after "pkgs/data/misc/hackage/default.nix" has been updated.

People who want the previous behavior where we always had the latest version of
Hackage available -- at the cost of frequent downloads from Github --, can add
the following override to their "~/.nixpkgs/config.nix" file:

  {
    packageOverrides = super: {
      all-cabal-hashes = builtins.fetchTarball "https://github.com/commercialhaskell/all-cabal-hashes/archive/hackage.tar.gz";
    };
  }
This commit is contained in:
Peter Simons
2016-11-01 18:29:43 +01:00
parent 0607fa1874
commit fac1168816
3 changed files with 16 additions and 11 deletions

View File

@@ -1,4 +1,4 @@
{ pkgs, stdenv, ghc
{ pkgs, stdenv, ghc, all-cabal-hashes
, compilerConfig ? (self: super: {})
, packageSetConfig ? (self: super: {})
, overrides ? (self: super: {})
@@ -6,14 +6,6 @@
let
allCabalFiles = stdenv.mkDerivation {
name = "all-cabal-hashes-0";
buildCommand = ''
mkdir -p $out
tar -C $out --strip-components=1 -x -f ${builtins.fetchurl "https://github.com/commercialhaskell/all-cabal-hashes/archive/hackage.tar.gz"}
'';
};
inherit (stdenv.lib) fix' extends;
haskellPackages = self:
@@ -69,8 +61,8 @@ let
installPhase = ''
export HOME="$TMP"
mkdir $out
hash=$(sed -e 's/.*"SHA256":"//' -e 's/".*$//' ${allCabalFiles}/${name}/${version}/${name}.json)
cabal2nix --compiler=${self.ghc.name} --system=${stdenv.system} --sha256=$hash ${allCabalFiles}/${name}/${version}/${name}.cabal >$out/default.nix
hash=$(sed -e 's/.*"SHA256":"//' -e 's/".*$//' ${all-cabal-hashes}/${name}/${version}/${name}.json)
cabal2nix --compiler=${self.ghc.name} --system=${stdenv.system} --sha256=$hash ${all-cabal-hashes}/${name}/${version}/${name}.cabal >$out/default.nix
'';
};