Enhance instance metadata and reconciliation logic for glob-ignored children

- Added `globIgnoredChildren` to `ApiInstanceMetadata` to manage child deletion behavior based on glob patterns.
- Updated `shouldDeleteChild` function to suppress deletions when `globIgnoredChildren` is true, differentiating from scripts-only mode.
- Enhanced tests to verify correct behavior of instance deletion based on the new metadata, ensuring robust handling of unknown scripts.
- Refactored snapshot handling to incorporate `globIgnoredChildren` in metadata, improving clarity and maintainability.
This commit is contained in:
Joe 2026-03-07 11:44:07 -06:00
parent 4b38c070fb
commit 12bccf91c5
50 changed files with 247 additions and 14 deletions

View file

@ -118,7 +118,8 @@ pub fn snapshot_dir_no_meta(
.instigating_source(path)
.relevant_paths(relevant_paths)
.context(context)
.ignore_unknown_instances(any_child_glob_ignored),
.ignore_unknown_instances(any_child_glob_ignored)
.glob_ignored_children(any_child_glob_ignored),
);
Ok(Some(snapshot))
@ -602,6 +603,10 @@ mod test {
snap.metadata.ignore_unknown_instances,
"Directory with glob-ignored children should have ignore_unknown_instances = true"
);
assert!(
snap.metadata.glob_ignored_children,
"Directory with glob-ignored children should have glob_ignored_children = true"
);
assert_eq!(
snap.children.len(),
1,
@ -636,6 +641,10 @@ mod test {
!snap.metadata.ignore_unknown_instances,
"Directory without glob-ignored children should have ignore_unknown_instances = false"
);
assert!(
!snap.metadata.glob_ignored_children,
"Directory without glob-ignored children should have glob_ignored_children = false"
);
assert_eq!(snap.children.len(), 2);
}
}

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /foo.csv
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /root/init.csv
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /root/init.csv
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: true
glob_ignored_children: false
instigating_source:
Path: /foo.csv
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /foo
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /foo
relevant_paths:
@ -30,6 +31,7 @@ children:
- snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /foo/Child
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /foo.json5
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /foo.json5
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /foo.model.json5
relevant_paths:
@ -22,6 +23,7 @@ children:
- snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
relevant_paths: []
context: {}
specified_id: ~

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /foo.model.json5
relevant_paths:
@ -22,6 +23,7 @@ children:
- snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
relevant_paths: []
context: {}
specified_id: ~

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /foo.client.luau
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /root/init.luau
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /root/init.luau
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /foo.legacy.luau
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /foo.local.luau
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /foo.luau
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: true
glob_ignored_children: false
instigating_source:
Path: /foo.luau
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /foo.plugin.luau
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /bar.server.luau
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /foo.server.luau
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: true
glob_ignored_children: false
instigating_source:
Path: /foo.server.luau
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
relevant_paths:
- /foo/bar.meta.json5
context: {}

View file

@ -5,6 +5,7 @@ expression: snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
relevant_paths:
- /foo/init.meta.json5
context: {}

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: true
glob_ignored_children: false
instigating_source:
Path: /foo/default.project.json5
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: true
glob_ignored_children: false
instigating_source:
Path: /foo/hello.project.json5
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: true
glob_ignored_children: false
instigating_source:
Path: /foo/default.project.json5
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: true
glob_ignored_children: false
instigating_source:
Path: /foo.project.json5
relevant_paths:
@ -20,6 +21,7 @@ children:
- snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: true
glob_ignored_children: false
instigating_source:
ProjectNode:
path: /foo.project.json5

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: true
glob_ignored_children: false
instigating_source:
Path: /foo/default.project.json5
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: true
glob_ignored_children: false
instigating_source:
Path: /foo/default.project.json5
relevant_paths:
@ -21,6 +22,7 @@ children:
- snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: true
glob_ignored_children: false
instigating_source:
ProjectNode:
path: /foo/other.project.json5

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /foo/default.project.json5
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: true
glob_ignored_children: false
instigating_source:
Path: /foo.project.json5
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: true
glob_ignored_children: false
instigating_source:
Path: /foo.project.json5
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /foo.toml
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: foo.toml
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /foo.txt
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /foo.txt
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: /foo.yaml
relevant_paths:

View file

@ -5,6 +5,7 @@ expression: instance_snapshot
snapshot_id: "00000000000000000000000000000000"
metadata:
ignore_unknown_instances: false
glob_ignored_children: false
instigating_source:
Path: foo.yaml
relevant_paths: