cargo.git
7 years agoFix another issue of poisoning too eagerly
Alex Crichton [Fri, 6 Apr 2018 19:35:37 +0000 (12:35 -0700)]
Fix another issue of poisoning too eagerly

This commit extends the fix in #5288 by moving the logic added farther up in the
loop over package dependencies. This means that we won't recursively look at
optional/dev path dependencies which aren't members of the workspace. This
should fix the new issue that came up in #5257

Closes #5257

7 years agoAuto merge of #5302 - Eh2406:MoreRc, r=alexcrichton
bors [Fri, 6 Apr 2018 18:52:22 +0000 (18:52 +0000)]
Auto merge of #5302 - Eh2406:MoreRc, r=alexcrichton

use more Rc in the part of resolver that gets cloned a lot 2

This is the same idea as https://github.com/rust-lang/cargo/pull/5118, I was looking at a profile and noted that ~5% of our time was sent dropping `HashMap<PackageId, HashSet<InternedString>>`. A quick rg and I found the culprit, we are cloning the set of features for every new `Context`. With some Rc we are now just cloning for each time we insert.

To benchmark I commented out line https://github.com/rust-lang/cargo/blob/b9aa315158fe4d8d63672a49200401922ef7385d/src/cargo/core/resolver/mod.rs#L453
the smallest change to get https://github.com/rust-lang/cargo/issues/4810#issuecomment-357553286 not to solve instantly.
Before 17000000 ticks, 90s, 188.889 ticks/ms
After 17000000 ticks, 73s, 232.877 ticks/ms

7 years agouse make_mut for cleaner code
Eh2406 [Fri, 6 Apr 2018 16:38:41 +0000 (12:38 -0400)]
use make_mut for cleaner code

7 years agouse more Rc in the part of resolver that gets cloned a lot
Eh2406 [Thu, 5 Apr 2018 20:34:49 +0000 (16:34 -0400)]
use more Rc in the part of resolver that gets cloned a lot

7 years agoAuto merge of #5299 - ehuss:rustdoc-edition, r=matklad
bors [Thu, 5 Apr 2018 15:26:56 +0000 (15:26 +0000)]
Auto merge of #5299 - ehuss:rustdoc-edition, r=matklad

Pass edition to rustdoc.

Fixes #5279.

7 years agoUnpin nightly version in CI.
Eric Huss [Thu, 5 Apr 2018 13:42:48 +0000 (06:42 -0700)]
Unpin nightly version in CI.

Removes temporary workaround for rust-lang/rust#49033.

7 years agoDon't use .arg() in test.
Eric Huss [Thu, 5 Apr 2018 13:04:45 +0000 (06:04 -0700)]
Don't use .arg() in test.

7 years agoPass edition to rustdoc.
Eric Huss [Thu, 5 Apr 2018 12:39:50 +0000 (05:39 -0700)]
Pass edition to rustdoc.

Fixes #5279.

7 years agoAuto merge of #5280 - klausi:clippy-191-trvials, r=matklad
bors [Thu, 5 Apr 2018 09:22:15 +0000 (09:22 +0000)]
Auto merge of #5280 - klausi:clippy-191-trvials, r=matklad

chore(clippy): Simplify minor stuff found by clippy

Executed clippy 0.0.191, fixed the trivial stuff.
Filed https://github.com/rust-lang-nursery/rust-clippy/issues/2615 for all the format_err!() false positives.

7 years agoAuto merge of #5294 - memoryleak47:typo, r=alexcrichton
bors [Thu, 5 Apr 2018 05:05:45 +0000 (05:05 +0000)]
Auto merge of #5294 - memoryleak47:typo, r=alexcrichton

fixed a few typos

I detected them using https://github.com/memoryleak47/typo.

7 years agofixed a few typos
memoryleak47 [Thu, 5 Apr 2018 01:45:15 +0000 (03:45 +0200)]
fixed a few typos

7 years agochore(clippy): Fix test assertion and simplify code in crates-io
Klaus Purer [Wed, 4 Apr 2018 21:06:26 +0000 (23:06 +0200)]
chore(clippy): Fix test assertion and simplify code in crates-io

7 years agochore(clippy): Simplify to Path.exists() and remove some more &
Klaus Purer [Tue, 3 Apr 2018 20:50:36 +0000 (22:50 +0200)]
chore(clippy): Simplify to Path.exists() and remove some more &

7 years agochore(clippy): Simplify minor stuff found by clippy
Klaus Purer [Mon, 2 Apr 2018 19:25:59 +0000 (21:25 +0200)]
chore(clippy): Simplify minor stuff found by clippy

7 years agoAuto merge of #5293 - Eh2406:InternMoreStrings, r=alexcrichton
bors [Wed, 4 Apr 2018 19:49:20 +0000 (19:49 +0000)]
Auto merge of #5293 - Eh2406:InternMoreStrings, r=alexcrichton

Intern more strings

As pointed out in https://github.com/rust-lang/cargo/pull/5270#issuecomment-378372147, that clean up adds the mildly expensive `InternedString::new` to the hot path in the resolver.

The process of this PR is:
1. Find a `InternedString::new` in the hot path.
2. replace the argument of type `&str` that is passed along to `InternedString::new` with the type `InternedString`
3. add an `InternedString::new` to the callers until it type checked.
4. Repeat from step 1.

This stop if:
- It was traced back to something that was already an `InternedString`
- It was traced back to a `.to_string()` call
- It was in a persistent object creation

cc:
- @djc this is building on your work, I don't want to get in your way.
- @alexcrichton is this making things clearer and do you want to see a performance check?

7 years agoIntern more strings
Eh2406 [Wed, 4 Apr 2018 17:42:18 +0000 (13:42 -0400)]
Intern more strings
cargo +stable fmt

7 years agoAuto merge of #5292 - djc:feature-requirements, r=alexcrichton
bors [Wed, 4 Apr 2018 18:58:15 +0000 (18:58 +0000)]
Auto merge of #5292 - djc:feature-requirements, r=alexcrichton

Revert serialization of features to string type

Accidentally broken during #5270 and only noticed after merge.

cc @matklad @Eh2406

7 years agoRevert serialization of features to string type
Dirkjan Ochtman [Wed, 4 Apr 2018 18:07:57 +0000 (20:07 +0200)]
Revert serialization of features to string type

7 years agoAuto merge of #5270 - djc:feature-requirements, r=Eh2406
bors [Wed, 4 Apr 2018 16:28:33 +0000 (16:28 +0000)]
Auto merge of #5270 - djc:feature-requirements, r=Eh2406

Introduce FeatureValue type to represent features table values

This is the next step towards #1286 (after #5258). The goal here is to have a central place in the code where feature strings are interpreted as (a) a feature, (b) a dependency or (c) a dependency/feature combo, and anchor that interpretation in the type system as an enum.

I've spent quite a bit of effort avoiding extra string allocations, complicating the code a bit; notice in particular the use of `Cow<str>` in `FeatureValue` variants, and the slight workaround in `Context::resolve_features()` and `build_requirements()`. I hope this is all okay.

cc @Eh2406

7 years agoExtract function to build feature map for readability
Dirkjan Ochtman [Sat, 31 Mar 2018 15:34:19 +0000 (17:34 +0200)]
Extract function to build feature map for readability

7 years agoIntroduce FeatureValue enum for tracking feature types
Dirkjan Ochtman [Sun, 15 Oct 2017 12:23:33 +0000 (14:23 +0200)]
Introduce FeatureValue enum for tracking feature types

7 years agoDefine FeatureMap type as an abstraction
Dirkjan Ochtman [Sat, 14 Oct 2017 09:18:50 +0000 (11:18 +0200)]
Define FeatureMap type as an abstraction

7 years agoAuto merge of #5290 - ehuss:lp-help, r=matklad
bors [Wed, 4 Apr 2018 04:36:06 +0000 (04:36 +0000)]
Auto merge of #5290 - ehuss:lp-help, r=matklad

locate-project: Fix help description.

7 years agolocate-project: Fix help description.
Eric Huss [Wed, 4 Apr 2018 04:03:10 +0000 (21:03 -0700)]
locate-project: Fix help description.

7 years agoAuto merge of #5288 - alexcrichton:another-fix, r=matklad
bors [Tue, 3 Apr 2018 23:41:50 +0000 (23:41 +0000)]
Auto merge of #5288 - alexcrichton:another-fix, r=matklad

Less aggressively poison sources on builds

Discovered in #5257 the changes in #5215 were slightly too aggressively
poisoning sources to require updates, thinking that a manifest changed when it
actually hadn't.

Non-workspace-member path dependencies with optional/dev-dependencies
don't show up in the lock file, so the previous logic would recognize this and
think that the dependency missing from the lock file was just added and would
require a registry update.

The fix in this commit effectively just skips all of these dependencies in
non-workspace members. This means that this will be slightly buggy if an
optional dependency that's activated is added, but that's hopefully something we
can tackle later.

Closes #5257

7 years agoAuto merge of #5287 - matklad:safer-intern, r=Eh2406
bors [Tue, 3 Apr 2018 22:50:12 +0000 (22:50 +0000)]
Auto merge of #5287 - matklad:safer-intern, r=Eh2406

Slightly improve InternedString

* Use `&'static str` instead of (ptr, len) pair to reduce unsafety.
* try make hash calculation O(1) instead of O(n), fail miserably,
  document findings.
* Rename `to_inner` -> `as_str()`.

7 years agoLess aggressively poison sources on builds
Alex Crichton [Tue, 3 Apr 2018 18:42:44 +0000 (11:42 -0700)]
Less aggressively poison sources on builds

Discovered in #5257 the changes in #5215 were slightly too aggressively
poisoning sources to require updates, thinking that a manifest changed when it
actually hadn't.

Non-workspace-member path dependencies with optional/dev-dependencies
don't show up in the lock file, so the previous logic would recognize this and
think that the dependency missing from the lock file was just added and would
require a registry update.

The fix in this commit effectively just skips all of these dependencies in
non-workspace members. This means that this will be slightly buggy if an
optional dependency that's activated is added, but that's hopefully something we
can tackle later.

Closes #5257

7 years agoSlightly improve InternedString
Aleksey Kladov [Tue, 3 Apr 2018 18:42:18 +0000 (21:42 +0300)]
Slightly improve InternedString

* Use `&'static str` instead of (ptr, len) pair to reduce unsafety.
* try make hash calculation O(1) instead of O(n), fail miserably,
  document findings.
* Rename `to_inner` -> `as_str()`.

7 years agoAuto merge of #5203 - matklad:out-dir, r=alexcrichton
bors [Tue, 3 Apr 2018 18:52:50 +0000 (18:52 +0000)]
Auto merge of #5203 - matklad:out-dir, r=alexcrichton

cargo build --out-dir

This is intended to fix https://github.com/rust-lang/cargo/issues/4875. Very much work in progress, just to figure out how exactly `--out-dir` should work :)

The path of least resistance for implementing `out-dir` would be to just link everything from `target/debug` to the `out-dir`. However, the problem with this approach is that we link *too much* to the `target/debug`. For example, if you run `cargo build --bin foo`, you'll find not only the `foo` itself there, but also rlibs from the same workspace.

I think it's rather important not to copy extra stuff to out-dir, so it is implemented as a completely new parameter, which is threaded through various config structs and applies *only* to the top-level units (i.e, to the stuff user explicitly requested to compile on the command line).

I also plan to add platform specific tests here, to check that we get .pdb on windows and .dSYM on macs for various crate-types.

Because, in general, a single target may produce multiple files, `out-dir` has to be a directory, you can't directly specify the output *file*.

Note that artifacts are still generated to the `target` dir as well.

Also cc @nirbheek, I hope that this might be useful for Meson integration, because `--out-dir` should be more straightforward to use than `--message-format=json`.

The end result, for `cargo build --bin rustraytracer --out-dir out` on windows looks like this:

![image](https://user-images.githubusercontent.com/1711539/37605115-941c0b22-2ba3-11e8-9685-9756a10fdfac.png)

Note how we have fewer files in the `out` :)

r? @alexcrichton

7 years agoFix tests for mac
Aleksey Kladov [Tue, 3 Apr 2018 15:23:02 +0000 (18:23 +0300)]
Fix tests for mac

7 years agoAuto merge of #5285 - matklad:create-all-the-dirs, r=alexcrichton
bors [Tue, 3 Apr 2018 14:40:15 +0000 (14:40 +0000)]
Auto merge of #5285 - matklad:create-all-the-dirs, r=alexcrichton

Replace home-grown create_dir_all with std::fs::create_dir_all

The old one is just the historical artifact, right?

7 years agoReplace home-grown create_dir_all with std::fs::create_dir_all
Aleksey Kladov [Tue, 3 Apr 2018 13:14:14 +0000 (16:14 +0300)]
Replace home-grown create_dir_all with std::fs::create_dir_all

7 years agoTest out-dir edge cases
Aleksey Kladov [Tue, 3 Apr 2018 13:06:56 +0000 (16:06 +0300)]
Test out-dir edge cases

7 years agoFeature gate `--out-dir`
Aleksey Kladov [Tue, 3 Apr 2018 12:43:45 +0000 (15:43 +0300)]
Feature gate `--out-dir`

7 years agoImplement `--out-dir` option
Aleksey Kladov [Tue, 3 Apr 2018 06:51:52 +0000 (09:51 +0300)]
Implement `--out-dir` option

7 years agoAuto merge of #5283 - matklad:better-assertion, r=matklad
bors [Tue, 3 Apr 2018 08:19:41 +0000 (08:19 +0000)]
Auto merge of #5283 - matklad:better-assertion, r=matklad

Make assertion more informative

This assertion triggers when I try to build Cargo simultaneosly on
linux host and windows VM via a shared folder, but it's not clear
what is going on.

7 years agoMake assertion more informative
Aleksey Kladov [Tue, 3 Apr 2018 08:17:21 +0000 (11:17 +0300)]
Make assertion more informative

This assertion triggers when I try to build Cargo simultaneosly on
linux host and windows VM via a shared folder, but it's not clear
what is going on.

7 years agoAuto merge of #5281 - matklad:cleanup, r=alexcrichton
bors [Mon, 2 Apr 2018 21:50:59 +0000 (21:50 +0000)]
Auto merge of #5281 - matklad:cleanup, r=alexcrichton

Cleanup

Hopefully the last round of `conext` refactoring :-)

r? @alexcrichton

7 years agoReplace triple with struct
Aleksey Kladov [Mon, 2 Apr 2018 21:36:30 +0000 (00:36 +0300)]
Replace triple with struct

7 years agoMove filename logic to FileType
Aleksey Kladov [Mon, 2 Apr 2018 21:11:38 +0000 (00:11 +0300)]
Move filename logic to FileType

7 years agoRename TargetFileType -> FileFlavor
Aleksey Kladov [Mon, 2 Apr 2018 20:55:57 +0000 (23:55 +0300)]
Rename TargetFileType -> FileFlavor

7 years agoMake TargetInfo.cfg private
Aleksey Kladov [Mon, 2 Apr 2018 20:51:48 +0000 (23:51 +0300)]
Make TargetInfo.cfg private

7 years agoExtract target info
Aleksey Kladov [Mon, 2 Apr 2018 20:39:42 +0000 (23:39 +0300)]
Extract target info

7 years agoAuto merge of #5274 - klnusbaum:epoch_5214, r=alexcrichton
bors [Mon, 2 Apr 2018 17:53:03 +0000 (17:53 +0000)]
Auto merge of #5274 - klnusbaum:epoch_5214, r=alexcrichton

rename epoch to edition

Per issue #5214 let's rename all instances of epoch to Edition

7 years agoAuto merge of #5259 - Mark-Simulacrum:seed-deserialize, r=alexcrichton
bors [Mon, 2 Apr 2018 17:05:00 +0000 (17:05 +0000)]
Auto merge of #5259 - Mark-Simulacrum:seed-deserialize, r=alexcrichton

Remove thread local, replacing with DeserializeSeed

@dtolnay -- is this the right way to implement this? It seems *very* verbose, but I suppose that's to be expected...

r? @alexcrichton

7 years agoReplace a triple with a struct for readability
Aleksey Kladov [Mon, 2 Apr 2018 16:30:13 +0000 (19:30 +0300)]
Replace a triple with a struct for readability

7 years agoAuto merge of #5278 - alexcrichton:no-rustfmt-ci, r=alexcrichton
bors [Mon, 2 Apr 2018 15:49:52 +0000 (15:49 +0000)]
Auto merge of #5278 - alexcrichton:no-rustfmt-ci, r=alexcrichton

Remove rustfmt from Travis

As discussed at the recent work week this is probably a bit too zealous at this
time, so let's hold off on it until it's either more stable or we figure out a
better way to deal with changes in rustfmt.

For now though it'll hopefully be easy to continue running rustfmt every so
often!

7 years agoRemove rustfmt from Travis
Alex Crichton [Mon, 2 Apr 2018 15:48:53 +0000 (08:48 -0700)]
Remove rustfmt from Travis

As discussed at the recent work week this is probably a bit too zealous at this
time, so let's hold off on it until it's either more stable or we figure out a
better way to deal with changes in rustfmt.

For now though it'll hopefully be easy to continue running rustfmt every so
often!

7 years agoSlightly better variable names
Aleksey Kladov [Mon, 2 Apr 2018 14:24:44 +0000 (17:24 +0300)]
Slightly better variable names

7 years agoAuto merge of #5276 - klausi:main-dead-code, r=matklad
bors [Sun, 1 Apr 2018 22:36:45 +0000 (22:36 +0000)]
Auto merge of #5276 - klausi:main-dead-code, r=matklad

chore(cli): Remove dead code in main()

I think that if() has been left behind by accident and can be removed?

7 years agochore(cli): Remove dead code in main()
Klaus Purer [Sun, 1 Apr 2018 19:35:23 +0000 (21:35 +0200)]
chore(cli): Remove dead code in main()

7 years agorename epoch to edition
Kurtis Nusbaum [Wed, 21 Mar 2018 16:41:22 +0000 (09:41 -0700)]
rename epoch to edition

7 years agoRemove thread local, replacing with DeserializeSeed
Mark Simulacrum [Thu, 29 Mar 2018 10:19:19 +0000 (12:19 +0200)]
Remove thread local, replacing with DeserializeSeed

7 years agoAuto merge of #5271 - djc:interning-spelling, r=alexcrichton
bors [Sat, 31 Mar 2018 20:56:23 +0000 (20:56 +0000)]
Auto merge of #5271 - djc:interning-spelling, r=alexcrichton

Fix spelling errors in interning module

7 years agoFix spelling errors in interning module
Dirkjan Ochtman [Sat, 31 Mar 2018 20:48:32 +0000 (22:48 +0200)]
Fix spelling errors in interning module

7 years agoAuto merge of #5269 - orestisf1993:issue-5265, r=matklad
bors [Sat, 31 Mar 2018 14:51:14 +0000 (14:51 +0000)]
Auto merge of #5269 - orestisf1993:issue-5265, r=matklad

cargo_new: remove redundant leading new lines from ignore files

Only add a leading new line in `.gitignore`/`.hgignore`/`.ignore` files when
the file existed before `cargo new`.

Fixes #5265.

7 years agocargo_new: remove redundant leading new lines from ignore files
Orestis Floros [Sat, 31 Mar 2018 14:26:58 +0000 (17:26 +0300)]
cargo_new: remove redundant leading new lines from ignore files

Only add a leading new line in .gitignore/.hgignore/.ignore files when
the file existed before 'cargo new'.

Fixes #5265.

7 years agoAuto merge of #5235 - klausi:Z-flag-docs, r=matklad
bors [Sat, 31 Mar 2018 13:28:20 +0000 (13:28 +0000)]
Auto merge of #5235 - klausi:Z-flag-docs, r=matklad

docs(Z-flags): Add description for each -Z flag in cargo help

Fixes #5155

There might be a more elaborate way of adding descriptions to available options and generating help text automatically. For now I think some static text is a good start.

7 years agotests(help): Fix assertion by using the full line text
Klaus Purer [Sat, 31 Mar 2018 09:33:14 +0000 (11:33 +0200)]
tests(help): Fix assertion by using the full line text

7 years agotests(help): Add test for -Z help output
Klaus Purer [Sat, 31 Mar 2018 09:19:28 +0000 (11:19 +0200)]
tests(help): Add test for -Z help output

7 years agodocs(Z-flags): Add description for each -Z flag in cargo -Z help
Klaus Purer [Fri, 30 Mar 2018 15:21:13 +0000 (17:21 +0200)]
docs(Z-flags): Add description for each -Z flag in cargo -Z help

7 years agoAuto merge of #5258 - djc:split-resolver, r=Eh2406
bors [Fri, 30 Mar 2018 03:07:39 +0000 (03:07 +0000)]
Auto merge of #5258 - djc:split-resolver, r=Eh2406

Split resolver module to make it more manageable

The `core::resolver` module is currently the largest in Cargo, at some 2000 lines. Here's an attempt at splitting it into more reasonable parts and reordering the code in it for better comprehensibility.

Splitting is done in three major steps:

* Move the `Resolve` type and its dependencies into a separate module (~220 lines)
* Move utility data types into a separate module (~400 lines)
* Move the `Context` type and its dependencies into a separate module (~400 lines)

This halves the size of the root module, which is then reordered to make it more readable.

(This is a yak-shaving expedition of sorts, in preparation for #1286.)

7 years agoReorder code in resolver module for better readability
Dirkjan Ochtman [Thu, 29 Mar 2018 09:11:17 +0000 (11:11 +0200)]
Reorder code in resolver module for better readability

7 years agoMove resolver Context initialization into a method
Dirkjan Ochtman [Thu, 29 Mar 2018 09:07:49 +0000 (11:07 +0200)]
Move resolver Context initialization into a method

7 years agoMove resolver::Context into new resolver::context module
Dirkjan Ochtman [Thu, 29 Mar 2018 08:49:01 +0000 (10:49 +0200)]
Move resolver::Context into new resolver::context module

7 years agoMove utility types from resolver into resolver::types
Dirkjan Ochtman [Thu, 29 Mar 2018 08:18:58 +0000 (10:18 +0200)]
Move utility types from resolver into resolver::types

7 years agoMove resolver::Resolve into a new resolver::resolve module
Dirkjan Ochtman [Wed, 28 Mar 2018 13:51:09 +0000 (15:51 +0200)]
Move resolver::Resolve into a new resolver::resolve module

7 years agoAuto merge of #5261 - djc:reformat, r=matklad
bors [Thu, 29 Mar 2018 19:34:06 +0000 (19:34 +0000)]
Auto merge of #5261 - djc:reformat, r=matklad

Fix formatting issues with cargo fmt

Noticed these unrelated formatting problems while working on #5258.

7 years agoFix formatting issues with cargo fmt
Dirkjan Ochtman [Thu, 29 Mar 2018 17:40:02 +0000 (19:40 +0200)]
Fix formatting issues with cargo fmt

7 years agoAuto merge of #5253 - matklad:unit-meta-2, r=alexcrichton
bors [Wed, 28 Mar 2018 23:05:50 +0000 (23:05 +0000)]
Auto merge of #5253 - matklad:unit-meta-2, r=alexcrichton

Introduce compilation files

Just another context refactoring

7 years agoAuto merge of #5255 - matklad:rustdoc-features, r=alexcrichton
bors [Wed, 28 Mar 2018 14:21:26 +0000 (14:21 +0000)]
Auto merge of #5255 - matklad:rustdoc-features, r=alexcrichton

Restore --features args for cargo rustdoc

Closes https://github.com/rust-lang/cargo/issues/5254

7 years agoRestore --features args for cargo rustdoc
Aleksey Kladov [Tue, 27 Mar 2018 22:56:46 +0000 (01:56 +0300)]
Restore --features args for cargo rustdoc

It was accidentally omited when migrating to clap

7 years agoIntroduce compilation files
Aleksey Kladov [Fri, 23 Mar 2018 13:57:39 +0000 (16:57 +0300)]
Introduce compilation files

7 years agoAuto merge of #5252 - matklad:new-context-new, r=alexcrichton
bors [Tue, 27 Mar 2018 18:14:32 +0000 (18:14 +0000)]
Auto merge of #5252 - matklad:new-context-new, r=alexcrichton

Supply units to the context at the point of creation

This slightly reshuffles `Context` creation. The main benefit is that we know the set of units when we do `Context::new`, so we could use it to precalculate more things.

7 years agoSupply units to the context at the point of creation
Aleksey Kladov [Tue, 27 Mar 2018 16:03:22 +0000 (19:03 +0300)]
Supply units to the context at the point of creation

7 years agoAuto merge of #5249 - alexcrichton:run-rustc-less, r=matklad
bors [Tue, 27 Mar 2018 13:58:26 +0000 (13:58 +0000)]
Auto merge of #5249 - alexcrichton:run-rustc-less, r=matklad

Run `rustc` for information fewer times

Currently if you pass `--target` the same as rustc's host Cargo will run `rustc`
on extra time to learn information, but we only need to run it once to learn
such information!

7 years agoRun `rustc` for information fewer times
Alex Crichton [Tue, 27 Mar 2018 11:55:23 +0000 (04:55 -0700)]
Run `rustc` for information fewer times

Currently if you pass `--target` the same as rustc's host Cargo will run `rustc`
on extra time to learn information, but we only need to run it once to learn
such information!

7 years agoAuto merge of #5250 - rleungx:tweak-error-message, r=matklad
bors [Tue, 27 Mar 2018 13:16:48 +0000 (13:16 +0000)]
Auto merge of #5250 - rleungx:tweak-error-message, r=matklad

tweak error message

Closes #5238.

7 years agoaddress comment
rleungx [Tue, 27 Mar 2018 12:54:18 +0000 (20:54 +0800)]
address comment

7 years agotweak error message
rleungx [Tue, 27 Mar 2018 12:34:18 +0000 (20:34 +0800)]
tweak error message

7 years agoAuto merge of #5205 - gibix:i2773, r=alexcrichton
bors [Tue, 27 Mar 2018 12:19:45 +0000 (12:19 +0000)]
Auto merge of #5205 - gibix:i2773, r=alexcrichton

fix #2773 with new precise encode

Changed the precise encode from <pkg>=<precise> to <pkg>=<present_version>-><future_version> in order to check the correct requirements.

cc @lu-zero

7 years agoAuto merge of #5228 - phil-opp:target-spec, r=alexcrichton
bors [Mon, 26 Mar 2018 13:00:26 +0000 (13:00 +0000)]
Auto merge of #5228 - phil-opp:target-spec, r=alexcrichton

Add support for absolute target.json paths

Builds upon https://github.com/rust-lang/rust/pull/49019 with the goal to provide a solution to https://github.com/rust-lang/cargo/issues/4905.

This PR does two things:

~~1. It appends a hash of the target path to the target folder name if a `*.json` path is passed as `--target`, like it's done in https://github.com/rust-lang/rust/pull/49019. This helps differentiating targets with the same JSON file name and avoids sysroot clashes in `xargo`.~~ See https://github.com/rust-lang/cargo/pull/5228#discussion_r176827531
2. It canonicalizes the passed target path (if it's a `*.json` path), so that the path stays valid when building dependencies and setting the `RUST_TARGET_PATH` environment variable is no longer necessary.

7 years agoAuto merge of #5244 - Eijebong:tempfile, r=alexcrichton
bors [Mon, 26 Mar 2018 12:37:09 +0000 (12:37 +0000)]
Auto merge of #5244 - Eijebong:tempfile, r=alexcrichton

Replace tempdir by tempfile

The former has been deprecated in favor of the latter

7 years agoReplace tempdir by tempfile
Bastien Orivel [Mon, 26 Mar 2018 10:42:30 +0000 (12:42 +0200)]
Replace tempdir by tempfile

The former has been deprecated in favor of the latter

7 years agoAuto merge of #5243 - alexcrichton:more-feature-sync, r=alexcrichton
bors [Mon, 26 Mar 2018 06:53:49 +0000 (06:53 +0000)]
Auto merge of #5243 - alexcrichton:more-feature-sync, r=alexcrichton

More effort to only compile Cargo once

Hopefully one final change necessary for rust-lang/rust#49053

7 years agoMore effort to only compile Cargo once
Alex Crichton [Mon, 26 Mar 2018 06:52:55 +0000 (23:52 -0700)]
More effort to only compile Cargo once

Hopefully one final change necessary for rust-lang/rust#49053

7 years agoAdd custom target tests
Philipp Oppermann [Sat, 24 Mar 2018 20:38:48 +0000 (21:38 +0100)]
Add custom target tests

7 years agoCanonicalize paths passed as `--target`
Philipp Oppermann [Thu, 22 Mar 2018 17:53:19 +0000 (18:53 +0100)]
Canonicalize paths passed as `--target`

7 years agoAuto merge of #5232 - matklad:unit-map, r=alexcrichton
bors [Sun, 25 Mar 2018 07:25:30 +0000 (07:25 +0000)]
Auto merge of #5232 - matklad:unit-map, r=alexcrichton

Refactor context to extract dependencies calculation to a separate mod

This makes unit dependency graph construction eager and moves it to a separate file.

Hopefully, this makes `Context` slightly easier to understand :)

7 years agoRefactor context to extract dependencies calculation to a separate mod
Aleksey Kladov [Fri, 23 Mar 2018 11:51:32 +0000 (14:51 +0300)]
Refactor context to extract dependencies calculation to a separate mod

7 years agoAuto merge of #5239 - alexcrichton:remove-scoped-tls, r=matklad
bors [Sat, 24 Mar 2018 19:54:49 +0000 (19:54 +0000)]
Auto merge of #5239 - alexcrichton:remove-scoped-tls, r=matklad

Remove scoped_tls dependency

This is causing [conflicts] with rebuilding upstream in rust-lang/rust, so
remove this for now until we figure out a better solution.

[conflicts]: https://github.com/rust-lang/rust/pull/49053#issuecomment-375906970

7 years agoRemove scoped_tls dependency
Alex Crichton [Sat, 24 Mar 2018 16:51:33 +0000 (09:51 -0700)]
Remove scoped_tls dependency

This is causing [conflicts] with rebuilding upstream in rust-lang/rust, so
remove this for now until we figure out a better solution.

[conflicts]: https://github.com/rust-lang/rust/pull/49053#issuecomment-375906970

7 years agoadd precise test
gibix [Sat, 24 Mar 2018 19:04:19 +0000 (20:04 +0100)]
add precise test

7 years agocargo fmt
gibix [Sat, 24 Mar 2018 19:04:02 +0000 (20:04 +0100)]
cargo fmt

7 years agofix typo , drop return and intermediate vector
gibix [Tue, 20 Mar 2018 10:02:29 +0000 (11:02 +0100)]
fix typo , drop return and intermediate vector

7 years agocargo fmt
gibix [Tue, 20 Mar 2018 08:58:51 +0000 (09:58 +0100)]
cargo fmt

7 years agofix #2773 with new precise encode
gibix [Mon, 19 Mar 2018 17:43:02 +0000 (18:43 +0100)]
fix #2773 with new precise encode

7 years agoAuto merge of #5213 - Eh2406:faster_resolver, r=alexcrichton
bors [Sat, 24 Mar 2018 16:59:59 +0000 (16:59 +0000)]
Auto merge of #5213 - Eh2406:faster_resolver, r=alexcrichton

Faster resolver: use a inverse-index to not activate the causes of conflict

This adds a test for https://github.com/rust-lang/cargo/issues/4810#issuecomment-357553286 with two extensions that make it harder. It is the last reproducible and in the wild exponentially slow resolution (that I have found).

The problem in the test is `backtrack_trap0 = "*"` is a lot of ways of saying `constrained = ">=1.1.0, <=2.0.0"` but `constrained= "2.0.1"` is already picked. Only then to try and solve `constrained= "~1.0.0"` which is incompatible. Our parent knows that we have been poisoned, and wont try to activate us again.  Because of the order we evaluate deps we end up backtracking to where `constrained: 1.1.0` is set instead of our parent. And so the poisoning does not help. This is harder then https://github.com/rust-lang/cargo/issues/4810#issuecomment-357553286 because:

1. Having multiple semver compatible versions of constrained in play makes for a lot more bookkeeping. Specifically bookkeeping I forgot when I first submitted this PR.
2. The problematic dependencies are added deep in a combinatorial explosion of possibilities. So if we don't correctly handle caching that `backtrack_trap0 = "*"` is doomed then we will never finish looking thru the different possibilities for `level0 = "*"`

This PR also includes a proof of concept solution for the test, which proves that it does solve https://github.com/rust-lang/cargo/issues/4810#issuecomment-357553286. The added code is tricky to read. It also adds a `O(remaining_deps)` job to every activation on the happy path, slower if the `past_conflicting_activations` is not empty.

I'd like some brainstorming on better solutions.

7 years agoaddress suggestions
Eh2406 [Fri, 23 Mar 2018 20:40:51 +0000 (16:40 -0400)]
address suggestions

7 years agoMove caching to a support struct and file
Eh2406 [Fri, 23 Mar 2018 15:39:12 +0000 (11:39 -0400)]
Move caching to a support struct and file