Commit graph

40 commits

Author SHA1 Message Date
John Ericson e433d4af4c Extend Rust FFI
Do idiomatic C++ copy and move constructors for a few things, so
wrapping structs' defaults can work.
2020-03-25 16:12:14 -04:00
Leonhard Markert 1b56de8cd1 Remove macro_use
As of Rust 2018, macro_use is no longer required in most circumstances.
I think it is generally a good idea to remove these when not needed, to
stop them from polluting the crate's global namespace.
https://doc.rust-lang.org/edition-guide/rust-2018/macros/macro-changes.html#macro_rules-style-macros
2020-02-10 09:03:24 +01:00
Eelco Dolstra ee235e764c
Merge branch 'libarchive' of https://github.com/yorickvP/nix 2019-12-19 14:47:18 +01:00
Eelco Dolstra 14d82baba4 StorePath::new(): Check store directory 2019-12-16 17:41:56 +01:00
Eelco Dolstra 410acd29c0 Fix cargo test 2019-12-15 10:47:59 +01:00
Eelco Dolstra b4edc3ca61 Don't leak exceptions 2019-12-13 19:05:26 +01:00
Eelco Dolstra ca87707c90 Get rid of CBox 2019-12-13 19:05:26 +01:00
Eelco Dolstra 5a6d6da7ae Validate tarball components 2019-12-13 19:05:26 +01:00
Eelco Dolstra f800d450b7 Speed up StorePath::to_string()
1.81% -> 0.56%
2019-12-10 22:15:20 +01:00
Eelco Dolstra f64b58b45e Speed up base32::decode()
From 1.03% to 0.19% of the runtime of 'nix-instantiate "<nixpkgs>" -A
texlive.combined.scheme-full --dry-run'.
2019-12-10 22:06:05 +01:00
Eelco Dolstra bbe97dff8b Make the Store API more type-safe
Most functions now take a StorePath argument rather than a Path (which
is just an alias for std::string). The StorePath constructor ensures
that the path is syntactically correct (i.e. it looks like
<store-dir>/<base32-hash>-<name>). Similarly, functions like
buildPaths() now take a StorePathWithOutputs, rather than abusing Path
by adding a '!<outputs>' suffix.

Note that the StorePath type is implemented in Rust. This involves
some hackery to allow Rust values to be used directly in C++, via a
helper type whose destructor calls the Rust type's drop()
function. The main issue is the dynamic nature of C++ move semantics:
after we have moved a Rust value, we should not call the drop function
on the original value. So when we move a value, we set the original
value to bitwise zero, and the destructor only calls drop() if the
value is not bitwise zero. This should be sufficient for most types.

Also lots of minor cleanups to the C++ API to make it more modern
(e.g. using std::optional and std::string_view in some places).
2019-12-10 22:06:05 +01:00
Eelco Dolstra ebd89999c2 Add StorePath tests 2019-12-10 22:04:40 +01:00
Eelco Dolstra 9e565781c6 Shut up warnings 2019-12-10 13:37:23 +01:00
Eelco Dolstra 14aa0c3259 Use hyper directly instead of reqwest 2019-12-10 13:37:23 +01:00
Eelco Dolstra a6f0bef0a7 Update to async/await-enabled tokio 2019-12-10 13:37:23 +01:00
Eelco Dolstra 7f08975050 Add NAR parser 2019-12-10 13:37:23 +01:00
Eelco Dolstra 6317f0f7a0 StorePath improvements 2019-12-10 13:37:23 +01:00
Eelco Dolstra cce218f950 Add base32 encoder/decoder 2019-12-10 13:37:23 +01:00
Eelco Dolstra a1ff43045b Move stuff around 2019-12-10 13:37:23 +01:00
Eelco Dolstra ce3c41aef0 Drop some dependencies 2019-12-10 13:37:23 +01:00
Eelco Dolstra d832a355ea Use rustls
In particular, this enables HTTP/2 support in reqwest, which is a lot
more efficient.
2019-12-10 13:37:23 +01:00
Eelco Dolstra dd5d76e2ed Basic BinaryCacheStore implementation using async Rust 2019-12-10 13:37:23 +01:00
Yorick b232eea40a
nix-rust: remove unused tar file code 2019-12-09 17:28:15 +07:00
Eelco Dolstra 39954a9586 Make libnixrust a dynamic library
This is a hack to fix the build on macOS, which was failing because
libnixrust.a contains compiler builtins that clash with
libclang_rt.osx.a. There's probably a better solution...

https://hydra.nixos.org/build/107473280
2019-11-29 18:30:39 +01:00
Eelco Dolstra 895ce1bb6c make clean: Delete nix-rust/target 2019-11-27 17:33:59 +01:00
Eelco Dolstra f553a8bdea When OPTIMIZE=0, build rust code in debug mode 2019-11-27 14:18:57 +01:00
Eelco Dolstra dbc4f9d478 Fix macOS build
https://hydra.nixos.org/build/107466992
2019-11-27 00:17:39 +01:00
Eelco Dolstra e6c1d1b474 Update Cargo.lock 2019-11-26 22:46:36 +01:00
Eelco Dolstra 88f8063917 -Z offline -> --offline 2019-11-26 22:45:15 +01:00
Eelco Dolstra f2bd847092 Ignore tar header entries
In particular, these are emitted by 'git archive' (in fetchGit).
2019-11-26 22:07:28 +01:00
Eelco Dolstra d33dd6e6c0 Move code around 2019-11-26 22:07:28 +01:00
Eelco Dolstra d14b1c261c Shut up some rust warnings 2019-11-26 22:07:28 +01:00
Eelco Dolstra f738cd4d97 More Rust FFI adventures
We can now convert Rust Errors to C++ exceptions. At the Rust->C++ FFI
boundary, Result<T, Error> will cause Error to be converted to and
thrown as a C++ exception.
2019-11-26 22:07:28 +01:00
Eelco Dolstra 8110b4ebb2 Rust cleanup 2019-11-26 22:07:28 +01:00
Eelco Dolstra 343ebcc048 Only pass '-Z offline' to cargo if we have a vendor directory 2019-11-26 22:07:28 +01:00
Eelco Dolstra d722e2175e Include cargo dependencies in the Nix tarball 2019-11-26 22:07:28 +01:00
Eelco Dolstra 0dbb249b36 Update Rust dependencies 2019-11-26 22:07:28 +01:00
Eelco Dolstra 045708db43 Make <nix/unpack-channel.nix> a builtin builder
This was the last function using a shell script, so this allows us to
get rid of tar, coreutils, bash etc.
2019-11-26 22:07:28 +01:00
Eelco Dolstra e60f6bd4ce Enable Rust code to call C++ Source objects 2019-11-26 22:07:28 +01:00
Eelco Dolstra 11da5b2816 Add some Rust code 2019-11-26 22:07:28 +01:00