1# Generate cache entries for dependencies of package defined in `src`
5, stackYaml ? "stack.yaml"
7 # An alternative to adding `# nix-sha256:` comments into the
10 # { "https://github.com/jgm/pandoc-citeproc"."0.17"
11 # = "0dxx8cp2xndpw3jwiawch2dkrkp15mil7pyx7dvd810pwc22pm2q"; };
13 # A way to specify in which branch a git commit can
17 then { location, tag, ...}: branchMap."${location}"."${tag}" or null
19, resolverSha256 ? null
20, nix-tools ? pkgs.haskell-nix.internal-nix-tools # When building stack projects we use the internal nix-tools (compiled with a fixed GHC version)
24 # We only care about the stackYaml file. If src is a local directory
25 # we want to avoid recalculating the cache unless the stack.yaml file
28 inherit (haskellLib.fetchResolver {
29 inherit src stackYaml resolverSha256;
30 }) resolver fetchedResolver;
32 # Filter just the stack yaml file and any resolver yaml file it points to.
34 if haskellLib.canCleanSource src
35 then haskellLib.cleanSourceWith {
39 origSrc = if src ? _isLibCleanSourceWith then src.origSrc else src;
40 origSubDir = if src ? _isLibCleanSourceWithEx then src.origSubDir else "";
41 relPath = pkgs.lib.removePrefix (toString origSrc + origSubDir + "/") path;
43 # checks if path1 is a parent directory for path2
44 isParent = path1: path2: pkgs.lib.hasPrefix "${path1}/" path2;
47 (relPath == stackYaml)
48 || (resolver != null && (relPath == resolver || isParent relPath resolver))
53 # All repos served via ssh or git protocols are usually private
54 private = url: pkgs.lib.substring 0 4 url != "http";
56 repos = builtins.fromJSON (builtins.readFile (pkgs.runCommand "stack-repos" {
57 buildInputs = [ nix-tools ];
61 cp -r "${maybeCleanedSource}/." $TMP
63 substituteInPlace ${stackYaml} --replace "# nix-sha256:" "nix-sha256:"
64 ${pkgs.lib.optionalString (fetchedResolver != null) ''
65 substituteInPlace ${stackYaml} --replace "${resolver}" "${fetchedResolver}"
67 stack-repos --stack-yaml ${stackYaml}
71 cabalName = path: builtins.readFile (pkgs.runCommand "cabal-name" {
72 buildInputs = [ nix-tools ];
74 cabal-name ${path} > $out
78 builtins.readFile (pkgs.runCommand "hash-path" { preferLocalBuild = true; }
79 "echo -n $(${pkgs.nix}/bin/nix-hash --type sha256 --base32 ${path}) > $out");
83 is-private = private dep.url;
85 if dep.sha256 != null then dep.sha256
86 else if sha256map != null then sha256map."${dep.url}"."${dep.rev}"
88 branch = lookupBranch {
93 if !is-private && sha256 != null
95 inherit (dep) url rev;
98 else builtins.fetchGit ({
99 inherit (dep) url rev;
100 } // pkgs.lib.optionalAttrs (branch != null) { ref = branch; });
102 name = cabalName "${pkgsrc}/${subdir}";
103 inherit (dep) url rev;
105 sha256 = if !is-private then hashPath pkgsrc else null;
106 } // (optionalAttrs (subdir != "") { inherit subdir; }))
107 (dep.subdirs or [ "" ])) repos
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list