about summary refs log tree commit diff
path: root/src/libexpr
AgeCommit message (Collapse)AuthorFilesLines
2017-03-31 builtins.exec: Make the argument just a listShea Levy1-22/+9
2017-03-30 Add exec primop behind allow-unsafe-native-code-during-evaluation.Shea Levy1-1/+55
Execute a given program with the (optional) given arguments as the user running the evaluation, parsing stdout as an expression to be evaluated. There are many use cases for nix that would benefit from being able to run arbitrary code during evaluation, including but not limited to: * Automatic git fetching to get a sha256 from a git revision * git rev-parse HEAD * Automatic extraction of information from build specifications from other tools, particularly language-specific package managers like cabal or npm * Secrets decryption (e.g. with nixops) * Private repository fetching Ideally, we would add this functionality in a more principled way to nix, but in the mean time 'builtins.exec' can be used to get these tasks done. The primop is only available when the 'allow-unsafe-native-code-during-evaluation' nix option is true. That flag also enables the 'importNative' primop, which is strictly more powerful but less convenient (since it requires compiling a plugin against the running version of nix).
2017-03-24 use std::tuple for ValueMap allocatorDaiderd Jordan1-1/+1
2017-03-08 Add option to disable import-from-derivation completely, even if the drv is ↵Shea Levy1-0/+2
already realized
2017-03-02 builtins.fetchgit: Support pathsEelco Dolstra1-3/+5
2017-03-02 builtins.fetchgit: Fix bad format stringEelco Dolstra1-1/+1
2017-02-08 Include config.h implicitly with '-include config.h' in CFLAGSTuomas Tynkkynen3-4/+0
Because config.h can #define things like _FILE_OFFSET_BITS=64 and not every compilation unit includes config.h, we currently compile half of Nix with _FILE_OFFSET_BITS=64 and other half with _FILE_OFFSET_BITS unset. This causes major havoc with the Settings class on e.g. 32-bit ARM, where different compilation units disagree with the struct layout. E.g.: diff --git a/src/libstore/globals.cc b/src/libstore/globals.cc @@ -166,6 +166,8 @@ void Settings::update() _get(useSubstitutes, "build-use-substitutes"); + fprintf(stderr, "at Settings::update(): &useSubstitutes = %p\n", &nix::settings.useSubstitutes); _get(buildUsersGroup, "build-users-group"); diff --git a/src/libstore/remote-store.cc b/src/libstore/remote-store.cc +++ b/src/libstore/remote-store.cc @@ -138,6 +138,8 @@ void RemoteStore::initConnection(Connection & conn) void RemoteStore::setOptions(Connection & conn) { + fprintf(stderr, "at RemoteStore::setOptions(): &useSubstitutes = %p\n", &nix::settings.useSubstitutes); conn.to << wopSetOptions Gave me: at Settings::update(): &useSubstitutes = 0xb6e5c5cb at RemoteStore::setOptions(): &useSubstitutes = 0xb6e5c5c7 That was not a fun one to debug!
2017-01-26 Add support for passing structured data to buildersEelco Dolstra3-40/+91
Previously, all derivation attributes had to be coerced into strings so that they could be passed via the environment. This is lossy (e.g. lists get flattened, necessitating configureFlags vs. configureFlagsArray, of which the latter cannot be specified as an attribute), doesn't support attribute sets at all, and has size limitations (necessitating hacks like passAsFile). This patch adds a new mode for passing attributes to builders, namely encoded as a JSON file ".attrs.json" in the current directory of the builder. This mode is activated via the special attribute __structuredAttrs = true; (The idea is that one day we can set this in stdenv.mkDerivation.) For example, stdenv.mkDerivation { __structuredAttrs = true; name = "foo"; buildInputs = [ pkgs.hello pkgs.cowsay ]; doCheck = true; hardening.format = false; } results in a ".attrs.json" file containing (sans the indentation): { "buildInputs": [], "builder": "/nix/store/ygl61ycpr2vjqrx775l1r2mw1g2rb754-bash-4.3-p48/bin/bash", "configureFlags": [ "--with-foo", "--with-bar=1 2" ], "doCheck": true, "hardening": { "format": false }, "name": "foo", "nativeBuildInputs": [ "/nix/store/10h6li26i7g6z3mdpvra09yyf10mmzdr-hello-2.10", "/nix/store/4jnvjin0r6wp6cv1hdm5jbkx3vinlcvk-cowsay-3.03" ], "propagatedBuildInputs": [], "propagatedNativeBuildInputs": [], "stdenv": "/nix/store/f3hw3p8armnzy6xhd4h8s7anfjrs15n2-stdenv", "system": "x86_64-linux" } "passAsFile" is ignored in this mode because it's not needed - large strings are included directly in the JSON representation. It is up to the builder to do something with the JSON representation. For example, in bash-based builders, lists/attrsets of string values could be mapped to bash (associative) arrays.
2017-01-26 Bindings: Add a method for iterating in lexicographically sorted orderEelco Dolstra4-28/+28
2017-01-24 Revert "Propagate path context via builtins.readFile"Eelco Dolstra1-1/+1
This reverts commit f7f0116dd727ac954fb04d9ef9b9fe7ec034e563. Issue #1174.
2017-01-24 Revert "builtins.readFile: Put the references of the file, not those needed ↵Eelco Dolstra1-3/+0
to realize the file, into the context" Reverting commit 451c223deea17918454ae083dcfc0ea2b6103cab for now because it breaks http://hydra.nixos.org/build/46805136, not clear why.
2017-01-10 builtins.readFile: Put the references of the file, not those needed to ↵Shea Levy1-0/+3
realize the file, into the context
2016-12-06 Tweak error messageEelco Dolstra1-2/+2
2016-11-27 Improve error message on trailing path slashesGuillaume Maudoux1-4/+12
2016-11-13 Fix comments parsingGuillaume Maudoux1-1/+1
Fixed the parsing of multiline strings ending with an even number of stars, like /** this **/. Added test cases for comments.
2016-10-26 Fix SIGFPE from integer overflow during divisionTuomas Tynkkynen1-3/+9
On some architectures (like x86_64 or i686, but not ARM for example) overflow during integer division causes a crash due to SIGFPE. Reproduces on a 64-bit system with: nix-instantiate --eval -E '(-9223372036854775807 - 1) / -1' The only way this can happen is when the smallest possible integer is divided by -1, so just special-case that.
2016-10-19 fixup! replace own regex class with std::regexAlexander Ried1-1/+4
2016-10-18 replace own regex class with std::regexAlexander Ried3-15/+14
2016-09-21 printMsg(lvlError, ...) -> printError(...) etc.Eelco Dolstra2-4/+4
2016-09-14 Enable HTTP/2 supportEelco Dolstra3-3/+3
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-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 Dolstra3-99/+30
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-23 nix build: Use Nix search pathEelco Dolstra2-5/+8
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 Add a mechanism for derivation attributes to reference the derivation's outputsEelco Dolstra1-0/+14
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 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 builtins.fetch{url,tarball}: Allow name attributeShea Levy1-4/+7
2016-07-26 makeFixedOutputPath(): Drop superfluous HashType argumentEelco Dolstra1-1/+1
2016-07-26 builtins.{fetchurl,fetchTarball}: Support a sha256 attributeEelco Dolstra1-3/+7
Also, allow builtins.{fetchurl,fetchTarball} in restricted mode if a hash is specified.
2016-06-01 Make the store directory a member variable of StoreEelco Dolstra2-12/+12
2016-05-04 Cleanup: Remove singleton()Eelco Dolstra1-7/+6
2016-04-29 Support Git repos in the Nix pathEelco Dolstra3-37/+61
E.g. $ nix-build -I nixpkgs=git://github.com/NixOS/nixpkgs '<nixpkgs>' -A hello This is not extremely useful yet because you can't specify a branch/revision.
2016-04-29 Add fetchgit builtinEelco Dolstra1-0/+77
The function builtins.fetchgit fetches Git repositories at evaluation time, similar to builtins.fetchTarball. (Perhaps the name should be changed, being confusing with respect to Nixpkgs's fetchgit function, with works at build time.) Example: (import (builtins.fetchgit git://github.com/NixOS/nixpkgs) {}).hello or (import (builtins.fetchgit { url = git://github.com/NixOS/nixpkgs-channels; rev = "nixos-16.03"; }) {}).hello Note that the result does not contain a .git directory.
2016-04-25 Improved logging abstractionEelco Dolstra3-8/+7
This also gets rid of --log-type, since the nested log type isn't useful in a multi-threaded situation, and nobody cares about the "pretty" log type.
2016-04-14 Merge pull request #815 from vcunat/p/outputsToInstallEelco Dolstra2-5/+22
nix-env: respect meta.outputsToInstall
2016-04-14 Make $NIX_PATH parsing more robustEelco Dolstra1-5/+32
2016-04-14 Make the search path lazier with non-fatal errorsEelco Dolstra4-34/+69
Thus, -I / $NIX_PATH entries are now downloaded only when they are needed for evaluation. An error to download an entry is a non-fatal warning (just like non-existant paths). This does change the semantics of builtins.nixPath, which now returns the original, rather than resulting path. E.g., before we had [ { path = "/nix/store/hgm3yxf1lrrwa3z14zpqaj5p9vs0qklk-nixexprs.tar.xz"; prefix = "nixpkgs"; } ... ] but now [ { path = "https://nixos.org/channels/nixos-16.03/nixexprs.tar.xz"; prefix = "nixpkgs"; } ... ] Fixes #792.
2016-04-14 Make primop registration pluggableEelco Dolstra4-3/+33
This way we don't have to put all primops in one giant file.
2016-03-04 Propagate path context via builtins.readFileNikolay Amiantov1-1/+1
2016-02-29 Add an HTTP binary cache storeEelco Dolstra3-3/+3
Allowing stuff like NIX_REMOTE=https://cache.nixos.org nix-store -qR /nix/store/x1p1gl3a4kkz5ci0nfbayjqlqmczp1kq-geeqie-1.1 or NIX_REMOTE=https://cache.nixos.org nix-store --export /nix/store/x1p1gl3a4kkz5ci0nfbayjqlqmczp1kq-geeqie-1.1 | nix-store --import
2016-02-24 Throw a specific error for incomplete parse errors.Scott Olson3-1/+11
`nix-repl` will use this for deciding whether to keep waiting for input or error out right away.
2016-02-23 nix-env: respect meta.outputsToInstallVladimír Čunát2-5/+22
Discussed on https://github.com/NixOS/nixpkgs/pull/12653#discussion_r51601849
2016-02-19 JSONObject: Support floats and booleansEelco Dolstra1-1/+12
2016-02-15 Fix broken number parsing in fromJSONEelco Dolstra1-4/+3
The call to tmp_number.append had its arguments mixed up. Also, JSON does not allow a trailing "," after array/object members.
2016-02-12 Merge pull request #762 from ctheune/ctheune-floatsEelco Dolstra13-23/+172
Implement floats
2016-02-04 StoreAPI -> StoreEelco Dolstra3-5/+5
Calling a class an API is a bit redundant...
2016-02-04 Eliminate the "store" global variableEelco Dolstra6-36/+40
Also, move a few free-standing functions into StoreAPI and Derivation. Also, introduce a non-nullable smart pointer, ref<T>, which is just a wrapper around std::shared_ptr ensuring that the pointer is never null. (For reference-counted values, this is better than passing a "T&", because the latter doesn't maintain the refcount. Usually, the caller will have a shared_ptr keeping the value alive, but that's not always the case, e.g., when passing a reference to a std::thread via std::bind.)