Skip to content

Commit e0d64f9

Browse files
committed
Change have_dev_units from a bool to enum HasDevUnits for clarity.
1 parent 8973b95 commit e0d64f9

File tree

9 files changed

+47
-26
lines changed

9 files changed

+47
-26
lines changed

src/cargo/core/compiler/standard_lib.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
use crate::core::compiler::{BuildContext, CompileKind, CompileMode, RustcTargetData, Unit};
44
use crate::core::profiles::UnitFor;
55
use crate::core::resolver::features::ResolvedFeatures;
6-
use crate::core::resolver::ResolveOpts;
6+
use crate::core::resolver::{HasDevUnits, ResolveOpts};
77
use crate::core::{Dependency, PackageId, PackageSet, Resolve, SourceId, Workspace};
88
use crate::ops::{self, Packages};
99
use crate::util::errors::CargoResult;
@@ -102,8 +102,14 @@ pub fn resolve_std<'cfg>(
102102
/*dev_deps*/ false, &features, /*all_features*/ false,
103103
/*uses_default_features*/ true,
104104
);
105-
let resolve =
106-
ops::resolve_ws_with_opts(&std_ws, target_data, requested_target, &opts, &specs, false)?;
105+
let resolve = ops::resolve_ws_with_opts(
106+
&std_ws,
107+
target_data,
108+
requested_target,
109+
&opts,
110+
&specs,
111+
HasDevUnits::No,
112+
)?;
107113
Ok((
108114
resolve.pkg_set,
109115
resolve.targeted_resolve,

src/cargo/core/resolver/features.rs

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,20 @@ struct FeatureOpts {
5656
compare: bool,
5757
}
5858

59+
/// Flag to indicate if Cargo is building *any* dev units (tests, examples, etc.).
60+
///
61+
/// This disables decoupling of dev dependencies. It may be possible to relax
62+
/// this in the future, but it will require significant changes to how unit
63+
/// dependencies are computed, and can result in longer build times with
64+
/// `cargo test` because the lib may need to be built 3 times instead of
65+
/// twice.
66+
pub enum HasDevUnits {
67+
Yes,
68+
No,
69+
}
70+
5971
impl FeatureOpts {
60-
fn new(config: &Config, has_dev_units: bool) -> CargoResult<FeatureOpts> {
72+
fn new(config: &Config, has_dev_units: HasDevUnits) -> CargoResult<FeatureOpts> {
6173
let mut opts = FeatureOpts::default();
6274
let unstable_flags = config.cli_unstable();
6375
opts.package_features = unstable_flags.package_features;
@@ -93,13 +105,7 @@ impl FeatureOpts {
93105
enable(&env_opts)?;
94106
}
95107
}
96-
if has_dev_units {
97-
// Decoupling of dev deps is not allowed if any test/bench/example
98-
// is being built. It may be possible to relax this in the future,
99-
// but it will require significant changes to how unit
100-
// dependencies are computed, and can result in longer build times
101-
// with `cargo test` because the lib may need to be built 3 times
102-
// instead of twice.
108+
if let HasDevUnits::Yes = has_dev_units {
103109
opts.decouple_dev_deps = false;
104110
}
105111
Ok(opts)
@@ -211,7 +217,7 @@ impl<'a, 'cfg> FeatureResolver<'a, 'cfg> {
211217
requested_features: &RequestedFeatures,
212218
specs: &[PackageIdSpec],
213219
requested_target: CompileKind,
214-
has_dev_units: bool,
220+
has_dev_units: HasDevUnits,
215221
) -> CargoResult<ResolvedFeatures> {
216222
use crate::util::profile;
217223
let _p = profile::start("resolve features");

src/cargo/core/resolver/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ use self::types::{FeaturesSet, RcVecIter, RemainingDeps, ResolverProgress};
6969
pub use self::encode::Metadata;
7070
pub use self::encode::{EncodableDependency, EncodablePackageId, EncodableResolve};
7171
pub use self::errors::{ActivateError, ActivateResult, ResolveError};
72+
pub use self::features::HasDevUnits;
7273
pub use self::resolve::{Resolve, ResolveVersion};
7374
pub use self::types::ResolveOpts;
7475

src/cargo/ops/cargo_clean.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use crate::core::compiler::unit_dependencies;
77
use crate::core::compiler::{BuildConfig, BuildContext, CompileKind, CompileMode, Context};
88
use crate::core::compiler::{RustcTargetData, UnitInterner};
99
use crate::core::profiles::{Profiles, UnitFor};
10-
use crate::core::resolver::features::{FeatureResolver, RequestedFeatures};
10+
use crate::core::resolver::features::{FeatureResolver, HasDevUnits, RequestedFeatures};
1111
use crate::core::{PackageIdSpec, Workspace};
1212
use crate::ops;
1313
use crate::util::errors::{CargoResult, CargoResultExt};
@@ -86,7 +86,7 @@ pub fn clean(ws: &Workspace<'_>, opts: &CleanOptions<'_>) -> CargoResult<()> {
8686
&requested_features,
8787
&specs,
8888
bcx.build_config.requested_kind,
89-
true,
89+
HasDevUnits::Yes,
9090
)?;
9191
let mut units = Vec::new();
9292

src/cargo/ops/cargo_compile.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ use crate::core::compiler::{CompileKind, CompileMode, RustcTargetData, Unit};
3535
use crate::core::compiler::{DefaultExecutor, Executor, UnitInterner};
3636
use crate::core::profiles::{Profiles, UnitFor};
3737
use crate::core::resolver::features;
38-
use crate::core::resolver::{Resolve, ResolveOpts};
38+
use crate::core::resolver::{HasDevUnits, Resolve, ResolveOpts};
3939
use crate::core::{LibKind, Package, PackageSet, Target};
4040
use crate::core::{PackageId, PackageIdSpec, TargetKind, Workspace};
4141
use crate::ops;
@@ -312,7 +312,10 @@ pub fn compile_ws<'a>(
312312
let specs = spec.to_package_id_specs(ws)?;
313313
let dev_deps = ws.require_optional_deps() || filter.need_dev_deps(build_config.mode);
314314
let opts = ResolveOpts::new(dev_deps, features, all_features, !no_default_features);
315-
let has_dev_units = filter.need_dev_deps(build_config.mode);
315+
let has_dev_units = match filter.need_dev_deps(build_config.mode) {
316+
true => HasDevUnits::Yes,
317+
false => HasDevUnits::No,
318+
};
316319
let resolve = ops::resolve_ws_with_opts(
317320
ws,
318321
&target_data,

src/cargo/ops/cargo_doc.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::core::compiler::RustcTargetData;
2-
use crate::core::resolver::ResolveOpts;
2+
use crate::core::resolver::{HasDevUnits, ResolveOpts};
33
use crate::core::{Shell, Workspace};
44
use crate::ops;
55
use crate::util::CargoResult;
@@ -27,8 +27,14 @@ pub fn doc(ws: &Workspace<'_>, options: &DocOptions<'_>) -> CargoResult<()> {
2727
);
2828
let requested_kind = options.compile_opts.build_config.requested_kind;
2929
let target_data = RustcTargetData::new(ws, requested_kind)?;
30-
let ws_resolve =
31-
ops::resolve_ws_with_opts(ws, &target_data, requested_kind, &opts, &specs, false)?;
30+
let ws_resolve = ops::resolve_ws_with_opts(
31+
ws,
32+
&target_data,
33+
requested_kind,
34+
&opts,
35+
&specs,
36+
HasDevUnits::No,
37+
)?;
3238

3339
let ids = specs
3440
.iter()

src/cargo/ops/cargo_install.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use tempfile::Builder as TempFileBuilder;
88

99
use crate::core::compiler::Freshness;
1010
use crate::core::compiler::{CompileKind, DefaultExecutor, Executor, RustcTargetData};
11-
use crate::core::resolver::ResolveOpts;
11+
use crate::core::resolver::{HasDevUnits, ResolveOpts};
1212
use crate::core::{Edition, Package, PackageId, PackageIdSpec, Source, SourceId, Workspace};
1313
use crate::ops;
1414
use crate::ops::common_for_install_and_uninstall::*;
@@ -506,7 +506,7 @@ fn check_yanked_install(ws: &Workspace<'_>) -> CargoResult<()> {
506506
CompileKind::Host,
507507
&ResolveOpts::everything(),
508508
&specs,
509-
false,
509+
HasDevUnits::No,
510510
)?;
511511
let mut sources = ws_resolve.pkg_set.sources_mut();
512512

src/cargo/ops/cargo_output_metadata.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use crate::core::compiler::{CompileKind, CompileTarget, RustcTargetData};
2-
use crate::core::resolver::{Resolve, ResolveOpts};
3-
42
use crate::core::dependency::DepKind;
3+
use crate::core::resolver::{HasDevUnits, Resolve, ResolveOpts};
54
use crate::core::{Dependency, InternedString, Package, PackageId, Workspace};
65
use crate::ops::{self, Packages};
76
use crate::util::CargoResult;
@@ -125,7 +124,7 @@ fn build_resolve_graph(
125124
requested_kind,
126125
&resolve_opts,
127126
&specs,
128-
true,
127+
HasDevUnits::Yes,
129128
)?;
130129
// Download all Packages. This is needed to serialize the information
131130
// for every package. In theory this could honor target filtering,

src/cargo/ops/resolve.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
use crate::core::compiler::{CompileKind, RustcTargetData};
1414
use crate::core::registry::PackageRegistry;
1515
use crate::core::resolver::features::{FeatureResolver, ResolvedFeatures};
16-
use crate::core::resolver::{self, Resolve, ResolveOpts};
16+
use crate::core::resolver::{self, HasDevUnits, Resolve, ResolveOpts};
1717
use crate::core::summary::Summary;
1818
use crate::core::Feature;
1919
use crate::core::{PackageId, PackageIdSpec, PackageSet, Source, SourceId, Workspace};
@@ -78,7 +78,7 @@ pub fn resolve_ws_with_opts<'a>(
7878
requested_target: CompileKind,
7979
opts: &ResolveOpts,
8080
specs: &[PackageIdSpec],
81-
has_dev_units: bool,
81+
has_dev_units: HasDevUnits,
8282
) -> CargoResult<WorkspaceResolve<'a>> {
8383
let mut registry = PackageRegistry::new(ws.config())?;
8484
let mut add_patches = true;

0 commit comments

Comments
 (0)