about summary refs log tree commit diff
path: root/third_party/nix
AgeCommit message (Collapse)AuthorFilesLines
2020-07-18 r/1378 refactor(3p/nix/tests): Move DummyStore into a separate fileVincent Ambo2-33/+44
This store implementation is required in all unit tests that use the evaluator. Change-Id: I1cfe8cecab8722cd66dc803747821a2be2b2619f Reviewed-on: https://cl.tvl.fyi/c/depot/+/1269 Tested-by: BuildkiteCI Reviewed-by: glittershark <grfn@gws.fyi>
2020-07-18 r/1377 refactor(3p/nix/libexpr): Back Nix lists with std::vectorVincent Ambo16-231/+163
This change does away with the previous special-casing of lists of certain element sizes, and the use of raw C-style arrays. Lists are now backed by a std::vector of nix::Value*, which uses the traceable GC allocator. This change is unfortunately quite noisy because the accessor methods were updated/removed accordingly, so all callsites of Nix-related lists have changed. For some operations in primops.cc where keeping the previous code structure would have been more difficult with a "proper" vector, the implementation has been replaced with std::vector methods. For example, list concatenation now uses appropriate range inserts. Anecdotally the performance of this is about equal, to even slightly better, than the previous implementation. All language tests pass and the depot paths I've used for testing still evaluate. Change-Id: Ib5eca6c0207429cb323a330c838c3a2200b2c693 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1266 Tested-by: BuildkiteCI Reviewed-by: isomer <isomer@tvl.fyi> Reviewed-by: Kane York <rikingcoding@gmail.com> Reviewed-by: glittershark <grfn@gws.fyi>
2020-07-18 r/1376 refactor(3p/nix/libexpr): Store nix::Env values in a std::vectorVincent Ambo2-9/+11
This has several advantages: * we can ensure that the vector is traced by the GC * we don't need to unsafely allocate memory to make an Env Note that there was previously a check about the size of the environment, but it's unclear why this was the case (git history yielded nothing interesting) and it seems to have no effect. Change-Id: I4998b879a728a6fb68e1bd187c521e2304e5047e Reviewed-on: https://cl.tvl.fyi/c/depot/+/1265 Tested-by: BuildkiteCI Reviewed-by: isomer <isomer@tvl.fyi> Reviewed-by: Kane York <rikingcoding@gmail.com> Reviewed-by: glittershark <grfn@gws.fyi>
2020-07-18 r/1370 feat(3p/nix): Add NIX_DATA_DIR to shell hookGriffin Smith1-1/+8
all of the executables that get built during regular development depend on this being set to a directory that contains the nix directory - previously we had been doing it manually every time, this automates it. Change-Id: I4c957c0abf0a92ca7122a47d3b141a8ede280e13 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1258 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
2020-07-18 r/1369 test(3p/nix): Set up scaffolding & fix up tests for value-to-{json|xml}Vincent Ambo6-46/+97
Configures the CMake build to load & run the GoogleTest tests. I (grfn) also updated this to get the tests running as part of the nix derivation, which required defining our own manual configurePhase and installCheckPhase, rather than depending on the one provided by stdenv. Not doing this would cause cmake to attempt to *run* the tests as part of the buildPhase, which wouldn't work because the dynamic libraries hadn't been put into a place where the test executables knew where to find them. We're not sure *why* this fixes it, and for some reason fixing this also breaks the automatic behavior of nixpkgs of passing -j$NIX_BUILD_CORES -l$NIX_BUILD_CORES to make, but that's eaasy enough to fix manually in a preBuild Paired-With: Griffin Smith <grfn@gws.fyi> Change-Id: I79d61854a3ff47301cdce8a40c76820a97bdf901 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1240 Tested-by: BuildkiteCI Reviewed-by: glittershark <grfn@gws.fyi>
2020-07-18 r/1368 test(3p/nix/libexpr): add json/xml testsAndreas Rammhold1-0/+287
Backported from: https://github.com/andir/nix/commit/c1371b6fbb91caf53ebc94d3ae0250dbe7eb7eae Change-Id: Ida326cf1567081a56d747c4a72f036f55cfdea37 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1239 Tested-by: BuildkiteCI Reviewed-by: Kane York <rikingcoding@gmail.com>
2020-07-17 r/1361 feat(3p/nix/nix-daemon): Implement Worker::VerifyStore handlerGriffin Smith2-2/+14
Also adds the missing check_contents field to the VerifyStoreRequest proto message, since it was missed in the original pass. This is done using a renumbering, which is fine in this case since the proto hasn't been deployed yet Change-Id: I92bf4e48a71a25ae02ae02b3deaf6e7c71fe5da7 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1237 Tested-by: BuildkiteCI Reviewed-by: isomer <isomer@tvl.fyi> Reviewed-by: Kane York <rikingcoding@gmail.com>
2020-07-17 r/1360 feat(3p/nix/nix-daemon): Implement Worker::OptimiseStore handlerGriffin Smith1-0/+9
Change-Id: I8b1d84799a608a516d0b4980022a7edd545a1ca1 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1235 Tested-by: BuildkiteCI Reviewed-by: Kane York <rikingcoding@gmail.com>
2020-07-17 r/1359 feat(3p/nix/nix-daemon): Implement Worker::QuerySubstitutablePaths handlerGriffin Smith1-0/+17
Change-Id: I243d67b0bce29d54c7d6e08f5eee70bd395cf9a2 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1234 Tested-by: BuildkiteCI Reviewed-by: Kane York <rikingcoding@gmail.com>
2020-07-17 r/1358 feat(3p/nix/nix-daemon): Implement Worker::QueryValidPaths handlerGriffin Smith1-0/+17
Change-Id: I221dcd2a3fa53ead3ea9ac47830d968bb587c6e5 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1233 Tested-by: BuildkiteCI Reviewed-by: isomer <isomer@tvl.fyi>
2020-07-17 r/1357 feat(3p/nix/nix-daemon): Implement Worker::QueryPathFromHashPartGriffin Smith1-0/+9
Change-Id: Id351a0c82f4d6e79a8f272674d8d8e86e12a9400 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1232 Tested-by: BuildkiteCI Reviewed-by: isomer <isomer@tvl.fyi>
2020-07-17 r/1356 feat(3p/nix/nix-daemon): Implement Worker::QueryDerivationOutputNames handlerGriffin Smith1-0/+13
Change-Id: Ie17e37322dd0e241cd35b6d8e69bd6c968fd6ff2 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1231 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
2020-07-17 r/1355 feat(3p/nix/nix-daemon): Implement Worker::QueryPathInfo handlerGriffin Smith2-1/+41
Change-Id: I580bd29356f7bcd0cc2050afda11d2e115d44c94 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1230 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
2020-07-17 r/1354 feat(3p/nix): Add function to allocate a Value in traceable memoryEelco Dolstra5-10/+19
Backported from: https://github.com/NixOS/nix/commit/b3e5eea4a91400fb2a12aba4b07a94d03ba54605 https://github.com/NixOS/nix/commit/fcd048a526bd239fa615457e77d61d69d679bf03 Intentionally skipped because we have not backported the JSON changes: https://github.com/NixOS/nix/commit/9f46f54de4e55267df492456fc0393f74616366b Did not apply changes ni primops.cc, because those look suspect and are also based on something that we don't have in our tree. Change-Id: I837787ce9f2c90267bc39fce15177980d209d4e9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1253 Tested-by: BuildkiteCI Reviewed-by: isomer <isomer@tvl.fyi>
2020-07-17 r/1353 fix(3p/nix): ValueMap, VectorVector: Use traceable_allocatorEelco Dolstra1-2/+2
We want to *trace* the 'Value *' arrays, not garbage-collect them! Otherwise the vectors/maps can end up pointing to nowhere. Backported from: https://github.com/NixOS/nix/commit/10e17eaa5802a3c368eee8408821828072e76ba7 Change-Id: I30dc94caa80c9d982e7a14bc67ba2d065e8203aa Reviewed-on: https://cl.tvl.fyi/c/depot/+/1252 Tested-by: BuildkiteCI Reviewed-by: isomer <isomer@tvl.fyi>
2020-07-17 r/1352 fix(3p/nix): allocate the vSourceExpr via uncollectable memoryAndreas Rammhold2-5/+10
Previously the memory would occasionally be collected during eval since the GC doesn't consider the member variable as alive / doesn't scan the region of memory where the pointer lives. By using the traceable_allocator<T> allocator provided by Boehm GC we can ensure the memory isn't collected. It should be properly freed when SourceExprCommand goes out of scope. Backported from: https://github.com/NixOS/nix/commit/d2c371927e45c1d4e4f7e4ad331a3f68d67d5469 Change-Id: I1f7c745dbc66c7164bee50f4d9b0d437dbc7dd51 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1251 Tested-by: BuildkiteCI Reviewed-by: isomer <isomer@tvl.fyi>
2020-07-17 r/1350 chore(3p/nix/proto): Fix style violations in new proto defsKane York2-7/+7
This is a blocker to enabling the linter. Change-Id: I9f8d3cc19c7539086f53474a505362230fc56c04 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1245 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
2020-07-17 r/1346 chore(3p/nix): Remove builtins.execVincent Ambo2-45/+0
This is a bad idea, it shouldn't exist, nixpkgs doesn't use it. Change-Id: Ic4d1b936d8f059d5c40f0567af165b02427d7e36 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1241 Tested-by: BuildkiteCI Reviewed-by: glittershark <grfn@gws.fyi>
2020-07-17 r/1344 chore(3p/nix): add glittershark to OWNERSKane York1-0/+4
Change-Id: I71228383c8c7810ff8032e67bde0f45339809934 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1236 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in> Reviewed-by: glittershark <grfn@gws.fyi>
2020-07-16 r/1342 feat(3p/nix/nix-daemon): Implement Worker::QueryAllValidPaths handlerGriffin Smith1-1/+13
Change-Id: If9d2144ae872183abf47d84c94cc5c5fa23ced87 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1229 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
2020-07-16 r/1341 feat(3p/nix/nix-daemon): Implement Worker::QueryMissing handlerGriffin Smith1-0/+30
Change-Id: I004a0c7969e1fe27b844adfed2d3ba3e6c5279bb Reviewed-on: https://cl.tvl.fyi/c/depot/+/1227 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
2020-07-16 r/1340 feat(3p/nix): Implement similar group of Worker::Query* handlersVincent Ambo1-2/+47
These are the queries that are handled in the confusing case statement in the old daemon implementation, because they have very similar structure. Change-Id: Ie7143354f66cef4336dff8072ede9a56271a7e89 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1228 Tested-by: BuildkiteCI Reviewed-by: glittershark <grfn@gws.fyi>
2020-07-16 r/1339 feat(3p/nix/nix-daemon): Implement Worker::HasSubstitutes handlerVincent Ambo1-0/+10
Change-Id: I0b01b554eee4b4e31416aabb498ea3d8b8a8092b Reviewed-on: https://cl.tvl.fyi/c/depot/+/1226 Tested-by: BuildkiteCI Reviewed-by: glittershark <grfn@gws.fyi>
2020-07-16 r/1338 feat(3p/nix/nix-daemon): Implement Worker::IsValidPath handlerVincent Ambo2-0/+30
Change-Id: I741c2b9b58f234a21850640e2b0c071ff4441234 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1223 Tested-by: BuildkiteCI Reviewed-by: lukegb <lukegb@tvl.fyi> Reviewed-by: glittershark <grfn@gws.fyi>
2020-07-16 r/1336 feat(3p/nix/proto): Add QueryMissing RPC callVincent Ambo1-0/+13
Change-Id: I6a29c56a0f945afdef7434da539b4b91b2e4d2e6 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1222 Reviewed-by: glittershark <grfn@gws.fyi> Tested-by: BuildkiteCI
2020-07-16 r/1335 feat(3p/nix/proto): Add AddToStoreNar RPC callVincent Ambo1-15/+18
Change-Id: I335630644205adb280d83e006baf9d497ac1ac95 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1221 Tested-by: BuildkiteCI Reviewed-by: glittershark <grfn@gws.fyi>
2020-07-16 r/1334 feat(3p/nix): Add NarFromPathGriffin Smith1-0/+3
What it does I will never know. It takes a path and returns a path. Something happens in the middle. Change-Id: I499a9df700e5b954c9aaf6d694753ff34e773dfd Reviewed-on: https://cl.tvl.fyi/c/depot/+/1210 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
2020-07-16 r/1333 feat(3p/nix): Add AddSignaturesGriffin Smith1-0/+8
Change-Id: Ic37409c7987c261dc3eb91382d40f458fae6ea0c Reviewed-on: https://cl.tvl.fyi/c/depot/+/1209 Reviewed-by: tazjin <mail@tazj.in> Tested-by: BuildkiteCI
2020-07-16 r/1332 feat(3p/nix): Add BuildDerivation protoGriffin Smith1-0/+31
Change-Id: Ib66b4ff2da72677e74b6a713186c72f66d9f6f88 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1208 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
2020-07-16 r/1331 chore(3p/nix/worker-protocol): Add missing includesGriffin Smith1-0/+3
These files were always implicitly depended upon by worker-protocol.hh, but just so happened also always be included in places where the other ones were already present. We are likely getting rid of this file sooner rather than later, but in the meantime this will cause clangd to shut up while I'm editing the file. Change-Id: I0d765f8b86828b6612e5483417e452221ea3c5b1 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1207 Reviewed-by: tazjin <mail@tazj.in> Tested-by: BuildkiteCI
2020-07-16 r/1330 feat(3p/nix): Add VerifyStoreGriffin Smith1-0/+14
Change-Id: I6a0596e986867e94857da461c746a80750830f7b Reviewed-on: https://cl.tvl.fyi/c/depot/+/1206 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
2020-07-16 r/1329 feat(3p/nix): Add OptimiseStoreGriffin Smith2-1/+6
Change-Id: I0d254504801283e018eef41bd5ea9850b17c0d80 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1205 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
2020-07-16 r/1328 feat(3p/nix): Add QueryValidDeriversGriffin Smith1-0/+4
Change-Id: I52965bdbf143ae11201e1fafed1c25b3d8f1bee9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1204 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
2020-07-16 r/1327 feat(3p/nix): Add path query opsGriffin Smith1-0/+6
Add QueryValidPaths and QuerySubstitutablePaths, both of which filter a list of paths based on a set of criteria. Change-Id: I6aa4647efe82b82dc9582a311643d5f9b6d521d5 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1203 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
2020-07-16 r/1326 feat(3p/nix): Add QueryPathFromHashPartGriffin Smith1-12/+19
Change-Id: I0a31557f4cf585d3e539e29ef1a07b443aeec9fc Reviewed-on: https://cl.tvl.fyi/c/depot/+/1202 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
2020-07-16 r/1325 refactor(3p/nix/libexpr): Use Abseil collection types for parser stateVincent Ambo2-2/+13
Replaces the previous uses of the (ordered!) std::map and std::set with absl::flat_hash_{map|set}. After some careful reading it seems that there is actually no ordering dependency on these types, and the (drop-in) replacements perform slightly better. Overall this is not fixing a bottleneck, just a driveby thing. Change-Id: Ided695dc75676bd58515aa9382df0be0a09c565e Reviewed-on: https://cl.tvl.fyi/c/depot/+/1220 Reviewed-by: glittershark <grfn@gws.fyi> Reviewed-by: isomer <isomer@tvl.fyi> Tested-by: BuildkiteCI
2020-07-16 r/1323 refactor(3p/nix/libexpr): Move EvalState:* implementations out of parser.yVincent Ambo3-150/+156
Several definitions of functions declared in eval.hh were previously implemented in parser.y, this moves them over to parser.cc. While this still isn't a reasonable place to keep them, the long-term fix is more likely to be that eval.hh needs to be split up. Before we get to that point however, this already gives us the ability to use tooling with this code. Change-Id: If06fb655325fe281564047ffab0a0a640428a0ee Reviewed-on: https://cl.tvl.fyi/c/depot/+/1219 Tested-by: BuildkiteCI Reviewed-by: isomer <isomer@tvl.fyi>
2020-07-16 r/1322 refactor(3p/nix/libexpr): Extract static helpers out of parser.yVincent Ambo4-185/+202
Moves several of the static helper functions into a new parser.cc file. Once the rest of the code is usefully extracted, these will be moved to a private namespace. Change-Id: I0d7b53dcefe31bb5c6bad3ad7f5fcb48276bf799 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1218 Tested-by: BuildkiteCI Reviewed-by: isomer <isomer@tvl.fyi>
2020-07-16 r/1321 refactor(3p/nix/libexpr): Extract parser header out of Yacc fileVincent Ambo3-54/+49
First step (of many?) towards extracting all the inline code from the Yacc file and keeping it somewhere more accessible instead. Note that none of this code has previously been touched by a linter or formatter, pretty much ever, so as it is extracted it also undergoes similar changes to the whole codebase after the initial fork. Change-Id: If3b7181f22e3b3fd8c58dfa9befa7ee2896ea06d Reviewed-on: https://cl.tvl.fyi/c/depot/+/1217 Tested-by: BuildkiteCI Reviewed-by: isomer <isomer@tvl.fyi>
2020-07-16 r/1320 refactor(3p/nix/libexpr): Use range insertion to merge nix::BindingsVincent Ambo3-18/+25
Instead of manually iterating over the two bindings to be combined, this adds a new static method on the Bindings class which merges two attribute sets by calling the range insertion operator over them. In some anecdotal tests, this can lead to a ~10% speed bump - depending on the specific operation. Change-Id: I5dea03b0589a83a789d3a8a0fc81d0d9e6598371 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1216 Tested-by: BuildkiteCI Reviewed-by: glittershark <grfn@gws.fyi>
2020-07-16 r/1317 style(3p/nix): Rename the project to tvixVincent Ambo2-4/+5
Changes the derivation name & README overview to say "Tvix" instead of "tazjix". The previous name was mostly intended as a joke, and a way for me to distinguish output paths. It's certainly not the intention to have a portmanteau with my name here, especially now that several people are contributing to the fork. Change-Id: Icface5484d52355111eca23b2f6bd3b9e5567275 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1212 Reviewed-by: glittershark <grfn@gws.fyi> Tested-by: BuildkiteCI
2020-07-16 r/1315 feat(3p/nix/proto): Add QueryDerivationOutputNamesGriffin Smith1-0/+7
Change-Id: I5452d0f76441a61d70031f567c9cb75249569c2a Reviewed-on: https://cl.tvl.fyi/c/depot/+/1201 Reviewed-by: tazjin <mail@tazj.in> Tested-by: BuildkiteCI
2020-07-16 r/1314 feat(3p/nix): Add proto for QueryPathInfoGriffin Smith1-0/+18
Change-Id: I10ec338ef2d5360954abdc5bb3d4789f34b031fc Reviewed-on: https://cl.tvl.fyi/c/depot/+/1200 Reviewed-by: tazjin <mail@tazj.in> Tested-by: BuildkiteCI
2020-07-16 r/1313 chore(3p/nix): {query,clear}FailedPaths are obsoleteGriffin Smith1-2/+2
They're not mentioned anywhere on the client or the server. Change-Id: Ia78c8bde49326f6bf69b4aeded083cfd3235131f Reviewed-on: https://cl.tvl.fyi/c/depot/+/1188 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
2020-07-16 r/1312 feat(3p/nix/worker.proto): Add QueryAllValidPathsGriffin Smith1-0/+3
takes nothing, returns paths Change-Id: I4087b9b5a25d9edc76b97d0a0f553259693cca3a Reviewed-on: https://cl.tvl.fyi/c/depot/+/1187 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
2020-07-16 r/1311 feat(3p/nix/proto): Add additional worker-protocol operationsVincent Ambo1-48/+43
On the chopping block this time: * requests/responses that return one or more store paths, and contain nothing else, have been changed to use the same types (StorePath and StorePaths, respectively) * QuerySubstitutablePathInfos has been added. It should be noted that legacy Nix has two versions of this call, one that only queries a single info (deprecated) and one that queries multiple. We have only implemented the latter. * QueryDerivationOutputs has been added. Change-Id: Iccc9041e7064e141cf593467ecdcc327581c4056 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1186 Tested-by: BuildkiteCI Reviewed-by: glittershark <grfn@gws.fyi>
2020-07-16 r/1309 refactor(3p/libstore): Optimise nix::printStringVincent Ambo1-12/+37
Slight performance optimisation of nix::printString by copying chunks of the input string which do not need escaping as contiguous blocks. Paired-With: Perry Lorier <isomer@tvl.fyi> Change-Id: I48bad90c8f2831ae4524c814a12b1982989922f9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1184 Tested-by: BuildkiteCI Reviewed-by: edef <edef@edef.eu> Reviewed-by: glittershark <grfn@gws.fyi>
2020-07-16 r/1307 style(3p/nix): Minor style fix in DrvInfo::setMetaVincent Ambo1-3/+2
Paired-With: Perry Lorier <isomer@tvl.fyi> Change-Id: I0655ecc675239b3d90e5adc305c3f37c1a904cf5 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1181 Tested-by: BuildkiteCI Reviewed-by: glittershark <grfn@gws.fyi>
2020-07-16 r/1306 refactor(3p/nix): Compare attribute sets by pointer equalityVincent Ambo1-0/+6
Paired-With: Perry Lorier <isomer@tvl.fyi> Change-Id: I418e9127c5d9d31559c59e461f17726ddbc051c4 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1180 Tested-by: BuildkiteCI Reviewed-by: glittershark <grfn@gws.fyi>
2020-07-16 r/1305 refactor(3p/nix): Use a static empty Bindings for 0-element attrsVincent Ambo1-2/+11
A significant fraction of all created attribute sets are empty; hence this is an easy optimisation to make. Paired-With: Perry Lorier <isomer@tvl.fyi> Change-Id: I0884194d04c1ee95b2b239a253515f2152bc0856 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1179 Tested-by: BuildkiteCI Reviewed-by: glittershark <grfn@gws.fyi>