use crossbeam_utils::thread::Scope;
use jobserver::{Acquired, Client, HelperThread};
use log::{debug, info, trace};
+use semver::Version;
use super::context::OutputFile;
use super::job::{
FutureBreakageItem, FutureIncompatReportPackage, OnDiskReports,
};
use crate::core::resolver::ResolveBehavior;
-use crate::core::{FeatureValue, PackageId, Shell, TargetKind};
+use crate::core::{PackageId, Shell, TargetKind};
use crate::util::diagnostic_server::{self, DiagnosticPrinter};
-use crate::util::interning::InternedString;
use crate::util::machine_message::{self, Message as _};
use crate::util::CargoResult;
use crate::util::{self, internal, profile};
fn back_compat_notice(&self, cx: &Context<'_, '_>, unit: &Unit) -> CargoResult<()> {
if unit.pkg.name() != "diesel"
- || unit.pkg.version().major != 1
+ || unit.pkg.version() >= &Version::new(1, 4, 8)
|| cx.bcx.ws.resolve_behavior() == ResolveBehavior::V1
|| !unit.pkg.package_id().source_id().is_registry()
|| !unit.features.is_empty()
{
return Ok(());
}
- let other_diesel = match cx
+ if !cx
.bcx
.unit_graph
.keys()
- .find(|unit| unit.pkg.name() == "diesel" && !unit.features.is_empty())
+ .any(|unit| unit.pkg.name() == "diesel" && !unit.features.is_empty())
{
- Some(u) => u,
- // Unlikely due to features.
- None => return Ok(()),
- };
- let mut features_suggestion: BTreeSet<_> = other_diesel.features.iter().collect();
- let fmap = other_diesel.pkg.summary().features();
- // Remove any unnecessary features.
- for feature in &other_diesel.features {
- if let Some(feats) = fmap.get(feature) {
- for feat in feats {
- if let FeatureValue::Feature(f) = feat {
- features_suggestion.remove(&f);
- }
- }
- }
+ return Ok(());
}
- features_suggestion.remove(&InternedString::new("default"));
- let features_suggestion = toml::to_string(&features_suggestion).unwrap();
-
- cx.bcx.config.shell().note(&format!(
+ cx.bcx.config.shell().note(
"\
This error may be due to an interaction between diesel and Cargo's new
-feature resolver. Some workarounds you may want to consider:
-- Add a build-dependency in Cargo.toml on diesel to force Cargo to add the appropriate
- features. This may look something like this:
-
- [build-dependencies]
- diesel = {{ version = \"{}\", features = {} }}
-
-- Try using the previous resolver by setting `resolver = \"1\"` in `Cargo.toml`
- (see <https://doc.rust-lang.org/cargo/reference/resolver.html#resolver-versions>
- for more information).
+feature resolver. Try updating to diesel 1.4.8 to fix this error.
",
- unit.pkg.version(),
- features_suggestion
- ))?;
+ )?;
Ok(())
}
}
use log::{debug, trace, warn};
use rustfix::diagnostics::Diagnostic;
use rustfix::{self, CodeFix};
+use semver::Version;
use crate::core::compiler::{CompileKind, RustcTargetData, TargetInfo};
use crate::core::resolver::features::{DiffMap, FeatureOpts, FeatureResolver};
use crate::core::resolver::{HasDevUnits, Resolve, ResolveBehavior};
-use crate::core::{Edition, MaybePackage, Workspace};
+use crate::core::{Edition, MaybePackage, PackageId, Workspace};
use crate::ops::resolve::WorkspaceResolve;
use crate::ops::{self, CompileOptions};
use crate::util::diagnostic_server::{Message, RustfixDiagnosticServer};
}
fn report_maybe_diesel(config: &Config, resolve: &Resolve) -> CargoResult<()> {
- if resolve
- .iter()
- .any(|pid| pid.name() == "diesel" && pid.version().major == 1)
- && resolve.iter().any(|pid| pid.name() == "diesel_migrations")
- {
+ fn is_broken_diesel(pid: PackageId) -> bool {
+ pid.name() == "diesel" && pid.version() < &Version::new(1, 4, 8)
+ }
+
+ fn is_broken_diesel_migration(pid: PackageId) -> bool {
+ pid.name() == "diesel_migrations" && pid.version().major <= 1
+ }
+
+ if resolve.iter().any(is_broken_diesel) && resolve.iter().any(is_broken_diesel_migration) {
config.shell().note(
"\
This project appears to use both diesel and diesel_migrations. These packages have
a known issue where the build may fail due to the version 2 resolver preventing
-feature unification between those two packages. See
-<https://github.com/rust-lang/cargo/issues/9450> for some potential workarounds.
+feature unification between those two packages. Please update to at least diesel 1.4.8
+to prevent this issue from happening.
",
)?;
}