Skip to content

Copy generated patch values independently of input documents - #253

Merged
stefankoegl merged 1 commit into
stefankoegl:masterfrom
Aminark:fix/copy-generated-patch-values
Nov 5, 2026
Merged

stefankoegl merged 1 commit into
stefankoegl:masterfrom
Aminark:fix/copy-generated-patch-values

Conversation

@Aminark

@Aminark Aminark commented Nov 5, 2026

Copy link
Copy Markdown
Contributor

Generated add and replace operations keep references to mutable values in the target document. Mutating that document after make_patch() changes the patch, and editing a generated operation can also change the target.

Copy the completed operation list so generated patches retain the values they were built from. Copying after move optimization avoids copying values for operations that are ultimately removed. Tests cover object and array additions/replacements, root replacement, both optimization settings, and mutation in either direction. The existing cyclic-value test now checks that the copied value retains its cycle.

Validation on Python 3.13: python tests.py (288 tests), python property_tests.py (24 tests), and the CI flake8 error check all pass.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

No active review issues are recorded for the change isolating generated patch values from mutable inputs.

No open issues 🎉

What changed in this PR

This PR makes generated JSON patches independent of mutable input values, preventing later edits to the target document or patch values from affecting each other.

Changes:

  • Deep-copy the completed operation list after move optimization.
  • Document that generated patch values are copied.
  • Add mutation-isolation tests and update the cyclic-value test to verify cycle preservation.
File Description
tests.py Tests mutation isolation, both optimization settings, and preservation of copied cycles.
jsonpatch.py Copies finalized operations and documents input independence.

Review effort: Balanced

@coveralls

Copy link
Copy Markdown

Coverage Status

coverage: 100.0%. remained the same — Aminark:fix/copy-generated-patch-values into stefankoegl:master

@stefankoegl
stefankoegl merged commit e8984f1 into stefankoegl:master Nov 5, 2026
22 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants