Skip to content

Commit 82d4d20

Browse files
hamishmackangerman
andauthored
Add context back to repo url strings (#2261)
* Add context back to repo url strings This should fixes a source of errors that look like this: ``` curl: (37) Couldn't open file /nix/store/7g8b1vz8nlai5zkjzfps25jl7fvdjk3s-source/package/contra-tracer-0.1.0.2.tar.gz ``` Reproducing this issue turned out to be difficult because if the `sha256` is in the nix cache there is no error. To reproduce the issue: * Remove the `addContext` call. * Build a project with `repository` in `cabal.project` with an `inputMap`. * Force the `src` derivation to rebuild. We can force the src derivation to rebuild by giving it invalid `sha256` (ignore the hash mismatch errors, if it has a hash then the download worked): ``` # sha256 = p.pkg-src-sha256; sha256 = __substring 0 (__stringLength p.pkg-src-sha256 - 6) p.pkg-src-sha256 + "000000"; ``` * Update lib/load-cabal-plan.nix Co-authored-by: Moritz Angermann <[email protected]> * Bump test `repository` blocks --------- Co-authored-by: Moritz Angermann <[email protected]>
1 parent 4035dc4 commit 82d4d20

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

lib/load-cabal-plan.nix

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ let
55
plan-json = builtins.fromJSON (
66
builtins.unsafeDiscardStringContext (
77
builtins.readFile (callProjectResults.projectNix + "/plan.json")));
8+
# Function to add context back to the strings we get from `plan.json`
9+
addContext = s:
10+
let storeDirMatch = builtins.match ".*(${builtins.storeDir}/[^/]+).*" s;
11+
in if storeDirMatch == null
12+
then s
13+
else builtins.appendContext s { ${builtins.head storeDirMatch} = { path = true; }; };
814
# All the units in the plan indexed by unit ID.
915
by-id = pkgs.lib.listToAttrs (map (x: { name = x.id; value = x; }) plan-json.install-plan);
1016
# Find the names of all the pre-existing packages used by a list of dependencies
@@ -104,7 +110,9 @@ in {
104110
+ pkgs.lib.optionalString (p.pkg-src.source-repo.subdir != ".") "/${p.pkg-src.source-repo.subdir}";
105111
} // pkgs.lib.optionalAttrs (p.pkg-src.type or "" == "repo-tar") {
106112
src = pkgs.lib.mkDefault (pkgs.fetchurl {
107-
url = p.pkg-src.repo.uri + "${pkgs.lib.optionalString (!pkgs.lib.hasSuffix "/" p.pkg-src.repo.uri) "/"}package/${p.pkg-name}-${p.pkg-version}.tar.gz";
113+
# repo.uri might look like file:/nix/store/xxx; using addContext, we let nix know about the dependency on
114+
# /nix/store/xxx. Otherwise we can run into the situation where nix won't be able to access the dependencies needed to build. (e.g. the /nix/store/xxx path).
115+
url = addContext p.pkg-src.repo.uri + "${pkgs.lib.optionalString (!pkgs.lib.hasSuffix "/" p.pkg-src.repo.uri) "/"}package/${p.pkg-name}-${p.pkg-version}.tar.gz";
108116
sha256 = p.pkg-src-sha256;
109117
});
110118
} // pkgs.lib.optionalAttrs (cabal2nix ? package-description-override && p.pkg-version == cabal2nix.package.identifier.version) {

test/cabal.project.local

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ repository head.hackage.ghc.haskell.org
2424
f76d08be13e9a61a377a85e2fb63f4c5435d40f8feb3e12eb05905edb8cdea89
2525
26021a13b401500c8eb2761ca95c61f2d625bfef951b939a8124ed12ecf07329
2626
7541f32a4ccca4f97aea3b22f5e593ba2c0267546016b992dfadcd2fe944e55d
27-
--sha256: sha256-VFRuIfs3k6nyLVvT445wFRDy+bpcy1LVmLCMg1Oo/uE=
27+
--sha256: sha256-Z6cqRAlbV1WNbK4fKdcWHQcLA8CGpzfnTOd8QxcOy+c=
2828

2929
repository ghcjs-overlay
30-
url: https://raw.githubusercontent.com/input-output-hk/hackage-overlay-ghcjs/01ecad22c0a72e3c5a49262357cf0b062892d87f
30+
url: https://raw.githubusercontent.com/input-output-hk/hackage-overlay-ghcjs/56cd424e8529e7a1fc29c6126abdc66f09467306
3131
secure: True
3232
root-keys:
3333
key-threshold: 0
34-
--sha256: sha256-BjyXYh6oS4wE1iHlY/7as7vkmjxFOXzK6nOYzbzjQrM=
34+
--sha256: sha256-nU0/HKy4Om1GohCcU+gUWCDPgyclYdFzAgzfXe0tgf0=
3535

3636
if os(ghcjs)
3737
extra-packages: ghci

0 commit comments

Comments
 (0)