pod: persist metadata workspace root
This commit is contained in:
parent
3b634d66ca
commit
160c96ad1e
|
|
@ -165,16 +165,30 @@ pub trait PodMetadataStore: Send + Sync {
|
|||
Ok(metadata)
|
||||
}
|
||||
|
||||
/// Set the active pointer while preserving spawned children and manifest snapshot.
|
||||
/// Set the active pointer while preserving spawned children, workspace ownership, and manifest snapshot.
|
||||
fn set_active(
|
||||
&self,
|
||||
pod_name: &str,
|
||||
active: Option<PodActiveSegmentRef>,
|
||||
resolved_manifest_snapshot: Option<serde_json::Value>,
|
||||
) -> Result<PodMetadata, PodStoreError> {
|
||||
self.set_active_with_workspace_root(pod_name, active, resolved_manifest_snapshot, None)
|
||||
}
|
||||
|
||||
/// Set the active pointer and workspace ownership while preserving unrelated fields.
|
||||
fn set_active_with_workspace_root(
|
||||
&self,
|
||||
pod_name: &str,
|
||||
active: Option<PodActiveSegmentRef>,
|
||||
resolved_manifest_snapshot: Option<serde_json::Value>,
|
||||
workspace_root: Option<PathBuf>,
|
||||
) -> Result<PodMetadata, PodStoreError> {
|
||||
self.update_by_name(pod_name, |metadata| {
|
||||
metadata.active = active;
|
||||
metadata.resolved_manifest_snapshot = resolved_manifest_snapshot;
|
||||
if let Some(workspace_root) = workspace_root {
|
||||
metadata.workspace_root = Some(workspace_root);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -72,10 +72,11 @@ where
|
|||
let store = store.clone();
|
||||
Arc::new(move |metadata| {
|
||||
store
|
||||
.set_active(
|
||||
.set_active_with_workspace_root(
|
||||
&metadata.pod_name,
|
||||
metadata.active,
|
||||
metadata.resolved_manifest_snapshot,
|
||||
metadata.workspace_root,
|
||||
)
|
||||
.map(|_| ())
|
||||
})
|
||||
|
|
@ -5236,6 +5237,24 @@ permission = "write"
|
|||
mod pod_metadata_restore_manifest_tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn metadata_writer_persists_workspace_root_through_store_update() {
|
||||
let temp = tempfile::tempdir().unwrap();
|
||||
let store = pod_store::FsPodStore::new(temp.path().join("pods")).unwrap();
|
||||
let workspace_root = temp.path().join("workspace-root");
|
||||
std::fs::create_dir_all(&workspace_root).unwrap();
|
||||
let writer = pod_metadata_writer_for_store(&store);
|
||||
|
||||
writer(PodMetadata::new("runtime-pod", None).with_workspace_root(workspace_root.clone()))
|
||||
.unwrap();
|
||||
|
||||
let stored = store.read_by_name("runtime-pod").unwrap().unwrap();
|
||||
assert_eq!(
|
||||
stored.workspace_root.as_deref(),
|
||||
Some(workspace_root.as_path())
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn snapshot_preserves_saved_scope_over_current_manifest() {
|
||||
let saved = PodManifest::from_toml(
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user