refactor: separate worker workspace identity
This commit is contained in:
@@ -2,7 +2,10 @@ use std::ffi::OsString;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::process::ExitCode;
|
||||
|
||||
use crate::{PromptLoader, Worker, WorkerController, WorkerFilesystemAuthority};
|
||||
use crate::{
|
||||
PromptLoader, Worker, WorkerController, WorkerFilesystemAuthority, WorkerWorkspaceContext,
|
||||
WorkspaceId,
|
||||
};
|
||||
use clap::{CommandFactory, FromArgMatches, Parser};
|
||||
use manifest::{
|
||||
Permission, ProfileResolveOptions, ProfileResolver, ProfileSelector, ScopeConfig, ScopeRule,
|
||||
@@ -103,6 +106,24 @@ fn runtime_workspace_root(cli: &Cli) -> Result<PathBuf, String> {
|
||||
}
|
||||
}
|
||||
|
||||
fn runtime_workspace_context(workspace_root: &Path) -> WorkerWorkspaceContext {
|
||||
WorkerWorkspaceContext::local_filesystem(read_workspace_id_hint(workspace_root))
|
||||
}
|
||||
|
||||
fn read_workspace_id_hint(workspace_root: &Path) -> Option<WorkspaceId> {
|
||||
let path = workspace_root.join(".yoi/workspace.toml");
|
||||
let contents = std::fs::read_to_string(path).ok()?;
|
||||
let value = toml::from_str::<toml::Value>(&contents).ok()?;
|
||||
let id = value.get("id")?.as_str()?.to_string();
|
||||
match WorkspaceId::new(id) {
|
||||
Ok(id) => Some(id),
|
||||
Err(err) => {
|
||||
tracing::warn!("ignoring invalid workspace id in .yoi/workspace.toml: {err}");
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn runtime_worker_name(cli: &Cli, workspace_root: &Path) -> String {
|
||||
cli.worker
|
||||
.as_deref()
|
||||
@@ -513,6 +534,7 @@ async fn run_cli_inner(cli: Cli) -> ExitCode {
|
||||
let store = CombinedStore::new(session_store, worker_metadata_store);
|
||||
let filesystem_authority =
|
||||
WorkerFilesystemAuthority::local(workspace_root.clone(), cwd.clone());
|
||||
let workspace_context = runtime_workspace_context(&workspace_root);
|
||||
|
||||
let mut worker = if cli.adopt {
|
||||
let callback = match cli.callback.clone() {
|
||||
@@ -527,7 +549,7 @@ async fn run_cli_inner(cli: Cli) -> ExitCode {
|
||||
store,
|
||||
loader,
|
||||
callback,
|
||||
workspace_root.clone(),
|
||||
workspace_context.clone(),
|
||||
filesystem_authority.clone(),
|
||||
)
|
||||
.await
|
||||
@@ -558,7 +580,7 @@ async fn run_cli_inner(cli: Cli) -> ExitCode {
|
||||
manifest,
|
||||
store,
|
||||
loader,
|
||||
workspace_root.clone(),
|
||||
workspace_context.clone(),
|
||||
filesystem_authority.clone(),
|
||||
)
|
||||
.await
|
||||
@@ -578,7 +600,7 @@ async fn run_cli_inner(cli: Cli) -> ExitCode {
|
||||
manifest,
|
||||
store,
|
||||
loader,
|
||||
workspace_root.clone(),
|
||||
workspace_context.clone(),
|
||||
filesystem_authority.clone(),
|
||||
)
|
||||
.await
|
||||
@@ -599,7 +621,7 @@ async fn run_cli_inner(cli: Cli) -> ExitCode {
|
||||
manifest,
|
||||
store,
|
||||
loader,
|
||||
workspace_root.clone(),
|
||||
workspace_context.clone(),
|
||||
filesystem_authority.clone(),
|
||||
)
|
||||
.await
|
||||
@@ -621,7 +643,7 @@ async fn run_cli_inner(cli: Cli) -> ExitCode {
|
||||
manifest,
|
||||
store,
|
||||
loader,
|
||||
workspace_root.clone(),
|
||||
workspace_context.clone(),
|
||||
filesystem_authority.clone(),
|
||||
)
|
||||
.await
|
||||
|
||||
Reference in New Issue
Block a user