From e23d024ba3cbed9c2e25f34f4b2b1ac47e2ed319 Mon Sep 17 00:00:00 2001 From: Kenneth Loeffler Date: Tue, 20 Feb 2024 09:11:26 -0800 Subject: [PATCH] Insert Model.NeedsPivotMigration in insert_instance when missing (#865) --- ...to_end__tests__build__rbxmx_in_folder.snap | 2 +- ..._end__tests__build__unresolved_values.snap | 2 +- ..._tests__serve__empty_json_model_all-2.snap | 5 +++-- ...ts__serve__empty_json_model_subscribe.snap | 5 +++-- src/snapshot/tree.rs | 20 ++++++++++++++++++- 5 files changed, 27 insertions(+), 7 deletions(-) diff --git a/rojo-test/build-test-snapshots/end_to_end__tests__build__rbxmx_in_folder.snap b/rojo-test/build-test-snapshots/end_to_end__tests__build__rbxmx_in_folder.snap index db602853..5518a83d 100644 --- a/rojo-test/build-test-snapshots/end_to_end__tests__build__rbxmx_in_folder.snap +++ b/rojo-test/build-test-snapshots/end_to_end__tests__build__rbxmx_in_folder.snap @@ -1,7 +1,6 @@ --- source: tests/tests/build.rs expression: contents - --- @@ -25,6 +24,7 @@ expression: contents 0 1 + false null diff --git a/rojo-test/build-test-snapshots/end_to_end__tests__build__unresolved_values.snap b/rojo-test/build-test-snapshots/end_to_end__tests__build__unresolved_values.snap index 8b9eac0e..805b1d50 100644 --- a/rojo-test/build-test-snapshots/end_to_end__tests__build__unresolved_values.snap +++ b/rojo-test/build-test-snapshots/end_to_end__tests__build__unresolved_values.snap @@ -1,7 +1,6 @@ --- source: tests/tests/build.rs expression: contents - --- @@ -22,6 +21,7 @@ expression: contents Workspace + false diff --git a/rojo-test/serve-test-snapshots/end_to_end__tests__serve__empty_json_model_all-2.snap b/rojo-test/serve-test-snapshots/end_to_end__tests__serve__empty_json_model_all-2.snap index 6f02d667..a8ca0214 100644 --- a/rojo-test/serve-test-snapshots/end_to_end__tests__serve__empty_json_model_all-2.snap +++ b/rojo-test/serve-test-snapshots/end_to_end__tests__serve__empty_json_model_all-2.snap @@ -1,7 +1,6 @@ --- source: tests/tests/serve.rs expression: "read_response.intern_and_redact(&mut redactions, root_id)" - --- instances: id-2: @@ -22,7 +21,9 @@ instances: ignoreUnknownInstances: false Name: test Parent: id-2 - Properties: {} + Properties: + NeedsPivotMigration: + Bool: false messageCursor: 1 sessionId: id-1 diff --git a/rojo-test/serve-test-snapshots/end_to_end__tests__serve__empty_json_model_subscribe.snap b/rojo-test/serve-test-snapshots/end_to_end__tests__serve__empty_json_model_subscribe.snap index bb747b86..624860e3 100644 --- a/rojo-test/serve-test-snapshots/end_to_end__tests__serve__empty_json_model_subscribe.snap +++ b/rojo-test/serve-test-snapshots/end_to_end__tests__serve__empty_json_model_subscribe.snap @@ -1,7 +1,6 @@ --- source: tests/tests/serve.rs expression: "subscribe_response.intern_and_redact(&mut redactions, ())" - --- messageCursor: 1 messages: @@ -14,7 +13,9 @@ messages: ignoreUnknownInstances: false Name: test Parent: id-2 - Properties: {} + Properties: + NeedsPivotMigration: + Bool: false removed: [] updated: [] sessionId: id-1 diff --git a/src/snapshot/tree.rs b/src/snapshot/tree.rs index e4379bc2..f0a0a592 100644 --- a/src/snapshot/tree.rs +++ b/src/snapshot/tree.rs @@ -87,10 +87,28 @@ impl RojoTree { } pub fn insert_instance(&mut self, parent_ref: Ref, snapshot: InstanceSnapshot) -> Ref { + // !!!!!!!!!! UGLY HACK !!!!!!!!!! + // + // This is a set of special cases working around a more general problem upstream + // in rbx-dom that causes pivots to not build to file correctly, described in + // github.com/rojo-rbx/rojo/issues/628. + // + // We need to insert the NeedsPivotMigration property with a value of false on + // every instance that inherits from Model for pivots to build correctly. + let hack_needs_pivot_migration = match snapshot.class_name.as_ref() { + "Model" | "Actor" | "Tool" | "HopperBin" | "Flag" | "WorldModel" | "Workspace" + if !snapshot.properties.contains_key("NeedsPivotMigration") => + { + vec![("NeedsPivotMigration", Variant::Bool(false))] + } + _ => Vec::new(), + }; + let builder = InstanceBuilder::empty() .with_class(snapshot.class_name.into_owned()) .with_name(snapshot.name.into_owned()) - .with_properties(snapshot.properties); + .with_properties(snapshot.properties) + .with_properties(hack_needs_pivot_migration); let referent = self.inner.insert(parent_ref, builder); self.insert_metadata(referent, snapshot.metadata);