Closed
Description
Problem
I was trying to take some shortcuts in pinning dependency versions for a project by setting workspace.dependencies
and then patching each crate to read from the workspace by setting workspace = true
. Repro here. Causes this panic on the latest nightly:
thread 'main' panicked at 'internal error: entered unreachable code', src/tools/cargo/src/cargo/util/toml/mod.rs:2509:45
stack backtrace:
0: _rust_begin_unwind
1: core::panicking::panic_fmt
2: core::panicking::panic
3: <cargo::util::toml::TomlDependency>::to_dependency
4: <core::iter::adapters::map::Map<alloc::collections::btree::map::Iter<alloc::string::String, cargo::util::toml::TomlDependency>, <cargo::util::toml::TomlManifest>::patch::{closure#2}> as core::iter::traits::iterator::Iterator>::try_fold::<(), <core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<alloc::collections::btree::map::Iter<alloc::string::String, cargo::util::toml::TomlDependency>, <cargo::util::toml::TomlManifest>::patch::{closure#2}>, core::result::Result<core::convert::Infallible, anyhow::Error>> as core::iter::traits::iterator::Iterator>::try_fold<(), core::iter::traits::iterator::Iterator::try_for_each::call<cargo::core::dependency::Dependency, core::ops::control_flow::ControlFlow<cargo::core::dependency::Dependency>, core::ops::control_flow::ControlFlow<cargo::core::dependency::Dependency>::Break>::{closure#0}, core::ops::control_flow::ControlFlow<cargo::core::dependency::Dependency>>::{closure#0}, core::ops::control_flow::ControlFlow<core::ops::control_flow::ControlFlow<cargo::core::dependency::Dependency>>>
5: <alloc::vec::Vec<cargo::core::dependency::Dependency> as alloc::vec::spec_from_iter::SpecFromIter<cargo::core::dependency::Dependency, core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<alloc::collections::btree::map::Iter<alloc::string::String, cargo::util::toml::TomlDependency>, <cargo::util::toml::TomlManifest>::patch::{closure#2}>, core::result::Result<core::convert::Infallible, anyhow::Error>>>>::from_iter
6: core::iter::adapters::try_process::<core::iter::adapters::map::Map<alloc::collections::btree::map::Iter<alloc::string::String, cargo::util::toml::TomlDependency>, <cargo::util::toml::TomlManifest>::patch::{closure#2}>, cargo::core::dependency::Dependency, core::result::Result<core::convert::Infallible, anyhow::Error>, <core::result::Result<alloc::vec::Vec<cargo::core::dependency::Dependency>, anyhow::Error> as core::iter::traits::collect::FromIterator<core::result::Result<cargo::core::dependency::Dependency, anyhow::Error>>>::from_iter<core::iter::adapters::map::Map<alloc::collections::btree::map::Iter<alloc::string::String, cargo::util::toml::TomlDependency>, <cargo::util::toml::TomlManifest>::patch::{closure#2}>>::{closure#0}, alloc::vec::Vec<cargo::core::dependency::Dependency>>
7: <cargo::util::toml::TomlManifest>::patch
8: cargo::util::toml::read_manifest_from_str
9: cargo::util::toml::read_manifest
10: <cargo::core::workspace::Packages>::load
11: <cargo::core::workspace::Workspace>::find_root
12: <cargo::core::workspace::Workspace>::new
13: <clap::parser::matches::arg_matches::ArgMatches as cargo::util::command_prelude::ArgMatchesExt>::workspace
14: cargo::commands::test::exec
15: cargo::cli::main
16: cargo::main
Steps
- Take any project and put
a.workspace = true
in the[patch.crates-io]
Possible Solution(s)
Just throw an error saying this is unsupported? It might be useful if it was supported though.
Notes
No response
Version
cargo 1.68.0-nightly (2381cbdb4 2022-12-23)
release: 1.68.0-nightly
commit-hash: 2381cbdb4e9b07090f552d34a44a529b6e620e44
commit-date: 2022-12-23
host: aarch64-apple-darwin
libgit2: 1.5.0 (sys:0.15.0 vendored)
libcurl: 7.84.0 (sys:0.4.59+curl-7.86.0 system ssl:(SecureTransport) LibreSSL/3.3.6)
os: Mac OS 13.0.1 [64-bit]