mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-10-23 05:51:39 +00:00
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:
parent
4b38c070fb
commit
12bccf91c5
50 changed files with 247 additions and 14 deletions
|
|
@ -35,11 +35,17 @@ local SCRIPT_CLASS_NAMES = {
|
||||||
}
|
}
|
||||||
|
|
||||||
local function shouldDeleteChild(virtualInstance, childInstance)
|
local function shouldDeleteChild(virtualInstance, childInstance)
|
||||||
-- If the parent allows deleting unknown instances, always allow
|
|
||||||
if shouldDeleteUnknownInstances(virtualInstance) then
|
if shouldDeleteUnknownInstances(virtualInstance) then
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- When the parent has glob-ignored children, suppress ALL deletions
|
||||||
|
-- (including scripts). This differs from scripts-only mode where
|
||||||
|
-- scripts are still eligible for deletion.
|
||||||
|
if virtualInstance.Metadata and virtualInstance.Metadata.globIgnoredChildren then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
-- In scripts-only mode (where parent has ignoreUnknownInstances: true),
|
-- In scripts-only mode (where parent has ignoreUnknownInstances: true),
|
||||||
-- we still want to allow deletion of scripts. This ensures deleted
|
-- we still want to allow deletion of scripts. This ensures deleted
|
||||||
-- script files show up in the sync diff.
|
-- script files show up in the sync diff.
|
||||||
|
|
|
||||||
|
|
@ -244,6 +244,64 @@ return function()
|
||||||
assert(isEmpty(patch.removed))
|
assert(isEmpty(patch.removed))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it(
|
||||||
|
"should still remove unknown scripts when ignoreUnknownInstances is true but globIgnoredChildren is false",
|
||||||
|
function()
|
||||||
|
local knownInstances = InstanceMap.new()
|
||||||
|
local virtualInstances = {
|
||||||
|
ROOT = {
|
||||||
|
ClassName = "Folder",
|
||||||
|
Name = "Folder",
|
||||||
|
Properties = {},
|
||||||
|
Children = {},
|
||||||
|
Metadata = {
|
||||||
|
ignoreUnknownInstances = true,
|
||||||
|
globIgnoredChildren = false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
local rootInstance = Instance.new("Folder")
|
||||||
|
local unknownScript = Instance.new("ModuleScript")
|
||||||
|
unknownScript.Parent = rootInstance
|
||||||
|
knownInstances:insert("ROOT", rootInstance)
|
||||||
|
|
||||||
|
local ok, patch = diff(knownInstances, virtualInstances, "ROOT")
|
||||||
|
|
||||||
|
assert(ok, tostring(patch))
|
||||||
|
|
||||||
|
expect(#patch.removed).to.equal(1)
|
||||||
|
expect(patch.removed[1]).to.equal(unknownScript)
|
||||||
|
end
|
||||||
|
)
|
||||||
|
|
||||||
|
it("should NOT remove unknown scripts when globIgnoredChildren is true", function()
|
||||||
|
local knownInstances = InstanceMap.new()
|
||||||
|
local virtualInstances = {
|
||||||
|
ROOT = {
|
||||||
|
ClassName = "Folder",
|
||||||
|
Name = "Folder",
|
||||||
|
Properties = {},
|
||||||
|
Children = {},
|
||||||
|
Metadata = {
|
||||||
|
ignoreUnknownInstances = true,
|
||||||
|
globIgnoredChildren = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
local rootInstance = Instance.new("Folder")
|
||||||
|
local unknownScript = Instance.new("ModuleScript")
|
||||||
|
unknownScript.Parent = rootInstance
|
||||||
|
knownInstances:insert("ROOT", rootInstance)
|
||||||
|
|
||||||
|
local ok, patch = diff(knownInstances, virtualInstances, "ROOT")
|
||||||
|
|
||||||
|
assert(ok, tostring(patch))
|
||||||
|
|
||||||
|
assert(isEmpty(patch.removed))
|
||||||
|
end)
|
||||||
|
|
||||||
it("should generate a patch with an added child", function()
|
it("should generate a patch with an added child", function()
|
||||||
local knownInstances = InstanceMap.new()
|
local knownInstances = InstanceMap.new()
|
||||||
local virtualInstances = {
|
local virtualInstances = {
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ local ApiValue = t.keys(t.string)
|
||||||
|
|
||||||
local ApiInstanceMetadata = t.interface({
|
local ApiInstanceMetadata = t.interface({
|
||||||
ignoreUnknownInstances = t.optional(t.boolean),
|
ignoreUnknownInstances = t.optional(t.boolean),
|
||||||
|
globIgnoredChildren = t.optional(t.boolean),
|
||||||
})
|
})
|
||||||
|
|
||||||
local ApiInstance = t.interface({
|
local ApiInstance = t.interface({
|
||||||
|
|
|
||||||
|
|
@ -371,14 +371,7 @@ impl ServeSession {
|
||||||
|
|
||||||
let patch_start = Instant::now();
|
let patch_start = Instant::now();
|
||||||
let project_folder = root_project.folder_location().to_path_buf();
|
let project_folder = root_project.folder_location().to_path_buf();
|
||||||
let watch_ignore_rules: Vec<PathIgnoreRule> = root_project
|
let watch_ignore_rules = root_project.path_ignore_rules();
|
||||||
.glob_ignore_paths
|
|
||||||
.iter()
|
|
||||||
.map(|glob| PathIgnoreRule {
|
|
||||||
glob: glob.clone(),
|
|
||||||
base_path: root_project.folder_location().to_path_buf(),
|
|
||||||
})
|
|
||||||
.collect();
|
|
||||||
std::thread::scope(|s| {
|
std::thread::scope(|s| {
|
||||||
s.spawn(|| {
|
s.spawn(|| {
|
||||||
use walkdir::WalkDir;
|
use walkdir::WalkDir;
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,11 @@ pub struct InstanceMetadata {
|
||||||
/// manage.
|
/// manage.
|
||||||
pub ignore_unknown_instances: bool,
|
pub ignore_unknown_instances: bool,
|
||||||
|
|
||||||
|
/// Whether this directory had children excluded by `globIgnorePaths`.
|
||||||
|
/// Distinguishes glob-ignored directories (suppress ALL deletions including
|
||||||
|
/// scripts) from scripts-only mode (suppress non-script deletions only).
|
||||||
|
pub glob_ignored_children: bool,
|
||||||
|
|
||||||
/// If a change occurs to this instance, the instigating source is what
|
/// If a change occurs to this instance, the instigating source is what
|
||||||
/// should be run through the snapshot functions to regenerate it.
|
/// should be run through the snapshot functions to regenerate it.
|
||||||
#[serde(skip_serializing_if = "Option::is_none")]
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
|
@ -79,6 +84,7 @@ impl InstanceMetadata {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
Self {
|
Self {
|
||||||
ignore_unknown_instances: false,
|
ignore_unknown_instances: false,
|
||||||
|
glob_ignored_children: false,
|
||||||
instigating_source: None,
|
instigating_source: None,
|
||||||
relevant_paths: Vec::new(),
|
relevant_paths: Vec::new(),
|
||||||
context: InstanceContext::default(),
|
context: InstanceContext::default(),
|
||||||
|
|
@ -96,6 +102,13 @@ impl InstanceMetadata {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn glob_ignored_children(self, glob_ignored_children: bool) -> Self {
|
||||||
|
Self {
|
||||||
|
glob_ignored_children,
|
||||||
|
..self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn instigating_source(self, instigating_source: impl Into<InstigatingSource>) -> Self {
|
pub fn instigating_source(self, instigating_source: impl Into<InstigatingSource>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
instigating_source: Some(instigating_source.into()),
|
instigating_source: Some(instigating_source.into()),
|
||||||
|
|
|
||||||
|
|
@ -110,6 +110,8 @@ fn compute_patch_set_internal(
|
||||||
.get_instance(id)
|
.get_instance(id)
|
||||||
.expect("Instance did not exist in tree");
|
.expect("Instance did not exist in tree");
|
||||||
|
|
||||||
|
let ignore_unknown = snapshot.metadata.ignore_unknown_instances;
|
||||||
|
|
||||||
compute_property_patches(
|
compute_property_patches(
|
||||||
&context.snapshot_specified_ids,
|
&context.snapshot_specified_ids,
|
||||||
&mut snapshot,
|
&mut snapshot,
|
||||||
|
|
@ -117,7 +119,15 @@ fn compute_patch_set_internal(
|
||||||
patch_set,
|
patch_set,
|
||||||
tree,
|
tree,
|
||||||
);
|
);
|
||||||
compute_children_patches(context, &mut snapshot, tree, id, patch_set, session);
|
compute_children_patches(
|
||||||
|
context,
|
||||||
|
&mut snapshot,
|
||||||
|
tree,
|
||||||
|
id,
|
||||||
|
patch_set,
|
||||||
|
session,
|
||||||
|
ignore_unknown,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn compute_property_patches(
|
fn compute_property_patches(
|
||||||
|
|
@ -267,6 +277,7 @@ fn compute_children_patches(
|
||||||
id: Ref,
|
id: Ref,
|
||||||
patch_set: &mut PatchSet,
|
patch_set: &mut PatchSet,
|
||||||
session: &super::matching::MatchingSession,
|
session: &super::matching::MatchingSession,
|
||||||
|
ignore_unknown_instances: bool,
|
||||||
) {
|
) {
|
||||||
use super::matching::match_forward;
|
use super::matching::match_forward;
|
||||||
|
|
||||||
|
|
@ -310,10 +321,14 @@ fn compute_children_patches(
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unmatched tree children: instances to be removed.
|
// Unmatched tree children: instances to be removed, unless the parent
|
||||||
|
// snapshot says to ignore unknown instances (e.g. $ignoreUnknownInstances
|
||||||
|
// or directories with glob-ignored children).
|
||||||
|
if !ignore_unknown_instances {
|
||||||
for tree_child_id in match_result.unmatched_tree {
|
for tree_child_id in match_result.unmatched_tree {
|
||||||
patch_set.removed_instances.push(tree_child_id);
|
patch_set.removed_instances.push(tree_child_id);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn compute_ref_properties(
|
fn compute_ref_properties(
|
||||||
|
|
@ -426,6 +441,96 @@ mod test {
|
||||||
assert_eq!(patch_set, expected_patch_set);
|
assert_eq!(patch_set, expected_patch_set);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn ignore_unknown_instances_suppresses_removals() {
|
||||||
|
use super::super::patch_apply::apply_patch_set;
|
||||||
|
|
||||||
|
let mut tree = RojoTree::new(InstanceSnapshot::new().name("root").class_name("Folder"));
|
||||||
|
let root_id = tree.get_root_id();
|
||||||
|
|
||||||
|
// Add two children (A and B) to the tree via a patch.
|
||||||
|
let add_patch = PatchSet {
|
||||||
|
added_instances: vec![
|
||||||
|
PatchAdd {
|
||||||
|
parent_id: root_id,
|
||||||
|
instance: InstanceSnapshot::new().name("A").class_name("Folder"),
|
||||||
|
},
|
||||||
|
PatchAdd {
|
||||||
|
parent_id: root_id,
|
||||||
|
instance: InstanceSnapshot::new().name("B").class_name("Folder"),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
updated_instances: Vec::new(),
|
||||||
|
removed_instances: Vec::new(),
|
||||||
|
stage_ids: std::collections::HashSet::new(),
|
||||||
|
stage_paths: Vec::new(),
|
||||||
|
};
|
||||||
|
apply_patch_set(&mut tree, add_patch);
|
||||||
|
|
||||||
|
// Snapshot only has child A, with ignore_unknown_instances = true.
|
||||||
|
// Child B is "unknown" and should NOT be removed.
|
||||||
|
let snapshot = InstanceSnapshot {
|
||||||
|
snapshot_id: Ref::none(),
|
||||||
|
metadata: super::super::InstanceMetadata::new().ignore_unknown_instances(true),
|
||||||
|
properties: UstrMap::new(),
|
||||||
|
name: Cow::Borrowed("root"),
|
||||||
|
class_name: ustr("Folder"),
|
||||||
|
children: vec![InstanceSnapshot::new().name("A").class_name("Folder")],
|
||||||
|
};
|
||||||
|
|
||||||
|
let patch_set = compute_patch_set(Some(snapshot), &tree, root_id);
|
||||||
|
|
||||||
|
assert!(
|
||||||
|
patch_set.removed_instances.is_empty(),
|
||||||
|
"Unmatched tree children should NOT be removed when ignore_unknown_instances is true"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn default_removes_unmatched_children() {
|
||||||
|
use super::super::patch_apply::apply_patch_set;
|
||||||
|
|
||||||
|
let mut tree = RojoTree::new(InstanceSnapshot::new().name("root").class_name("Folder"));
|
||||||
|
let root_id = tree.get_root_id();
|
||||||
|
|
||||||
|
let add_patch = PatchSet {
|
||||||
|
added_instances: vec![
|
||||||
|
PatchAdd {
|
||||||
|
parent_id: root_id,
|
||||||
|
instance: InstanceSnapshot::new().name("A").class_name("Folder"),
|
||||||
|
},
|
||||||
|
PatchAdd {
|
||||||
|
parent_id: root_id,
|
||||||
|
instance: InstanceSnapshot::new().name("B").class_name("Folder"),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
updated_instances: Vec::new(),
|
||||||
|
removed_instances: Vec::new(),
|
||||||
|
stage_ids: std::collections::HashSet::new(),
|
||||||
|
stage_paths: Vec::new(),
|
||||||
|
};
|
||||||
|
apply_patch_set(&mut tree, add_patch);
|
||||||
|
|
||||||
|
// Snapshot only has child A, with default metadata (ignore_unknown_instances = false).
|
||||||
|
// Child B should be removed.
|
||||||
|
let snapshot = InstanceSnapshot {
|
||||||
|
snapshot_id: Ref::none(),
|
||||||
|
metadata: Default::default(),
|
||||||
|
properties: UstrMap::new(),
|
||||||
|
name: Cow::Borrowed("root"),
|
||||||
|
class_name: ustr("Folder"),
|
||||||
|
children: vec![InstanceSnapshot::new().name("A").class_name("Folder")],
|
||||||
|
};
|
||||||
|
|
||||||
|
let patch_set = compute_patch_set(Some(snapshot), &tree, root_id);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
patch_set.removed_instances.len(),
|
||||||
|
1,
|
||||||
|
"Unmatched tree children should be removed when ignore_unknown_instances is false"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// The same as rewrite_ref_existing_instance_update, except that the
|
/// The same as rewrite_ref_existing_instance_update, except that the
|
||||||
/// property is added in a new instance instead of modifying an existing
|
/// property is added in a new instance instead of modifying an existing
|
||||||
/// one.
|
/// one.
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ properties:
|
||||||
"!String": Value of Foo
|
"!String": Value of Foo
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
relevant_paths: []
|
relevant_paths: []
|
||||||
context: {}
|
context: {}
|
||||||
specified_id: ~
|
specified_id: ~
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ class_name: ROOT
|
||||||
properties: {}
|
properties: {}
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
relevant_paths: []
|
relevant_paths: []
|
||||||
context: {}
|
context: {}
|
||||||
specified_id: ~
|
specified_id: ~
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ properties:
|
||||||
"!String": Should be removed
|
"!String": Should be removed
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
relevant_paths: []
|
relevant_paths: []
|
||||||
context: {}
|
context: {}
|
||||||
specified_id: ~
|
specified_id: ~
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ class_name: Folder
|
||||||
properties: {}
|
properties: {}
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
relevant_paths: []
|
relevant_paths: []
|
||||||
context: {}
|
context: {}
|
||||||
specified_id: ~
|
specified_id: ~
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ added_instances:
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
relevant_paths: []
|
relevant_paths: []
|
||||||
context: {}
|
context: {}
|
||||||
specified_id: ~
|
specified_id: ~
|
||||||
|
|
|
||||||
|
|
@ -118,7 +118,8 @@ pub fn snapshot_dir_no_meta(
|
||||||
.instigating_source(path)
|
.instigating_source(path)
|
||||||
.relevant_paths(relevant_paths)
|
.relevant_paths(relevant_paths)
|
||||||
.context(context)
|
.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))
|
Ok(Some(snapshot))
|
||||||
|
|
@ -602,6 +603,10 @@ mod test {
|
||||||
snap.metadata.ignore_unknown_instances,
|
snap.metadata.ignore_unknown_instances,
|
||||||
"Directory with glob-ignored children should have ignore_unknown_instances = true"
|
"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!(
|
assert_eq!(
|
||||||
snap.children.len(),
|
snap.children.len(),
|
||||||
1,
|
1,
|
||||||
|
|
@ -636,6 +641,10 @@ mod test {
|
||||||
!snap.metadata.ignore_unknown_instances,
|
!snap.metadata.ignore_unknown_instances,
|
||||||
"Directory without glob-ignored children should have ignore_unknown_instances = false"
|
"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);
|
assert_eq!(snap.children.len(), 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo.csv
|
Path: /foo.csv
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /root/init.csv
|
Path: /root/init.csv
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /root/init.csv
|
Path: /root/init.csv
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: true
|
ignore_unknown_instances: true
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo.csv
|
Path: /foo.csv
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo
|
Path: /foo
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo
|
Path: /foo
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
@ -30,6 +31,7 @@ children:
|
||||||
- snapshot_id: "00000000000000000000000000000000"
|
- snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo/Child
|
Path: /foo/Child
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo.json5
|
Path: /foo.json5
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo.json5
|
Path: /foo.json5
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo.model.json5
|
Path: /foo.model.json5
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
@ -22,6 +23,7 @@ children:
|
||||||
- snapshot_id: "00000000000000000000000000000000"
|
- snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
relevant_paths: []
|
relevant_paths: []
|
||||||
context: {}
|
context: {}
|
||||||
specified_id: ~
|
specified_id: ~
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo.model.json5
|
Path: /foo.model.json5
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
@ -22,6 +23,7 @@ children:
|
||||||
- snapshot_id: "00000000000000000000000000000000"
|
- snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
relevant_paths: []
|
relevant_paths: []
|
||||||
context: {}
|
context: {}
|
||||||
specified_id: ~
|
specified_id: ~
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo.client.luau
|
Path: /foo.client.luau
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /root/init.luau
|
Path: /root/init.luau
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /root/init.luau
|
Path: /root/init.luau
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo.legacy.luau
|
Path: /foo.legacy.luau
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo.local.luau
|
Path: /foo.local.luau
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo.luau
|
Path: /foo.luau
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: true
|
ignore_unknown_instances: true
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo.luau
|
Path: /foo.luau
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo.plugin.luau
|
Path: /foo.plugin.luau
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /bar.server.luau
|
Path: /bar.server.luau
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo.server.luau
|
Path: /foo.server.luau
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: true
|
ignore_unknown_instances: true
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo.server.luau
|
Path: /foo.server.luau
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
- /foo/bar.meta.json5
|
- /foo/bar.meta.json5
|
||||||
context: {}
|
context: {}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
- /foo/init.meta.json5
|
- /foo/init.meta.json5
|
||||||
context: {}
|
context: {}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: true
|
ignore_unknown_instances: true
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo/default.project.json5
|
Path: /foo/default.project.json5
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: true
|
ignore_unknown_instances: true
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo/hello.project.json5
|
Path: /foo/hello.project.json5
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: true
|
ignore_unknown_instances: true
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo/default.project.json5
|
Path: /foo/default.project.json5
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: true
|
ignore_unknown_instances: true
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo.project.json5
|
Path: /foo.project.json5
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
@ -20,6 +21,7 @@ children:
|
||||||
- snapshot_id: "00000000000000000000000000000000"
|
- snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: true
|
ignore_unknown_instances: true
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
ProjectNode:
|
ProjectNode:
|
||||||
path: /foo.project.json5
|
path: /foo.project.json5
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: true
|
ignore_unknown_instances: true
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo/default.project.json5
|
Path: /foo/default.project.json5
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: true
|
ignore_unknown_instances: true
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo/default.project.json5
|
Path: /foo/default.project.json5
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
@ -21,6 +22,7 @@ children:
|
||||||
- snapshot_id: "00000000000000000000000000000000"
|
- snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: true
|
ignore_unknown_instances: true
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
ProjectNode:
|
ProjectNode:
|
||||||
path: /foo/other.project.json5
|
path: /foo/other.project.json5
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo/default.project.json5
|
Path: /foo/default.project.json5
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: true
|
ignore_unknown_instances: true
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo.project.json5
|
Path: /foo.project.json5
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: true
|
ignore_unknown_instances: true
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo.project.json5
|
Path: /foo.project.json5
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo.toml
|
Path: /foo.toml
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: foo.toml
|
Path: foo.toml
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo.txt
|
Path: /foo.txt
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo.txt
|
Path: /foo.txt
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: /foo.yaml
|
Path: /foo.yaml
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ expression: instance_snapshot
|
||||||
snapshot_id: "00000000000000000000000000000000"
|
snapshot_id: "00000000000000000000000000000000"
|
||||||
metadata:
|
metadata:
|
||||||
ignore_unknown_instances: false
|
ignore_unknown_instances: false
|
||||||
|
glob_ignored_children: false
|
||||||
instigating_source:
|
instigating_source:
|
||||||
Path: foo.yaml
|
Path: foo.yaml
|
||||||
relevant_paths:
|
relevant_paths:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue