From a5a6700f0f0fd11232e2998d22496a2288cd1426 Mon Sep 17 00:00:00 2001 From: Alexander Bantyev Date: Tue, 10 Dec 2019 14:04:22 +0300 Subject: [PATCH 01/15] Automatically generate cache --- changelog.md | 3 +++ lib/stack-cache-generator.nix | 35 +++++++++++++++++++++++++++++++++++ overlays/haskell.nix | 23 +++++++++++++++++------ 3 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 lib/stack-cache-generator.nix diff --git a/changelog.md b/changelog.md index 805f3df374..999a30dfef 100644 --- a/changelog.md +++ b/changelog.md @@ -1,6 +1,9 @@ This file contains a summary of changes to Haskell.nix and `nix-tools` that will impact users. +## December 10, 2019 + * Now the `cache` attribute of `stackProject` is not required and is going to be deprecated. + ## November 18, 2019 * Changed the `cleanSourceHaskell` to accept an attrset of `src` and (optional) `name` parameters. This allows you to keep the source diff --git a/lib/stack-cache-generator.nix b/lib/stack-cache-generator.nix new file mode 100644 index 0000000000..39ea460806 --- /dev/null +++ b/lib/stack-cache-generator.nix @@ -0,0 +1,35 @@ +# Generate cache entries for dependencies of package defined in `src` + +{ pkgs }: +{ src, stackYaml ? "stack.yaml" }: +let + s2n = import "${pkgs.fetchFromGitHub { + owner = "serokell"; + repo = "stack-to-nix"; + rev = "28e690d3eddd47c59982c7fbf4f950320ff7ff69"; + sha256 = "1xnx5baj3k29iy8ccppn28ayf4483zddrvq6fikfpvblzp5zrnaj"; + }}/lib.nix" pkgs; + + deps = (s2n.importYAML "${src}/${stackYaml}").extra-deps or [ ]; + hashPath = path: + builtins.readFile (pkgs.runCommand "hash-path" { preferLocalBuild = true; } + "echo -n $(${pkgs.nix}/bin/nix-hash --type sha256 --base32 ${path}) > $out"); +in with pkgs.lib; +concatMap (dep: + if !builtins.isAttrs dep then + [ ] + else + let + pkgsrc = builtins.fetchGit { + url = dep.git; + ref = "*"; + rev = dep.commit; + }; + in map (subdir: + { + name = s2n.cabalPackageName "${pkgsrc}/${subdir}"; + rev = dep.commit; + url = dep.git; + sha256 = hashPath pkgsrc; + } // (optionalAttrs (subdir != "") { inherit subdir; })) + (dep.subdirs or [ "" ])) deps diff --git a/overlays/haskell.nix b/overlays/haskell.nix index 5156ec35ba..a3562abde8 100644 --- a/overlays/haskell.nix +++ b/overlays/haskell.nix @@ -298,6 +298,10 @@ self: super: { text = self.buildPackages.lib.concatMapStringsSep "\n" mkCacheLine repos; }; + genStackCache = import ../lib/stack-cache-generator.nix { + inherit (self.buildPackages) pkgs; + }; + mkCacheModule = cache: # for each item in the `cache`, set # packages.$name.src = fetchgit ... @@ -313,8 +317,6 @@ self: super: { # src value. # # TODO: this should be moved into `call-stack-to-nix` - # it should be automatic and not the burden of - # the end user to work around nix peculiarities. { packages = let repoToAttr = { name, url, rev, ref ? null, sha256 ? null, subdir ? null, is-private ? false, ... }: { @@ -334,6 +336,7 @@ self: super: { cacheMap = builtins.map repoToAttr cache; in builtins.foldl' (x: y: x // y) {} cacheMap; + }; # Takes a haskell src directory runs cabal new-configure and plan-to-nix. @@ -408,13 +411,21 @@ self: super: { stackProject' = { ... }@args: - let stack = importAndFilterProject (callStackToNix args); + let stack = importAndFilterProject (callStackToNix ({ inherit cache; } // args)); + cache = if args ? cache + then builtins.trace + "warning: passing `cache' to `stackProject' is deprecated. See #335 #358" + args.cache + else genStackCache { + inherit (args) src; + stackYaml = args.stackYaml or "stack.yaml"; + }; in let pkg-set = mkStackPkgSet { stack-pkgs = stack.pkgs; pkg-def-extras = (args.pkg-def-extras or []); - modules = (args.modules or []) - ++ self.lib.optional (args ? ghc) { ghc.package = args.ghc; } - ++ self.lib.optional (args ? cache) (mkCacheModule args.cache); + modules = self.lib.singleton (mkCacheModule cache) + ++ (args.modules or []) + ++ self.lib.optional (args ? ghc) { ghc.package = args.ghc; }; }; in { inherit (pkg-set.config) hsPkgs; stack-nix = stack.nix; }; From 060c91791a518077ebd4d614654d8a51dc0752a3 Mon Sep 17 00:00:00 2001 From: Alexander Bantyev Date: Wed, 18 Dec 2019 18:26:20 +0300 Subject: [PATCH 02/15] fixup! Automatically generate cache Print out the cache so that users can speed up builds --- changelog.md | 3 --- overlays/haskell.nix | 19 +++++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/changelog.md b/changelog.md index 999a30dfef..805f3df374 100644 --- a/changelog.md +++ b/changelog.md @@ -1,9 +1,6 @@ This file contains a summary of changes to Haskell.nix and `nix-tools` that will impact users. -## December 10, 2019 - * Now the `cache` attribute of `stackProject` is not required and is going to be deprecated. - ## November 18, 2019 * Changed the `cleanSourceHaskell` to accept an attrset of `src` and (optional) `name` parameters. This allows you to keep the source diff --git a/overlays/haskell.nix b/overlays/haskell.nix index a3562abde8..694a5b91bd 100644 --- a/overlays/haskell.nix +++ b/overlays/haskell.nix @@ -412,14 +412,17 @@ self: super: { stackProject' = { ... }@args: let stack = importAndFilterProject (callStackToNix ({ inherit cache; } // args)); - cache = if args ? cache - then builtins.trace - "warning: passing `cache' to `stackProject' is deprecated. See #335 #358" - args.cache - else genStackCache { - inherit (args) src; - stackYaml = args.stackYaml or "stack.yaml"; - }; + generatedCache = genStackCache { + inherit (args) src; + stackYaml = args.stackYaml or "stack.yaml"; + }; + cache = args.cache or (builtins.trace + (builtins.trace '' + Automatically generated cache for this project. + You can pass it as a cache argument to speed up builds: + '' + # Force evaluation so that tracing prints out the whole list + (builtins.deepSeq generatedCache generatedCache)) generatedCache); in let pkg-set = mkStackPkgSet { stack-pkgs = stack.pkgs; pkg-def-extras = (args.pkg-def-extras or []); From 668ed0d8748a453e9abdd14ea5908ba4123448bd Mon Sep 17 00:00:00 2001 From: Alexander Bantyev Date: Thu, 19 Dec 2019 17:57:19 +0300 Subject: [PATCH 03/15] fixup! Automatically generate cache Mark all non-https repos as private --- lib/stack-cache-generator.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/stack-cache-generator.nix b/lib/stack-cache-generator.nix index 39ea460806..5bc30c7018 100644 --- a/lib/stack-cache-generator.nix +++ b/lib/stack-cache-generator.nix @@ -10,6 +10,9 @@ let sha256 = "1xnx5baj3k29iy8ccppn28ayf4483zddrvq6fikfpvblzp5zrnaj"; }}/lib.nix" pkgs; + # All repos served via ssh or git protocols are usually private + private = url: pkgs.lib.substring 0 4 url != "http"; + deps = (s2n.importYAML "${src}/${stackYaml}").extra-deps or [ ]; hashPath = path: builtins.readFile (pkgs.runCommand "hash-path" { preferLocalBuild = true; } @@ -31,5 +34,6 @@ concatMap (dep: rev = dep.commit; url = dep.git; sha256 = hashPath pkgsrc; + is-private = private dep.git; } // (optionalAttrs (subdir != "") { inherit subdir; })) (dep.subdirs or [ "" ])) deps From 1f007350e49c57838281e2ffcea07cf66ebd4fcd Mon Sep 17 00:00:00 2001 From: Alexander Bantyev Date: Thu, 19 Dec 2019 21:23:42 +0300 Subject: [PATCH 04/15] fixup! fixup! Automatically generate cache Don't pass sha256 to private fetches --- lib/stack-cache-generator.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/stack-cache-generator.nix b/lib/stack-cache-generator.nix index 5bc30c7018..eb9dd800cf 100644 --- a/lib/stack-cache-generator.nix +++ b/lib/stack-cache-generator.nix @@ -29,11 +29,11 @@ concatMap (dep: rev = dep.commit; }; in map (subdir: - { + rec { name = s2n.cabalPackageName "${pkgsrc}/${subdir}"; rev = dep.commit; url = dep.git; - sha256 = hashPath pkgsrc; - is-private = private dep.git; + is-private = private url; + sha256 = if is-private then hashPath pkgsrc else null; } // (optionalAttrs (subdir != "") { inherit subdir; })) (dep.subdirs or [ "" ])) deps From 672194cc3b85c2e7de0ae9f242327497ce7be72b Mon Sep 17 00:00:00 2001 From: Alexander Bantyev Date: Mon, 23 Dec 2019 12:13:17 +0300 Subject: [PATCH 05/15] fixup! Automatically generate cache Fix logic error --- lib/stack-cache-generator.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/stack-cache-generator.nix b/lib/stack-cache-generator.nix index eb9dd800cf..aff325c8b5 100644 --- a/lib/stack-cache-generator.nix +++ b/lib/stack-cache-generator.nix @@ -34,6 +34,6 @@ concatMap (dep: rev = dep.commit; url = dep.git; is-private = private url; - sha256 = if is-private then hashPath pkgsrc else null; + sha256 = if !is-private then hashPath pkgsrc else null; } // (optionalAttrs (subdir != "") { inherit subdir; })) (dep.subdirs or [ "" ])) deps From e39638b316f349e64c8786cea7584101fda24795 Mon Sep 17 00:00:00 2001 From: Alexander Bantyev Date: Mon, 23 Dec 2019 13:29:24 +0300 Subject: [PATCH 06/15] fixup! Automatically generate cache Import stack-to-nix as a subtree --- lib/stack-cache-generator.nix | 7 +- pkgs/stack-to-nix/COPYING | 20 ++++ pkgs/stack-to-nix/README.md | 36 ++++++ pkgs/stack-to-nix/build.nix | 113 ++++++++++++++++++ pkgs/stack-to-nix/cabal-name/cabal-name.cabal | 9 ++ pkgs/stack-to-nix/cabal-name/default.nix | 19 +++ pkgs/stack-to-nix/cabal-name/src/Main.hs | 14 +++ pkgs/stack-to-nix/default.nix | 17 +++ pkgs/stack-to-nix/handlers.nix | 36 ++++++ pkgs/stack-to-nix/lib.nix | 55 +++++++++ 10 files changed, 320 insertions(+), 6 deletions(-) create mode 100644 pkgs/stack-to-nix/COPYING create mode 100644 pkgs/stack-to-nix/README.md create mode 100644 pkgs/stack-to-nix/build.nix create mode 100644 pkgs/stack-to-nix/cabal-name/cabal-name.cabal create mode 100644 pkgs/stack-to-nix/cabal-name/default.nix create mode 100644 pkgs/stack-to-nix/cabal-name/src/Main.hs create mode 100644 pkgs/stack-to-nix/default.nix create mode 100644 pkgs/stack-to-nix/handlers.nix create mode 100644 pkgs/stack-to-nix/lib.nix diff --git a/lib/stack-cache-generator.nix b/lib/stack-cache-generator.nix index aff325c8b5..e5e4808259 100644 --- a/lib/stack-cache-generator.nix +++ b/lib/stack-cache-generator.nix @@ -3,12 +3,7 @@ { pkgs }: { src, stackYaml ? "stack.yaml" }: let - s2n = import "${pkgs.fetchFromGitHub { - owner = "serokell"; - repo = "stack-to-nix"; - rev = "28e690d3eddd47c59982c7fbf4f950320ff7ff69"; - sha256 = "1xnx5baj3k29iy8ccppn28ayf4483zddrvq6fikfpvblzp5zrnaj"; - }}/lib.nix" pkgs; + s2n = import ../pkgs/stack-to-nix pkgs; # All repos served via ssh or git protocols are usually private private = url: pkgs.lib.substring 0 4 url != "http"; diff --git a/pkgs/stack-to-nix/COPYING b/pkgs/stack-to-nix/COPYING new file mode 100644 index 0000000000..3eedeb2b73 --- /dev/null +++ b/pkgs/stack-to-nix/COPYING @@ -0,0 +1,20 @@ +Copyright (c) 2018 Eelco Dolstra and the Nixpkgs/NixOS contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/pkgs/stack-to-nix/README.md b/pkgs/stack-to-nix/README.md new file mode 100644 index 0000000000..d79f4efa60 --- /dev/null +++ b/pkgs/stack-to-nix/README.md @@ -0,0 +1,36 @@ +stack-to-nix +=========== + +This is a handy nix function for building stack projects with nix, fully inside the nix sandbox. +It parses the stack.yaml file and translates the dependencies into a series of fetchUrl, fetchGit calls. + +Example +======= + +```nix +{ pkgs }: + +let + stackToNix = pkgs.callPackage (fetchTarball https://github.com/serokell/stack-to-nix/archive/master.tar.gz) { }; +in +stackToNix { + # root: the path with stack.yaml. you may want to filter this. for example using nix-gitignore. + root = ./.; + # shell: get the .env instead of the nix-build derivation. recommended that you do this with shell.nix/default.nix. + # see https://github.com/DisciplinaOU/disciplina/blob/master/shell.nix + shell = false; + # you shouldn't need overrides, but you can ;) + overrides = final: previous: with pkgs.haskell.lib; { + qtah = overrideCabal previous.qtah (super: { + libraryToolDepends = with pkgs.qt5; [ qtbase qttools ]; + }); + }; +} +``` + +Problems +======== + +If you use this on a repo with git dependencies, +you will need [NixOS/nix#2409](https://github.com/NixOS/nix/pull/2409). It's in our patch set. `nix-env -f https://github.com/serokell/serokell-closure/archive/master.tar.gz -iA nix` + diff --git a/pkgs/stack-to-nix/build.nix b/pkgs/stack-to-nix/build.nix new file mode 100644 index 0000000000..79f8409b1c --- /dev/null +++ b/pkgs/stack-to-nix/build.nix @@ -0,0 +1,113 @@ +{ overrides, pkgs, shell, stackage }: project: root: + +with pkgs; +with lib; + +let + inherit (haskell.lib) overrideCabal; + + stackagePackages = (import stackage) stackagePackages pkgs; + + resolverName = replaceStrings ["."] [""] project.resolver; + resolver = stackagePackages.haskell.packages.stackage."${resolverName}"; + + snapshot = resolver.override { + overrides = mergeExtensions [ + defaultDeps + extraDeps + localDeps + overrides + ]; + }; + + inherit (snapshot) callHackage; + + defaultDeps = final: previous: { + mkDerivation = drv: previous.mkDerivation (drv // { + doCheck = false; + doHaddock = false; + enableExecutableProfiling = false; + enableLibraryProfiling = false; + }); + }; + + handlers = import ./handlers.nix pkgs; + + handleExtra = spec: + let + handler = findFirst (h: h.test spec) + (throw "can't handle extra dep: ${spec}") handlers; + in + handler.handle spec; + + extraSpecs = project.extra-deps or []; + + extraDeps = + mergeExtensions (map (spec: final: const (handleExtra spec final)) extraSpecs); + + withStrictDeps = drv: drv.overrideAttrs (const { strictDeps = true; }); + + localPackage = name: path: + let + drv = cabalToNix snapshot name root {} ''--subpath="${path}"''; + overrides = const { + doBenchmark = true; + doCheck = true; + doHaddock = true; + license = licenses.free; + }; + in + withStrictDeps (overrideCabal drv overrides); + + localAttrs = listToAttrs + (map (path: nameValuePair (cabalPackageName "${root}/${path}") path) (project.packages or ["."])); + + localDeps = final: previous: + mapAttrs localPackage localAttrs; + + target = mapAttrs (name: const (getAttr name snapshot)) localAttrs; + + localPaths = map (removePrefix "./") (project.packages or ["."]); + + stackSnapshot = { + inherit (project) resolver; + packages = extraSpecs; + }; + + pathHash = path: + builtins.unsafeDiscardStringContext (builtins.substring 0 32 (baseNameOf path)); + + stackSnapshotWithName = stackSnapshot // { + name = pathHash (exportYAML stackSnapshot); + }; + + stackConfig = { + packages = project.packages or ["."]; + resolver = exportYAML stackSnapshotWithName; + }; + + shellEnv = snapshot.shellFor { + packages = const (attrValues target); + nativeBuildInputs = [ cabal-install stack ]; + + STACK_IN_NIX_SHELL = 1; + STACK_IN_NIX_EXTRA_ARGS = ""; + STACK_PLATFORM_VARIANT = "nix"; + STACK_YAML = "stack-to-nix.yaml"; + + shellHook = '' + cat ${exportYAML stackConfig} > stack-to-nix.yaml + + for f in $(find * -name package.yaml); do + ${snapshot.hpack}/bin/hpack --force $f + done + + echo packages: > cabal.project + for spec in ${concatStringsSep " " localPaths}; do + echo " $spec" >> cabal.project + done + ''; + }; +in + +if shell then shellEnv else target diff --git a/pkgs/stack-to-nix/cabal-name/cabal-name.cabal b/pkgs/stack-to-nix/cabal-name/cabal-name.cabal new file mode 100644 index 0000000000..09b8f429b6 --- /dev/null +++ b/pkgs/stack-to-nix/cabal-name/cabal-name.cabal @@ -0,0 +1,9 @@ +name: cabal-name +version: 1 +cabal-version: >= 1.2 + +executable cabal-name + build-depends: base, Cabal + default-language: Haskell2010 + hs-source-dirs: src + main-is: Main.hs diff --git a/pkgs/stack-to-nix/cabal-name/default.nix b/pkgs/stack-to-nix/cabal-name/default.nix new file mode 100644 index 0000000000..77513fbf33 --- /dev/null +++ b/pkgs/stack-to-nix/cabal-name/default.nix @@ -0,0 +1,19 @@ +{ pkgs ? import {} }: with pkgs; + +let + project = { mkDerivation, base, Cabal }: mkDerivation { + pname = "cabal-name"; + version = "1"; + + src = lib.cleanSource ./.; + + isExecutable = true; + isLibrary = false; + + executableHaskellDepends = [ base Cabal ]; + + license = lib.licenses.free; + }; +in + +haskellPackages.callPackage project {} diff --git a/pkgs/stack-to-nix/cabal-name/src/Main.hs b/pkgs/stack-to-nix/cabal-name/src/Main.hs new file mode 100644 index 0000000000..d303064d23 --- /dev/null +++ b/pkgs/stack-to-nix/cabal-name/src/Main.hs @@ -0,0 +1,14 @@ +module Main where + +import Distribution.PackageDescription.Parsec +import Distribution.Types.GenericPackageDescription +import Distribution.Types.PackageDescription +import Distribution.Types.PackageId +import Distribution.Types.PackageName +import Distribution.Verbosity +import System.Environment + +main = do + args <- getArgs + desc <- readGenericPackageDescription normal (head args) + print $ (unPackageName . pkgName . package . packageDescription) desc diff --git a/pkgs/stack-to-nix/default.nix b/pkgs/stack-to-nix/default.nix new file mode 100644 index 0000000000..518df7951a --- /dev/null +++ b/pkgs/stack-to-nix/default.nix @@ -0,0 +1,17 @@ +{ pkgs ? import {} }: + +{ overrides ? (_: _: {}) +, root +, shell ? false +, stackage ? fetchGit { url = "https://github.com/typeable/nixpkgs-stackage"; rev = "6042df5e646d65b826add0a85d16304bee8e1dd5"; } }: + +let + lib = import ./lib.nix pkgs; + + buildProject = import ./build.nix { + pkgs = pkgs // { lib = pkgs.lib // lib; }; + inherit overrides shell stackage; + }; +in + +buildProject (lib.importYAML "${root}/stack.yaml") root diff --git a/pkgs/stack-to-nix/handlers.nix b/pkgs/stack-to-nix/handlers.nix new file mode 100644 index 0000000000..d52dd436b8 --- /dev/null +++ b/pkgs/stack-to-nix/handlers.nix @@ -0,0 +1,36 @@ +pkgs: with pkgs; with lib; + +[ + ({ + handle = spec: self: + let + components = splitString "-" spec; + name = concatStringsSep "-" (init components); + version = last components; + in + { "${name}" = lib.callHackage self name version {}; }; + + test = isString; + }) + ({ + handle = spec: self: + let + src = fetchGit { + url = spec.git; + ref = "*"; + rev = spec.commit; + }; + + subdirToAttr = subdir: + let + name = cabalPackageName "${src}/${subdir}"; + in + nameValuePair name (cabalToNix self name src {} ''--subpath="${subdir}"''); + + subdirs = spec.subdirs or [ "." ]; + in + listToAttrs (map subdirToAttr subdirs); + + test = spec: isAttrs spec && spec ? git; + }) +] diff --git a/pkgs/stack-to-nix/lib.nix b/pkgs/stack-to-nix/lib.nix new file mode 100644 index 0000000000..6ab4909268 --- /dev/null +++ b/pkgs/stack-to-nix/lib.nix @@ -0,0 +1,55 @@ +pkgs: with pkgs; with lib; + +let + inherit (haskell.lib) overrideCabal; + inherit (haskellPackages) hackage2nix haskellSrc2nix hpack; + + cabal-name = import ./cabal-name { inherit pkgs; }; + + cabalName = path: runCommand "cabal-name" {} '' + ${cabal-name}/bin/cabal-name ${path} > $out + ''; + + hpackToCabal = path: runCommand "hpack.cabal" {} '' + cd ${dirOf path}; ${hpack}/bin/hpack - < ${path} > $out + ''; + + listDirectory = path: + map (name: "${path}/${name}") (attrNames (builtins.readDir path)); + + yamlToJSON = path: runCommand "yaml.json" { nativeBuildInputs = [ ruby ]; } '' + ruby -rjson -ryaml -e "puts YAML.load(ARGF).to_json" < ${path} > $out + ''; +in + +{ + cabalPackageName = root: + let + children = listDirectory root; + hpack = findFirst (hasSuffix "/package.yaml") + (throw "no Cabal or Hpack file found: ${root}") children; + cabal = findSingle (hasSuffix ".cabal") (hpackToCabal hpack) + (throw "more than one Cabal file: ${root}") children; + in + import (cabalName cabal); + + cabalToNix = self: name: src: args: options: + let + expr = haskellSrc2nix { + inherit name src; + extraCabal2nixOptions = options; + }; + in + overrideCabal + (self.callPackage expr args) + (lib.const { inherit src; }); + + callHackage = self: name: version: + self.callPackage (hackage2nix name version); + + exportYAML = term: writeText "term.yaml" (builtins.toJSON term); + + importYAML = path: lib.importJSON (yamlToJSON path); + + mergeExtensions = extensions: foldr composeExtensions (_: _: {}) extensions; +} From e6cfdd83122dff3588df123de2319ffc6e362073 Mon Sep 17 00:00:00 2001 From: Alexander Bantyev Date: Mon, 30 Dec 2019 12:03:21 +0300 Subject: [PATCH 07/15] fixup! fixup! Automatically generate cache --- lib/stack-cache-generator.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/stack-cache-generator.nix b/lib/stack-cache-generator.nix index e5e4808259..91632e543f 100644 --- a/lib/stack-cache-generator.nix +++ b/lib/stack-cache-generator.nix @@ -3,7 +3,7 @@ { pkgs }: { src, stackYaml ? "stack.yaml" }: let - s2n = import ../pkgs/stack-to-nix pkgs; + s2n = import ../pkgs/stack-to-nix { inherit pkgs; }; # All repos served via ssh or git protocols are usually private private = url: pkgs.lib.substring 0 4 url != "http"; From 581481547af9d161ce023a19774430bdaec4c148 Mon Sep 17 00:00:00 2001 From: Alexander Bantyev Date: Mon, 30 Dec 2019 12:05:14 +0300 Subject: [PATCH 08/15] fixup! fixup! Automatically generate cache --- lib/stack-cache-generator.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/stack-cache-generator.nix b/lib/stack-cache-generator.nix index 91632e543f..8bac9d39a4 100644 --- a/lib/stack-cache-generator.nix +++ b/lib/stack-cache-generator.nix @@ -3,7 +3,7 @@ { pkgs }: { src, stackYaml ? "stack.yaml" }: let - s2n = import ../pkgs/stack-to-nix { inherit pkgs; }; + s2n = import ../pkgs/stack-to-nix/lib.nix pkgs; # All repos served via ssh or git protocols are usually private private = url: pkgs.lib.substring 0 4 url != "http"; From 23f12edc1dcad3430eafc54f9a84e7d81182f991 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 13 Jan 2020 11:29:27 +1300 Subject: [PATCH 09/15] nix-tools to parse stack.yaml Also adds support for include `# nix-sha256` comments in stack.yaml files. --- docs/user-guide/source-repository-hashes.md | 50 ++ lib/stack-cache-generator.nix | 61 ++- nix-tools/.plan.nix/nix-tools.nix | 268 ++++++----- nix-tools/nix-tools-src.json | 6 +- nix-tools/pkgs.nix | 450 ++++++++---------- overlays/haskell.nix | 9 +- pkgs/stack-to-nix/COPYING | 20 - pkgs/stack-to-nix/README.md | 36 -- pkgs/stack-to-nix/build.nix | 113 ----- pkgs/stack-to-nix/cabal-name/cabal-name.cabal | 9 - pkgs/stack-to-nix/cabal-name/default.nix | 19 - pkgs/stack-to-nix/cabal-name/src/Main.hs | 14 - pkgs/stack-to-nix/default.nix | 17 - pkgs/stack-to-nix/handlers.nix | 36 -- pkgs/stack-to-nix/lib.nix | 55 --- test/stack-source-repo/default.nix | 1 - test/stack-source-repo/stack.yaml | 1 + 17 files changed, 467 insertions(+), 698 deletions(-) create mode 100644 docs/user-guide/source-repository-hashes.md delete mode 100644 pkgs/stack-to-nix/COPYING delete mode 100644 pkgs/stack-to-nix/README.md delete mode 100644 pkgs/stack-to-nix/build.nix delete mode 100644 pkgs/stack-to-nix/cabal-name/cabal-name.cabal delete mode 100644 pkgs/stack-to-nix/cabal-name/default.nix delete mode 100644 pkgs/stack-to-nix/cabal-name/src/Main.hs delete mode 100644 pkgs/stack-to-nix/default.nix delete mode 100644 pkgs/stack-to-nix/handlers.nix delete mode 100644 pkgs/stack-to-nix/lib.nix diff --git a/docs/user-guide/source-repository-hashes.md b/docs/user-guide/source-repository-hashes.md new file mode 100644 index 0000000000..b8fcee24b1 --- /dev/null +++ b/docs/user-guide/source-repository-hashes.md @@ -0,0 +1,50 @@ +# Source Repository Hashes + +Both `stack.yaml` and `cabal.project` files can contain references +to git repositories containing the version of a particular package +that we wish to use. This is mostly handled automatically by +`nix-tools` and `haskell.nix` however when we want to use a nix +system that is configured to use restricted mode (typically hydra) +it will need an aditionaly hash. + +When using `cabalProject` or `stackProject` functions you can include +the hash needed in a comment. + +To calculate the hash use `nix-prefetch-git`: + +``` +$ nix-prefetch-git https://github.com/input-output-hk/haskell.nix.git bc01ebc05a8105035c9449943046b46c8364b932 +... +{ + "url": "https://github.com/input-output-hk/haskell.nix.git", + "rev": "bc01ebc05a8105035c9449943046b46c8364b932", + "date": "2019-05-30T13:13:18+08:00", + "sha256": "003lm3pm024vhbfmii7xcdd9v2rczpflxf7gdl2pyxia7p014i8z", + "fetchSubmodules": false +} +``` + +If you are using `cabalProject` add a `--sha256` comment to the +`cabal.project` file: + +``` +source-repository-package + type: git + location: https://github.com/input-output-hk/haskell.nix.git + tag: bc01ebc05a8105035c9449943046b46c8364b932 + subdir: test/cabal-simple + --sha256: 003lm3pm024vhbfmii7xcdd9v2rczpflxf7gdl2pyxia7p014i8z +``` + +If you are using `stackProject` add a `# nix-sha256` comment to the +`stack.yaml` file: + +``` +extra-deps: +- git: https://github.com/input-output-hk/haskell.nix.git + commit: bc01ebc05a8105035c9449943046b46c8364b932 + subdirs: + - test/cabal-simple + # nix-sha256: 003lm3pm024vhbfmii7xcdd9v2rczpflxf7gdl2pyxia7p014i8z +``` + diff --git a/lib/stack-cache-generator.nix b/lib/stack-cache-generator.nix index 8bac9d39a4..7fc7838f70 100644 --- a/lib/stack-cache-generator.nix +++ b/lib/stack-cache-generator.nix @@ -1,34 +1,59 @@ # Generate cache entries for dependencies of package defined in `src` -{ pkgs }: +{ pkgs, haskellLib, nix-tools }: { src, stackYaml ? "stack.yaml" }: let - s2n = import ../pkgs/stack-to-nix/lib.nix pkgs; + # We only care about the stackYaml file. If src is a local directory + # we want to avoid recalculating the cache unless the stack.yaml file + # changes. + maybeCleanedSource = + if haskellLib.canCleanSource src + then haskellLib.cleanSourceWith { + inherit src; + filter = path: type: pkgs.lib.hasSuffix ("/" + stackYaml) path; + } + else src; # All repos served via ssh or git protocols are usually private private = url: pkgs.lib.substring 0 4 url != "http"; - deps = (s2n.importYAML "${src}/${stackYaml}").extra-deps or [ ]; + repos = builtins.fromJSON (builtins.readFile (pkgs.runCommand "stack-repos" { + buildInputs = [ nix-tools ]; + } '' + TMP=$(mktemp -d) + cd $TMP + cp "${maybeCleanedSource}/${stackYaml}" stack.yaml + substituteInPlace stack.yaml --replace "# nix-sha256:" "nix-sha256:" + stack-repos + cp repos.json $out + '')); + + cabalName = path: builtins.readFile (pkgs.runCommand "cabal-name" { + buildInputs = [ nix-tools ]; + } '' + cabal-name ${path} > $out + ''); + hashPath = path: builtins.readFile (pkgs.runCommand "hash-path" { preferLocalBuild = true; } "echo -n $(${pkgs.nix}/bin/nix-hash --type sha256 --base32 ${path}) > $out"); in with pkgs.lib; concatMap (dep: - if !builtins.isAttrs dep then - [ ] - else let - pkgsrc = builtins.fetchGit { - url = dep.git; - ref = "*"; - rev = dep.commit; - }; - in map (subdir: - rec { - name = s2n.cabalPackageName "${pkgsrc}/${subdir}"; - rev = dep.commit; - url = dep.git; - is-private = private url; + is-private = private dep.url; + pkgsrc = + if !is-private && dep.sha256 != null + then pkgs.fetchgit { + inherit (dep) url rev sha256; + } + else builtins.fetchGit { + inherit (dep) url rev; + ref = "*"; + }; + in map (subdir: { + name = cabalName "${pkgsrc}/${subdir}"; + inherit (dep) url rev; + inherit is-private; sha256 = if !is-private then hashPath pkgsrc else null; } // (optionalAttrs (subdir != "") { inherit subdir; })) - (dep.subdirs or [ "" ])) deps + (dep.subdirs or [ "" ])) repos diff --git a/nix-tools/.plan.nix/nix-tools.nix b/nix-tools/.plan.nix/nix-tools.nix index 383f868327..451ed49b70 100644 --- a/nix-tools/.plan.nix/nix-tools.nix +++ b/nix-tools/.plan.nix/nix-tools.nix @@ -1,4 +1,43 @@ -{ system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }: +let + buildDepError = pkg: + builtins.throw '' + The Haskell package set does not contain the package: ${pkg} (build dependency). + + If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix. + ''; + sysDepError = pkg: + builtins.throw '' + The Nixpkgs package set does not contain the package: ${pkg} (system dependency). + + You may need to augment the system package mapping in haskell.nix so that it can be found. + ''; + pkgConfDepError = pkg: + builtins.throw '' + The pkg-conf packages does not contain the package: ${pkg} (pkg-conf dependency). + + You may need to augment the pkg-conf package mapping in haskell.nix so that it can be found. + ''; + exeDepError = pkg: + builtins.throw '' + The local executable components do not include the component: ${pkg} (executable dependency). + ''; + legacyExeDepError = pkg: + builtins.throw '' + The Haskell package set does not contain the package: ${pkg} (executable dependency). + + If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix. + ''; + buildToolDepError = pkg: + builtins.throw '' + Neither the Haskell package set or the Nixpkgs package set contain the package: ${pkg} (build tool dependency). + + If this is a system dependency: + You may need to augment the system package mapping in haskell.nix so that it can be found. + + If this is a Haskell dependency: + If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix. + ''; +in { system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }: { flags = {}; package = { @@ -13,148 +52,159 @@ synopsis = "cabal/stack to nix translation tools"; description = "A set of tools to aid in trating stack and cabal projects into nix expressions."; buildType = "Simple"; + isLocal = true; }; components = { "library" = { depends = [ - (hsPkgs.base) - (hsPkgs.hnix) - (hsPkgs.aeson) - (hsPkgs.unordered-containers) - (hsPkgs.process) - (hsPkgs.deepseq) - (hsPkgs.transformers) - (hsPkgs.data-fix) - (hsPkgs.Cabal) - (hsPkgs.text) - (hsPkgs.filepath) - (hsPkgs.directory) - (hsPkgs.bytestring) - (hsPkgs.cryptohash-sha256) - (hsPkgs.base16-bytestring) - (hsPkgs.hpack) + (hsPkgs."base" or (buildDepError "base")) + (hsPkgs."Cabal" or (buildDepError "Cabal")) + (hsPkgs."aeson" or (buildDepError "aeson")) + (hsPkgs."aeson-pretty" or (buildDepError "aeson-pretty")) + (hsPkgs."base16-bytestring" or (buildDepError "base16-bytestring")) + (hsPkgs."bytestring" or (buildDepError "bytestring")) + (hsPkgs."cryptohash-sha256" or (buildDepError "cryptohash-sha256")) + (hsPkgs."data-fix" or (buildDepError "data-fix")) + (hsPkgs."deepseq" or (buildDepError "deepseq")) + (hsPkgs."directory" or (buildDepError "directory")) + (hsPkgs."extra" or (buildDepError "extra")) + (hsPkgs."filepath" or (buildDepError "filepath")) + (hsPkgs."hnix" or (buildDepError "hnix")) + (hsPkgs."hpack" or (buildDepError "hpack")) + (hsPkgs."http-client" or (buildDepError "http-client")) + (hsPkgs."http-client-tls" or (buildDepError "http-client-tls")) + (hsPkgs."http-types" or (buildDepError "http-types")) + (hsPkgs."optparse-applicative" or (buildDepError "optparse-applicative")) + (hsPkgs."prettyprinter" or (buildDepError "prettyprinter")) + (hsPkgs."process" or (buildDepError "process")) + (hsPkgs."text" or (buildDepError "text")) + (hsPkgs."transformers" or (buildDepError "transformers")) + (hsPkgs."unordered-containers" or (buildDepError "unordered-containers")) + (hsPkgs."yaml" or (buildDepError "yaml")) ]; + buildable = true; }; exes = { "cabal-to-nix" = { depends = [ - (hsPkgs.base) - (hsPkgs.transformers) - (hsPkgs.bytestring) - (hsPkgs.hpack) - (hsPkgs.hnix) - (hsPkgs.text) - (hsPkgs.nix-tools) - (hsPkgs.filepath) - (hsPkgs.directory) - (hsPkgs.prettyprinter) + (hsPkgs."base" or (buildDepError "base")) + (hsPkgs."transformers" or (buildDepError "transformers")) + (hsPkgs."bytestring" or (buildDepError "bytestring")) + (hsPkgs."hpack" or (buildDepError "hpack")) + (hsPkgs."hnix" or (buildDepError "hnix")) + (hsPkgs."text" or (buildDepError "text")) + (hsPkgs."nix-tools" or (buildDepError "nix-tools")) + (hsPkgs."filepath" or (buildDepError "filepath")) + (hsPkgs."directory" or (buildDepError "directory")) + (hsPkgs."prettyprinter" or (buildDepError "prettyprinter")) ]; + buildable = true; }; "hashes-to-nix" = { depends = [ - (hsPkgs.base) - (hsPkgs.hnix) - (hsPkgs.nix-tools) - (hsPkgs.data-fix) - (hsPkgs.aeson) - (hsPkgs.microlens) - (hsPkgs.microlens-aeson) - (hsPkgs.text) - (hsPkgs.filepath) - (hsPkgs.directory) + (hsPkgs."base" or (buildDepError "base")) + (hsPkgs."hnix" or (buildDepError "hnix")) + (hsPkgs."nix-tools" or (buildDepError "nix-tools")) + (hsPkgs."data-fix" or (buildDepError "data-fix")) + (hsPkgs."aeson" or (buildDepError "aeson")) + (hsPkgs."microlens" or (buildDepError "microlens")) + (hsPkgs."microlens-aeson" or (buildDepError "microlens-aeson")) + (hsPkgs."text" or (buildDepError "text")) + (hsPkgs."filepath" or (buildDepError "filepath")) + (hsPkgs."directory" or (buildDepError "directory")) ]; + buildable = true; }; "plan-to-nix" = { depends = [ - (hsPkgs.base) - (hsPkgs.nix-tools) - (hsPkgs.hnix) - (hsPkgs.Cabal) - (hsPkgs.text) - (hsPkgs.hpack) - (hsPkgs.unordered-containers) - (hsPkgs.vector) - (hsPkgs.aeson) - (hsPkgs.microlens) - (hsPkgs.microlens-aeson) - (hsPkgs.optparse-applicative) - (hsPkgs.prettyprinter) - (hsPkgs.filepath) - (hsPkgs.directory) - (hsPkgs.bytestring) - (hsPkgs.transformers) - (hsPkgs.extra) + (hsPkgs."base" or (buildDepError "base")) + (hsPkgs."nix-tools" or (buildDepError "nix-tools")) + (hsPkgs."hnix" or (buildDepError "hnix")) + (hsPkgs."Cabal" or (buildDepError "Cabal")) + (hsPkgs."text" or (buildDepError "text")) + (hsPkgs."hpack" or (buildDepError "hpack")) + (hsPkgs."unordered-containers" or (buildDepError "unordered-containers")) + (hsPkgs."vector" or (buildDepError "vector")) + (hsPkgs."aeson" or (buildDepError "aeson")) + (hsPkgs."microlens" or (buildDepError "microlens")) + (hsPkgs."microlens-aeson" or (buildDepError "microlens-aeson")) + (hsPkgs."optparse-applicative" or (buildDepError "optparse-applicative")) + (hsPkgs."prettyprinter" or (buildDepError "prettyprinter")) + (hsPkgs."filepath" or (buildDepError "filepath")) + (hsPkgs."directory" or (buildDepError "directory")) + (hsPkgs."bytestring" or (buildDepError "bytestring")) + (hsPkgs."transformers" or (buildDepError "transformers")) + (hsPkgs."extra" or (buildDepError "extra")) ]; + buildable = true; }; "hackage-to-nix" = { depends = [ - (hsPkgs.base) - (hsPkgs.nix-tools) - (hsPkgs.hackage-db) - (hsPkgs.hnix) - (hsPkgs.Cabal) - (hsPkgs.containers) - (hsPkgs.bytestring) - (hsPkgs.text) - (hsPkgs.cryptohash-sha256) - (hsPkgs.base16-bytestring) - (hsPkgs.filepath) - (hsPkgs.directory) - (hsPkgs.transformers) + (hsPkgs."base" or (buildDepError "base")) + (hsPkgs."nix-tools" or (buildDepError "nix-tools")) + (hsPkgs."hackage-db" or (buildDepError "hackage-db")) + (hsPkgs."hnix" or (buildDepError "hnix")) + (hsPkgs."Cabal" or (buildDepError "Cabal")) + (hsPkgs."containers" or (buildDepError "containers")) + (hsPkgs."bytestring" or (buildDepError "bytestring")) + (hsPkgs."text" or (buildDepError "text")) + (hsPkgs."cryptohash-sha256" or (buildDepError "cryptohash-sha256")) + (hsPkgs."base16-bytestring" or (buildDepError "base16-bytestring")) + (hsPkgs."filepath" or (buildDepError "filepath")) + (hsPkgs."directory" or (buildDepError "directory")) + (hsPkgs."transformers" or (buildDepError "transformers")) ]; + buildable = true; }; "lts-to-nix" = { depends = [ - (hsPkgs.base) - (hsPkgs.nix-tools) - (hsPkgs.hnix) - (hsPkgs.yaml) - (hsPkgs.aeson) - (hsPkgs.microlens) - (hsPkgs.microlens-aeson) - (hsPkgs.text) - (hsPkgs.filepath) - (hsPkgs.directory) - (hsPkgs.unordered-containers) - (hsPkgs.Cabal) + (hsPkgs."base" or (buildDepError "base")) + (hsPkgs."nix-tools" or (buildDepError "nix-tools")) + (hsPkgs."hnix" or (buildDepError "hnix")) + (hsPkgs."yaml" or (buildDepError "yaml")) + (hsPkgs."aeson" or (buildDepError "aeson")) + (hsPkgs."microlens" or (buildDepError "microlens")) + (hsPkgs."microlens-aeson" or (buildDepError "microlens-aeson")) + (hsPkgs."text" or (buildDepError "text")) + (hsPkgs."filepath" or (buildDepError "filepath")) + (hsPkgs."directory" or (buildDepError "directory")) + (hsPkgs."unordered-containers" or (buildDepError "unordered-containers")) + (hsPkgs."Cabal" or (buildDepError "Cabal")) ]; + buildable = true; }; "stack-to-nix" = { depends = [ - (hsPkgs.base) - (hsPkgs.nix-tools) - (hsPkgs.transformers) - (hsPkgs.hnix) - (hsPkgs.yaml) - (hsPkgs.aeson) - (hsPkgs.microlens) - (hsPkgs.microlens-aeson) - (hsPkgs.text) - (hsPkgs.Cabal) - (hsPkgs.vector) - (hsPkgs.prettyprinter) - (hsPkgs.directory) - (hsPkgs.filepath) - (hsPkgs.extra) - (hsPkgs.hpack) - (hsPkgs.bytestring) - (hsPkgs.optparse-applicative) - (hsPkgs.http-client-tls) - (hsPkgs.http-client) - (hsPkgs.http-types) - (hsPkgs.unordered-containers) + (hsPkgs."base" or (buildDepError "base")) + (hsPkgs."nix-tools" or (buildDepError "nix-tools")) ]; + buildable = true; }; "truncate-index" = { depends = [ - (hsPkgs.base) - (hsPkgs.optparse-applicative) - (hsPkgs.zlib) - (hsPkgs.tar) - (hsPkgs.bytestring) - (hsPkgs.time) + (hsPkgs."base" or (buildDepError "base")) + (hsPkgs."optparse-applicative" or (buildDepError "optparse-applicative")) + (hsPkgs."zlib" or (buildDepError "zlib")) + (hsPkgs."tar" or (buildDepError "tar")) + (hsPkgs."bytestring" or (buildDepError "bytestring")) + (hsPkgs."time" or (buildDepError "time")) ]; + buildable = true; + }; + "stack-repos" = { + depends = [ + (hsPkgs."base" or (buildDepError "base")) + (hsPkgs."nix-tools" or (buildDepError "nix-tools")) + ]; + buildable = true; + }; + "cabal-name" = { + depends = [ + (hsPkgs."base" or (buildDepError "base")) + (hsPkgs."nix-tools" or (buildDepError "nix-tools")) + ]; + buildable = true; }; }; }; - } // rec { src = (pkgs.lib).mkDefault ../.; } \ No newline at end of file + } // rec { src = (pkgs.lib).mkDefault ../../.././../.; } \ No newline at end of file diff --git a/nix-tools/nix-tools-src.json b/nix-tools/nix-tools-src.json index 51da752336..12418f2c8d 100644 --- a/nix-tools/nix-tools-src.json +++ b/nix-tools/nix-tools-src.json @@ -1,7 +1,7 @@ { "url": "https://github.com/input-output-hk/nix-tools", - "rev": "b1efc35f344995f546b14da7914d7c0c0cdf5fa8", - "date": "2019-12-01T21:08:02+08:00", - "sha256": "01nfz4hsl8ia5w7dr23vf008j727ciwsmaymcn222c6a7azcs39c", + "rev": "ccb4850614d51816a0042cfc71f890232abba674", + "date": "2020-01-13T10:25:08+13:00", + "sha256": "0hhspnq05kfr75kn8cy52qqf2lwxj0yfm6y42vhzww5vw12bvc67", "fetchSubmodules": false } diff --git a/nix-tools/pkgs.nix b/nix-tools/pkgs.nix index 52d5f16c79..a2b6077ac5 100644 --- a/nix-tools/pkgs.nix +++ b/nix-tools/pkgs.nix @@ -2,390 +2,347 @@ pkgs = hackage: { packages = { - "criterion-measurement".revision = (((hackage."criterion-measurement")."0.1.1.0").revisions).default; - "criterion-measurement".flags.fast = false; "test-framework-hunit".revision = (((hackage."test-framework-hunit")."0.3.0.2").revisions).default; - "test-framework-hunit".flags.base4 = true; - "test-framework-hunit".flags.base3 = false; - "http-client".revision = (((hackage."http-client")."0.6.4").revisions).default; - "http-client".flags.network-uri = true; + "http-client".revision = (((hackage."http-client")."0.5.14").revisions).default; "cookie".revision = (((hackage."cookie")."0.4.4").revisions).default; "void".revision = (((hackage."void")."0.7.3").revisions).default; - "void".flags.safe = false; - "semigroupoids".revision = (((hackage."semigroupoids")."5.3.2").revisions).default; - "semigroupoids".flags.comonad = true; - "semigroupoids".flags.doctests = true; - "semigroupoids".flags.unordered-containers = true; - "semigroupoids".flags.distributive = true; - "semigroupoids".flags.tagged = true; - "semigroupoids".flags.containers = true; - "semigroupoids".flags.contravariant = true; - "free".revision = (((hackage."free")."5.1.1").revisions).default; - "Only".revision = (((hackage."Only")."0.1").revisions).default; - "cereal".revision = (((hackage."cereal")."0.5.8.0").revisions).default; - "cereal".flags.bytestring-builder = false; - "exceptions".revision = (((hackage."exceptions")."0.10.2").revisions).default; + "semigroupoids".revision = (((hackage."semigroupoids")."5.3.3").revisions).default; + "free".revision = (((hackage."free")."5.1.2").revisions).default; + "tf-random".revision = (((hackage."tf-random")."0.5").revisions).default; + "cereal".revision = (((hackage."cereal")."0.5.8.1").revisions).default; + "exceptions".revision = (((hackage."exceptions")."0.10.3").revisions).default; "cryptohash-sha256".revision = (((hackage."cryptohash-sha256")."0.11.101.0").revisions).default; - "cryptohash-sha256".flags.exe = false; "binary".revision = (((hackage."binary")."0.8.6.0").revisions).default; "interpolate".revision = (((hackage."interpolate")."0.2.0").revisions).default; - "generic-random".revision = (((hackage."generic-random")."1.2.0.0").revisions).default; - "tar".revision = (((hackage."tar")."0.5.1.0").revisions).default; - "tar".flags.old-time = false; - "tar".flags.old-bytestring = false; + "hnix".revision = (((hackage."hnix")."0.6.1").revisions).default; + "hnix".flags.profiling = false; + "hnix".flags.optimize = false; + "tar".revision = (((hackage."tar")."0.5.1.1").revisions).default; "regex-tdfa".revision = (((hackage."regex-tdfa")."1.2.3.2").revisions).default; - "regex-tdfa".flags.devel = false; "ghc-prim".revision = (((hackage."ghc-prim")."0.5.3").revisions).default; "text-metrics".revision = (((hackage."text-metrics")."0.3.0").revisions).default; - "text-metrics".flags.dev = false; "utf8-string".revision = (((hackage."utf8-string")."1.0.1.1").revisions).default; - "bifunctors".revision = (((hackage."bifunctors")."5.5.4").revisions).default; - "bifunctors".flags.semigroups = true; - "bifunctors".flags.tagged = true; + "bifunctors".revision = (((hackage."bifunctors")."5.5.5").revisions).default; "hashing".revision = (((hackage."hashing")."0.1.0.1").revisions).default; - "extra".revision = (((hackage."extra")."1.6.15").revisions).default; + "extra".revision = (((hackage."extra")."1.6.18").revisions).default; "haskeline".revision = (((hackage."haskeline")."0.7.4.3").revisions).default; "logict".revision = (((hackage."logict")."0.6.0.3").revisions).default; "x509-validation".revision = (((hackage."x509-validation")."1.6.11").revisions).default; "fail".revision = (((hackage."fail")."4.9.0.0").revisions).default; - "dense-linear-algebra".revision = (((hackage."dense-linear-algebra")."0.1.0.0").revisions).default; "split".revision = (((hackage."split")."0.2.3.3").revisions).default; "data-fix".revision = (((hackage."data-fix")."0.2.0").revisions).default; "stm".revision = (((hackage."stm")."2.5.0.0").revisions).default; - "tasty-th".revision = (((hackage."tasty-th")."0.1.7").revisions).default; - "text-short".revision = (((hackage."text-short")."0.1.2").revisions).default; - "text-short".flags.asserts = false; - "microstache".revision = (((hackage."microstache")."1.0.1.1").revisions).default; - "base-compat-batteries".revision = (((hackage."base-compat-batteries")."0.10.5").revisions).default; "hourglass".revision = (((hackage."hourglass")."0.2.12").revisions).default; "case-insensitive".revision = (((hackage."case-insensitive")."1.2.1.0").revisions).default; "extensible-exceptions".revision = (((hackage."extensible-exceptions")."0.1.1.4").revisions).default; "unix".revision = (((hackage."unix")."2.7.2.2").revisions).default; - "tasty-quickcheck".revision = (((hackage."tasty-quickcheck")."0.10.1").revisions).default; "mtl".revision = (((hackage."mtl")."2.2.2").revisions).default; - "lifted-async".revision = (((hackage."lifted-async")."0.10.0.4").revisions).default; "network-uri".revision = (((hackage."network-uri")."2.6.1.0").revisions).default; - "asn1-parse".revision = (((hackage."asn1-parse")."0.9.4").revisions).default; + "asn1-parse".revision = (((hackage."asn1-parse")."0.9.5").revisions).default; "regex-base".revision = (((hackage."regex-base")."0.93.2").revisions).default; - "regex-base".flags.splitbase = true; - "regex-base".flags.newbase = true; - "zlib".revision = (((hackage."zlib")."0.6.2").revisions).default; - "zlib".flags.non-blocking-ffi = false; - "zlib".flags.pkg-config = false; + "zlib".revision = (((hackage."zlib")."0.6.2.1").revisions).default; "rts".revision = (((hackage."rts")."1.0").revisions).default; - "mmorph".revision = (((hackage."mmorph")."1.1.3").revisions).default; - "js-flot".revision = (((hackage."js-flot")."0.8.3").revisions).default; - "statistics".revision = (((hackage."statistics")."0.15.0.0").revisions).default; - "th-expand-syns".revision = (((hackage."th-expand-syns")."0.4.4.0").revisions).default; + "th-expand-syns".revision = (((hackage."th-expand-syns")."0.4.5.0").revisions).default; "regex-posix".revision = (((hackage."regex-posix")."0.95.2").revisions).default; - "regex-posix".flags.splitbase = true; - "regex-posix".flags.newbase = true; - "cryptonite".revision = (((hackage."cryptonite")."0.25").revisions).default; - "cryptonite".flags.support_sse = false; - "cryptonite".flags.integer-gmp = true; - "cryptonite".flags.support_rdrand = true; - "cryptonite".flags.support_aesni = true; - "cryptonite".flags.support_deepseq = true; - "cryptonite".flags.support_pclmuldq = false; - "cryptonite".flags.check_alignment = false; - "cryptonite".flags.old_toolchain_inliner = false; + "cryptonite".revision = (((hackage."cryptonite")."0.26").revisions).default; "microlens-aeson".revision = (((hackage."microlens-aeson")."2.3.0.4").revisions).default; "clock".revision = (((hackage."clock")."0.8").revisions).default; - "clock".flags.llvm = false; "adjunctions".revision = (((hackage."adjunctions")."4.4").revisions).default; "cryptohash-md5".revision = (((hackage."cryptohash-md5")."0.11.100.1").revisions).default; "invariant".revision = (((hackage."invariant")."0.5.3").revisions).default; - "th-orphans".revision = (((hackage."th-orphans")."0.13.7").revisions).default; + "th-orphans".revision = (((hackage."th-orphans")."0.13.9").revisions).default; "pem".revision = (((hackage."pem")."0.2.4").revisions).default; "megaparsec".revision = (((hackage."megaparsec")."7.0.5").revisions).default; - "megaparsec".flags.dev = false; - "syb".revision = (((hackage."syb")."0.7").revisions).default; - "distributive".revision = (((hackage."distributive")."0.6").revisions).default; - "distributive".flags.semigroups = true; - "distributive".flags.tagged = true; - "asn1-encoding".revision = (((hackage."asn1-encoding")."0.9.5").revisions).default; - "vector-th-unbox".revision = (((hackage."vector-th-unbox")."0.2.1.6").revisions).default; - "QuickCheck".revision = (((hackage."QuickCheck")."2.13.1").revisions).default; - "QuickCheck".flags.templatehaskell = true; + "syb".revision = (((hackage."syb")."0.7.1").revisions).default; + "distributive".revision = (((hackage."distributive")."0.6.1").revisions).default; + "asn1-encoding".revision = (((hackage."asn1-encoding")."0.9.6").revisions).default; + "QuickCheck".revision = (((hackage."QuickCheck")."2.12.6.1").revisions).default; "scientific".revision = (((hackage."scientific")."0.3.6.2").revisions).default; - "scientific".flags.integer-simple = false; - "scientific".flags.bytestring-builder = false; - "tasty".revision = (((hackage."tasty")."1.2.2").revisions).default; - "tasty".flags.clock = true; "monadlist".revision = (((hackage."monadlist")."0.0.2").revisions).default; "half".revision = (((hackage."half")."0.3").revisions).default; "parallel".revision = (((hackage."parallel")."3.2.2.0").revisions).default; "deepseq".revision = (((hackage."deepseq")."1.4.4.0").revisions).default; "hnix-store-core".revision = (((hackage."hnix-store-core")."0.1.0.0").revisions).default; - "hnix-store-core".flags.bounded_memory = false; "random".revision = (((hackage."random")."1.1").revisions).default; "uuid-types".revision = (((hackage."uuid-types")."1.0.3").revisions).default; "optparse-applicative".revision = (((hackage."optparse-applicative")."0.14.3.0").revisions).default; - "network".revision = (((hackage."network")."3.1.0.0").revisions).default; - "connection".revision = (((hackage."connection")."0.3.0").revisions).default; - "splitmix".revision = (((hackage."splitmix")."0.0.2").revisions).default; - "async".revision = (((hackage."async")."2.2.1").revisions).default; - "async".flags.bench = false; - "dlist".revision = (((hackage."dlist")."0.8.0.6").revisions).default; + "network".revision = (((hackage."network")."3.1.1.0").revisions).default; + "connection".revision = (((hackage."connection")."0.3.1").revisions).default; + "async".revision = (((hackage."async")."2.2.2").revisions).default; + "dlist".revision = (((hackage."dlist")."0.8.0.7").revisions).default; "conduit".revision = (((hackage."conduit")."1.3.1.1").revisions).default; "ref-tf".revision = (((hackage."ref-tf")."0.4.0.1").revisions).default; "x509-store".revision = (((hackage."x509-store")."1.6.7").revisions).default; - "constraints".revision = (((hackage."constraints")."0.11").revisions).default; "lens-family-th".revision = (((hackage."lens-family-th")."0.5.0.2").revisions).default; "semigroups".revision = (((hackage."semigroups")."0.18.5").revisions).default; - "semigroups".flags.bytestring = true; - "semigroups".flags.unordered-containers = true; - "semigroups".flags.text = true; - "semigroups".flags.tagged = true; - "semigroups".flags.containers = true; - "semigroups".flags.binary = true; - "semigroups".flags.hashable = true; - "semigroups".flags.transformers = true; - "semigroups".flags.deepseq = true; - "semigroups".flags.bytestring-builder = false; "HUnit".revision = (((hackage."HUnit")."1.6.0.0").revisions).default; "vector-instances".revision = (((hackage."vector-instances")."3.4").revisions).default; - "vector-instances".flags.hashable = true; - "lifted-base".revision = (((hackage."lifted-base")."0.2.3.12").revisions).default; "parsec".revision = (((hackage."parsec")."3.1.13.0").revisions).default; "th-reify-many".revision = (((hackage."th-reify-many")."0.1.9").revisions).default; - "hsc2hs".revision = (((hackage."hsc2hs")."0.68.4").revisions).default; - "hsc2hs".flags.in-ghc-tree = false; + "hsc2hs".revision = (((hackage."hsc2hs")."0.68.6").revisions).default; "directory".revision = (((hackage."directory")."1.3.3.0").revisions).default; - "yaml".revision = (((hackage."yaml")."0.11.0.0").revisions).default; - "yaml".flags.no-exe = true; - "yaml".flags.no-examples = true; + "yaml".revision = (((hackage."yaml")."0.11.1.2").revisions).default; "transformers-compat".revision = (((hackage."transformers-compat")."0.6.5").revisions).default; - "transformers-compat".flags.five = false; - "transformers-compat".flags.generic-deriving = true; - "transformers-compat".flags.two = false; - "transformers-compat".flags.five-three = true; - "transformers-compat".flags.mtl = true; - "transformers-compat".flags.four = false; - "transformers-compat".flags.three = false; - "hpack".revision = (((hackage."hpack")."0.31.2").revisions).default; + "hpack".revision = (((hackage."hpack")."0.32.0").revisions).default; "template-haskell".revision = (((hackage."template-haskell")."2.14.0.0").revisions).default; - "mono-traversable".revision = (((hackage."mono-traversable")."1.0.11.0").revisions).default; + "mono-traversable".revision = (((hackage."mono-traversable")."1.0.12.0").revisions).default; "vector".revision = (((hackage."vector")."0.12.0.3").revisions).default; - "vector".flags.unsafechecks = false; - "vector".flags.internalchecks = false; - "vector".flags.wall = false; - "vector".flags.boundschecks = true; - "call-stack".revision = (((hackage."call-stack")."0.1.0").revisions).default; - "primitive".revision = (((hackage."primitive")."0.6.4.0").revisions).default; - "profunctors".revision = (((hackage."profunctors")."5.4").revisions).default; - "time-locale-compat".revision = (((hackage."time-locale-compat")."0.1.1.5").revisions).default; - "time-locale-compat".flags.old-locale = false; + "call-stack".revision = (((hackage."call-stack")."0.2.0").revisions).default; + "primitive".revision = (((hackage."primitive")."0.7.0.0").revisions).default; + "profunctors".revision = (((hackage."profunctors")."5.5").revisions).default; "safe".revision = (((hackage."safe")."0.3.17").revisions).default; "blaze-builder".revision = (((hackage."blaze-builder")."0.4.1.0").revisions).default; "base-compat".revision = (((hackage."base-compat")."0.10.5").revisions).default; - "js-jquery".revision = (((hackage."js-jquery")."3.3.1").revisions).default; - "terminal-size".revision = (((hackage."terminal-size")."0.3.2.1").revisions).default; - "math-functions".revision = (((hackage."math-functions")."0.3.1.0").revisions).default; - "math-functions".flags.system-expm1 = false; + "time-compat".revision = (((hackage."time-compat")."1.9.2.2").revisions).default; "x509-system".revision = (((hackage."x509-system")."1.6.6").revisions).default; "keys".revision = (((hackage."keys")."3.12.2").revisions).default; - "ansi-terminal".revision = (((hackage."ansi-terminal")."0.9.1").revisions).default; - "ansi-terminal".flags.example = false; - "vector-binary-instances".revision = (((hackage."vector-binary-instances")."0.2.5.1").revisions).default; + "ansi-terminal".revision = (((hackage."ansi-terminal")."0.10").revisions).default; "tagged".revision = (((hackage."tagged")."0.8.6").revisions).default; - "tagged".flags.transformers = true; - "tagged".flags.deepseq = true; "x509".revision = (((hackage."x509")."1.7.5").revisions).default; - "cassava".revision = (((hackage."cassava")."0.5.1.0").revisions).default; - "cassava".flags.bytestring--lt-0_10_4 = false; "haskell-src-exts".revision = (((hackage."haskell-src-exts")."1.20.3").revisions).default; "lens".revision = (((hackage."lens")."4.17.1").revisions).default; - "lens".flags.j = false; - "lens".flags.test-properties = true; - "lens".flags.old-inline-pragmas = false; - "lens".flags.test-templates = true; - "lens".flags.trustworthy = true; - "lens".flags.test-doctests = true; - "lens".flags.benchmark-uniplate = false; - "lens".flags.inlining = true; - "lens".flags.dump-splices = false; - "lens".flags.test-hunit = true; - "lens".flags.safe = false; "unliftio-core".revision = (((hackage."unliftio-core")."0.1.2.0").revisions).default; "containers".revision = (((hackage."containers")."0.6.0.1").revisions).default; - "wl-pprint-annotated".revision = (((hackage."wl-pprint-annotated")."0.1.0.1").revisions).default; "integer-logarithms".revision = (((hackage."integer-logarithms")."1.0.3").revisions).default; - "integer-logarithms".flags.check-bounds = false; - "integer-logarithms".flags.integer-gmp = true; - "reflection".revision = (((hackage."reflection")."2.1.4").revisions).default; - "reflection".flags.slow = false; - "reflection".flags.template-haskell = true; - "these".revision = (((hackage."these")."0.8").revisions).default; + "reflection".revision = (((hackage."reflection")."2.1.5").revisions).default; + "these".revision = (((hackage."these")."0.7.6").revisions).default; "regex-tdfa-text".revision = (((hackage."regex-tdfa-text")."1.0.0.3").revisions).default; - "dependent-sum".revision = (((hackage."dependent-sum")."0.5").revisions).default; + "dependent-sum".revision = (((hackage."dependent-sum")."0.4").revisions).default; "socks".revision = (((hackage."socks")."0.6.0").revisions).default; - "streaming-commons".revision = (((hackage."streaming-commons")."0.2.1.0").revisions).default; - "streaming-commons".flags.use-bytestring-builder = false; + "streaming-commons".revision = (((hackage."streaming-commons")."0.2.1.1").revisions).default; "haskell-lexer".revision = (((hackage."haskell-lexer")."1.0.2").revisions).default; - "monad-par".revision = (((hackage."monad-par")."0.3.4.8").revisions).default; - "monad-par".flags.newgeneric = false; - "monad-par".flags.chaselev = false; - "lens-family".revision = (((hackage."lens-family")."1.2.3").revisions).default; + "lens-family".revision = (((hackage."lens-family")."2.0.0").revisions).default; "bytestring".revision = (((hackage."bytestring")."0.10.8.2").revisions).default; "ansi-wl-pprint".revision = (((hackage."ansi-wl-pprint")."0.6.9").revisions).default; - "ansi-wl-pprint".flags.example = false; - "mwc-random".revision = (((hackage."mwc-random")."0.14.0.0").revisions).default; - "basement".revision = (((hackage."basement")."0.0.10").revisions).default; + "basement".revision = (((hackage."basement")."0.0.11").revisions).default; "test-framework".revision = (((hackage."test-framework")."0.8.2.0").revisions).default; "cryptohash-sha1".revision = (((hackage."cryptohash-sha1")."0.11.100.1").revisions).default; "serialise".revision = (((hackage."serialise")."0.2.1.0").revisions).default; - "serialise".flags.newtime15 = true; "hostname".revision = (((hackage."hostname")."1.0").revisions).default; "old-locale".revision = (((hackage."old-locale")."1.0.0.7").revisions).default; - "wcwidth".revision = (((hackage."wcwidth")."0.0.2").revisions).default; - "wcwidth".flags.split-base = true; - "wcwidth".flags.cli = false; - "StateVar".revision = (((hackage."StateVar")."1.1.1.1").revisions).default; + "StateVar".revision = (((hackage."StateVar")."1.2").revisions).default; "mime-types".revision = (((hackage."mime-types")."0.1.0.9").revisions).default; "http-client-tls".revision = (((hackage."http-client-tls")."0.3.5.3").revisions).default; - "contravariant".revision = (((hackage."contravariant")."1.5.1").revisions).default; - "contravariant".flags.semigroups = true; - "contravariant".flags.tagged = true; - "contravariant".flags.statevar = true; + "contravariant".revision = (((hackage."contravariant")."1.5.2").revisions).default; "pointed".revision = (((hackage."pointed")."5.0.1").revisions).default; - "pointed".flags.semigroupoids = true; - "pointed".flags.stm = true; - "pointed".flags.comonad = true; - "pointed".flags.unordered-containers = true; - "pointed".flags.kan-extensions = true; - "pointed".flags.semigroups = true; - "pointed".flags.tagged = true; - "pointed".flags.containers = true; - "pointed".flags.transformers = true; "parser-combinators".revision = (((hackage."parser-combinators")."1.0.3").revisions).default; - "parser-combinators".flags.dev = false; - "deriving-compat".revision = (((hackage."deriving-compat")."0.5.6").revisions).default; - "deriving-compat".flags.base-4-9 = true; - "deriving-compat".flags.template-haskell-2-11 = true; - "deriving-compat".flags.new-functor-classes = true; + "deriving-compat".revision = (((hackage."deriving-compat")."0.5.7").revisions).default; "text".revision = (((hackage."text")."1.2.3.1").revisions).default; "Cabal".revision = (((hackage."Cabal")."2.4.0.1").revisions).default; - "assoc".revision = (((hackage."assoc")."1").revisions).default; - "Diff".revision = (((hackage."Diff")."0.3.4").revisions).default; "unordered-containers".revision = (((hackage."unordered-containers")."0.2.10.0").revisions).default; - "unordered-containers".flags.debug = false; + "aeson-pretty".revision = (((hackage."aeson-pretty")."0.8.8").revisions).default; "base".revision = (((hackage."base")."4.12.0.0").revisions).default; - "abstract-deque".revision = (((hackage."abstract-deque")."0.3").revisions).default; - "abstract-deque".flags.usecas = false; - "tasty-hedgehog".revision = (((hackage."tasty-hedgehog")."1.0.0.0").revisions).default; "comonad".revision = (((hackage."comonad")."5.0.5").revisions).default; - "comonad".flags.distributive = true; - "comonad".flags.test-doctests = true; - "comonad".flags.containers = true; "time".revision = (((hackage."time")."1.8.0.2").revisions).default; "data-default-class".revision = (((hackage."data-default-class")."0.1.2.0").revisions).default; "terminfo".revision = (((hackage."terminfo")."0.4.1.2").revisions).default; "base16-bytestring".revision = (((hackage."base16-bytestring")."0.1.1.6").revisions).default; "vector-algorithms".revision = (((hackage."vector-algorithms")."0.8.0.1").revisions).default; - "vector-algorithms".flags.unsafechecks = false; - "vector-algorithms".flags.internalchecks = false; - "vector-algorithms".flags.llvm = false; - "vector-algorithms".flags.boundschecks = true; - "vector-algorithms".flags.bench = true; - "vector-algorithms".flags.properties = true; - "prettyprinter".revision = (((hackage."prettyprinter")."1.2.1").revisions).default; - "prettyprinter".flags.buildreadme = false; + "prettyprinter".revision = (((hackage."prettyprinter")."1.2.1.1").revisions).default; "cryptohash-sha512".revision = (((hackage."cryptohash-sha512")."0.11.100.1").revisions).default; - "tasty-hunit".revision = (((hackage."tasty-hunit")."0.10.0.2").revisions).default; - "pretty-show".revision = (((hackage."pretty-show")."1.8.2").revisions).default; + "pretty-show".revision = (((hackage."pretty-show")."1.9.5").revisions).default; "transformers".revision = (((hackage."transformers")."0.5.6.2").revisions).default; "hashable".revision = (((hackage."hashable")."1.2.7.0").revisions).default; - "hashable".flags.sse2 = true; - "hashable".flags.integer-gmp = true; - "hashable".flags.sse41 = false; - "hashable".flags.examples = false; - "attoparsec".revision = (((hackage."attoparsec")."0.13.2.2").revisions).default; - "attoparsec".flags.developer = false; + "attoparsec".revision = (((hackage."attoparsec")."0.13.2.3").revisions).default; "infer-license".revision = (((hackage."infer-license")."0.2.0").revisions).default; "colour".revision = (((hackage."colour")."2.3.5").revisions).default; "transformers-base".revision = (((hackage."transformers-base")."0.4.5.2").revisions).default; - "transformers-base".flags.orphaninstances = true; - "happy".revision = (((hackage."happy")."1.19.10").revisions).default; - "happy".flags.small_base = true; - "criterion".revision = (((hackage."criterion")."1.5.5.0").revisions).default; - "criterion".flags.embed-data-files = false; - "criterion".flags.fast = false; - "monad-par-extras".revision = (((hackage."monad-par-extras")."0.3.3").revisions).default; + "happy".revision = (((hackage."happy")."1.19.12").revisions).default; "filepath".revision = (((hackage."filepath")."1.4.2.1").revisions).default; - "code-page".revision = (((hackage."code-page")."0.2").revisions).default; - "asn1-types".revision = (((hackage."asn1-types")."0.3.2").revisions).default; - "unbounded-delays".revision = (((hackage."unbounded-delays")."0.1.1.0").revisions).default; - "hedgehog".revision = (((hackage."hedgehog")."1.0").revisions).default; - "cborg".revision = (((hackage."cborg")."0.2.1.0").revisions).default; - "cborg".flags.optimize-gmp = true; + "asn1-types".revision = (((hackage."asn1-types")."0.3.3").revisions).default; + "cborg".revision = (((hackage."cborg")."0.2.2.0").revisions).default; "monad-control".revision = (((hackage."monad-control")."1.0.2.3").revisions).default; "process".revision = (((hackage."process")."1.6.5.0").revisions).default; - "tls".revision = (((hackage."tls")."1.4.1").revisions).default; - "tls".flags.compat = true; - "tls".flags.network = true; - "tls".flags.hans = false; + "tls".revision = (((hackage."tls")."1.5.1").revisions).default; "kan-extensions".revision = (((hackage."kan-extensions")."5.2").revisions).default; "th-lift".revision = (((hackage."th-lift")."0.8.0.1").revisions).default; "libyaml".revision = (((hackage."libyaml")."0.1.1.0").revisions).default; - "libyaml".flags.system-libyaml = false; - "libyaml".flags.no-unicode = false; "resourcet".revision = (((hackage."resourcet")."1.2.2").revisions).default; "pretty".revision = (((hackage."pretty")."1.1.3.6").revisions).default; - "cabal-doctest".revision = (((hackage."cabal-doctest")."1.0.6").revisions).default; + "cabal-doctest".revision = (((hackage."cabal-doctest")."1.0.8").revisions).default; "Glob".revision = (((hackage."Glob")."0.10.0").revisions).default; - "microlens".revision = (((hackage."microlens")."0.4.10").revisions).default; - "aeson".revision = (((hackage."aeson")."1.4.3.0").revisions).default; - "aeson".flags.cffi = false; - "aeson".flags.fast = false; - "aeson".flags.bytestring-builder = false; - "aeson".flags.developer = false; - "abstract-par".revision = (((hackage."abstract-par")."0.3.3").revisions).default; + "microlens".revision = (((hackage."microlens")."0.4.11.2").revisions).default; + "aeson".revision = (((hackage."aeson")."1.4.5.0").revisions).default; "http-types".revision = (((hackage."http-types")."0.12.3").revisions).default; "ghc-boot-th".revision = (((hackage."ghc-boot-th")."8.6.5").revisions).default; - "th-lift-instances".revision = (((hackage."th-lift-instances")."0.1.13").revisions).default; + "th-lift-instances".revision = (((hackage."th-lift-instances")."0.1.14").revisions).default; "base-orphans".revision = (((hackage."base-orphans")."0.8.1").revisions).default; "th-abstraction".revision = (((hackage."th-abstraction")."0.3.1.0").revisions).default; - "memory".revision = (((hackage."memory")."0.14.18").revisions).default; - "memory".flags.support_bytestring = true; - "memory".flags.support_basement = true; - "memory".flags.support_foundation = true; - "memory".flags.support_deepseq = true; - "concurrent-output".revision = (((hackage."concurrent-output")."1.10.10").revisions).default; + "memory".revision = (((hackage."memory")."0.15.0").revisions).default; "array".revision = (((hackage."array")."0.5.3.0").revisions).default; "repline".revision = (((hackage."repline")."0.2.1.0").revisions).default; "xml".revision = (((hackage."xml")."1.3.14").revisions).default; - "lens-family-core".revision = (((hackage."lens-family-core")."1.2.3").revisions).default; + "erf".revision = (((hackage."erf")."2.0.0.0").revisions).default; + "lens-family-core".revision = (((hackage."lens-family-core")."2.0.0").revisions).default; "integer-gmp".revision = (((hackage."integer-gmp")."1.0.2.0").revisions).default; }; compiler = { version = "8.6.5"; nix-name = "ghc865"; packages = { + "test-framework-hunit" = "0.3.0.2"; + "http-client" = "0.5.14"; + "cookie" = "0.4.4"; + "void" = "0.7.3"; + "semigroupoids" = "5.3.3"; + "free" = "5.1.2"; + "tf-random" = "0.5"; + "cereal" = "0.5.8.1"; + "exceptions" = "0.10.3"; + "cryptohash-sha256" = "0.11.101.0"; "binary" = "0.8.6.0"; + "tar" = "0.5.1.1"; + "regex-tdfa" = "1.2.3.2"; "ghc-prim" = "0.5.3"; + "text-metrics" = "0.3.0"; + "utf8-string" = "1.0.1.1"; + "bifunctors" = "5.5.5"; + "hashing" = "0.1.0.1"; + "extra" = "1.6.18"; "haskeline" = "0.7.4.3"; + "logict" = "0.6.0.3"; + "x509-validation" = "1.6.11"; + "split" = "0.2.3.3"; + "data-fix" = "0.2.0"; "stm" = "2.5.0.0"; + "hourglass" = "0.2.12"; + "case-insensitive" = "1.2.1.0"; + "extensible-exceptions" = "0.1.1.4"; "unix" = "2.7.2.2"; "mtl" = "2.2.2"; + "network-uri" = "2.6.1.0"; + "asn1-parse" = "0.9.5"; + "regex-base" = "0.93.2"; + "zlib" = "0.6.2.1"; "rts" = "1.0"; + "th-expand-syns" = "0.4.5.0"; + "regex-posix" = "0.95.2"; + "cryptonite" = "0.26"; + "microlens-aeson" = "2.3.0.4"; + "clock" = "0.8"; + "adjunctions" = "4.4"; + "cryptohash-md5" = "0.11.100.1"; + "invariant" = "0.5.3"; + "th-orphans" = "0.13.9"; + "pem" = "0.2.4"; + "megaparsec" = "7.0.5"; + "syb" = "0.7.1"; + "distributive" = "0.6.1"; + "asn1-encoding" = "0.9.6"; + "QuickCheck" = "2.12.6.1"; + "scientific" = "0.3.6.2"; + "monadlist" = "0.0.2"; + "half" = "0.3"; + "parallel" = "3.2.2.0"; "deepseq" = "1.4.4.0"; + "hnix-store-core" = "0.1.0.0"; + "random" = "1.1"; + "uuid-types" = "1.0.3"; + "optparse-applicative" = "0.14.3.0"; + "network" = "3.1.1.0"; + "connection" = "0.3.1"; + "async" = "2.2.2"; + "dlist" = "0.8.0.7"; + "conduit" = "1.3.1.1"; + "ref-tf" = "0.4.0.1"; + "x509-store" = "1.6.7"; + "lens-family-th" = "0.5.0.2"; + "semigroups" = "0.18.5"; + "HUnit" = "1.6.0.0"; + "vector-instances" = "3.4"; "parsec" = "3.1.13.0"; + "th-reify-many" = "0.1.9"; "directory" = "1.3.3.0"; + "yaml" = "0.11.1.2"; + "transformers-compat" = "0.6.5"; + "hpack" = "0.32.0"; "template-haskell" = "2.14.0.0"; + "mono-traversable" = "1.0.12.0"; + "vector" = "0.12.0.3"; + "call-stack" = "0.2.0"; + "primitive" = "0.7.0.0"; + "profunctors" = "5.5"; + "safe" = "0.3.17"; + "blaze-builder" = "0.4.1.0"; + "base-compat" = "0.10.5"; + "time-compat" = "1.9.2.2"; + "x509-system" = "1.6.6"; + "keys" = "3.12.2"; + "ansi-terminal" = "0.10"; + "tagged" = "0.8.6"; + "x509" = "1.7.5"; + "haskell-src-exts" = "1.20.3"; + "lens" = "4.17.1"; + "unliftio-core" = "0.1.2.0"; "containers" = "0.6.0.1"; + "integer-logarithms" = "1.0.3"; + "reflection" = "2.1.5"; + "these" = "0.7.6"; + "regex-tdfa-text" = "1.0.0.3"; + "dependent-sum" = "0.4"; + "socks" = "0.6.0"; + "streaming-commons" = "0.2.1.1"; + "haskell-lexer" = "1.0.2"; + "lens-family" = "2.0.0"; "bytestring" = "0.10.8.2"; + "ansi-wl-pprint" = "0.6.9"; + "basement" = "0.0.11"; + "test-framework" = "0.8.2.0"; + "cryptohash-sha1" = "0.11.100.1"; + "serialise" = "0.2.1.0"; + "hostname" = "1.0"; + "old-locale" = "1.0.0.7"; + "StateVar" = "1.2"; + "mime-types" = "0.1.0.9"; + "http-client-tls" = "0.3.5.3"; + "contravariant" = "1.5.2"; + "pointed" = "5.0.1"; + "parser-combinators" = "1.0.3"; + "deriving-compat" = "0.5.7"; "text" = "1.2.3.1"; "Cabal" = "2.4.0.1"; + "unordered-containers" = "0.2.10.0"; + "aeson-pretty" = "0.8.8"; "base" = "4.12.0.0"; + "comonad" = "5.0.5"; "time" = "1.8.0.2"; + "data-default-class" = "0.1.2.0"; "terminfo" = "0.4.1.2"; + "base16-bytestring" = "0.1.1.6"; + "vector-algorithms" = "0.8.0.1"; + "prettyprinter" = "1.2.1.1"; + "cryptohash-sha512" = "0.11.100.1"; + "pretty-show" = "1.9.5"; "transformers" = "0.5.6.2"; + "hashable" = "1.2.7.0"; + "attoparsec" = "0.13.2.3"; + "infer-license" = "0.2.0"; + "colour" = "2.3.5"; + "transformers-base" = "0.4.5.2"; "filepath" = "1.4.2.1"; + "asn1-types" = "0.3.3"; + "cborg" = "0.2.2.0"; + "monad-control" = "1.0.2.3"; "process" = "1.6.5.0"; + "tls" = "1.5.1"; + "kan-extensions" = "5.2"; + "th-lift" = "0.8.0.1"; + "libyaml" = "0.1.1.0"; + "resourcet" = "1.2.2"; "pretty" = "1.1.3.6"; + "Glob" = "0.10.0"; + "microlens" = "0.4.11.2"; + "aeson" = "1.4.5.0"; + "http-types" = "0.12.3"; "ghc-boot-th" = "8.6.5"; + "th-lift-instances" = "0.1.14"; + "base-orphans" = "0.8.1"; + "th-abstraction" = "0.3.1.0"; + "memory" = "0.15.0"; "array" = "0.5.3.0"; + "xml" = "1.3.14"; + "erf" = "2.0.0.0"; + "lens-family-core" = "2.0.0"; "integer-gmp" = "1.0.2.0"; }; }; @@ -395,8 +352,19 @@ packages = { nix-tools = ./.plan.nix/nix-tools.nix; hackage-db = ./.plan.nix/hackage-db.nix; - hnix = ./.plan.nix/hnix.nix; haskell-src-meta = ./.plan.nix/haskell-src-meta.nix; }; }; + modules = [ + ({ lib, ... }: + { + packages = { + "nix-tools" = { flags = {}; }; + "hackage-db" = { + flags = { "install-examples" = lib.mkOverride 900 false; }; + }; + "haskell-src-meta" = { flags = {}; }; + }; + }) + ]; } \ No newline at end of file diff --git a/overlays/haskell.nix b/overlays/haskell.nix index 2325529187..55b500589e 100644 --- a/overlays/haskell.nix +++ b/overlays/haskell.nix @@ -321,6 +321,7 @@ self: super: { genStackCache = import ../lib/stack-cache-generator.nix { inherit (self.buildPackages) pkgs; + inherit (self.buildPackages.haskell-nix) haskellLib nix-tools; }; mkCacheModule = cache: @@ -437,13 +438,7 @@ self: super: { inherit (args) src; stackYaml = args.stackYaml or "stack.yaml"; }; - cache = args.cache or (builtins.trace - (builtins.trace '' - Automatically generated cache for this project. - You can pass it as a cache argument to speed up builds: - '' - # Force evaluation so that tracing prints out the whole list - (builtins.deepSeq generatedCache generatedCache)) generatedCache); + cache = args.cache or generatedCache; in let pkg-set = mkStackPkgSet { stack-pkgs = stack.pkgs; pkg-def-extras = (args.pkg-def-extras or []); diff --git a/pkgs/stack-to-nix/COPYING b/pkgs/stack-to-nix/COPYING deleted file mode 100644 index 3eedeb2b73..0000000000 --- a/pkgs/stack-to-nix/COPYING +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2018 Eelco Dolstra and the Nixpkgs/NixOS contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/pkgs/stack-to-nix/README.md b/pkgs/stack-to-nix/README.md deleted file mode 100644 index d79f4efa60..0000000000 --- a/pkgs/stack-to-nix/README.md +++ /dev/null @@ -1,36 +0,0 @@ -stack-to-nix -=========== - -This is a handy nix function for building stack projects with nix, fully inside the nix sandbox. -It parses the stack.yaml file and translates the dependencies into a series of fetchUrl, fetchGit calls. - -Example -======= - -```nix -{ pkgs }: - -let - stackToNix = pkgs.callPackage (fetchTarball https://github.com/serokell/stack-to-nix/archive/master.tar.gz) { }; -in -stackToNix { - # root: the path with stack.yaml. you may want to filter this. for example using nix-gitignore. - root = ./.; - # shell: get the .env instead of the nix-build derivation. recommended that you do this with shell.nix/default.nix. - # see https://github.com/DisciplinaOU/disciplina/blob/master/shell.nix - shell = false; - # you shouldn't need overrides, but you can ;) - overrides = final: previous: with pkgs.haskell.lib; { - qtah = overrideCabal previous.qtah (super: { - libraryToolDepends = with pkgs.qt5; [ qtbase qttools ]; - }); - }; -} -``` - -Problems -======== - -If you use this on a repo with git dependencies, -you will need [NixOS/nix#2409](https://github.com/NixOS/nix/pull/2409). It's in our patch set. `nix-env -f https://github.com/serokell/serokell-closure/archive/master.tar.gz -iA nix` - diff --git a/pkgs/stack-to-nix/build.nix b/pkgs/stack-to-nix/build.nix deleted file mode 100644 index 79f8409b1c..0000000000 --- a/pkgs/stack-to-nix/build.nix +++ /dev/null @@ -1,113 +0,0 @@ -{ overrides, pkgs, shell, stackage }: project: root: - -with pkgs; -with lib; - -let - inherit (haskell.lib) overrideCabal; - - stackagePackages = (import stackage) stackagePackages pkgs; - - resolverName = replaceStrings ["."] [""] project.resolver; - resolver = stackagePackages.haskell.packages.stackage."${resolverName}"; - - snapshot = resolver.override { - overrides = mergeExtensions [ - defaultDeps - extraDeps - localDeps - overrides - ]; - }; - - inherit (snapshot) callHackage; - - defaultDeps = final: previous: { - mkDerivation = drv: previous.mkDerivation (drv // { - doCheck = false; - doHaddock = false; - enableExecutableProfiling = false; - enableLibraryProfiling = false; - }); - }; - - handlers = import ./handlers.nix pkgs; - - handleExtra = spec: - let - handler = findFirst (h: h.test spec) - (throw "can't handle extra dep: ${spec}") handlers; - in - handler.handle spec; - - extraSpecs = project.extra-deps or []; - - extraDeps = - mergeExtensions (map (spec: final: const (handleExtra spec final)) extraSpecs); - - withStrictDeps = drv: drv.overrideAttrs (const { strictDeps = true; }); - - localPackage = name: path: - let - drv = cabalToNix snapshot name root {} ''--subpath="${path}"''; - overrides = const { - doBenchmark = true; - doCheck = true; - doHaddock = true; - license = licenses.free; - }; - in - withStrictDeps (overrideCabal drv overrides); - - localAttrs = listToAttrs - (map (path: nameValuePair (cabalPackageName "${root}/${path}") path) (project.packages or ["."])); - - localDeps = final: previous: - mapAttrs localPackage localAttrs; - - target = mapAttrs (name: const (getAttr name snapshot)) localAttrs; - - localPaths = map (removePrefix "./") (project.packages or ["."]); - - stackSnapshot = { - inherit (project) resolver; - packages = extraSpecs; - }; - - pathHash = path: - builtins.unsafeDiscardStringContext (builtins.substring 0 32 (baseNameOf path)); - - stackSnapshotWithName = stackSnapshot // { - name = pathHash (exportYAML stackSnapshot); - }; - - stackConfig = { - packages = project.packages or ["."]; - resolver = exportYAML stackSnapshotWithName; - }; - - shellEnv = snapshot.shellFor { - packages = const (attrValues target); - nativeBuildInputs = [ cabal-install stack ]; - - STACK_IN_NIX_SHELL = 1; - STACK_IN_NIX_EXTRA_ARGS = ""; - STACK_PLATFORM_VARIANT = "nix"; - STACK_YAML = "stack-to-nix.yaml"; - - shellHook = '' - cat ${exportYAML stackConfig} > stack-to-nix.yaml - - for f in $(find * -name package.yaml); do - ${snapshot.hpack}/bin/hpack --force $f - done - - echo packages: > cabal.project - for spec in ${concatStringsSep " " localPaths}; do - echo " $spec" >> cabal.project - done - ''; - }; -in - -if shell then shellEnv else target diff --git a/pkgs/stack-to-nix/cabal-name/cabal-name.cabal b/pkgs/stack-to-nix/cabal-name/cabal-name.cabal deleted file mode 100644 index 09b8f429b6..0000000000 --- a/pkgs/stack-to-nix/cabal-name/cabal-name.cabal +++ /dev/null @@ -1,9 +0,0 @@ -name: cabal-name -version: 1 -cabal-version: >= 1.2 - -executable cabal-name - build-depends: base, Cabal - default-language: Haskell2010 - hs-source-dirs: src - main-is: Main.hs diff --git a/pkgs/stack-to-nix/cabal-name/default.nix b/pkgs/stack-to-nix/cabal-name/default.nix deleted file mode 100644 index 77513fbf33..0000000000 --- a/pkgs/stack-to-nix/cabal-name/default.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ pkgs ? import {} }: with pkgs; - -let - project = { mkDerivation, base, Cabal }: mkDerivation { - pname = "cabal-name"; - version = "1"; - - src = lib.cleanSource ./.; - - isExecutable = true; - isLibrary = false; - - executableHaskellDepends = [ base Cabal ]; - - license = lib.licenses.free; - }; -in - -haskellPackages.callPackage project {} diff --git a/pkgs/stack-to-nix/cabal-name/src/Main.hs b/pkgs/stack-to-nix/cabal-name/src/Main.hs deleted file mode 100644 index d303064d23..0000000000 --- a/pkgs/stack-to-nix/cabal-name/src/Main.hs +++ /dev/null @@ -1,14 +0,0 @@ -module Main where - -import Distribution.PackageDescription.Parsec -import Distribution.Types.GenericPackageDescription -import Distribution.Types.PackageDescription -import Distribution.Types.PackageId -import Distribution.Types.PackageName -import Distribution.Verbosity -import System.Environment - -main = do - args <- getArgs - desc <- readGenericPackageDescription normal (head args) - print $ (unPackageName . pkgName . package . packageDescription) desc diff --git a/pkgs/stack-to-nix/default.nix b/pkgs/stack-to-nix/default.nix deleted file mode 100644 index 518df7951a..0000000000 --- a/pkgs/stack-to-nix/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ pkgs ? import {} }: - -{ overrides ? (_: _: {}) -, root -, shell ? false -, stackage ? fetchGit { url = "https://github.com/typeable/nixpkgs-stackage"; rev = "6042df5e646d65b826add0a85d16304bee8e1dd5"; } }: - -let - lib = import ./lib.nix pkgs; - - buildProject = import ./build.nix { - pkgs = pkgs // { lib = pkgs.lib // lib; }; - inherit overrides shell stackage; - }; -in - -buildProject (lib.importYAML "${root}/stack.yaml") root diff --git a/pkgs/stack-to-nix/handlers.nix b/pkgs/stack-to-nix/handlers.nix deleted file mode 100644 index d52dd436b8..0000000000 --- a/pkgs/stack-to-nix/handlers.nix +++ /dev/null @@ -1,36 +0,0 @@ -pkgs: with pkgs; with lib; - -[ - ({ - handle = spec: self: - let - components = splitString "-" spec; - name = concatStringsSep "-" (init components); - version = last components; - in - { "${name}" = lib.callHackage self name version {}; }; - - test = isString; - }) - ({ - handle = spec: self: - let - src = fetchGit { - url = spec.git; - ref = "*"; - rev = spec.commit; - }; - - subdirToAttr = subdir: - let - name = cabalPackageName "${src}/${subdir}"; - in - nameValuePair name (cabalToNix self name src {} ''--subpath="${subdir}"''); - - subdirs = spec.subdirs or [ "." ]; - in - listToAttrs (map subdirToAttr subdirs); - - test = spec: isAttrs spec && spec ? git; - }) -] diff --git a/pkgs/stack-to-nix/lib.nix b/pkgs/stack-to-nix/lib.nix deleted file mode 100644 index 6ab4909268..0000000000 --- a/pkgs/stack-to-nix/lib.nix +++ /dev/null @@ -1,55 +0,0 @@ -pkgs: with pkgs; with lib; - -let - inherit (haskell.lib) overrideCabal; - inherit (haskellPackages) hackage2nix haskellSrc2nix hpack; - - cabal-name = import ./cabal-name { inherit pkgs; }; - - cabalName = path: runCommand "cabal-name" {} '' - ${cabal-name}/bin/cabal-name ${path} > $out - ''; - - hpackToCabal = path: runCommand "hpack.cabal" {} '' - cd ${dirOf path}; ${hpack}/bin/hpack - < ${path} > $out - ''; - - listDirectory = path: - map (name: "${path}/${name}") (attrNames (builtins.readDir path)); - - yamlToJSON = path: runCommand "yaml.json" { nativeBuildInputs = [ ruby ]; } '' - ruby -rjson -ryaml -e "puts YAML.load(ARGF).to_json" < ${path} > $out - ''; -in - -{ - cabalPackageName = root: - let - children = listDirectory root; - hpack = findFirst (hasSuffix "/package.yaml") - (throw "no Cabal or Hpack file found: ${root}") children; - cabal = findSingle (hasSuffix ".cabal") (hpackToCabal hpack) - (throw "more than one Cabal file: ${root}") children; - in - import (cabalName cabal); - - cabalToNix = self: name: src: args: options: - let - expr = haskellSrc2nix { - inherit name src; - extraCabal2nixOptions = options; - }; - in - overrideCabal - (self.callPackage expr args) - (lib.const { inherit src; }); - - callHackage = self: name: version: - self.callPackage (hackage2nix name version); - - exportYAML = term: writeText "term.yaml" (builtins.toJSON term); - - importYAML = path: lib.importJSON (yamlToJSON path); - - mergeExtensions = extensions: foldr composeExtensions (_: _: {}) extensions; -} diff --git a/test/stack-source-repo/default.nix b/test/stack-source-repo/default.nix index 874898816f..f019a8ec54 100644 --- a/test/stack-source-repo/default.nix +++ b/test/stack-source-repo/default.nix @@ -3,7 +3,6 @@ let project = stackProject' { src = ./.; - cache = [ { is-private = false; name = "cabal-simple"; rev = "bc01ebc05a8105035c9449943046b46c8364b932"; sha256 = "003lm3pm024vhbfmii7xcdd9v2rczpflxf7gdl2pyxia7p014i8z"; subdir = "test/cabal-simple"; url = "https://github.com/input-output-hk/haskell.nix.git"; } ]; }; packages = project.hsPkgs; diff --git a/test/stack-source-repo/stack.yaml b/test/stack-source-repo/stack.yaml index 871a1579d4..4039658458 100644 --- a/test/stack-source-repo/stack.yaml +++ b/test/stack-source-repo/stack.yaml @@ -8,4 +8,5 @@ extra-deps: commit: bc01ebc05a8105035c9449943046b46c8364b932 subdirs: - test/cabal-simple + # nix-sha256: 003lm3pm024vhbfmii7xcdd9v2rczpflxf7gdl2pyxia7p014i8z From 52d4bbe476929689b9fe0b83d2c13816394c9152 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 13 Jan 2020 16:40:42 +1300 Subject: [PATCH 10/15] Fix cache generation with local resolver file --- lib/stack-cache-generator.nix | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/lib/stack-cache-generator.nix b/lib/stack-cache-generator.nix index 7fc7838f70..c7d272d0db 100644 --- a/lib/stack-cache-generator.nix +++ b/lib/stack-cache-generator.nix @@ -6,7 +6,7 @@ let # We only care about the stackYaml file. If src is a local directory # we want to avoid recalculating the cache unless the stack.yaml file # changes. - maybeCleanedSource = + justStackFile = if haskellLib.canCleanSource src then haskellLib.cleanSourceWith { inherit src; @@ -14,6 +14,28 @@ let } else src; + # Determine the resolver as it may point to another file we need + # to look at. + resolver = + let + rs = pkgs.lib.lists.concatLists ( + pkgs.lib.lists.filter (l: l != null) + (builtins.map (l: builtins.match "^resolver: *(.*)" l) + (pkgs.lib.splitString "\n" (builtins.readFile (justStackFile + ("/" + stackYaml)))))); + in + pkgs.lib.lists.head (rs ++ [ null ]); + + # Filter just the stack yaml file and any reolver yaml file it points to. + maybeCleanedSource = + if haskellLib.canCleanSource src + then haskellLib.cleanSourceWith { + inherit src; + filter = path: type: + pkgs.lib.hasSuffix ("/" + stackYaml) path + || (resolver != null && pkgs.lib.hasSuffix ("/" + resolver) path); + } + else src; + # All repos served via ssh or git protocols are usually private private = url: pkgs.lib.substring 0 4 url != "http"; @@ -22,9 +44,10 @@ let } '' TMP=$(mktemp -d) cd $TMP - cp "${maybeCleanedSource}/${stackYaml}" stack.yaml - substituteInPlace stack.yaml --replace "# nix-sha256:" "nix-sha256:" - stack-repos + cp -r "${maybeCleanedSource}/." $TMP + chmod -R +w $TMP + substituteInPlace ${stackYaml} --replace "# nix-sha256:" "nix-sha256:" + stack-repos --stack-yaml ${stackYaml} cp repos.json $out '')); From 6a3402d1ae630fe391c886c48ae340eba618b7ec Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 13 Jan 2020 17:38:16 +1300 Subject: [PATCH 11/15] Use latest nix-tools master branch --- nix-tools/nix-tools-src.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nix-tools/nix-tools-src.json b/nix-tools/nix-tools-src.json index 12418f2c8d..cb2fb1af00 100644 --- a/nix-tools/nix-tools-src.json +++ b/nix-tools/nix-tools-src.json @@ -1,7 +1,7 @@ { "url": "https://github.com/input-output-hk/nix-tools", - "rev": "ccb4850614d51816a0042cfc71f890232abba674", - "date": "2020-01-13T10:25:08+13:00", - "sha256": "0hhspnq05kfr75kn8cy52qqf2lwxj0yfm6y42vhzww5vw12bvc67", + "rev": "e8eb66896933229987c1a26c28b21a6b363e3bd9", + "date": "2020-01-13T17:33:49+13:00", + "sha256": "0iqyniipz7gpy1ixrymk7ycgv65pdfk5aa0189a87mpflc08pcz4", "fetchSubmodules": false } From b978053c60fc92af4013b3b9ad198409715e1e94 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 13 Jan 2020 17:54:28 +1300 Subject: [PATCH 12/15] Use origSrcSubDir to access stack.yaml --- lib/stack-cache-generator.nix | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/lib/stack-cache-generator.nix b/lib/stack-cache-generator.nix index c7d272d0db..dcfb56db89 100644 --- a/lib/stack-cache-generator.nix +++ b/lib/stack-cache-generator.nix @@ -6,13 +6,11 @@ let # We only care about the stackYaml file. If src is a local directory # we want to avoid recalculating the cache unless the stack.yaml file # changes. - justStackFile = - if haskellLib.canCleanSource src - then haskellLib.cleanSourceWith { - inherit src; - filter = path: type: pkgs.lib.hasSuffix ("/" + stackYaml) path; - } - else src; + + # Using origSrcSubDir bypasses any cleanSourceWith so that it will work when + # access to the store is restricted. If origSrc was already in the store + # you can pass the project in as a string. + rawStackYaml = builtins.readFile ((src.origSrcSubDir or src) + ("/" + stackYaml)); # Determine the resolver as it may point to another file we need # to look at. @@ -21,7 +19,7 @@ let rs = pkgs.lib.lists.concatLists ( pkgs.lib.lists.filter (l: l != null) (builtins.map (l: builtins.match "^resolver: *(.*)" l) - (pkgs.lib.splitString "\n" (builtins.readFile (justStackFile + ("/" + stackYaml)))))); + (pkgs.lib.splitString "\n" rawStackYaml))); in pkgs.lib.lists.head (rs ++ [ null ]); From df002806f9df1f3c798263eacdabb2f4faa7547b Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 14 Jan 2020 02:08:07 +1300 Subject: [PATCH 13/15] Update nix-tools/pkgs-8.4.4.nix --- nix-tools/pkgs-8.4.4.nix | 242 +++++++++++++++------------------------ 1 file changed, 95 insertions(+), 147 deletions(-) diff --git a/nix-tools/pkgs-8.4.4.nix b/nix-tools/pkgs-8.4.4.nix index 2e7f29d41b..a2874b797c 100644 --- a/nix-tools/pkgs-8.4.4.nix +++ b/nix-tools/pkgs-8.4.4.nix @@ -2,17 +2,12 @@ pkgs = hackage: { packages = { - "criterion-measurement".revision = (((hackage."criterion-measurement")."0.1.1.0").revisions).default; - "criterion-measurement".flags.fast = false; - "test-framework-hunit".revision = (((hackage."test-framework-hunit")."0.3.0.2").revisions).default; - "test-framework-hunit".flags.base4 = true; - "test-framework-hunit".flags.base3 = false; - "http-client".revision = (((hackage."http-client")."0.6.4").revisions).default; + "http-client".revision = (((hackage."http-client")."0.5.14").revisions).default; "http-client".flags.network-uri = true; - "cookie".revision = (((hackage."cookie")."0.4.4").revisions).default; - "void".revision = (((hackage."void")."0.7.2").revisions).default; + "cookie".revision = (((hackage."cookie")."0.4.5").revisions).default; + "void".revision = (((hackage."void")."0.7.3").revisions).default; "void".flags.safe = false; - "semigroupoids".revision = (((hackage."semigroupoids")."5.3.2").revisions).default; + "semigroupoids".revision = (((hackage."semigroupoids")."5.3.4").revisions).default; "semigroupoids".flags.comonad = true; "semigroupoids".flags.doctests = true; "semigroupoids".flags.unordered-containers = true; @@ -20,66 +15,57 @@ "semigroupoids".flags.tagged = true; "semigroupoids".flags.containers = true; "semigroupoids".flags.contravariant = true; - "free".revision = (((hackage."free")."5.1").revisions).default; - "Only".revision = (((hackage."Only")."0.1").revisions).default; - "cereal".revision = (((hackage."cereal")."0.5.8.0").revisions).default; + "free".revision = (((hackage."free")."5.1.3").revisions).default; + "tf-random".revision = (((hackage."tf-random")."0.5").revisions).default; + "cereal".revision = (((hackage."cereal")."0.5.8.1").revisions).default; "cereal".flags.bytestring-builder = false; - "exceptions".revision = (((hackage."exceptions")."0.10.1").revisions).default; + "exceptions".revision = (((hackage."exceptions")."0.10.4").revisions).default; + "exceptions".flags.transformers-0-4 = true; "cryptohash-sha256".revision = (((hackage."cryptohash-sha256")."0.11.101.0").revisions).default; "cryptohash-sha256".flags.exe = false; "binary".revision = (((hackage."binary")."0.8.5.1").revisions).default; "interpolate".revision = (((hackage."interpolate")."0.2.0").revisions).default; - "generic-random".revision = (((hackage."generic-random")."1.2.0.0").revisions).default; - "tar".revision = (((hackage."tar")."0.5.1.0").revisions).default; + "hnix".revision = (((hackage."hnix")."0.6.1").revisions).default; + "hnix".flags.profiling = false; + "hnix".flags.optimize = false; + "tar".revision = (((hackage."tar")."0.5.1.1").revisions).default; "tar".flags.old-time = false; "tar".flags.old-bytestring = false; - "regex-tdfa".revision = (((hackage."regex-tdfa")."1.2.3.1").revisions).default; + "regex-tdfa".revision = (((hackage."regex-tdfa")."1.2.3.2").revisions).default; "regex-tdfa".flags.devel = false; "ghc-prim".revision = (((hackage."ghc-prim")."0.5.2.0").revisions).default; "text-metrics".revision = (((hackage."text-metrics")."0.3.0").revisions).default; "text-metrics".flags.dev = false; "utf8-string".revision = (((hackage."utf8-string")."1.0.1.1").revisions).default; - "bifunctors".revision = (((hackage."bifunctors")."5.5.4").revisions).default; + "bifunctors".revision = (((hackage."bifunctors")."5.5.6").revisions).default; "bifunctors".flags.semigroups = true; "bifunctors".flags.tagged = true; "hashing".revision = (((hackage."hashing")."0.1.0.1").revisions).default; - "extra".revision = (((hackage."extra")."1.6.15").revisions).default; + "extra".revision = (((hackage."extra")."1.6.18").revisions).default; "haskeline".revision = (((hackage."haskeline")."0.7.4.2").revisions).default; "logict".revision = (((hackage."logict")."0.6.0.3").revisions).default; "x509-validation".revision = (((hackage."x509-validation")."1.6.11").revisions).default; - "dense-linear-algebra".revision = (((hackage."dense-linear-algebra")."0.1.0.0").revisions).default; "split".revision = (((hackage."split")."0.2.3.3").revisions).default; "data-fix".revision = (((hackage."data-fix")."0.2.0").revisions).default; "stm".revision = (((hackage."stm")."2.4.5.1").revisions).default; - "tasty-th".revision = (((hackage."tasty-th")."0.1.7").revisions).default; - "text-short".revision = (((hackage."text-short")."0.1.2").revisions).default; - "text-short".flags.asserts = false; - "microstache".revision = (((hackage."microstache")."1.0.1.1").revisions).default; - "base-compat-batteries".revision = (((hackage."base-compat-batteries")."0.10.5").revisions).default; "hourglass".revision = (((hackage."hourglass")."0.2.12").revisions).default; - "case-insensitive".revision = (((hackage."case-insensitive")."1.2.0.11").revisions).default; - "extensible-exceptions".revision = (((hackage."extensible-exceptions")."0.1.1.4").revisions).default; + "case-insensitive".revision = (((hackage."case-insensitive")."1.2.1.0").revisions).default; "unix".revision = (((hackage."unix")."2.7.2.2").revisions).default; - "tasty-quickcheck".revision = (((hackage."tasty-quickcheck")."0.10").revisions).default; "mtl".revision = (((hackage."mtl")."2.2.2").revisions).default; - "lifted-async".revision = (((hackage."lifted-async")."0.10.0.3").revisions).default; "network-uri".revision = (((hackage."network-uri")."2.6.1.0").revisions).default; - "asn1-parse".revision = (((hackage."asn1-parse")."0.9.4").revisions).default; + "asn1-parse".revision = (((hackage."asn1-parse")."0.9.5").revisions).default; "regex-base".revision = (((hackage."regex-base")."0.93.2").revisions).default; "regex-base".flags.splitbase = true; "regex-base".flags.newbase = true; - "zlib".revision = (((hackage."zlib")."0.6.2").revisions).default; + "zlib".revision = (((hackage."zlib")."0.6.2.1").revisions).default; "zlib".flags.non-blocking-ffi = false; "zlib".flags.pkg-config = false; "rts".revision = (((hackage."rts")."1.0").revisions).default; - "mmorph".revision = (((hackage."mmorph")."1.1.3").revisions).default; - "js-flot".revision = (((hackage."js-flot")."0.8.3").revisions).default; - "statistics".revision = (((hackage."statistics")."0.15.0.0").revisions).default; - "th-expand-syns".revision = (((hackage."th-expand-syns")."0.4.4.0").revisions).default; - "regex-posix".revision = (((hackage."regex-posix")."0.95.2").revisions).default; - "regex-posix".flags.splitbase = true; - "regex-posix".flags.newbase = true; - "cryptonite".revision = (((hackage."cryptonite")."0.25").revisions).default; + "cmdargs".revision = (((hackage."cmdargs")."0.10.20").revisions).default; + "cmdargs".flags.testprog = false; + "cmdargs".flags.quotation = true; + "th-expand-syns".revision = (((hackage."th-expand-syns")."0.4.5.0").revisions).default; + "cryptonite".revision = (((hackage."cryptonite")."0.26").revisions).default; "cryptonite".flags.support_sse = false; "cryptonite".flags.integer-gmp = true; "cryptonite".flags.support_rdrand = true; @@ -88,47 +74,44 @@ "cryptonite".flags.support_pclmuldq = false; "cryptonite".flags.check_alignment = false; "cryptonite".flags.old_toolchain_inliner = false; - "microlens-aeson".revision = (((hackage."microlens-aeson")."2.3.0.1").revisions).default; + "microlens-aeson".revision = (((hackage."microlens-aeson")."2.3.0.4").revisions).default; "clock".revision = (((hackage."clock")."0.8").revisions).default; "clock".flags.llvm = false; "adjunctions".revision = (((hackage."adjunctions")."4.4").revisions).default; "cryptohash-md5".revision = (((hackage."cryptohash-md5")."0.11.100.1").revisions).default; - "invariant".revision = (((hackage."invariant")."0.5.2").revisions).default; - "th-orphans".revision = (((hackage."th-orphans")."0.13.7").revisions).default; + "invariant".revision = (((hackage."invariant")."0.5.3").revisions).default; + "th-orphans".revision = (((hackage."th-orphans")."0.13.9").revisions).default; "pem".revision = (((hackage."pem")."0.2.4").revisions).default; - "megaparsec".revision = (((hackage."megaparsec")."7.0.4").revisions).default; + "megaparsec".revision = (((hackage."megaparsec")."7.0.5").revisions).default; "megaparsec".flags.dev = false; - "syb".revision = (((hackage."syb")."0.7").revisions).default; - "distributive".revision = (((hackage."distributive")."0.6").revisions).default; + "syb".revision = (((hackage."syb")."0.7.1").revisions).default; + "distributive".revision = (((hackage."distributive")."0.6.1").revisions).default; "distributive".flags.semigroups = true; "distributive".flags.tagged = true; - "asn1-encoding".revision = (((hackage."asn1-encoding")."0.9.5").revisions).default; - "vector-th-unbox".revision = (((hackage."vector-th-unbox")."0.2.1.6").revisions).default; - "QuickCheck".revision = (((hackage."QuickCheck")."2.13.1").revisions).default; + "asn1-encoding".revision = (((hackage."asn1-encoding")."0.9.6").revisions).default; + "QuickCheck".revision = (((hackage."QuickCheck")."2.12.6.1").revisions).default; "QuickCheck".flags.templatehaskell = true; "scientific".revision = (((hackage."scientific")."0.3.6.2").revisions).default; "scientific".flags.integer-simple = false; "scientific".flags.bytestring-builder = false; - "tasty".revision = (((hackage."tasty")."1.2.1").revisions).default; - "tasty".flags.clock = true; - "hspec-discover".revision = (((hackage."hspec-discover")."2.7.1").revisions).default; "monadlist".revision = (((hackage."monadlist")."0.0.2").revisions).default; "half".revision = (((hackage."half")."0.3").revisions).default; "parallel".revision = (((hackage."parallel")."3.2.2.0").revisions).default; "deepseq".revision = (((hackage."deepseq")."1.4.3.0").revisions).default; + "hnix-store-core".revision = (((hackage."hnix-store-core")."0.1.0.0").revisions).default; + "hnix-store-core".flags.bounded_memory = false; + "haskell-src-meta".revision = (((hackage."haskell-src-meta")."0.8.5").revisions).default; "random".revision = (((hackage."random")."1.1").revisions).default; "uuid-types".revision = (((hackage."uuid-types")."1.0.3").revisions).default; "optparse-applicative".revision = (((hackage."optparse-applicative")."0.14.3.0").revisions).default; - "network".revision = (((hackage."network")."3.1.0.0").revisions).default; - "connection".revision = (((hackage."connection")."0.3.0").revisions).default; - "splitmix".revision = (((hackage."splitmix")."0.0.2").revisions).default; - "async".revision = (((hackage."async")."2.2.1").revisions).default; + "network".revision = (((hackage."network")."3.1.1.1").revisions).default; + "connection".revision = (((hackage."connection")."0.3.1").revisions).default; + "async".revision = (((hackage."async")."2.2.2").revisions).default; "async".flags.bench = false; - "dlist".revision = (((hackage."dlist")."0.8.0.6").revisions).default; - "conduit".revision = (((hackage."conduit")."1.3.1.1").revisions).default; - "ref-tf".revision = (((hackage."ref-tf")."0.4.0.1").revisions).default; + "dlist".revision = (((hackage."dlist")."0.8.0.7").revisions).default; + "conduit".revision = (((hackage."conduit")."1.3.1.2").revisions).default; + "ref-tf".revision = (((hackage."ref-tf")."0.4.0.2").revisions).default; "x509-store".revision = (((hackage."x509-store")."1.6.7").revisions).default; - "constraints".revision = (((hackage."constraints")."0.10.1").revisions).default; "lens-family-th".revision = (((hackage."lens-family-th")."0.5.0.2").revisions).default; "semigroups".revision = (((hackage."semigroups")."0.18.5").revisions).default; "semigroups".flags.bytestring = true; @@ -141,19 +124,17 @@ "semigroups".flags.transformers = true; "semigroups".flags.deepseq = true; "semigroups".flags.bytestring-builder = false; - "HUnit".revision = (((hackage."HUnit")."1.6.0.0").revisions).default; "vector-instances".revision = (((hackage."vector-instances")."3.4").revisions).default; "vector-instances".flags.hashable = true; - "lifted-base".revision = (((hackage."lifted-base")."0.2.3.12").revisions).default; "parsec".revision = (((hackage."parsec")."3.1.13.0").revisions).default; "th-reify-many".revision = (((hackage."th-reify-many")."0.1.9").revisions).default; - "hsc2hs".revision = (((hackage."hsc2hs")."0.68.3").revisions).default; + "hsc2hs".revision = (((hackage."hsc2hs")."0.68.6").revisions).default; "hsc2hs".flags.in-ghc-tree = false; "directory".revision = (((hackage."directory")."1.3.1.5").revisions).default; - "yaml".revision = (((hackage."yaml")."0.11.0.0").revisions).default; + "yaml".revision = (((hackage."yaml")."0.11.2.0").revisions).default; "yaml".flags.no-exe = true; "yaml".flags.no-examples = true; - "transformers-compat".revision = (((hackage."transformers-compat")."0.6.4").revisions).default; + "transformers-compat".revision = (((hackage."transformers-compat")."0.6.5").revisions).default; "transformers-compat".flags.five = false; "transformers-compat".flags.generic-deriving = true; "transformers-compat".flags.two = false; @@ -161,38 +142,31 @@ "transformers-compat".flags.mtl = true; "transformers-compat".flags.four = false; "transformers-compat".flags.three = false; - "hpack".revision = (((hackage."hpack")."0.31.2").revisions).default; + "hpack".revision = (((hackage."hpack")."0.33.0").revisions).default; "template-haskell".revision = (((hackage."template-haskell")."2.13.0.0").revisions).default; - "mono-traversable".revision = (((hackage."mono-traversable")."1.0.11.0").revisions).default; + "mono-traversable".revision = (((hackage."mono-traversable")."1.0.15.1").revisions).default; "vector".revision = (((hackage."vector")."0.12.0.3").revisions).default; "vector".flags.unsafechecks = false; "vector".flags.internalchecks = false; "vector".flags.wall = false; "vector".flags.boundschecks = true; - "call-stack".revision = (((hackage."call-stack")."0.1.0").revisions).default; - "primitive".revision = (((hackage."primitive")."0.6.4.0").revisions).default; - "profunctors".revision = (((hackage."profunctors")."5.3").revisions).default; - "time-locale-compat".revision = (((hackage."time-locale-compat")."0.1.1.5").revisions).default; - "time-locale-compat".flags.old-locale = false; - "safe".revision = (((hackage."safe")."0.3.17").revisions).default; + "call-stack".revision = (((hackage."call-stack")."0.2.0").revisions).default; + "primitive".revision = (((hackage."primitive")."0.7.0.0").revisions).default; + "profunctors".revision = (((hackage."profunctors")."5.5.1").revisions).default; + "safe".revision = (((hackage."safe")."0.3.18").revisions).default; "blaze-builder".revision = (((hackage."blaze-builder")."0.4.1.0").revisions).default; "base-compat".revision = (((hackage."base-compat")."0.10.5").revisions).default; - "js-jquery".revision = (((hackage."js-jquery")."3.3.1").revisions).default; - "terminal-size".revision = (((hackage."terminal-size")."0.3.2.1").revisions).default; - "math-functions".revision = (((hackage."math-functions")."0.3.1.0").revisions).default; - "math-functions".flags.system-expm1 = false; + "time-compat".revision = (((hackage."time-compat")."1.9.2.2").revisions).default; + "time-compat".flags.old-locale = false; "x509-system".revision = (((hackage."x509-system")."1.6.6").revisions).default; - "keys".revision = (((hackage."keys")."3.12.1").revisions).default; - "ansi-terminal".revision = (((hackage."ansi-terminal")."0.9").revisions).default; + "keys".revision = (((hackage."keys")."3.12.2").revisions).default; + "ansi-terminal".revision = (((hackage."ansi-terminal")."0.10.2").revisions).default; "ansi-terminal".flags.example = false; - "vector-binary-instances".revision = (((hackage."vector-binary-instances")."0.2.5.1").revisions).default; "tagged".revision = (((hackage."tagged")."0.8.6").revisions).default; "tagged".flags.transformers = true; "tagged".flags.deepseq = true; "x509".revision = (((hackage."x509")."1.7.5").revisions).default; - "cassava".revision = (((hackage."cassava")."0.5.1.0").revisions).default; - "cassava".flags.bytestring--lt-0_10_4 = false; - "haskell-src-exts".revision = (((hackage."haskell-src-exts")."1.20.3").revisions).default; + "haskell-src-exts".revision = (((hackage."haskell-src-exts")."1.23.0").revisions).default; "lens".revision = (((hackage."lens")."4.17.1").revisions).default; "lens".flags.j = false; "lens".flags.test-properties = true; @@ -207,46 +181,34 @@ "lens".flags.safe = false; "unliftio-core".revision = (((hackage."unliftio-core")."0.1.2.0").revisions).default; "containers".revision = (((hackage."containers")."0.5.11.0").revisions).default; - "wl-pprint-annotated".revision = (((hackage."wl-pprint-annotated")."0.1.0.1").revisions).default; "integer-logarithms".revision = (((hackage."integer-logarithms")."1.0.3").revisions).default; "integer-logarithms".flags.check-bounds = false; "integer-logarithms".flags.integer-gmp = true; - "reflection".revision = (((hackage."reflection")."2.1.4").revisions).default; + "reflection".revision = (((hackage."reflection")."2.1.5").revisions).default; "reflection".flags.slow = false; "reflection".flags.template-haskell = true; - "these".revision = (((hackage."these")."0.8").revisions).default; + "these".revision = (((hackage."these")."0.7.6").revisions).default; "regex-tdfa-text".revision = (((hackage."regex-tdfa-text")."1.0.0.3").revisions).default; - "dependent-sum".revision = (((hackage."dependent-sum")."0.5").revisions).default; - "socks".revision = (((hackage."socks")."0.6.0").revisions).default; - "streaming-commons".revision = (((hackage."streaming-commons")."0.2.1.0").revisions).default; + "dependent-sum".revision = (((hackage."dependent-sum")."0.4").revisions).default; + "socks".revision = (((hackage."socks")."0.6.1").revisions).default; + "streaming-commons".revision = (((hackage."streaming-commons")."0.2.1.2").revisions).default; "streaming-commons".flags.use-bytestring-builder = false; "haskell-lexer".revision = (((hackage."haskell-lexer")."1.0.2").revisions).default; - "monad-par".revision = (((hackage."monad-par")."0.3.4.8").revisions).default; - "monad-par".flags.newgeneric = false; - "monad-par".flags.chaselev = false; - "lens-family".revision = (((hackage."lens-family")."1.2.3").revisions).default; + "lens-family".revision = (((hackage."lens-family")."2.0.0").revisions).default; "bytestring".revision = (((hackage."bytestring")."0.10.8.2").revisions).default; - "ansi-wl-pprint".revision = (((hackage."ansi-wl-pprint")."0.6.8.2").revisions).default; + "ansi-wl-pprint".revision = (((hackage."ansi-wl-pprint")."0.6.9").revisions).default; "ansi-wl-pprint".flags.example = false; - "mwc-random".revision = (((hackage."mwc-random")."0.14.0.0").revisions).default; - "basement".revision = (((hackage."basement")."0.0.10").revisions).default; - "test-framework".revision = (((hackage."test-framework")."0.8.2.0").revisions).default; + "basement".revision = (((hackage."basement")."0.0.11").revisions).default; "cryptohash-sha1".revision = (((hackage."cryptohash-sha1")."0.11.100.1").revisions).default; - "serialise".revision = (((hackage."serialise")."0.2.1.0").revisions).default; + "serialise".revision = (((hackage."serialise")."0.2.2.0").revisions).default; "serialise".flags.newtime15 = true; - "hostname".revision = (((hackage."hostname")."1.0").revisions).default; - "old-locale".revision = (((hackage."old-locale")."1.0.0.7").revisions).default; - "wcwidth".revision = (((hackage."wcwidth")."0.0.2").revisions).default; - "wcwidth".flags.split-base = true; - "wcwidth".flags.cli = false; - "StateVar".revision = (((hackage."StateVar")."1.1.1.1").revisions).default; + "StateVar".revision = (((hackage."StateVar")."1.2").revisions).default; "mime-types".revision = (((hackage."mime-types")."0.1.0.9").revisions).default; "http-client-tls".revision = (((hackage."http-client-tls")."0.3.5.3").revisions).default; - "contravariant".revision = (((hackage."contravariant")."1.5").revisions).default; + "contravariant".revision = (((hackage."contravariant")."1.5.2").revisions).default; "contravariant".flags.semigroups = true; "contravariant".flags.tagged = true; "contravariant".flags.statevar = true; - "contravariant".flags.safe = false; "pointed".revision = (((hackage."pointed")."5.0.1").revisions).default; "pointed".flags.semigroupoids = true; "pointed".flags.stm = true; @@ -257,43 +219,38 @@ "pointed".flags.tagged = true; "pointed".flags.containers = true; "pointed".flags.transformers = true; - "parser-combinators".revision = (((hackage."parser-combinators")."1.0.2").revisions).default; + "parser-combinators".revision = (((hackage."parser-combinators")."1.0.3").revisions).default; "parser-combinators".flags.dev = false; - "deriving-compat".revision = (((hackage."deriving-compat")."0.5.5").revisions).default; + "deriving-compat".revision = (((hackage."deriving-compat")."0.5.8").revisions).default; "deriving-compat".flags.base-4-9 = true; "deriving-compat".flags.template-haskell-2-11 = true; "deriving-compat".flags.new-functor-classes = true; "text".revision = (((hackage."text")."1.2.3.1").revisions).default; "Cabal".revision = (((hackage."Cabal")."2.4.1.0").revisions).default; "Cabal".flags.bundled-binary-generic = false; - "assoc".revision = (((hackage."assoc")."1").revisions).default; - "Diff".revision = (((hackage."Diff")."0.3.4").revisions).default; "unordered-containers".revision = (((hackage."unordered-containers")."0.2.10.0").revisions).default; "unordered-containers".flags.debug = false; + "aeson-pretty".revision = (((hackage."aeson-pretty")."0.8.8").revisions).default; + "aeson-pretty".flags.lib-only = false; "base".revision = (((hackage."base")."4.11.1.0").revisions).default; - "abstract-deque".revision = (((hackage."abstract-deque")."0.3").revisions).default; - "abstract-deque".flags.usecas = false; - "tasty-hedgehog".revision = (((hackage."tasty-hedgehog")."0.2.0.0").revisions).default; - "comonad".revision = (((hackage."comonad")."5.0.4").revisions).default; + "comonad".revision = (((hackage."comonad")."5.0.6").revisions).default; "comonad".flags.distributive = true; "comonad".flags.test-doctests = true; "comonad".flags.containers = true; - "comonad".flags.contravariant = true; "time".revision = (((hackage."time")."1.8.0.2").revisions).default; "data-default-class".revision = (((hackage."data-default-class")."0.1.2.0").revisions).default; "terminfo".revision = (((hackage."terminfo")."0.4.1.1").revisions).default; "base16-bytestring".revision = (((hackage."base16-bytestring")."0.1.1.6").revisions).default; - "vector-algorithms".revision = (((hackage."vector-algorithms")."0.8.0.1").revisions).default; + "vector-algorithms".revision = (((hackage."vector-algorithms")."0.8.0.3").revisions).default; "vector-algorithms".flags.unsafechecks = false; "vector-algorithms".flags.internalchecks = false; "vector-algorithms".flags.llvm = false; "vector-algorithms".flags.boundschecks = true; "vector-algorithms".flags.bench = true; "vector-algorithms".flags.properties = true; - "prettyprinter".revision = (((hackage."prettyprinter")."1.2.1").revisions).default; + "prettyprinter".revision = (((hackage."prettyprinter")."1.2.1.1").revisions).default; "prettyprinter".flags.buildreadme = false; "cryptohash-sha512".revision = (((hackage."cryptohash-sha512")."0.11.100.1").revisions).default; - "tasty-hunit".revision = (((hackage."tasty-hunit")."0.10.0.1").revisions).default; "pretty-show".revision = (((hackage."pretty-show")."1.8.2").revisions).default; "transformers".revision = (((hackage."transformers")."0.5.5.0").revisions).default; "hashable".revision = (((hackage."hashable")."1.2.7.0").revisions).default; @@ -301,62 +258,56 @@ "hashable".flags.integer-gmp = true; "hashable".flags.sse41 = false; "hashable".flags.examples = false; - "attoparsec".revision = (((hackage."attoparsec")."0.13.2.2").revisions).default; + "attoparsec".revision = (((hackage."attoparsec")."0.13.2.3").revisions).default; "attoparsec".flags.developer = false; "infer-license".revision = (((hackage."infer-license")."0.2.0").revisions).default; - "colour".revision = (((hackage."colour")."2.3.4").revisions).default; + "colour".revision = (((hackage."colour")."2.3.5").revisions).default; "transformers-base".revision = (((hackage."transformers-base")."0.4.5.2").revisions).default; "transformers-base".flags.orphaninstances = true; "happy".revision = (((hackage."happy")."1.19.9").revisions).default; "happy".flags.small_base = true; - "criterion".revision = (((hackage."criterion")."1.5.4.0").revisions).default; - "criterion".flags.embed-data-files = false; - "criterion".flags.fast = false; - "monad-par-extras".revision = (((hackage."monad-par-extras")."0.3.3").revisions).default; "filepath".revision = (((hackage."filepath")."1.4.2").revisions).default; - "code-page".revision = (((hackage."code-page")."0.2").revisions).default; - "asn1-types".revision = (((hackage."asn1-types")."0.3.2").revisions).default; - "unbounded-delays".revision = (((hackage."unbounded-delays")."0.1.1.0").revisions).default; - "hedgehog".revision = (((hackage."hedgehog")."0.6.1").revisions).default; - "cborg".revision = (((hackage."cborg")."0.2.1.0").revisions).default; + "asn1-types".revision = (((hackage."asn1-types")."0.3.3").revisions).default; + "cborg".revision = (((hackage."cborg")."0.2.2.1").revisions).default; "cborg".flags.optimize-gmp = true; "monad-control".revision = (((hackage."monad-control")."1.0.2.3").revisions).default; "process".revision = (((hackage."process")."1.6.3.0").revisions).default; - "tls".revision = (((hackage."tls")."1.4.1").revisions).default; + "tls".revision = (((hackage."tls")."1.5.3").revisions).default; "tls".flags.compat = true; "tls".flags.network = true; "tls".flags.hans = false; "kan-extensions".revision = (((hackage."kan-extensions")."5.2").revisions).default; - "th-lift".revision = (((hackage."th-lift")."0.8").revisions).default; - "libyaml".revision = (((hackage."libyaml")."0.1.1.0").revisions).default; + "th-lift".revision = (((hackage."th-lift")."0.8.1").revisions).default; + "libyaml".revision = (((hackage."libyaml")."0.1.1.1").revisions).default; "libyaml".flags.system-libyaml = false; "libyaml".flags.no-unicode = false; "resourcet".revision = (((hackage."resourcet")."1.2.2").revisions).default; "pretty".revision = (((hackage."pretty")."1.1.3.6").revisions).default; - "cabal-doctest".revision = (((hackage."cabal-doctest")."1.0.6").revisions).default; + "cabal-doctest".revision = (((hackage."cabal-doctest")."1.0.8").revisions).default; "Glob".revision = (((hackage."Glob")."0.10.0").revisions).default; - "microlens".revision = (((hackage."microlens")."0.4.10").revisions).default; - "aeson".revision = (((hackage."aeson")."1.4.3.0").revisions).default; + "microlens".revision = (((hackage."microlens")."0.4.11.2").revisions).default; + "aeson".revision = (((hackage."aeson")."1.4.6.0").revisions).default; "aeson".flags.cffi = false; "aeson".flags.fast = false; "aeson".flags.bytestring-builder = false; "aeson".flags.developer = false; - "abstract-par".revision = (((hackage."abstract-par")."0.3.3").revisions).default; "http-types".revision = (((hackage."http-types")."0.12.3").revisions).default; "ghc-boot-th".revision = (((hackage."ghc-boot-th")."8.4.4").revisions).default; - "th-lift-instances".revision = (((hackage."th-lift-instances")."0.1.13").revisions).default; + "th-lift-instances".revision = (((hackage."th-lift-instances")."0.1.14").revisions).default; "base-orphans".revision = (((hackage."base-orphans")."0.8.1").revisions).default; + "hackage-db".revision = (((hackage."hackage-db")."2.0.1").revisions).default; + "hackage-db".flags.install-examples = false; "th-abstraction".revision = (((hackage."th-abstraction")."0.3.1.0").revisions).default; - "memory".revision = (((hackage."memory")."0.14.18").revisions).default; + "memory".revision = (((hackage."memory")."0.15.0").revisions).default; "memory".flags.support_bytestring = true; "memory".flags.support_basement = true; "memory".flags.support_foundation = true; "memory".flags.support_deepseq = true; - "concurrent-output".revision = (((hackage."concurrent-output")."1.10.9").revisions).default; "array".revision = (((hackage."array")."0.5.2.0").revisions).default; - "repline".revision = (((hackage."repline")."0.2.0.0").revisions).default; + "repline".revision = (((hackage."repline")."0.2.2.0").revisions).default; "xml".revision = (((hackage."xml")."1.3.14").revisions).default; - "lens-family-core".revision = (((hackage."lens-family-core")."1.2.3").revisions).default; + "erf".revision = (((hackage."erf")."2.0.0.0").revisions).default; + "lens-family-core".revision = (((hackage."lens-family-core")."2.0.0").revisions).default; "integer-gmp".revision = (((hackage."integer-gmp")."1.0.2.0").revisions).default; }; compiler = { @@ -391,12 +342,9 @@ }; }; extras = hackage: - { - packages = { - nix-tools = ./.plan.nix/nix-tools.nix; - hackage-db = ./.plan.nix/hackage-db.nix; - hnix = ./.plan.nix/hnix.nix; - haskell-src-meta = ./.plan.nix/haskell-src-meta.nix; - }; - }; + { packages = { nix-tools = ./.plan.nix/nix-tools.nix; }; }; + modules = [ + ({ lib, ... }: + { packages = { "nix-tools" = { flags = {}; }; }; }) + ]; } \ No newline at end of file From f2a9f5fabe5a3e9a7d524a30f3a97d93e570fb0e Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 14 Jan 2020 02:36:47 +1300 Subject: [PATCH 14/15] Update nix-tools/pkgs-8.4.4.nix --- nix-tools/default.nix | 12 +++++++----- nix-tools/pkgs-8.4.4.nix | 9 ++++++--- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/nix-tools/default.nix b/nix-tools/default.nix index ce22d533d2..8aeed7eddc 100644 --- a/nix-tools/default.nix +++ b/nix-tools/default.nix @@ -37,11 +37,13 @@ let packages.nix-tools.src = src; } - ({ config, ...}: { - packages = { - Cabal.patches = [ cabalPatch ]; - }; - }) + { + packages.Cabal.patches = [ cabalPatch ]; + } + + { + reinstallableLibGhc = true; + } ] ++ pkgs.lib.optional (args ? ghc) { ghc.package = args.ghc; }; }; diff --git a/nix-tools/pkgs-8.4.4.nix b/nix-tools/pkgs-8.4.4.nix index a2874b797c..14222ca3ea 100644 --- a/nix-tools/pkgs-8.4.4.nix +++ b/nix-tools/pkgs-8.4.4.nix @@ -295,8 +295,6 @@ "ghc-boot-th".revision = (((hackage."ghc-boot-th")."8.4.4").revisions).default; "th-lift-instances".revision = (((hackage."th-lift-instances")."0.1.14").revisions).default; "base-orphans".revision = (((hackage."base-orphans")."0.8.1").revisions).default; - "hackage-db".revision = (((hackage."hackage-db")."2.0.1").revisions).default; - "hackage-db".flags.install-examples = false; "th-abstraction".revision = (((hackage."th-abstraction")."0.3.1.0").revisions).default; "memory".revision = (((hackage."memory")."0.15.0").revisions).default; "memory".flags.support_bytestring = true; @@ -342,7 +340,12 @@ }; }; extras = hackage: - { packages = { nix-tools = ./.plan.nix/nix-tools.nix; }; }; + { + packages = { + nix-tools = ./.plan.nix/nix-tools.nix; + hackage-db = ./.plan.nix/hackage-db.nix; + }; + }; modules = [ ({ lib, ... }: { packages = { "nix-tools" = { flags = {}; }; }; }) From 3cea058a4f775c2e3607c71e9132a94eb06d806c Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 14 Jan 2020 11:11:31 +1300 Subject: [PATCH 15/15] Two new nix-tools exes added 25MB to closure size --- scripts/check-closure-size.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/check-closure-size.nix b/scripts/check-closure-size.nix index cfe8363490..bf87f2ccfa 100644 --- a/scripts/check-closure-size.nix +++ b/scripts/check-closure-size.nix @@ -1,6 +1,6 @@ { stdenv, writeScript, coreutils, gawk, nix , nix-tools -, limitMB ? 500 +, limitMB ? 525 }: with stdenv.lib;