about summary refs log tree commit diff
path: root/src
AgeCommit message (Collapse)AuthorFilesLines
2016-09-16 Make computeFSClosure() single-threaded againEelco Dolstra16-202/+385
The fact that queryPathInfo() is synchronous meant that we needed a thread for every concurrent binary cache lookup, even though they end up being handled by the same download thread. Requiring hundreds of threads is not a good idea. So now there is an asynchronous version of queryPathInfo() that takes a callback function to process the result. Similarly, enqueueDownload() now takes a callback rather than returning a future. Thus, a command like nix path-info --store https://cache.nixos.org/ -r /nix/store/slljrzwmpygy1daay14kjszsr9xix063-nixos-16.09beta231.dccf8c5 that returns 4941 paths now takes 1.87s using only 2 threads (the main thread and the downloader thread). (This is with a prewarmed CloudFront.)
2016-09-16 printMsg(): Don't check for interruptsEelco Dolstra3-17/+15
Having the logger function potentially throw exceptions is Heisenbuggy.
2016-09-14 nix path-info: Add some more examplesEelco Dolstra1-1/+9
2016-09-14 Revive binary-caches-parallel-connectionsEelco Dolstra1-2/+8
It's a slight misnomer now because it actually limits *all* downloads, not just binary cache lookups. Also add a "enable-http2" option to allow disabling use of HTTP/2 (enabled by default).
2016-09-14 Enable HTTP/2 supportEelco Dolstra9-207/+430
The binary cache store can now use HTTP/2 to do lookups. This is much more efficient than HTTP/1.1 due to multiplexing: we can issue many requests in parallel over a single TCP connection. Thus it's no longer necessary to use a bunch of concurrent TCP connections (25 by default). For example, downloading 802 .narinfo files from https://cache.nixos.org/, using a single TCP connection, takes 11.8s with HTTP/1.1, but only 0.61s with HTTP/2. This did require a fairly substantial rewrite of the Downloader class to use the curl multi interface, because otherwise curl wouldn't be able to do multiplexing for us. As a bonus, we get connection reuse even with HTTP/1.1. All downloads are now handled by a single worker thread. Clients call Downloader::enqueueDownload() to tell the worker thread to start the download, getting a std::future to the result.
2016-09-14 Add a toLower utility functionEelco Dolstra2-0/+14
2016-09-14 Move some .drv parsing functions out of utilEelco Dolstra3-55/+46
2016-09-12 Fix build on GCC 4.9Eelco Dolstra1-11/+8
GCC 4.9 doesn't like reassigning a std::stringstream. http://hydra.nixos.org/build/40371644
2016-09-12 Write "T x" instead of "auto x = T"Eelco Dolstra1-35/+32
That's just silly. Hopefully this also fixes the Debian build failure: http://hydra.nixos.org/build/40371644
2016-09-08 Don't run builds as root in the user namespaceEelco Dolstra1-16/+31
This largely reverts c68e5913c71badc89ff346d1c6948517ba720c93. Running builds as root breaks "cp -p", since when running as root, "cp -p" assumes that it can succesfully chown() files. But that's not actually the case since the user namespace doesn't provide a complete uid mapping. So it barfs with a fatal error message ("cp: failed to preserve ownership for 'foo': Invalid argument").
2016-09-08 Give a better error message if a path in build-sandbox-paths is invalidEelco Dolstra1-2/+6
2016-09-08 Fix assertion failure after early build setup failureEelco Dolstra1-1/+1
2016-09-08 Fix early removal of rc-file for nix-shellShea Levy1-2/+0
BASH_ENV causes all non-interactive shells called via eg. /etc/bashrc to remove the rc-file before the main shell gets to run it. Completion scripts will often do this. Fixes #976. Adapted from and fixes #1034.
2016-08-31 Merge branch 'nix-build-c++'Shea Levy2-0/+493
2016-08-31 nix-build: Clean up a bitShea Levy1-6/+8
2016-08-31 download.hh: Fix conflicts from nix-channel-c++ mergeShea Levy3-16/+7
2016-08-31 Merge branch 'nix-channel-c++'Shea Levy4-3/+300
2016-08-31 Merge pull request #1030 from pikajude/rsd-ccEelco Dolstra3-1/+206
Implement resolve-system-dependencies in C++
2016-08-30 Fix 32-bit buildEelco Dolstra3-5/+8
2016-08-30 Increase the sleep time between download retriesEelco Dolstra3-2/+4
2016-08-30 Fix --fallbackEelco Dolstra1-7/+10
This fixes an assertion failure in "assert(goal);" in Worker::waitForInput() after a substitution goal is cancelled by the termination of another goal. The problem was the line //worker.childTerminated(shared_from_this()); // FIXME in the SubstitutionGoal destructor. This was disabled because shared_from_this() obviously doesn't work from a destructor. So we now use a real pointer for object identity.
2016-08-30 Fix Fedora buildEelco Dolstra1-1/+1
2016-08-30 Fix GC buildEelco Dolstra2-4/+5
2016-08-29 forceBool(): Show position infoEelco Dolstra4-13/+14
2016-08-29 Add builtin function "partition"Eelco Dolstra5-10/+48
The implementation of "partition" in Nixpkgs is O(n^2) (because of the use of ++), and for some reason was causing stack overflows in multi-threaded evaluation (not sure why). This reduces "nix-env -qa --drv-path" runtime by 0.197s and memory usage by 298 MiB (in non-Boehm mode).
2016-08-29 nix path-info: Add --json flagEelco Dolstra7-129/+472
Also, factor out JSON generation from value-to-json.{cc,hh}, and support producing indented JSON.
2016-08-29 callFunction: Copy functors to the heapShea Levy1-4/+11
Normally it's impossible to take a reference to the function passed to callFunction, so some callers (e.g. ExprApp::eval) allocate that value on the stack. For functors, a reference to the functor itself may be kept, so we need to have it on the heap. Fixes #1045
2016-08-24 Fix queryPathFromHashPart()Eelco Dolstra1-1/+1
The inner lambda was returning a SQLite-internal char * rather than a std::string, leading to Hydra errors liks Caught exception in Hydra::Controller::Root->narinfo "path ‘ø˜£â€™ is not in the Nix store at /nix/store/6mvvyb8fgwj23miyal5mdr8ik4ixk15w-hydra-0.1.1234.abcdef/libexec/hydra/lib/Hydra/Controller/Root.pm line 352."
2016-08-23 nix build: Use Nix search pathEelco Dolstra5-13/+57
That is, unless --file is specified, the Nix search path is synthesized into an attribute set. Thus you can say $ nix build nixpkgs.hello assuming $NIX_PATH contains an entry of the form "nixpkgs=...". This is more verbose than $ nix build hello but is less ambiguous.
2016-08-17 iterate through fat_headers correctlyJude Taylor1-1/+1
2016-08-17 Add a mechanism for derivation attributes to reference the derivation's outputsEelco Dolstra4-14/+38
For example, you can now say: configureFlags = "--prefix=${placeholder "out"} --includedir=${placeholder "dev"}"; The strings returned by the ‘placeholder’ builtin are replaced at build time by the actual store paths corresponding to the specified outputs. Previously, you had to work around the inability to self-reference by doing stuff like: preConfigure = '' configureFlags+=" --prefix $out --includedir=$dev" ''; or rely on ad-hoc variable interpolation semantics in Autoconf or Make (e.g. --prefix=\$(out)), which doesn't always work.
2016-08-16 remove double castingJude Taylor1-3/+3
2016-08-16 account for unknown magic numbersJude Taylor1-0/+3
2016-08-16 switch to mmap strategyJude Taylor1-81/+68
2016-08-16 Merge pull request #1031 from abbradar/replacestrings-contextEelco Dolstra1-7/+17
Allow contexted strings in replaceStrings
2016-08-16 Allow contexted strings in replaceStringsNikolay Amiantov1-7/+17
2016-08-15 ensure presence of directoriesJude Taylor1-2/+7
2016-08-15 code review commentsJude Taylor1-127/+124
2016-08-15 builtins.fetch{url,tarball}: Allow name attributeShea Levy3-9/+13
2016-08-14 make inclusion conditionalJude Taylor1-1/+3
2016-08-14 add a missing load commandJude Taylor1-0/+1
2016-08-13 remove old traces of resolve-system-dependenciesJude Taylor2-1/+3
2016-08-13 resolve-system-dependencies: implement in C++Jude Taylor2-0/+208
2016-08-11 nix-channel: implement in c++Shea Levy4-3/+300
2016-08-11 nix-build: extend the meaning of $IN_NIX_SHELLVladimír Čunát1-1/+1
An equivalent was originally filed against the perl version: https://github.com/NixOS/nix/pull/933
2016-08-11 Merge branch 'buildenv-c++' of https://github.com/shlevy/nixEelco Dolstra2-0/+195
2016-08-11 buildenv: perl -> c++Shea Levy2-0/+195
2016-08-10 HttpBinaryCacheStore: Retry on transient HTTP errorsEelco Dolstra3-14/+34
This makes us more robust against 500 errors from CloudFront or S3 (assuming the 500 error isn't cached by CloudFront...).
2016-08-10 Show HTTP error codesEelco Dolstra1-2/+6
2016-08-10 SQLite:: Add some convenienceEelco Dolstra4-28/+33