Skip to content

Commit d297443

Browse files
committed
Better conflict output
1 parent 60b9ed6 commit d297443

File tree

2 files changed

+33
-9
lines changed

2 files changed

+33
-9
lines changed

src/main.rs

+3-9
Original file line numberDiff line numberDiff line change
@@ -158,20 +158,14 @@ fn resolve_dependencies(context: &CliContext) -> Vec<ResolvedDependency> {
158158
);
159159
if !resolution.is_success() {
160160
eprintln!("Failed to resolve all dependencies");
161+
let req_error_messages = resolution.req_error_messages();
161162

162163
for d in resolution.failed {
163164
eprintln!(" {d}");
164165
}
165166

166-
for (name, requirements) in resolution.req_failures {
167-
eprintln!(
168-
" {name}: {}",
169-
requirements
170-
.iter()
171-
.map(|x| x.to_string())
172-
.collect::<Vec<_>>()
173-
.join(", ")
174-
);
167+
if !req_error_messages.is_empty() {
168+
eprintln!("{}", req_error_messages.join("\n"));
175169
}
176170

177171
::std::process::exit(1)

src/resolver/result.rs

+30
Original file line numberDiff line numberDiff line change
@@ -95,4 +95,34 @@ impl<'d> Resolution<'d> {
9595
pub fn is_success(&self) -> bool {
9696
self.failed.is_empty() && self.req_failures.is_empty()
9797
}
98+
99+
pub fn req_error_messages(&self) -> Vec<String> {
100+
self.req_failures
101+
.iter()
102+
.map(|(name, reqs)| {
103+
let versions_msg = self
104+
.found
105+
.iter()
106+
.filter(|f| f.name == name.as_ref())
107+
.map(|x| format!(" * {} (from {})", x.version.original, x.source))
108+
.collect::<Vec<_>>()
109+
.join("\n");
110+
111+
let reqs_msg = reqs
112+
.iter()
113+
.map(|x| x.to_string())
114+
.collect::<Vec<_>>()
115+
.join(", ");
116+
117+
if versions_msg.is_empty() {
118+
format!("{}:\n - {} and no versions were found", name, reqs_msg)
119+
} else {
120+
format!(
121+
"{}:\n - {} and the following version(s) were found:\n{}",
122+
name, reqs_msg, versions_msg
123+
)
124+
}
125+
})
126+
.collect()
127+
}
98128
}

0 commit comments

Comments
 (0)