(
runner: &WasiRunner,
command_name: &str,
package: &BinaryPackage,
runtime: Arc<dyn Runtime + Send + Sync>,
root_fs: Arc<dyn virtual_fs::FileSystem + Send + Sync>,
)
| 2370 | } |
| 2371 | |
| 2372 | fn run_package_command_with_root( |
| 2373 | runner: &WasiRunner, |
| 2374 | command_name: &str, |
| 2375 | package: &BinaryPackage, |
| 2376 | runtime: Arc<dyn Runtime + Send + Sync>, |
| 2377 | root_fs: Arc<dyn virtual_fs::FileSystem + Send + Sync>, |
| 2378 | ) -> Result<()> { |
| 2379 | let cmd = package.get_command(command_name).with_context(|| { |
| 2380 | format!("split initdb package does not contain command {command_name:?}") |
| 2381 | })?; |
| 2382 | let wasi = cmd |
| 2383 | .metadata() |
| 2384 | .annotation("wasi")? |
| 2385 | .unwrap_or_else(|| Wasi::new(command_name)); |
| 2386 | let exec_name = wasi.exec_name.as_deref().unwrap_or(command_name); |
| 2387 | let mut builder = runner |
| 2388 | .prepare_webc_env( |
| 2389 | exec_name, |
| 2390 | &wasi, |
| 2391 | PackageOrHash::Package(package), |
| 2392 | RuntimeOrEngine::Runtime(runtime), |
| 2393 | Some(WasiFsRoot::from_filesystem(root_fs)), |
| 2394 | ) |
| 2395 | .with_context(|| format!("prepare WASIX command environment for {command_name:?}"))?; |
| 2396 | add_pgdata_preopen(&mut builder)?; |
| 2397 | |
| 2398 | let env = builder.build()?; |
| 2399 | let runtime = env.runtime.clone(); |
| 2400 | let tasks = runtime.task_manager().clone(); |
| 2401 | let package = package.clone(); |
| 2402 | let command_name = command_name.to_owned(); |
| 2403 | let exit_code = tasks.spawn_and_block_on(async move { |
| 2404 | let mut task_handle = spawn_exec(package, &command_name, env, &runtime) |
| 2405 | .await |
| 2406 | .with_context(|| format!("spawn WASIX command {command_name:?}"))?; |
| 2407 | task_handle |
| 2408 | .wait_finished() |
| 2409 | .await |
| 2410 | .map_err(|err| anyhow::anyhow!("{err}")) |
| 2411 | .with_context(|| format!("wait for WASIX command {command_name:?}")) |
| 2412 | })??; |
| 2413 | |
| 2414 | ensure!(exit_code.raw() == 0, "WASI exited with code: {exit_code}"); |
| 2415 | Ok(()) |
| 2416 | } |
| 2417 | |
| 2418 | fn split_initdb_diagnostics(paths: &PglitePaths, runtime_layout: &RuntimeLayout) -> String { |
| 2419 | let pgdata_parent = paths.pgdata.parent().unwrap_or(&paths.pgdata); |
no test coverage detected