Alex Crichton [Mon, 13 Mar 2017 17:15:36 +0000 (10:15 -0700)]
Cap lints for upstream deps with `-vv`
Previously with `-vv` Cargo didn't pass `--cap-lints` at all, but with upstream
dependencies we still want to pass at least `--cap-lints warn` to make sure that
they're all still compiling.
bors [Wed, 8 Mar 2017 19:21:14 +0000 (19:21 +0000)]
Auto merge of #3794 - alexcrichton:better-errors, r=matklad
Improve TOML decoding error messages
Unfortunately while `#[serde(untagged)]` is precisely what we want in terms of
semantics it leaves a little to be desired in terms of error messages. This
commit updates to remove the usage of that attribute in favor of implementing
`Deserialize` directly, which is quite simple in these few cases.
Alex Crichton [Fri, 3 Mar 2017 16:12:12 +0000 (08:12 -0800)]
Improve TOML decoding error messages
Unfortunately while `#[serde(untagged)]` is precisely what we want in terms of
semantics it leaves a little to be desired in terms of error messages. This
commit updates to remove the usage of that attribute in favor of implementing
`Deserialize` directly, which is quite simple in these few cases.
bors [Wed, 8 Mar 2017 00:00:34 +0000 (00:00 +0000)]
Auto merge of #3789 - vojtechkral:cargo_env, r=alexcrichton
Tell subprocesses the path to self in an env variable #3778
I'm just setting the env var on the process itself, letting subprocesses inherit that, as it's easier than setting for each subprocess individually. I'm not entirely sure this is the right spot though.
Also, I should probably document this somewhere - what would be the best place?
bors [Tue, 7 Mar 2017 15:24:52 +0000 (15:24 +0000)]
Auto merge of #3369 - joshtriplett:cargo-install-only-required-dependencies, r=alexcrichton
cargo fails if it can't find optional dependencies, even if corresponding feature not enabled
I have a directory registry containing all the crate sources needed to build an application crate (for instance, ripgrep), and a `$CARGO_HOME/config` file that looks like this:
When I attempt to build ripgrep via "cargo install ripgrep" from that directory registry, I get this error:
```
error: failed to compile `ripgrep v0.3.1`, intermediate artifacts can be found at `/tmp/cargo-install.rmKApOw9BwAL`
Caused by:
no matching package named `simd` found (required by `bytecount`)
location searched: registry https://github.com/rust-lang/crates.io-index
version required: ^0.1.1
```
The directory registry indeed does not contain "simd"; however, bytecount doesn't require simd. It has an optional dependency on simd, and nothing enables the feature that requires that dependency.
Placing the simd crate sources into the directory registry allows ripgrep to build; the resulting build does not actually build the simd crate.
I can reproduce this by just trying to build the "bytecount" crate directly, using the same `$CARGO_HOME`:
```
error: no matching package named `simd` found (required by `bytecount`)
location searched: registry https://github.com/rust-lang/crates.io-index
version required: = 0.1.1
```
(Incidentally, that "version required" seems wrong: bytecount has an optional dependency on simd `^0.1.1`, not `=0.1.1`.)
However, this doesn't seem consistent with other crates in the same dependency tree. For instance, ripgrep also depends on clap, and clap has an optional dependency on yaml-rust, yet cargo does not complain about the missing yaml-rust.
I'd *guess* that the difference occurs because ripgrep has an optional feature `simd-accel` that depends on `bytecount/simd-accel`, so cargo wants to compute what packages it needs for that case too, even when building without that feature. (Similar to #3233.)
However, this makes it impossible to build a package while installing only the packaged dependencies for the enabled features. Could `cargo install` ignore any dependencies not actually required by the enabled feature? (That behavior would make no sense for "cargo build", which builds a Cargo.lock file that should remain consistent regardless of enabled features, but it makes sense for "cargo install cratename", which doesn't build a Cargo.lock file.)
bors [Mon, 6 Mar 2017 20:42:29 +0000 (20:42 +0000)]
Auto merge of #3795 - jryans:template-year, r=alexcrichton
Add year to project template variables
This adds the current year as a `year` variable for project templates. Some license files / headers include the year, so this should make it easier to include those in a template.
Josh Triplett [Thu, 2 Mar 2017 02:19:43 +0000 (18:19 -0800)]
In "cargo install" directly from registry, don't require optional dependencies
When building with a directory registry that contains only the subset of
crates required to build an application crate, cargo fails if that
subset doesn't include optional dependencies pulled in for every
possible feature of the root crate, even when the install doesn't enable
those features. This prevents Linux distributions from building with
a minimal set of dependencies (omitting, for instance, packages for
unstable/nightly features).
Introduce a new workspace flag "require_optional_deps", disabled for
install and enabled for everything else. Skip the initial
Method::Everything resolve in this case, and modify
resolve_with_previous to support running a Method::Required resolve
without a previous resolution.
This also skips adding path overrides, as those won't make sense (and
won't work) for an install directly from a registry.
Introduce a set of tests for "cargo install" directly from a directory
registry.
It looks like this was changed as part of #3004 ([removed](https://github.com/rust-lang/cargo/commit/875a8aba7916b63c3c8464008a271f6082e23779#diff-149dd4362a3b0dc13b113762713119dfL477), [added](https://github.com/rust-lang/cargo/commit/875a8aba7916b63c3c8464008a271f6082e23779#diff-149dd4362a3b0dc13b113762713119dfR678)), I'm assuming unintentionally?
The regression has not yet hit the beta channel; `cargo-0.17.0-nightly (0bb8047 2017-02-06)` generates the src/lib.rs I expect.
bors [Fri, 3 Mar 2017 15:40:30 +0000 (15:40 +0000)]
Auto merge of #3791 - sunng87:port-handlebars-to-serde, r=alexcrichton
Use serde type system for handlebars
This will help cargo to drop rustc_serialize as dependency (#3682). Handlebars actually supports using serde_json as its type system instead of rustc_serialize. And I'm planning to drop rustc_serialize in future releases.
bors [Thu, 2 Mar 2017 02:10:56 +0000 (02:10 +0000)]
Auto merge of #3785 - joshtriplett:insulate-tests-from-user-env, r=alexcrichton
tests: Insulate from user git environment
Several tests in "cargo test" would fail if the user had any of the Git
environment variables set for name or email address, because those
environment variables would override the tested configuration. Filter
out those environment variables.
Josh Triplett [Wed, 1 Mar 2017 23:50:15 +0000 (15:50 -0800)]
tests: Insulate from user git environment
Several tests in "cargo test" would fail if the user had any of the Git
environment variables set for name or email address, because those
environment variables would override the tested configuration. Filter
out those environment variables.
bors [Wed, 1 Mar 2017 15:05:45 +0000 (15:05 +0000)]
Auto merge of #3721 - alexcrichton:dupe-doctest, r=brson
Fix deps with `cargo test --all` and doctests
This commit fixes `cargo test --all` with the way we ship libraries to `rustdoc
--test`. I'm... not entirely sure what the previous incarnation was doing but
the current organization is to interpret `compilation.libraries` as a mapping
from a package to the list of crates it needs to link to test.
This updates the support in `cargo_rustc/mod.rs` to create the map appropriately
and tweaks the loop in `cargo_test.rs` as well.
Alex Crichton [Thu, 16 Feb 2017 16:04:09 +0000 (08:04 -0800)]
Fix deps with `cargo test --all` and doctests
This commit fixes `cargo test --all` with the way we ship libraries to `rustdoc
--test`. I'm... not entirely sure what the previous incarnation was doing but
the current organization is to interpret `compilation.libraries` as a mapping
from a package to the list of crates it needs to link to test.
This updates the support in `cargo_rustc/mod.rs` to create the map appropriately
and tweaks the loop in `cargo_test.rs` as well.
bors [Wed, 22 Feb 2017 18:35:39 +0000 (18:35 +0000)]
Auto merge of #3682 - alexcrichton:serde, r=brson
Migrate from rustc-serialize to Serde
This commit migrates Cargo as much as possible from rustc-serialize to
Serde. This not only provides an excellent testing ground for the toml
0.3 release but it also is a big boost to the speed of parsing the JSON
bits of the registry.
This doesn't completely excise the dependency just yet as docopt still
requires it along with handlebars. I'm sure though that in time those
crates will migrate to serde!
Alex Crichton [Fri, 10 Feb 2017 20:01:52 +0000 (12:01 -0800)]
Migrate from rustc-serialize to Serde
This commit migrates Cargo as much as possible from rustc-serialize to
Serde. This not only provides an excellent testing ground for the toml
0.3 release but it also is a big boost to the speed of parsing the JSON
bits of the registry.
This doesn't completely excise the dependency just yet as docopt still
requires it along with handlebars. I'm sure though that in time those
crates will migrate to serde!
bors [Wed, 22 Feb 2017 15:02:02 +0000 (15:02 +0000)]
Auto merge of #3733 - llogiq:clippy, r=alexcrichton
some clippy-suggested improvements
This fixes a number of [clippy](https://github.com/Manishearth/rust-clippy) warnings. It's mostly about readability, though a few changes could affect performance (though probably not measurably).
I've left out things to fix later; I thought I'd just push the first batch to see if you like it.
bors [Fri, 17 Feb 2017 18:38:07 +0000 (18:38 +0000)]
Auto merge of #3716 - matklad:multi-tests, r=alexcrichton
Allow to run several integration tests
It's useful to be able to run several, but not all, test targets at once (especially in the IDE, where you want to select a bunch of files and command "run these!"). This seems to work, but obviously needs some tests. `Options` `struct` already supports several targets.