@@ -47,7 +47,7 @@ fn fmt_err(e: impl Into<Report>, path: &Path, source: &str) -> anyhow::Error {
4747pub struct PackageResolver {
4848 fs : FileSystemPackageResolver ,
4949 #[ cfg( feature = "registry" ) ]
50- registry : wac_resolver:: RegistryPackageResolver ,
50+ registry : Option < wac_resolver:: RegistryPackageResolver > ,
5151}
5252
5353impl PackageResolver {
@@ -60,17 +60,23 @@ impl PackageResolver {
6060 Ok ( Self {
6161 fs : FileSystemPackageResolver :: new ( dir, overrides, false ) ,
6262 #[ cfg( feature = "registry" ) ]
63- registry : wac_resolver:: RegistryPackageResolver :: new (
64- registry,
65- Some ( Box :: new ( progress:: ProgressBar :: new ( ) ) ) ,
66- )
67- . await ?,
63+ registry : if registry. is_some ( ) {
64+ Some (
65+ wac_resolver:: RegistryPackageResolver :: new (
66+ registry,
67+ Some ( Box :: new ( progress:: ProgressBar :: new ( ) ) ) ,
68+ )
69+ . await ?,
70+ )
71+ } else {
72+ None
73+ } ,
6874 } )
6975 }
7076
7177 /// Resolve all packages referenced in the given document.
7278 pub async fn resolve < ' a > (
73- & self ,
79+ & mut self ,
7480 document : & ' a Document < ' a > ,
7581 ) -> Result < IndexMap < BorrowedPackageKey < ' a > , Vec < u8 > > , Error > {
7682 let mut keys = packages ( document) ?;
@@ -85,7 +91,17 @@ impl PackageResolver {
8591 // The registry resolver will error on missing package
8692 #[ cfg( feature = "registry" ) ]
8793 if !keys. is_empty ( ) {
88- let reg_packages = self . registry . resolve ( & keys) . await ?;
94+ if self . registry . is_none ( ) {
95+ self . registry = Some (
96+ wac_resolver:: RegistryPackageResolver :: new (
97+ None ,
98+ Some ( Box :: new ( progress:: ProgressBar :: new ( ) ) ) ,
99+ )
100+ . await
101+ . map_err ( Error :: RegistryClientFailed ) ?,
102+ ) ;
103+ }
104+ let reg_packages = self . registry . as_ref ( ) . unwrap ( ) . resolve ( & keys) . await ?;
89105 keys. retain ( |key, _| !reg_packages. contains_key ( key) ) ;
90106 packages. extend ( reg_packages) ;
91107 }
0 commit comments