@@ -289,7 +289,7 @@ fn resolve_dependency(
289
289
} else {
290
290
let mut source = crate :: sources:: GitSource :: new ( src. source_id ( ) ?, config) ?;
291
291
let packages = source. read_packages ( ) ?;
292
- let package = infer_package ( packages, & src) ?;
292
+ let package = infer_package ( packages, & src, true ) ?;
293
293
Dependency :: from ( package. summary ( ) )
294
294
} ;
295
295
selected
@@ -314,7 +314,7 @@ fn resolve_dependency(
314
314
} else {
315
315
let source = crate :: sources:: PathSource :: new ( & path, src. source_id ( ) ?, config) ;
316
316
let packages = source. read_packages ( ) ?;
317
- let package = infer_package ( packages, & src) ?;
317
+ let package = infer_package ( packages, & src, false ) ?;
318
318
Dependency :: from ( package. summary ( ) )
319
319
} ;
320
320
selected
@@ -599,7 +599,11 @@ fn select_package(
599
599
}
600
600
}
601
601
602
- fn infer_package ( mut packages : Vec < Package > , src : & dyn std:: fmt:: Display ) -> CargoResult < Package > {
602
+ fn infer_package (
603
+ mut packages : Vec < Package > ,
604
+ src : & dyn std:: fmt:: Display ,
605
+ is_git_source : bool ,
606
+ ) -> CargoResult < Package > {
603
607
let package = match packages. len ( ) {
604
608
0 => {
605
609
anyhow:: bail!( "no packages found at `{src}`" ) ;
@@ -611,7 +615,24 @@ fn infer_package(mut packages: Vec<Package>, src: &dyn std::fmt::Display) -> Car
611
615
. map ( |p| p. name ( ) . as_str ( ) . to_owned ( ) )
612
616
. collect ( ) ;
613
617
names. sort_unstable ( ) ;
614
- anyhow:: bail!( "multiple packages found at `{src}`: {}" , names. join( ", " ) ) ;
618
+ anyhow:: bail!(
619
+ "multiple packages found at `{src}`:\n {}{}" ,
620
+ names
621
+ . iter( )
622
+ . map( |s| s. to_string( ) )
623
+ . coalesce( |x, y| if x. len( ) + y. len( ) < 78 {
624
+ Ok ( format!( "{x}, {y}" ) )
625
+ } else {
626
+ Err ( ( x, y) )
627
+ } )
628
+ . into_iter( )
629
+ . format( "\n " ) ,
630
+ if is_git_source {
631
+ format!( "\n To disambiguate, run `cargo add --git {src} <crate>`" )
632
+ } else {
633
+ "" . to_owned( )
634
+ }
635
+ ) ;
615
636
}
616
637
} ;
617
638
Ok ( package)
0 commit comments