@@ -99,57 +99,47 @@ pub async fn find_crate(
9999 . optional ( ) ?
100100 . ok_or_else ( || crate_not_found ( & path. name ) ) ?;
101101
102- let versions_and_publishers =
103- load_versions_and_publishers ( & mut conn, & krate, include. versions ) . await ?;
104- let mut versions_publishers_and_audit_actions =
105- if let Some ( versions_and_publishers) = versions_and_publishers {
106- let versions = versions_and_publishers
107- . iter ( )
108- . map ( |( v, _) | v)
109- . collect :: < Vec < _ > > ( ) ;
110- let actions = VersionOwnerAction :: for_versions ( & mut conn, & versions) . await ?;
111- Some (
112- versions_and_publishers
113- . into_iter ( )
114- . zip ( actions)
115- . map ( |( ( v, pb) , aas) | ( v, pb, aas) )
116- . collect :: < Vec < _ > > ( ) ,
117- )
118- } else {
119- None
120- } ;
121- let ids = versions_publishers_and_audit_actions
102+ // Since `versions` and `default_version` share the same key (versions), we should only settle
103+ // the `include.default_version` when `include.versions` is not included, and ignore when no
104+ // `default_version` available.
105+ let include_default_version =
106+ include. default_version && !include. versions && default_version. is_some ( ) ;
107+ let ( versions_and_publishers, default_versions_and_publishers, kws, cats, recent_downloads) = tokio:: try_join!(
108+ load_versions_and_publishers( & mut conn, & krate, include. versions) ,
109+ load_default_versions_and_publishers(
110+ & mut conn,
111+ & krate,
112+ default_version. as_deref( ) ,
113+ include_default_version,
114+ ) ,
115+ load_keywords( & mut conn, & krate, include. keywords) ,
116+ load_categories( & mut conn, & krate, include. categories) ,
117+ load_recent_downloads( & mut conn, & krate, include. downloads) ,
118+ ) ?;
119+
120+ let ids = versions_and_publishers
122121 . as_ref ( )
123122 . map ( |vps| vps. iter ( ) . map ( |v| v. 0 . id ) . collect ( ) ) ;
124123
125- // Since `versions` and `default_version` share the same key (versions), we should only settle
126- // the `default_version` when `versions` is not included.
127- if let Some ( default_version) = default_version
128- . as_ref ( )
129- . filter ( |_| include. default_version && !include. versions )
124+ let versions_publishers_and_audit_actions = if let Some ( versions_and_publishers) =
125+ versions_and_publishers. or ( default_versions_and_publishers)
130126 {
131- let versions_and_publishers =
132- load_default_versions_and_publishers ( & mut conn, & krate, Some ( default_version) , true )
133- . await ?
134- . expect ( "default_version should exists" ) ;
135127 let versions = versions_and_publishers
136128 . iter ( )
137129 . map ( |( v, _) | v)
138130 . collect :: < Vec < _ > > ( ) ;
139131 let actions = VersionOwnerAction :: for_versions ( & mut conn, & versions) . await ?;
140- versions_publishers_and_audit_actions = Some (
132+ Some (
141133 versions_and_publishers
142134 . into_iter ( )
143135 . zip ( actions)
144136 . map ( |( ( v, pb) , aas) | ( v, pb, aas) )
145137 . collect :: < Vec < _ > > ( ) ,
146138 )
139+ } else {
140+ None
147141 } ;
148142
149- let kws = load_keywords ( & mut conn, & krate, include. keywords ) . await ?;
150- let cats = load_categories ( & mut conn, & krate, include. categories ) . await ?;
151- let recent_downloads = load_recent_downloads ( & mut conn, & krate, include. downloads ) . await ?;
152-
153143 let top_versions = if let Some ( versions) = versions_publishers_and_audit_actions
154144 . as_ref ( )
155145 . filter ( |_| include. versions )
0 commit comments