TurtleGit for Mac

View Markdown source ↗

Merge Blame comparison keys

This partial workflow review follows pinned TortoiseGit 7338078f8ddd924b8cddee35f512f2286072136d, specifically TortoiseMerge.cpp lines 355–358, DiffData.cpp lines 196–300 and FileTextLines.cpp lines 265–270, 395–401, 416–422 and 572–582. The shared Open dialog is src/Resources/TortoiseMergeENG.rc / IDD_OPENDLG; this record does not certify that dialog or the editor frame.

The source /blame option does not create a new author/revision column in TortoiseMerge. It makes the comparison read-only and removes a fixed metadata prefix from comparison keys when the source's converted-file path runs. Earlier port notes incorrectly described a missing Blame-column presentation; those notes do not represent a pinned source requirement.

MergeBlameComparison reproduces the two distinct source decisions:

SubversionMergeConfiguration.blame and blameEncodings capture that policy alongside the comparison options. Native two-file and three-file models supply the loaded input encodings in Base/Mine/Theirs order. The shared engine applies each source's conversion decision independently. Its SubversionDiffPlan keeps original line arrays: metadata-only common rows, real code changes, source line numbers, file bytes, search/copy text and save snapshots continue to use the original input. The immediate two-file alignment uses the same fixed-prefix projection while its authoritative engine request is pending.

The launch's Blame state survives File/Open replacement independently of readonly state. Native editing, transfers, encoding/endings, Save/Save As and source export retain the immutable no-edit gate; navigation and view switching remain available. The feature adds no user preference or extra checkbox because the pinned command is a launch policy.

Grouped verification

MergeBlameComparisonTests covers UTF-16 width/boundaries, every source line ending, conversion bypass and asymmetric companions, actual two-/three-source engine segments, original rows, real code changes, comment/regex/case/whitespace ordering and cancellation. The native Blame fixture covers converted and unconverted input pairs, case-filter conversion, CRLF, code versus metadata changes, source line numbering, native read-only text, one-/two-pane switching, immutable input bytes and ordinary comparison isolation. Parent batch evidence records actual results after the combined checkpoint; fixture existence is not a pass.

Physical keyboard/focus, visual light/dark/VoiceOver acceptance and signed sandbox execution remain separate checks. Existing Windows code-page detection and macOS decoder differences are not certified by the encoding-conversion mask. Malformed UTF-16 inside a metadata boundary remains subject to native decoding and is not an assertion of arbitrary invalid-text equivalence.