From 21b92f5f13cd973dbd3ca67bf94ad3887a58838e Mon Sep 17 00:00:00 2001 From: Jess Frazelle Date: Mon, 12 May 2025 07:07:18 -0700 Subject: [PATCH] fix cache multi-file (#6844) * updates Signed-off-by: Jess Frazelle * updates Signed-off-by: Jess Frazelle * bump kittycad.rs i need this for cli Signed-off-by: Jess Frazelle * bump the version so i can fix cli Signed-off-by: Jess Frazelle * fix Signed-off-by: Jess Frazelle * clippy Signed-off-by: Jess Frazelle --------- Signed-off-by: Jess Frazelle --- package-lock.json | 1 + rust/Cargo.lock | 24 +++--- rust/Cargo.toml | 2 +- rust/kcl-bumper/Cargo.toml | 2 +- rust/kcl-derive-docs/Cargo.toml | 2 +- rust/kcl-directory-test-macro/Cargo.toml | 2 +- rust/kcl-language-server-release/Cargo.toml | 2 +- rust/kcl-language-server/Cargo.toml | 2 +- rust/kcl-lib/Cargo.toml | 2 +- rust/kcl-lib/e2e/executor/cache.rs | 69 +++++++++++++++++- ..._dont_reexecute_settings_only_change_0.png | Bin 0 -> 35973 bytes ..._dont_reexecute_settings_only_change_1.png | Bin 0 -> 112052 bytes rust/kcl-lib/src/errors.rs | 2 +- rust/kcl-lib/src/execution/cache.rs | 1 - rust/kcl-lib/src/execution/mod.rs | 21 ++++-- rust/kcl-python-bindings/Cargo.toml | 2 +- rust/kcl-test-server/Cargo.toml | 2 +- rust/kcl-to-core/Cargo.toml | 2 +- rust/kcl-wasm-lib/Cargo.toml | 2 +- 19 files changed, 107 insertions(+), 33 deletions(-) create mode 100644 rust/kcl-lib/e2e/executor/outputs/cache_multi_file_same_code_dont_reexecute_settings_only_change_0.png create mode 100644 rust/kcl-lib/e2e/executor/outputs/cache_multi_file_same_code_dont_reexecute_settings_only_change_1.png diff --git a/package-lock.json b/package-lock.json index 20e075f06..b2cb9144b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2492,6 +2492,7 @@ }, "node_modules/@clack/prompts/node_modules/is-unicode-supported": { "version": "1.3.0", + "extraneous": true, "inBundle": true, "license": "MIT", "engines": { diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 585f59c2f..0d7ec37ca 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -1815,7 +1815,7 @@ dependencies = [ [[package]] name = "kcl-bumper" -version = "0.1.68" +version = "0.1.69" dependencies = [ "anyhow", "clap", @@ -1826,7 +1826,7 @@ dependencies = [ [[package]] name = "kcl-derive-docs" -version = "0.1.68" +version = "0.1.69" dependencies = [ "Inflector", "anyhow", @@ -1845,7 +1845,7 @@ dependencies = [ [[package]] name = "kcl-directory-test-macro" -version = "0.1.68" +version = "0.1.69" dependencies = [ "proc-macro2", "quote", @@ -1854,7 +1854,7 @@ dependencies = [ [[package]] name = "kcl-language-server" -version = "0.2.68" +version = "0.2.69" dependencies = [ "anyhow", "clap", @@ -1875,7 +1875,7 @@ dependencies = [ [[package]] name = "kcl-language-server-release" -version = "0.1.68" +version = "0.1.69" dependencies = [ "anyhow", "clap", @@ -1895,7 +1895,7 @@ dependencies = [ [[package]] name = "kcl-lib" -version = "0.2.68" +version = "0.2.69" dependencies = [ "anyhow", "approx 0.5.1", @@ -1970,7 +1970,7 @@ dependencies = [ [[package]] name = "kcl-python-bindings" -version = "0.3.68" +version = "0.3.69" dependencies = [ "anyhow", "kcl-lib", @@ -1985,7 +1985,7 @@ dependencies = [ [[package]] name = "kcl-test-server" -version = "0.1.68" +version = "0.1.69" dependencies = [ "anyhow", "hyper 0.14.32", @@ -1998,7 +1998,7 @@ dependencies = [ [[package]] name = "kcl-to-core" -version = "0.1.68" +version = "0.1.69" dependencies = [ "anyhow", "async-trait", @@ -2012,7 +2012,7 @@ dependencies = [ [[package]] name = "kcl-wasm-lib" -version = "0.1.68" +version = "0.1.69" dependencies = [ "anyhow", "bson", @@ -2042,9 +2042,9 @@ dependencies = [ [[package]] name = "kittycad" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a345fd2a4cb16205f32bd1aa41715045830c59d78c59927fca6580e2a651ac9" +checksum = "b48a9698d68c791df76aa020b596c324177a614e38ff3dd67eedd04db76e222f" dependencies = [ "anyhow", "async-trait", diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 7787267d8..4a7e29e12 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -35,7 +35,7 @@ console_error_panic_hook = "0.1.7" dashmap = { version = "6.1.0" } http = "1" indexmap = "2.9.0" -kittycad = { version = "0.3.36", default-features = false, features = ["js", "requests"] } +kittycad = { version = "0.3.37", default-features = false, features = ["js", "requests"] } kittycad-modeling-cmds = { version = "0.2.117", features = ["ts-rs", "websocket"] } lazy_static = "1.5.0" miette = "7.5.0" diff --git a/rust/kcl-bumper/Cargo.toml b/rust/kcl-bumper/Cargo.toml index f0f992370..c07963a79 100644 --- a/rust/kcl-bumper/Cargo.toml +++ b/rust/kcl-bumper/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "kcl-bumper" -version = "0.1.68" +version = "0.1.69" edition = "2021" repository = "https://github.com/KittyCAD/modeling-api" rust-version = "1.76" diff --git a/rust/kcl-derive-docs/Cargo.toml b/rust/kcl-derive-docs/Cargo.toml index e6cd768f1..c19f7fcd6 100644 --- a/rust/kcl-derive-docs/Cargo.toml +++ b/rust/kcl-derive-docs/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "kcl-derive-docs" description = "A tool for generating documentation from Rust derive macros" -version = "0.1.68" +version = "0.1.69" edition = "2021" license = "MIT" repository = "https://github.com/KittyCAD/modeling-app" diff --git a/rust/kcl-directory-test-macro/Cargo.toml b/rust/kcl-directory-test-macro/Cargo.toml index cfc680286..42277f976 100644 --- a/rust/kcl-directory-test-macro/Cargo.toml +++ b/rust/kcl-directory-test-macro/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "kcl-directory-test-macro" description = "A tool for generating tests from a directory of kcl files" -version = "0.1.68" +version = "0.1.69" edition = "2021" license = "MIT" repository = "https://github.com/KittyCAD/modeling-app" diff --git a/rust/kcl-language-server-release/Cargo.toml b/rust/kcl-language-server-release/Cargo.toml index 382587747..cb1f0bc07 100644 --- a/rust/kcl-language-server-release/Cargo.toml +++ b/rust/kcl-language-server-release/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "kcl-language-server-release" -version = "0.1.68" +version = "0.1.69" edition = "2021" authors = ["KittyCAD Inc "] publish = false diff --git a/rust/kcl-language-server/Cargo.toml b/rust/kcl-language-server/Cargo.toml index a3e481c54..177dff001 100644 --- a/rust/kcl-language-server/Cargo.toml +++ b/rust/kcl-language-server/Cargo.toml @@ -2,7 +2,7 @@ name = "kcl-language-server" description = "A language server for KCL." authors = ["KittyCAD Inc "] -version = "0.2.68" +version = "0.2.69" edition = "2021" license = "MIT" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/rust/kcl-lib/Cargo.toml b/rust/kcl-lib/Cargo.toml index 7297243e9..1138e3f02 100644 --- a/rust/kcl-lib/Cargo.toml +++ b/rust/kcl-lib/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "kcl-lib" description = "KittyCAD Language implementation and tools" -version = "0.2.68" +version = "0.2.69" edition = "2021" license = "MIT" repository = "https://github.com/KittyCAD/modeling-app" diff --git a/rust/kcl-lib/e2e/executor/cache.rs b/rust/kcl-lib/e2e/executor/cache.rs index 8a923c9ff..1e757aeea 100644 --- a/rust/kcl-lib/e2e/executor/cache.rs +++ b/rust/kcl-lib/e2e/executor/cache.rs @@ -3,6 +3,7 @@ use kcl_lib::{bust_cache, ExecError, ExecOutcome}; use kcmc::{each_cmd as mcmd, ModelingCmd}; use kittycad_modeling_cmds as kcmc; +use pretty_assertions::assert_eq; #[derive(Debug)] struct Variation<'a> { @@ -247,8 +248,11 @@ extrude(profile001, length = 100)"# ) .await; - result.first().unwrap(); - result.last().unwrap(); + let first = result.first().unwrap(); + let last = result.last().unwrap(); + + assert!(first.1 == last.1, "The images should be the same"); + assert_eq!(first.2, last.2, "The outcomes should be the same"); } #[cfg(feature = "artifact-graph")] @@ -550,3 +554,64 @@ extrude(profile001, length = 100) "The outcomes artifact graphs should be different" ); } + +#[tokio::test(flavor = "multi_thread")] +async fn kcl_test_cache_multi_file_same_code_dont_reexecute_settings_only_change() { + let code = r#"import "toBeImported.kcl" as importedCube + +importedCube + +sketch001 = startSketchOn(XZ) +profile001 = startProfile(sketch001, at = [-134.53, -56.17]) + |> angledLine(angle = 0, length = 79.05, tag = $rectangleSegmentA001) + |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 76.28) + |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $seg01) + |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02) + |> close() +extrude001 = extrude(profile001, length = 100) +sketch003 = startSketchOn(extrude001, face = seg02) +sketch002 = startSketchOn(extrude001, face = seg01) +"#; + + let other_file = ( + std::path::PathBuf::from("toBeImported.kcl"), + r#"sketch001 = startSketchOn(XZ) +profile001 = startProfile(sketch001, at = [281.54, 305.81]) + |> angledLine(angle = 0, length = 123.43, tag = $rectangleSegmentA001) + |> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 85.99) + |> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001)) + |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) + |> close() +extrude(profile001, length = 100)"# + .to_string(), + ); + + let result = cache_test( + "multi_file_same_code_dont_reexecute_settings_only_change", + vec![ + Variation { + code, + other_files: vec![other_file.clone()], + settings: &kcl_lib::ExecutorSettings { + show_grid: false, + ..Default::default() + }, + }, + Variation { + code, + other_files: vec![other_file], + settings: &kcl_lib::ExecutorSettings { + show_grid: true, + ..Default::default() + }, + }, + ], + ) + .await; + + let first = result.first().unwrap(); + let last = result.last().unwrap(); + + assert!(first.1 != last.1, "The images should be different for the grid"); + assert_eq!(first.2, last.2, "The outcomes should be the same"); +} diff --git a/rust/kcl-lib/e2e/executor/outputs/cache_multi_file_same_code_dont_reexecute_settings_only_change_0.png b/rust/kcl-lib/e2e/executor/outputs/cache_multi_file_same_code_dont_reexecute_settings_only_change_0.png new file mode 100644 index 0000000000000000000000000000000000000000..8224373438f7a0f1a87a8bac43d97d714d316b5a GIT binary patch literal 35973 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 BglPZ( literal 0 HcmV?d00001 diff --git a/rust/kcl-lib/e2e/executor/outputs/cache_multi_file_same_code_dont_reexecute_settings_only_change_1.png b/rust/kcl-lib/e2e/executor/outputs/cache_multi_file_same_code_dont_reexecute_settings_only_change_1.png new file mode 100644 index 0000000000000000000000000000000000000000..3d47b72c6fbcb0ba25f18a1f215a8a181c8d0710 GIT binary patch literal 112052 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 z zP*AtM+`LMH2wE9>`3$4EZ)$s|`xHHHBiYG=u5XQ^sU@4-q0_F;9j@?il2WP~7q`}? z8W$7CpBtDnpD*`WpM5N8d~LHYFWq~!BU#!#3$M~QFPQS#w)~1f8I3&YMYl$P0*umL zcw=TCp^;9pGRI)&Owy_53Q!XO@3N;7oK;?~ZqG*c2MiY+Gi}??I(^N9eZfKH<>Sf< z_m3>RSa7&z_0aSsWZ*8YyJjqYa>0U{KdxVNDlL1i1R-sHi+V zq2o&J%whdz)1eHPhA-tTo^6niEz90kW;Q)l@>_SQaaZ}~cb-|bsv+1hH@{+DS-p{; z?v1aX_4=t3b*)tl^Fn0Ap~mo^69WzL*=zwbS~||XHlo{)j(sOcN2E5V;>Ge~W{|&U z=kDF}Zr$-9`TUyjX5t&`bJMr`XcECMo-_GF=w7s`-{KfB9e6gnD+`|=31N@gB{^gES z|M{$ce$BH6yXyqkyug*$R~7|weMfq?c*ut~?p@HZyRNw`eZko`_iW$Lvhd`ohP|Cf zD8Tr_Es4IY=Kas^JUptte)^uaOrx#L_vBMgRev~T@8_TFo#!vz8TZ)CYES4?VtC)S z{0Xh8>2-M(mBaJ%Gmpfbe4X^&HLl=i$)PJVd>>9Jyfkg^Kc*C2n%3<8f?P@|2pHX{ zXO8R>9$;eztUGhaxkY7=epL{c)Pr)jz!-apo^ltrO0qR>&j5ehLgdQnM&@rv3j1Q$ zNj3Xtk>yb8?GF8Md));f21-dv=6Abu`kt&B_AHAR-1hc@x6`uo+WuIYP!ji?FLc7! zPFzq!d|+>5=gv0v#zl?YyWRDb14qT>oT<-uRVTa8eLelc9bRAfU_!O)WH=mNlw$<_ zq01L8ocNd^TH5@y^giX+Y^b?>Ws9pdhpFN~O?t!m^x91sdpqt+9)4TgZ-4vSJHzzw z!Gw&A#>YD^dc%7Xe>!thx08I0yFYl29A2C6>Ps2z7d(4*%nfFT`{Qz%2vOAQ57i|( zE#78TVU-g=gatVkX&M?jbm;WJ3U~VoFVoKJKm^9e$7c%DA#VO{VJa6qvMtlo+`h&9 z3a5xyDto)y-%gbH9XSO}ER#wM_4hUPcguIsr`PXgBCjSGEH#5^42~bjugI?RLqK3k zfNJv3+MQDP-uv&*yZm(eg+Ucn;-S-b&2IQv`Gwsluf9E{AhWclrG9ik{QS`aQjYyP?~MQC$*~=T1+LCJQFlCi%oF~DYv-n5 z?~gxyF)M3!`1H(-tSbi+!+$F)tlv4!T$qv3_FQ<-x65Cs+P`~RV#nV~3L6HDIdkP) z>Vng2%_oY|hsJT*x-D-*(V^VJKqtl0W8q(9ww>FwWXm%*H59cqBo)$Moak)4bm{T7 z_7d}Ka*O+O#ykk1iz;ds?G2ommJ!;3*lcbX7#tbZ@kwg}64^F(vVy>quh>?EXL?NB zOoZ+32nNR@J5%FUeWxfS(i2k1y!)Ztv;}!(;eCe>*B>j4 z`{ex52DbP`H4l3NZ}}ITEn8HbQ_y^HgZrniW_5e#na5mJeGN0WuJt0&?=aWm%RdM& zo4#vy)lN3a@QeE>LCR=9y5rQW)yCTtPW)F%gF4Os{DA>uig@Prl%o0D&JKCvkMC5a zhCgrf)o^s!dvtKoM_ZnqHEVO_>$0dp!d;hY#Ql}KE_^Gw`Cu?X8k9rA-CC}rzJ1ah a_lAFeu=Y$z9R1(qi4T2$`}dw$`hNk@*l+Cs literal 0 HcmV?d00001 diff --git a/rust/kcl-lib/src/errors.rs b/rust/kcl-lib/src/errors.rs index 4fd038ee6..6ab2dc277 100644 --- a/rust/kcl-lib/src/errors.rs +++ b/rust/kcl-lib/src/errors.rs @@ -559,7 +559,7 @@ impl From for pyo3::PyErr { } /// An error which occurred during parsing, etc. -#[derive(Debug, Clone, Serialize, Deserialize, ts_rs::TS)] +#[derive(Debug, Clone, Serialize, Deserialize, ts_rs::TS, PartialEq, Eq)] #[ts(export)] pub struct CompilationError { #[serde(rename = "sourceRange")] diff --git a/rust/kcl-lib/src/execution/cache.rs b/rust/kcl-lib/src/execution/cache.rs index 2c794561e..ed265baa0 100644 --- a/rust/kcl-lib/src/execution/cache.rs +++ b/rust/kcl-lib/src/execution/cache.rs @@ -118,7 +118,6 @@ pub(super) async fn get_changed_program(old: CacheInformation<'_>, new: CacheInf // We know they have the same imports because the ast is the same. // If we have no imports, we can skip this. if !old.ast.has_import_statements() { - println!("No imports, no need to check."); return CacheResult::NoAction(reapply_settings); } diff --git a/rust/kcl-lib/src/execution/mod.rs b/rust/kcl-lib/src/execution/mod.rs index 8496bdf29..1af60951c 100644 --- a/rust/kcl-lib/src/execution/mod.rs +++ b/rust/kcl-lib/src/execution/mod.rs @@ -64,7 +64,7 @@ pub mod typed_path; pub(crate) mod types; /// Outcome of executing a program. This is used in TS. -#[derive(Debug, Clone, Serialize, ts_rs::TS)] +#[derive(Debug, Clone, Serialize, ts_rs::TS, PartialEq)] #[ts(export)] #[serde(rename_all = "camelCase")] pub struct ExecOutcome { @@ -385,6 +385,7 @@ impl ExecutorContext { let (ws, _headers) = client .modeling() .commands_ws( + None, None, None, if settings.enable_ssao { @@ -653,14 +654,22 @@ impl ExecutorContext { keys.sort(); for key in keys { let (_, id, _, _) = &new_universe[key]; - let old_source = old_state.get_source(*id); - let new_source = new_exec_state.get_source(*id); - if old_source != new_source { - clear_scene = true; - break; + if let (Some(source0), Some(source1)) = + (old_state.get_source(*id), new_exec_state.get_source(*id)) + { + if source0.source != source1.source { + clear_scene = true; + break; + } } } + if !clear_scene { + // Return early we don't need to clear the scene. + let outcome = old_state.to_exec_outcome(result_env).await; + return Ok(outcome); + } + ( clear_scene, crate::Program { diff --git a/rust/kcl-python-bindings/Cargo.toml b/rust/kcl-python-bindings/Cargo.toml index c84a519ae..0135a4e83 100644 --- a/rust/kcl-python-bindings/Cargo.toml +++ b/rust/kcl-python-bindings/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "kcl-python-bindings" -version = "0.3.68" +version = "0.3.69" edition = "2021" repository = "https://github.com/kittycad/modeling-app" exclude = ["tests/*", "files/*", "venv/*"] diff --git a/rust/kcl-test-server/Cargo.toml b/rust/kcl-test-server/Cargo.toml index 305748331..706850ee2 100644 --- a/rust/kcl-test-server/Cargo.toml +++ b/rust/kcl-test-server/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "kcl-test-server" description = "A test server for KCL" -version = "0.1.68" +version = "0.1.69" edition = "2021" license = "MIT" diff --git a/rust/kcl-to-core/Cargo.toml b/rust/kcl-to-core/Cargo.toml index 62945e07f..8f76c7baa 100644 --- a/rust/kcl-to-core/Cargo.toml +++ b/rust/kcl-to-core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "kcl-to-core" description = "Utility methods to convert kcl to engine core executable tests" -version = "0.1.68" +version = "0.1.69" edition = "2021" license = "MIT" repository = "https://github.com/KittyCAD/modeling-app" diff --git a/rust/kcl-wasm-lib/Cargo.toml b/rust/kcl-wasm-lib/Cargo.toml index 3ed46dd5e..818c705fd 100644 --- a/rust/kcl-wasm-lib/Cargo.toml +++ b/rust/kcl-wasm-lib/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "kcl-wasm-lib" -version = "0.1.68" +version = "0.1.69" edition = "2021" repository = "https://github.com/KittyCAD/modeling-app" rust-version = "1.83"