@@ -423,25 +423,66 @@ pub fn download<Telem: Telemetry>(
423423 let major_versions_available =
424424 dependency:: check_for_major_version_updates ( & manifest, package_fetcher) ;
425425 if !major_versions_available. is_empty ( ) {
426- pretty_print_major_versions_available ( major_versions_available) ;
426+ eprintln ! (
427+ "{}" ,
428+ pretty_print_major_versions_available( major_versions_available)
429+ ) ;
427430 }
428431
429432 Ok ( manifest)
430433}
431434
432- fn pretty_print_major_versions_available ( versions : dependency:: PackageVersionDiffs ) {
433- let longest_package_name_length = versions. keys ( ) . map ( |name| name. len ( ) ) . max ( ) . unwrap_or ( 10 ) ;
435+ fn pretty_print_major_versions_available ( versions : dependency:: PackageVersionDiffs ) -> String {
436+ let total_lines = versions. len ( ) + 3 ;
437+ let versions = versions
438+ . iter ( )
439+ . map ( |( name, ( v1, v2) ) | ( name, v1. to_string ( ) , v2. to_string ( ) ) )
440+ . sorted ( ) ;
441+
442+ let longest_parts = versions. clone ( ) . fold (
443+ ( 0 , 0 , 0 ) ,
444+ |( max_name, max_curr, max_major) , ( name, curr, major) | {
445+ (
446+ max_name. max ( name. len ( ) ) ,
447+ max_curr. max ( curr. len ( ) ) ,
448+ max_major. max ( major. len ( ) ) ,
449+ )
450+ } ,
451+ ) ;
452+
453+ let ( longest_package_name_length, longest_current_version_length, longest_major_version_length) =
454+ longest_parts;
434455
435- // print to stderr instead of stdout because this is not part of the standard output of this
436- // command
437- eprintln ! ( "\n Hint: the following dependencies have new major versions available...\n " ) ;
438- for ( name, ( v1, v2) ) in versions {
439- let padding = " " . repeat ( longest_package_name_length - name. len ( ) ) ;
456+ let mut output_string = String :: with_capacity (
457+ ( longest_package_name_length
458+ + longest_current_version_length
459+ + longest_major_version_length
460+ + 5 )
461+ * total_lines,
462+ ) ;
440463
441- // lazily assuming the longest version could be 8 characters. eg: 1.1234.2
442- // excluding qualifiers other than x.y.z
443- eprintln ! ( "{name}:{padding} {v1:<8} -> {v2:<8}" ) ;
464+ output_string
465+ . push_str ( "\n Hint: the following dependencies have new major versions available:\n \n " ) ;
466+ for ( name, v1, v2) in versions {
467+ let name_padding = " " . repeat ( longest_package_name_length - name. len ( ) ) ;
468+ let curr_ver_padding = " " . repeat ( longest_current_version_length - v1. to_string ( ) . len ( ) ) ;
469+
470+ output_string. push_str (
471+ & [
472+ name,
473+ & name_padding,
474+ " " ,
475+ & v1. to_string ( ) ,
476+ & curr_ver_padding,
477+ " -> " ,
478+ & v2. to_string ( ) ,
479+ "\n " ,
480+ ]
481+ . concat ( ) ,
482+ ) ;
444483 }
484+
485+ output_string
445486}
446487
447488async fn add_missing_packages < Telem : Telemetry > (
0 commit comments