From 77c514776ad49b20a0a6c88581ff94151b4dc213 Mon Sep 17 00:00:00 2001 From: JonJagger Date: Mon, 18 May 2026 12:06:53 +0100 Subject: [PATCH 1/3] Introduce diff_lines_files/diff_summary_files as the core diff API diff_lines and diff_summary now delegate to these new public methods after fetching files from saver, separating file retrieval from diff computation in preparation for the saver refactoring. Co-Authored-By: Claude Sonnet 4.6 --- source/server/differ.rb | 24 ++++++++++++++++-------- source/server/git_differ.rb | 10 +++++----- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/source/server/differ.rb b/source/server/differ.rb index c5ec8592..f11b1949 100644 --- a/source/server/differ.rb +++ b/source/server/differ.rb @@ -7,21 +7,29 @@ def initialize(externals) end def diff_lines(id:, was_index:, now_index:) - diff_plus(id, was_index, now_index, lines: true) + was_files = files(saver.kata_event(id, was_index)) + now_files = files(saver.kata_event(id, now_index)) + diff_lines_files(was_files: was_files, now_files: now_files) end def diff_summary(id:, was_index:, now_index:) - diff_plus(id, was_index, now_index, lines: false) + was_files = files(saver.kata_event(id, was_index)) + now_files = files(saver.kata_event(id, now_index)) + diff_summary_files(was_files: was_files, now_files: now_files) + end + + def diff_lines_files(was_files:, now_files:) + diff_plus(was_files, now_files, lines: true) + end + + def diff_summary_files(was_files:, now_files:) + diff_plus(was_files, now_files, lines: false) end private - def diff_plus(id, was_index, now_index, options) - was = saver.kata_event(id, was_index) - now = saver.kata_event(id, now_index) - was_files = files(was) - now_files = files(now) - diff_lines = GitDiffer.new(@externals).diff(id, was_files, now_files) + def diff_plus(was_files, now_files, options) + diff_lines = GitDiffer.new(@externals).diff(was_files, now_files) diffs = GitDiffParser.new(diff_lines, options).parse_all fill_identical_renamed_files(diffs, now_files, options) diffs + unchanged_files(now_files, diffs, options) diff --git a/source/server/git_differ.rb b/source/server/git_differ.rb index 65c3c347..e430e9a1 100644 --- a/source/server/git_differ.rb +++ b/source/server/git_differ.rb @@ -3,12 +3,12 @@ def initialize(external) @external = external end - def diff(id, old_files, new_files) - Dir.mktmpdir(id, '/tmp') do |git_dir| + def diff(old_files, new_files) + Dir.mktmpdir('differ', '/tmp') do |git_dir| git.setup(git_dir) save(git_dir, old_files) git.add_commit_tag_0(git_dir) - remove_content_from(id, git_dir) + remove_content_from(git_dir) save(git_dir, new_files) git.add_commit_tag_1(git_dir) git.diff_0_1(git_dir) @@ -17,8 +17,8 @@ def diff(id, old_files, new_files) private - def remove_content_from(id, git_dir) - Dir.mktmpdir(id, '/tmp') do |tmp_dir| + def remove_content_from(git_dir) + Dir.mktmpdir('differ', '/tmp') do |tmp_dir| shell.assert_exec( "mv #{git_dir}/.git #{tmp_dir}", "rm -rf #{git_dir}", From 1a6b274f81d8d3aa5fe97f332e747e65e810ef0d Mon Sep 17 00:00:00 2001 From: JonJagger Date: Mon, 18 May 2026 12:14:43 +0100 Subject: [PATCH 2/3] Fix demo.sh broken by WORKDIR change in commit 57ad70e When the client Dockerfile moved from WORKDIR /differ to WORKDIR /differ/source, html_demo.rb shifted from /differ/ to /differ/source/ inside the container, but demo.sh was not updated to match. Co-Authored-By: Claude Sonnet 4.6 --- bin/demo.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/demo.sh b/bin/demo.sh index 22914d7f..122b8232 100755 --- a/bin/demo.sh +++ b/bin/demo.sh @@ -13,6 +13,6 @@ copy_in_saver_test_data TMP_HTML_FILENAME=/tmp/differ-demo.html docker exec \ "${CYBER_DOJO_DIFFER_CLIENT_CONTAINER_NAME}" \ - sh -c 'ruby /differ/html_demo.rb' \ + sh -c 'ruby /differ/source/html_demo.rb' \ > ${TMP_HTML_FILENAME} open "file://${TMP_HTML_FILENAME}" From 0965c64b87e38d2d046873b36af4267d3279efbd Mon Sep 17 00:00:00 2001 From: JonJagger Date: Mon, 18 May 2026 12:15:08 +0100 Subject: [PATCH 3/3] Raise code.lines.total coverage limit to 356 Accounts for the lines added by diff_lines_files/diff_summary_files in the previous commit. Co-Authored-By: Claude Sonnet 4.6 --- test/server/lib/coverage_metrics_limits.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/server/lib/coverage_metrics_limits.rb b/test/server/lib/coverage_metrics_limits.rb index aa6a0d20..00ee2a56 100644 --- a/test/server/lib/coverage_metrics_limits.rb +++ b/test/server/lib/coverage_metrics_limits.rb @@ -6,7 +6,7 @@ def metrics [ 'test.branches.total' , '<=', 0 ], [ 'test.branches.missed', '<=', 0 ], [ nil ], - [ 'code.lines.total' , '<=', 352 ], + [ 'code.lines.total' , '<=', 356 ], [ 'code.lines.missed' , '<=', 0 ], [ 'code.branches.total' , '<=', 62 ], [ 'code.branches.missed', '<=', 0 ],