|
45 | 45 | crate::run::package_discovery::DaemonPackageDiscovery,
|
46 | 46 | std::time::Duration,
|
47 | 47 | turborepo_repository::discovery::{
|
48 |
| - FallbackPackageDiscovery, LocalPackageDiscoveryBuilder, PackageDiscoveryBuilder, |
| 48 | + Error as DiscoveryError, FallbackPackageDiscovery, LocalPackageDiscoveryBuilder, |
| 49 | + PackageDiscoveryBuilder, |
49 | 50 | },
|
50 | 51 | };
|
51 | 52 |
|
@@ -286,32 +287,51 @@ impl Run {
|
286 | 287 | .with_single_package_mode(self.opts.run_opts.single_package);
|
287 | 288 |
|
288 | 289 | #[cfg(feature = "daemon-package-discovery")]
|
289 |
| - let builder = { |
290 |
| - // if we are forcing the daemon, we don't want to fallback to local discovery |
291 |
| - let (fallback, duration) = if let Some(true) = self.opts.run_opts.daemon { |
292 |
| - (None, Duration::MAX) |
293 |
| - } else { |
294 |
| - ( |
295 |
| - Some( |
296 |
| - LocalPackageDiscoveryBuilder::new( |
297 |
| - self.repo_root.clone(), |
298 |
| - None, |
299 |
| - Some(root_package_json.clone()), |
300 |
| - ) |
301 |
| - .build()?, |
302 |
| - ), |
303 |
| - Duration::from_millis(10), |
| 290 | + let graph = match (&daemon, self.opts.run_opts.daemon) { |
| 291 | + (None, Some(true)) => { |
| 292 | + // We've asked for the daemon, but it's not available. This is an error |
| 293 | + return Err(package_graph::builder::Error::Discovery( |
| 294 | + DiscoveryError::Unavailable, |
| 295 | + ) |
| 296 | + .into()); |
| 297 | + } |
| 298 | + (Some(daemon), Some(true)) => { |
| 299 | + // We have the daemon, and have explicitly asked to only use that |
| 300 | + let daemon_discovery = DaemonPackageDiscovery::new(daemon.clone()); |
| 301 | + builder |
| 302 | + .with_package_discovery(daemon_discovery) |
| 303 | + .build() |
| 304 | + .await |
| 305 | + } |
| 306 | + (_, Some(false)) | (None, _) => { |
| 307 | + // We have explicitly requested to not use the daemon, or we don't have it |
| 308 | + // No change to default. |
| 309 | + builder.build().await |
| 310 | + } |
| 311 | + (Some(daemon), None) => { |
| 312 | + // We have the daemon, and it's not flagged off. Use the fallback strategy |
| 313 | + let daemon_discovery = DaemonPackageDiscovery::new(daemon.clone()); |
| 314 | + let local_discovery = LocalPackageDiscoveryBuilder::new( |
| 315 | + self.repo_root.clone(), |
| 316 | + None, |
| 317 | + Some(root_package_json.clone()), |
304 | 318 | )
|
305 |
| - }; |
306 |
| - let fallback_discovery = FallbackPackageDiscovery::new( |
307 |
| - daemon.clone().map(DaemonPackageDiscovery::new), |
308 |
| - fallback, |
309 |
| - duration, |
310 |
| - ); |
311 |
| - builder.with_package_discovery(fallback_discovery) |
| 319 | + .build()?; |
| 320 | + let fallback_discover = FallbackPackageDiscovery::new( |
| 321 | + daemon_discovery, |
| 322 | + local_discovery, |
| 323 | + Duration::from_millis(10), |
| 324 | + ); |
| 325 | + builder |
| 326 | + .with_package_discovery(fallback_discover) |
| 327 | + .build() |
| 328 | + .await |
| 329 | + } |
312 | 330 | };
|
| 331 | + #[cfg(not(feature = "daemon-package-discovery"))] |
| 332 | + let graph = builder.build().await; |
313 | 333 |
|
314 |
| - match builder.build().await { |
| 334 | + match graph { |
315 | 335 | Ok(graph) => graph,
|
316 | 336 | // if we can't find the package.json, it is a bug, and we should report it.
|
317 | 337 | // likely cause is that package discovery watching is not up to date.
|
|
0 commit comments