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)
|
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(
|
fn set_active(
|
||||||
&self,
|
&self,
|
||||||
pod_name: &str,
|
pod_name: &str,
|
||||||
active: Option<PodActiveSegmentRef>,
|
active: Option<PodActiveSegmentRef>,
|
||||||
resolved_manifest_snapshot: Option<serde_json::Value>,
|
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> {
|
) -> Result<PodMetadata, PodStoreError> {
|
||||||
self.update_by_name(pod_name, |metadata| {
|
self.update_by_name(pod_name, |metadata| {
|
||||||
metadata.active = active;
|
metadata.active = active;
|
||||||
metadata.resolved_manifest_snapshot = resolved_manifest_snapshot;
|
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();
|
let store = store.clone();
|
||||||
Arc::new(move |metadata| {
|
Arc::new(move |metadata| {
|
||||||
store
|
store
|
||||||
.set_active(
|
.set_active_with_workspace_root(
|
||||||
&metadata.pod_name,
|
&metadata.pod_name,
|
||||||
metadata.active,
|
metadata.active,
|
||||||
metadata.resolved_manifest_snapshot,
|
metadata.resolved_manifest_snapshot,
|
||||||
|
metadata.workspace_root,
|
||||||
)
|
)
|
||||||
.map(|_| ())
|
.map(|_| ())
|
||||||
})
|
})
|
||||||
|
|
@ -5236,6 +5237,24 @@ permission = "write"
|
||||||
mod pod_metadata_restore_manifest_tests {
|
mod pod_metadata_restore_manifest_tests {
|
||||||
use super::*;
|
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]
|
#[test]
|
||||||
fn snapshot_preserves_saved_scope_over_current_manifest() {
|
fn snapshot_preserves_saved_scope_over_current_manifest() {
|
||||||
let saved = PodManifest::from_toml(
|
let saved = PodManifest::from_toml(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user