@@ -178,25 +178,26 @@ impl<'de> de::Deserialize<'de> for TomlDependency {
178
178
}
179
179
180
180
#[ derive( Deserialize , Serialize , Clone , Debug , Default ) ]
181
+ #[ serde( rename_all = "kebab-case" ) ]
181
182
pub struct DetailedTomlDependency {
182
183
version : Option < String > ,
183
184
registry : Option < String > ,
185
+ registry_index : Option < String > ,
184
186
path : Option < String > ,
185
187
git : Option < String > ,
186
188
branch : Option < String > ,
187
189
tag : Option < String > ,
188
190
rev : Option < String > ,
189
191
features : Option < Vec < String > > ,
190
192
optional : Option < bool > ,
191
- #[ serde( rename = "default-features" ) ]
192
193
default_features : Option < bool > ,
193
194
#[ serde( rename = "default_features" ) ]
194
195
default_features2 : Option < bool > ,
195
196
}
196
197
197
198
#[ derive( Debug , Deserialize , Serialize ) ]
199
+ #[ serde( rename_all = "kebab-case" ) ]
198
200
pub struct TomlManifest {
199
- #[ serde( rename = "cargo-features" ) ]
200
201
cargo_features : Option < Vec < String > > ,
201
202
package : Option < Box < TomlProject > > ,
202
203
project : Option < Box < TomlProject > > ,
@@ -207,11 +208,9 @@ pub struct TomlManifest {
207
208
test : Option < Vec < TomlTestTarget > > ,
208
209
bench : Option < Vec < TomlTestTarget > > ,
209
210
dependencies : Option < BTreeMap < String , TomlDependency > > ,
210
- #[ serde( rename = "dev-dependencies" ) ]
211
211
dev_dependencies : Option < BTreeMap < String , TomlDependency > > ,
212
212
#[ serde( rename = "dev_dependencies" ) ]
213
213
dev_dependencies2 : Option < BTreeMap < String , TomlDependency > > ,
214
- #[ serde( rename = "build-dependencies" ) ]
215
214
build_dependencies : Option < BTreeMap < String , TomlDependency > > ,
216
215
#[ serde( rename = "build_dependencies" ) ]
217
216
build_dependencies2 : Option < BTreeMap < String , TomlDependency > > ,
@@ -471,13 +470,13 @@ struct Context<'a, 'b> {
471
470
}
472
471
473
472
impl TomlManifest {
474
- pub fn prepare_for_publish ( & self ) -> TomlManifest {
473
+ pub fn prepare_for_publish ( & self , config : & Config ) -> CargoResult < TomlManifest > {
475
474
let mut package = self . package . as_ref ( )
476
475
. or_else ( || self . project . as_ref ( ) )
477
476
. unwrap ( )
478
477
. clone ( ) ;
479
478
package. workspace = None ;
480
- return TomlManifest {
479
+ return Ok ( TomlManifest {
481
480
package : Some ( package) ,
482
481
project : None ,
483
482
profile : self . profile . clone ( ) ,
@@ -486,56 +485,68 @@ impl TomlManifest {
486
485
example : self . example . clone ( ) ,
487
486
test : self . test . clone ( ) ,
488
487
bench : self . bench . clone ( ) ,
489
- dependencies : map_deps ( self . dependencies . as_ref ( ) ) ,
490
- dev_dependencies : map_deps ( self . dev_dependencies . as_ref ( )
491
- . or_else ( || self . dev_dependencies2 . as_ref ( ) ) ) ,
488
+ dependencies : map_deps ( config , self . dependencies . as_ref ( ) ) ? ,
489
+ dev_dependencies : map_deps ( config , self . dev_dependencies . as_ref ( )
490
+ . or_else ( || self . dev_dependencies2 . as_ref ( ) ) ) ? ,
492
491
dev_dependencies2 : None ,
493
- build_dependencies : map_deps ( self . build_dependencies . as_ref ( )
494
- . or_else ( || self . build_dependencies2 . as_ref ( ) ) ) ,
492
+ build_dependencies : map_deps ( config , self . build_dependencies . as_ref ( )
493
+ . or_else ( || self . build_dependencies2 . as_ref ( ) ) ) ? ,
495
494
build_dependencies2 : None ,
496
495
features : self . features . clone ( ) ,
497
- target : self . target . as_ref ( ) . map ( |target_map| {
496
+ target : match self . target . as_ref ( ) . map ( |target_map| {
498
497
target_map. iter ( ) . map ( |( k, v) | {
499
- ( k. clone ( ) , TomlPlatform {
500
- dependencies : map_deps ( v. dependencies . as_ref ( ) ) ,
501
- dev_dependencies : map_deps ( v. dev_dependencies . as_ref ( )
502
- . or_else ( || v. dev_dependencies2 . as_ref ( ) ) ) ,
498
+ Ok ( ( k. clone ( ) , TomlPlatform {
499
+ dependencies : map_deps ( config , v. dependencies . as_ref ( ) ) ? ,
500
+ dev_dependencies : map_deps ( config , v. dev_dependencies . as_ref ( )
501
+ . or_else ( || v. dev_dependencies2 . as_ref ( ) ) ) ? ,
503
502
dev_dependencies2 : None ,
504
- build_dependencies : map_deps ( v. build_dependencies . as_ref ( )
505
- . or_else ( || v. build_dependencies2 . as_ref ( ) ) ) ,
503
+ build_dependencies : map_deps ( config , v. build_dependencies . as_ref ( )
504
+ . or_else ( || v. build_dependencies2 . as_ref ( ) ) ) ? ,
506
505
build_dependencies2 : None ,
507
- } )
506
+ } ) )
508
507
} ) . collect ( )
509
- } ) ,
508
+ } ) {
509
+ Some ( Ok ( v) ) => Some ( v) ,
510
+ Some ( Err ( e) ) => return Err ( e) ,
511
+ None => None ,
512
+ } ,
510
513
replace : None ,
511
514
patch : None ,
512
515
workspace : None ,
513
516
badges : self . badges . clone ( ) ,
514
517
cargo_features : self . cargo_features . clone ( ) ,
515
- } ;
518
+ } ) ;
516
519
517
- fn map_deps ( deps : Option < & BTreeMap < String , TomlDependency > > )
518
- -> Option < BTreeMap < String , TomlDependency > >
520
+ fn map_deps ( config : & Config , deps : Option < & BTreeMap < String , TomlDependency > > )
521
+ -> CargoResult < Option < BTreeMap < String , TomlDependency > > >
519
522
{
520
523
let deps = match deps {
521
524
Some ( deps) => deps,
522
- None => return None
525
+ None => return Ok ( None ) ,
523
526
} ;
524
- Some ( deps. iter ( ) . map ( |( k, v) | ( k. clone ( ) , map_dependency ( v) ) ) . collect ( ) )
527
+ let deps = deps. iter ( )
528
+ . map ( |( k, v) | Ok ( ( k. clone ( ) , map_dependency ( config, v) ?) ) )
529
+ . collect :: < CargoResult < BTreeMap < _ , _ > > > ( ) ?;
530
+ Ok ( Some ( deps) )
525
531
}
526
532
527
- fn map_dependency ( dep : & TomlDependency ) -> TomlDependency {
533
+ fn map_dependency ( config : & Config , dep : & TomlDependency ) -> CargoResult < TomlDependency > {
528
534
match * dep {
529
535
TomlDependency :: Detailed ( ref d) => {
530
536
let mut d = d. clone ( ) ;
531
537
d. path . take ( ) ; // path dependencies become crates.io deps
532
- TomlDependency :: Detailed ( d)
538
+ // registry specifications are elaborated to the index URL
539
+ if let Some ( registry) = d. registry . take ( ) {
540
+ let src = SourceId :: alt_registry ( config, & registry) ?;
541
+ d. registry_index = Some ( src. url ( ) . to_string ( ) ) ;
542
+ }
543
+ Ok ( TomlDependency :: Detailed ( d) )
533
544
}
534
545
TomlDependency :: Simple ( ref s) => {
535
- TomlDependency :: Detailed ( DetailedTomlDependency {
546
+ Ok ( TomlDependency :: Detailed ( DetailedTomlDependency {
536
547
version : Some ( s. clone ( ) ) ,
537
548
..Default :: default ( )
538
- } )
549
+ } ) )
539
550
}
540
551
}
541
552
}
@@ -933,10 +944,18 @@ impl TomlDependency {
933
944
None => SourceId :: crates_io ( cx. config ) ?
934
945
} ;
935
946
936
- let new_source_id = match ( details. git . as_ref ( ) , details. path . as_ref ( ) , details. registry . as_ref ( ) ) {
937
- ( Some ( _) , _, Some ( _) ) => bail ! ( "dependency ({}) specification is ambiguous. \
947
+ let new_source_id = match (
948
+ details. git . as_ref ( ) ,
949
+ details. path . as_ref ( ) ,
950
+ details. registry . as_ref ( ) ,
951
+ details. registry_index . as_ref ( ) ,
952
+ ) {
953
+ ( Some ( _) , _, Some ( _) , _) |
954
+ ( Some ( _) , _, _, Some ( _) ) => bail ! ( "dependency ({}) specification is ambiguous. \
938
955
Only one of `git` or `registry` is allowed.", name) ,
939
- ( Some ( git) , maybe_path, _) => {
956
+ ( _, _, Some ( _) , Some ( _) ) => bail ! ( "dependency ({}) specification is ambiguous. \
957
+ Only one of `registry` or `registry-index` is allowed.", name) ,
958
+ ( Some ( git) , maybe_path, _, _) => {
940
959
if maybe_path. is_some ( ) {
941
960
let msg = format ! ( "dependency ({}) specification is ambiguous. \
942
961
Only one of `git` or `path` is allowed. \
@@ -963,7 +982,7 @@ impl TomlDependency {
963
982
let loc = git. to_url ( ) ?;
964
983
SourceId :: for_git ( & loc, reference) ?
965
984
} ,
966
- ( None , Some ( path) , _) => {
985
+ ( None , Some ( path) , _, _ ) => {
967
986
cx. nested_paths . push ( PathBuf :: from ( path) ) ;
968
987
// If the source id for the package we're parsing is a path
969
988
// source, then we normalize the path here to get rid of
@@ -981,8 +1000,12 @@ impl TomlDependency {
981
1000
cx. source_id . clone ( )
982
1001
}
983
1002
} ,
984
- ( None , None , Some ( registry) ) => SourceId :: alt_registry ( cx. config , registry) ?,
985
- ( None , None , None ) => SourceId :: crates_io ( cx. config ) ?,
1003
+ ( None , None , Some ( registry) , None ) => SourceId :: alt_registry ( cx. config , registry) ?,
1004
+ ( None , None , None , Some ( registry_index) ) => {
1005
+ let url = registry_index. to_url ( ) ?;
1006
+ SourceId :: for_registry ( & url) ?
1007
+ }
1008
+ ( None , None , None , None ) => SourceId :: crates_io ( cx. config ) ?,
986
1009
} ;
987
1010
988
1011
let version = details. version . as_ref ( ) . map ( |v| & v[ ..] ) ;
0 commit comments