1010//! but forgot to bump its version.
1111//! ```
1212
13- use std:: collections:: HashSet ;
13+ use std:: collections:: HashMap ;
1414use std:: fmt:: Write ;
1515use std:: fs;
1616use std:: task;
@@ -124,9 +124,9 @@ fn bump_check(args: &clap::ArgMatches, config: &mut cargo::util::Config) -> Carg
124124 if let Some ( referenced_commit) = referenced_commit. as_ref ( ) {
125125 status ( & format ! ( "compare against `{}`" , referenced_commit. id( ) ) ) ?;
126126 for referenced_member in checkout_ws ( & ws, & repo, referenced_commit) ?. members ( ) {
127- let Some ( changed_member ) = changed_members . get ( referenced_member ) else {
128- let name = referenced_member . name ( ) . as_str ( ) ;
129- tracing:: trace!( "skipping {name }, may be removed or not published" ) ;
127+ let pkg_name = referenced_member . name ( ) . as_str ( ) ;
128+ let Some ( changed_member ) = changed_members . get ( pkg_name ) else {
129+ tracing:: trace!( "skipping {pkg_name }, may be removed or not published" ) ;
130130 continue ;
131131 } ;
132132
@@ -317,7 +317,7 @@ fn changed<'r, 'ws>(
317317 repo : & ' r git2:: Repository ,
318318 base_commit : & git2:: Commit < ' r > ,
319319 head : & git2:: Commit < ' r > ,
320- ) -> CargoResult < HashSet < & ' ws Package > > {
320+ ) -> CargoResult < HashMap < & ' ws str , & ' ws Package > > {
321321 let root_pkg_name = ws. current ( ) ?. name ( ) ; // `cargo` crate.
322322 let ws_members = ws
323323 . members ( )
@@ -334,19 +334,20 @@ fn changed<'r, 'ws>(
334334 let head_tree = head. as_object ( ) . peel_to_tree ( ) ?;
335335 let diff = repo. diff_tree_to_tree ( Some ( & base_tree) , Some ( & head_tree) , Default :: default ( ) ) ?;
336336
337- let mut changed_members = HashSet :: new ( ) ;
337+ let mut changed_members = HashMap :: new ( ) ;
338338
339339 for delta in diff. deltas ( ) {
340340 let old = delta. old_file ( ) . path ( ) . unwrap ( ) ;
341341 let new = delta. new_file ( ) . path ( ) . unwrap ( ) ;
342342 for ( ref pkg_root, pkg) in ws_members. iter ( ) {
343343 if old. starts_with ( pkg_root) || new. starts_with ( pkg_root) {
344- changed_members. insert ( * pkg) ;
344+ changed_members. insert ( pkg . name ( ) . as_str ( ) , * pkg) ;
345345 break ;
346346 }
347347 }
348348 }
349349
350+ tracing:: trace!( "changed_members: {:?}" , changed_members. keys( ) ) ;
350351 Ok ( changed_members)
351352}
352353
@@ -355,7 +356,7 @@ fn changed<'r, 'ws>(
355356/// Assumption: We always release a version larger than all existing versions.
356357fn check_crates_io < ' a > (
357358 config : & Config ,
358- changed_members : & HashSet < & ' a Package > ,
359+ changed_members : & HashMap < & ' a str , & ' a Package > ,
359360 needs_bump : & mut Vec < & ' a Package > ,
360361) -> CargoResult < ( ) > {
361362 let source_id = SourceId :: crates_io ( config) ?;
@@ -366,10 +367,10 @@ fn check_crates_io<'a>(
366367 STATUS ,
367368 format_args ! ( "compare against `{}`" , source_id. display_registry_name( ) ) ,
368369 ) ?;
369- for member in changed_members {
370- let ( name , current) = ( member. name ( ) , member . version ( ) ) ;
370+ for ( name , member) in changed_members {
371+ let current = member. version ( ) ;
371372 let version_req = format ! ( ">={current}" ) ;
372- let query = Dependency :: parse ( name, Some ( & version_req) , source_id) ?;
373+ let query = Dependency :: parse ( * name, Some ( & version_req) , source_id) ?;
373374 let possibilities = loop {
374375 // Exact to avoid returning all for path/git
375376 match registry. query_vec ( & query, QueryKind :: Exact ) {
@@ -382,6 +383,13 @@ fn check_crates_io<'a>(
382383 if possibilities. is_empty ( ) {
383384 tracing:: trace!( "dep `{name}` has no version greater than or equal to `{current}`" ) ;
384385 } else {
386+ tracing:: trace!(
387+ "`{name}@{current}` needs a bump because its should have a version newer than crates.io: {:?}`" ,
388+ possibilities
389+ . iter( )
390+ . map( |s| format!( "{}@{}" , s. name( ) , s. version( ) ) )
391+ . collect:: <Vec <_>>( ) ,
392+ ) ;
385393 needs_bump. push ( member) ;
386394 }
387395 }
0 commit comments