Skip to content

Commit 61dea04

Browse files
authored
Nixify hackage-to-nix output (#1574)
We have been using `readFile` and `fromJSON` to read a `.json` a 60MB .json file. This change puts the information contained in the json file into `.nix` files that are imported when needed (rather than all at once). This seems to save around 1s at eval time. Tested with: ``` time nix-instantiate -E '(import ./. {}).pkgs-unstable.haskell-nix.tool "ghc8107" "hello" {}' time nix-instantiate -E '(import ./. {}).pkgs-unstable.haskell-nix.tool "ghc8107" "haskell-language-server" {}' ``` See also input-output-hk/nix-tools#118
1 parent 88f2c4a commit 61dea04

File tree

3 files changed

+122
-29
lines changed

3 files changed

+122
-29
lines changed

flake.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

modules/hackage.nix

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ let
66
# { "a.b.c.d" =
77
# rec { sha256 = $pkgVersionSha256;
88
# revisions =
9-
# { r0 = { outPath = ./hackage/...; revNum = 0; sha256 = $revisionSha256; };
9+
# { r0 = { nix = import ../hackage/...; revNum = 0; sha256 = $revisionSha256; };
1010
# default = revisions.r0; };
1111
# };
1212
# };
@@ -24,7 +24,7 @@ let
2424
# { "a.b.c.d" =
2525
# rec { sha256 = $packageVersionSha256;
2626
# revisions =
27-
# { r0 = { outPath = ./hackage/...;
27+
# { r0 = { nix = import ../hackage/...;
2828
# sha256 = $packageVersionSha256;
2929
# revision = $revNum;
3030
# revisionSha256 = $revisionSha256; };
@@ -45,7 +45,7 @@ let
4545
inherit (version) sha256;
4646
revision = rev.revNum;
4747
revisionSha256 = rev.sha256;
48-
} // import rev modArgs;
48+
} // (x: (rev.nix or (import rev)) x) modArgs;
4949
f = rev: acc: acc // {
5050
# If there's a collision (e.g. a revision was
5151
# reverted), pick the one with the smaller

test/unit.nix

Lines changed: 116 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,21 @@ lib.runTests {
118118
};
119119
};
120120

121-
testParseRepositoryBlock = {
122-
expr = __toJSON (haskellLib.parseRepositoryBlock evalPackages "cabal.project" {} {}
121+
testParseRepositoryBlock =
122+
let
123+
# The Cabal2Nix output in hackage-to-nix is imported into a lambda
124+
# and connot be easily compared.
125+
removeNix = x: x // {
126+
hackage =
127+
lib.mapAttrs (packageName: vers:
128+
lib.mapAttrs (ver: data: data // {
129+
revisions =
130+
lib.mapAttrs (rev: x: x // { nix = __typeOf x.nix; }) data.revisions;
131+
}) vers
132+
) x.hackage;
133+
};
134+
in rec {
135+
expr = __toJSON (removeNix (haskellLib.parseRepositoryBlock evalPackages "cabal.project" {} {}
123136
evalPackages.haskell-nix.cabal-install.${compiler-nix-name}
124137
evalPackages.haskell-nix.nix-tools.${compiler-nix-name} ''
125138
ghcjs-overlay
@@ -129,7 +142,7 @@ lib.runTests {
129142
key-threshold: 0
130143
--sha256: sha256-y1vQnXI1XzkjnC4h66tVDmu2TZjZPcMrZEnE3m0XOfg=
131144
-- end of block
132-
'');
145+
''));
133146
expected = __toJSON {
134147
name = "ghcjs-overlay";
135148
repoContents = "/nix/store/gzjj6rjjgvkm5midldy292ghbq7hszna-ghcjs-overlay";
@@ -140,87 +153,167 @@ lib.runTests {
140153
Cabal = {
141154
"3.2.1.0" = {
142155
revisions = {
143-
default = "/nix/store/3ndxx3k43gmjkfl1qn1x39g15hz5amad-Cabal-3.2.1.0-r0-2b5309e942658e3b16e6938115867538e70a647d98e3dc967f2be20d6b886e61.nix";
144-
r0 = "/nix/store/3ndxx3k43gmjkfl1qn1x39g15hz5amad-Cabal-3.2.1.0-r0-2b5309e942658e3b16e6938115867538e70a647d98e3dc967f2be20d6b886e61.nix";
156+
default = {
157+
nix = "lambda";
158+
revNum = 0;
159+
sha256 = "2b5309e942658e3b16e6938115867538e70a647d98e3dc967f2be20d6b886e61";
160+
};
161+
r0 = {
162+
nix = "lambda";
163+
revNum = 0;
164+
sha256 = "2b5309e942658e3b16e6938115867538e70a647d98e3dc967f2be20d6b886e61";
165+
};
145166
};
146167
sha256 = "826970f742b63d751f6fe3be7f862b7b1e419ddfafef3014c01de54f12874a4a";
147168
};
148169
};
149170
basement = {
150171
"0.0.12"= {
151172
revisions = {
152-
default = "/nix/store/3h1xwcij240kj243f23siw3p30hdbnrj-basement-0.0.12-r0-600669787199915545f99754496f13f955203b94dbb31de50093362c03367bb7.nix";
153-
r0 = "/nix/store/3h1xwcij240kj243f23siw3p30hdbnrj-basement-0.0.12-r0-600669787199915545f99754496f13f955203b94dbb31de50093362c03367bb7.nix";
173+
default = {
174+
nix = "lambda";
175+
revNum = 0;
176+
sha256 = "600669787199915545f99754496f13f955203b94dbb31de50093362c03367bb7";
177+
};
178+
r0 = {
179+
nix = "lambda";
180+
revNum = 0;
181+
sha256 = "600669787199915545f99754496f13f955203b94dbb31de50093362c03367bb7";
182+
};
154183
};
155184
sha256 = "cf8f96fd92438739a516881abb7e14747118e82a12634d44acc83173fb87f535";
156185
};
157186
};
158187
clock = {
159188
"0.8.2" = {
160189
revisions = {
161-
default = "/nix/store/mdsf1fgbpi4m1yvsg5z8z4hk5w7i63x7-clock-0.8.2-r0-2a8441d9f531bb51bb1806e56e9e9a43e5f0214faea4f31219c15120128ca43a.nix";
162-
r0 = "/nix/store/mdsf1fgbpi4m1yvsg5z8z4hk5w7i63x7-clock-0.8.2-r0-2a8441d9f531bb51bb1806e56e9e9a43e5f0214faea4f31219c15120128ca43a.nix";
190+
default = {
191+
nix = "lambda";
192+
revNum = 0;
193+
sha256 = "2a8441d9f531bb51bb1806e56e9e9a43e5f0214faea4f31219c15120128ca43a";
194+
};
195+
r0 = {
196+
nix = "lambda";
197+
revNum = 0;
198+
sha256 = "2a8441d9f531bb51bb1806e56e9e9a43e5f0214faea4f31219c15120128ca43a";
199+
};
163200
};
164201
sha256 = "57715a01df74568c638f1138b53642094de420bafd519e9f53ec7fe92876121e";
165202
};
166203
};
167204
cryptonite = {
168205
"0.29" = {
169206
revisions = {
170-
default = "/nix/store/i84rvw53j9b6p53dalg6xq85blrkrk01-cryptonite-0.29-r0-231db2acdaefc978865af9b72a6e65c4ebc70238174a7ad9076d68900f3d866d.nix";
171-
r0 = "/nix/store/i84rvw53j9b6p53dalg6xq85blrkrk01-cryptonite-0.29-r0-231db2acdaefc978865af9b72a6e65c4ebc70238174a7ad9076d68900f3d866d.nix";
207+
default = {
208+
nix = "lambda";
209+
revNum = 0;
210+
sha256 = "231db2acdaefc978865af9b72a6e65c4ebc70238174a7ad9076d68900f3d866d";
211+
};
212+
r0 = {
213+
nix = "lambda";
214+
revNum = 0;
215+
sha256 = "231db2acdaefc978865af9b72a6e65c4ebc70238174a7ad9076d68900f3d866d";
216+
};
172217
};
173218
sha256 = "f104836bdaeed5243ff7e9fc0757d7255778f0af22976eef2b7789e7e1094283";
174219
};
175220
};
176221
double-conversion = {
177222
"2.0.2.0" = {
178223
revisions = {
179-
default = "/nix/store/cb41xbmf6abcq30sj2a1b00qim8nyhqx-double-conversion-2.0.2.0-r0-698f94e66b6263a1049b56ede47aa48e224c764f345c3130265742513443595b.nix";
180-
r0 = "/nix/store/cb41xbmf6abcq30sj2a1b00qim8nyhqx-double-conversion-2.0.2.0-r0-698f94e66b6263a1049b56ede47aa48e224c764f345c3130265742513443595b.nix";
224+
default = {
225+
nix = "lambda";
226+
revNum = 0;
227+
sha256 = "698f94e66b6263a1049b56ede47aa48e224c764f345c3130265742513443595b";
228+
};
229+
r0 = {
230+
nix = "lambda";
231+
revNum = 0;
232+
sha256 = "698f94e66b6263a1049b56ede47aa48e224c764f345c3130265742513443595b";
233+
};
181234
};
182235
sha256 = "67c83bf4619624ef6b950578664cbcd3bc12eaed0d7a387997db5e0ba29fb140";
183236
};
184237
};
185238
foundation = {
186239
"0.0.26.1" = {
187240
revisions = {
188-
default = "/nix/store/5vw12rxa3as8b82kz1arddwzs45fzj6q-foundation-0.0.26.1-r0-9a2f63a33dc6b3c1425c4755522b8e619d04fdfcfef72e358155b965b28745a8.nix";
189-
r0 = "/nix/store/5vw12rxa3as8b82kz1arddwzs45fzj6q-foundation-0.0.26.1-r0-9a2f63a33dc6b3c1425c4755522b8e619d04fdfcfef72e358155b965b28745a8.nix";
241+
default = {
242+
nix = "lambda";
243+
revNum = 0;
244+
sha256 = "9a2f63a33dc6b3c1425c4755522b8e619d04fdfcfef72e358155b965b28745a8";
245+
};
246+
r0 = {
247+
nix = "lambda";
248+
revNum = 0;
249+
sha256 = "9a2f63a33dc6b3c1425c4755522b8e619d04fdfcfef72e358155b965b28745a8";
250+
};
190251
};
191252
sha256 = "3c588f6bcf875762ac18b03b17a7ee3c0c60c8e2c884c0192269b0a97e89d526";
192253
};
193254
};
194255
network = {
195256
"3.1.2.1" = {
196257
revisions = {
197-
default = "/nix/store/sfc02hqr02pa3rwhha1skvlkiwmgvsf7-network-3.1.2.1-r0-ed4b1bb733613df5a2ebecd5533d08f20bacb0dc59ed207fd4b4670fe718713f.nix";
198-
r0 = "/nix/store/sfc02hqr02pa3rwhha1skvlkiwmgvsf7-network-3.1.2.1-r0-ed4b1bb733613df5a2ebecd5533d08f20bacb0dc59ed207fd4b4670fe718713f.nix";
258+
default = {
259+
nix = "lambda";
260+
revNum = 0;
261+
sha256 = "ed4b1bb733613df5a2ebecd5533d08f20bacb0dc59ed207fd4b4670fe718713f";
262+
};
263+
r0 = {
264+
nix = "lambda";
265+
revNum = 0;
266+
sha256 = "ed4b1bb733613df5a2ebecd5533d08f20bacb0dc59ed207fd4b4670fe718713f";
267+
};
199268
};
200269
sha256 = "21869fd942cb9996ba26ba9418cdd44ac869f81caba08e5a2b2cdfe792ae4518";
201270
};
202271
"3.1.2.5" = {
203272
revisions = {
204-
default = "/nix/store/rrh5f3hb8g5bwgd6y7lwfky3nrgsg5b2-network-3.1.2.5-r0-433a5e076aaa8eb3e4158abae78fb409c6bd754e9af99bc2e87583d2bcd8404a.nix";
205-
r0 = "/nix/store/rrh5f3hb8g5bwgd6y7lwfky3nrgsg5b2-network-3.1.2.5-r0-433a5e076aaa8eb3e4158abae78fb409c6bd754e9af99bc2e87583d2bcd8404a.nix";
273+
default = {
274+
nix = "lambda";
275+
revNum = 0;
276+
sha256 = "433a5e076aaa8eb3e4158abae78fb409c6bd754e9af99bc2e87583d2bcd8404a";
277+
};
278+
r0 = {
279+
nix = "lambda";
280+
revNum = 0;
281+
sha256 = "433a5e076aaa8eb3e4158abae78fb409c6bd754e9af99bc2e87583d2bcd8404a";
282+
};
206283
};
207284
sha256 = "ee914e9b43bfb0f415777eb0473236803b14a35d48f6172079260c92c6ceb335";
208285
};
209286
};
210287
terminal-size = {
211288
"0.3.2.1" = {
212289
revisions = {
213-
default = "/nix/store/k9gk020ygp6j94sa3xv46fkgrc8jl5zn-terminal-size-0.3.2.1-r0-7b2d8e0475a46961d07ddfb91dee618de70eff55d9ba0402ebeac1f9dcf9b18b.nix";
214-
r0 = "/nix/store/k9gk020ygp6j94sa3xv46fkgrc8jl5zn-terminal-size-0.3.2.1-r0-7b2d8e0475a46961d07ddfb91dee618de70eff55d9ba0402ebeac1f9dcf9b18b.nix";
290+
default = {
291+
nix = "lambda";
292+
revNum = 0;
293+
sha256 = "7b2d8e0475a46961d07ddfb91dee618de70eff55d9ba0402ebeac1f9dcf9b18b";
294+
};
295+
r0 = {
296+
nix = "lambda";
297+
revNum = 0;
298+
sha256 = "7b2d8e0475a46961d07ddfb91dee618de70eff55d9ba0402ebeac1f9dcf9b18b";
299+
};
215300
};
216301
sha256 = "8e4fbfea182f3bf5769744196ca88bb2cb1c80caa617debe34336f90db27131e";
217302
};
218303
};
219304
unix-compat = {
220305
"0.5.3" = {
221306
revisions = {
222-
default = "/nix/store/mc1vh6wzg0vp1c1srxrqmpv9fsqay6dw-unix-compat-0.5.3-r0-9c6d68f9afb5baa6be55e8415dd401835ce0d4dfc2090f1c169fcd61c152ebac.nix";
223-
r0 = "/nix/store/mc1vh6wzg0vp1c1srxrqmpv9fsqay6dw-unix-compat-0.5.3-r0-9c6d68f9afb5baa6be55e8415dd401835ce0d4dfc2090f1c169fcd61c152ebac.nix";
307+
default = {
308+
nix = "lambda";
309+
revNum = 0;
310+
sha256 = "9c6d68f9afb5baa6be55e8415dd401835ce0d4dfc2090f1c169fcd61c152ebac";
311+
};
312+
r0 = {
313+
nix = "lambda";
314+
revNum = 0;
315+
sha256 = "9c6d68f9afb5baa6be55e8415dd401835ce0d4dfc2090f1c169fcd61c152ebac";
316+
};
224317
};
225318
sha256 = "2fe56781422d5caf47dcbbe82c998bd33f429f8c7093483fad36cd2d31dbdceb";
226319
};

0 commit comments

Comments
 (0)