@@ -93,6 +93,20 @@ pub fn publish(ws: &Workspace<'_>, opts: &PublishOpts<'_>) -> CargoResult<()> {
93
93
. filter ( |( m, _) | specs. iter ( ) . any ( |spec| spec. matches ( m. package_id ( ) ) ) )
94
94
. collect ( ) ;
95
95
96
+ let ( unpublishable, pkgs) : ( Vec < _ > , Vec < _ > ) = pkgs
97
+ . into_iter ( )
98
+ . partition ( |( pkg, _) | pkg. publish ( ) == & Some ( vec ! [ ] ) ) ;
99
+ if !unpublishable. is_empty ( ) {
100
+ bail ! (
101
+ "{} cannot be published.\n \
102
+ `package.publish` must be set to `true` or a non-empty list in Cargo.toml to publish.",
103
+ unpublishable
104
+ . iter( )
105
+ . map( |( pkg, _) | format!( "`{}`" , pkg. name( ) ) )
106
+ . join( ", " ) ,
107
+ ) ;
108
+ }
109
+
96
110
let just_pkgs: Vec < _ > = pkgs. iter ( ) . map ( |p| p. 0 ) . collect ( ) ;
97
111
let reg_or_index = match opts. reg_or_index . clone ( ) {
98
112
Some ( r) => {
@@ -705,19 +719,6 @@ fn package_list(pkgs: impl IntoIterator<Item = PackageId>, final_sep: &str) -> S
705
719
}
706
720
707
721
fn validate_registry ( pkgs : & [ & Package ] , reg_or_index : Option < & RegistryOrIndex > ) -> CargoResult < ( ) > {
708
- let unpublishable = pkgs
709
- . iter ( )
710
- . filter ( |pkg| pkg. publish ( ) == & Some ( Vec :: new ( ) ) )
711
- . map ( |pkg| format ! ( "`{}`" , pkg. name( ) ) )
712
- . collect :: < Vec < _ > > ( ) ;
713
- if !unpublishable. is_empty ( ) {
714
- bail ! (
715
- "{} cannot be published.\n \
716
- `package.publish` must be set to `true` or a non-empty list in Cargo.toml to publish.",
717
- unpublishable. join( ", " )
718
- ) ;
719
- }
720
-
721
722
let reg_name = match reg_or_index {
722
723
Some ( RegistryOrIndex :: Registry ( r) ) => Some ( r. as_str ( ) ) ,
723
724
None => Some ( CRATES_IO_REGISTRY ) ,
0 commit comments