@@ -7,6 +7,7 @@ use tokio::io::AsyncWriteExt;
77use tracing:: level_filters:: LevelFilter ;
88use wasm_pkg_client:: {
99 caching:: { CachingClient , FileCache } ,
10+ local:: LocalConfig ,
1011 Client , PackagePublisher , PublishOpts ,
1112} ;
1213use wasm_pkg_common:: {
@@ -252,8 +253,6 @@ struct PublishArgs {
252253
253254impl PublishArgs {
254255 pub async fn run ( self ) -> anyhow:: Result < ( ) > {
255- let mut client = self . common . get_client ( ) . await ?;
256-
257256 let package = match self . package {
258257 Some ( _) if self . paths . len ( ) > 2 => {
259258 anyhow:: bail!( "`--package` is currently unsupported when providing more than one path argument" ) ;
@@ -271,35 +270,41 @@ impl PublishArgs {
271270 let path = match & self . paths [ ..] {
272271 [ path] => path,
273272 paths => {
274- let ( overlay, tmp_dir) = wasm_pkg_client:: local:: LocalBackend :: temp_dir ( ) ?;
275- let local_backend = wasm_pkg_client:: local:: LocalConfig {
276- root : tmp_dir. path ( ) . to_path_buf ( ) ,
277- } ;
278- let mut reg_config = RegistryConfig :: default ( ) ;
279- reg_config. set_default_backend ( Some ( "local" . to_owned ( ) ) ) ;
280- reg_config. set_backend_config ( "local" , & local_backend) ?;
281-
282- let plan = PublishPlan :: from_paths ( paths) ?;
283- let mut lock_file = LockFile :: load ( true ) . await ?;
273+ let mut config = self . common . load_config ( ) . await ?;
274+ let cache = self . common . load_cache ( ) . await ?;
284275
276+ let ( overlay, tmp_dir) = wasm_pkg_client:: local:: LocalBackend :: temp_dir ( ) ?;
277+ let reg_config = RegistryConfig :: default ( ) . with_default_backend (
278+ "local" ,
279+ LocalConfig {
280+ root : tmp_dir. path ( ) . to_path_buf ( ) ,
281+ } ,
282+ ) ?;
285283 // Route every package in the plan to the local overlay registry
286284 // backed by `reg_config`, so the client used in `build_wit_dir`
287285 // resolves these packages against the local overlay instead of
288286 // an upstream remote.
289- let mut config = self . common . load_config ( ) . await ?;
290- let local_registry: Registry = "local" . parse ( ) ?;
287+ let local_registry: Registry = "tmp_local_publish" . parse ( ) ?;
291288 config
292289 . get_or_insert_registry_config_mut ( & local_registry)
293290 . merge ( reg_config) ;
291+
292+ let plan = PublishPlan :: from_paths ( paths) ?;
293+
294+ // TODO(mkatychev): Add support for `PackageLoader::get_release` to handle
295+ // querying on a per package, namespace, and registry level
296+ // to handle cargo style overlays.
297+ // see this reference of `cargo::core::Dependency` usage for local overlays in Cargo:
298+ // https://github.com/rust-lang/cargo/blob/d6900d00af2644ea1c0068c5694d9dbe11a3ab39/src/cargo/sources/overlay.rs#L47
294299 for spec in plan. iter ( ) {
295300 config. set_package_registry_override (
296301 spec. package . clone ( ) ,
297302 RegistryMapping :: Registry ( local_registry. clone ( ) ) ,
298303 ) ;
299304 }
300- let cache = self . common . load_cache ( ) . await ?;
301305 let client = CachingClient :: new ( Some ( Client :: new ( config) ) , cache) ;
302306
307+ let mut lock_file = LockFile :: load ( true ) . await ?;
303308 for spec in plan. iter_edges ( ) {
304309 let path = plan. get_path ( & spec. package ) . unwrap ( ) ;
305310 let ( publish_path, _tmp) = if path. is_dir ( ) {
@@ -333,6 +338,8 @@ impl PublishArgs {
333338 }
334339 } ;
335340
341+ let client = self . common . get_client ( ) . await ?;
342+
336343 // If the input is a directory, build a WIT package from it into a temp
337344 // file first. _tmp is held until the publish completes so the file
338345 // isn't deleted out from under us.
0 commit comments