Synchronization incoming and outgoing commit lists
This partial family review follows pinned TortoiseGit
7338078f8ddd924b8cddee35f512f2286072136d, IDD_SYNC,
SyncDlg.cpp, GitLogListBase.cpp, GitLogListAction.cpp and
ColumnManager.{cpp,h}. It covers the In Commits and Out Commits tables,
their native menus and connected revision actions. The grouped checkpoint below
covers this family; this document does not certify the full dialog.
Source behavior
SyncDlg creates separate SyncIn and SyncOut log lists, both using
InsertGitColumn. Graph, Actions, Message, Author and Date are initially shown;
SHA-1, Email and committer columns are initially hidden. Bug-ID availability
follows project properties. SVN revision availability and default visibility
follow CTGitPath::HasGitSVNDir, which checks the resolved administrative
svn/.metadata marker. Revision extraction follows the pinned FindSVNRev
patterns through the existing native IssueRegex runtime. Those patterns use
whole-message anchors: an ordinary subject followed by a git-svn-id trailer
returns no revision in this pinned implementation. The native list retains that
behavior; column availability does not imply every SVN trailer yields a number.
Header visibility items exclude the first Graph column (ColumnManager.h,
AddMenuItem). Reset column order asks Yes/No before restoring natural order,
default visibility and widths. Unlike the reference/tag result tables, commit
list reset measures row text as well as headers (ColumnManager::GetWidth);
long messages must not be reduced to a header-only width. Incoming and outgoing layouts belong to their
separate source identities and captured preference stores.
The configured Log font is consumed only when LogFontForLogCtrl is enabled. The source also installs a small-icon minimum row height. Native rows must fit the configured regular/bold/italic font and graph/action icons without clipping.
Return and double-click use the first parent when DiffByDoubleClickInLog is
enabled. A root commit presents “No previous version.” (GitLogListAction,
ID_COMPAREWITHPREVIOUS), rather than silently doing nothing. Shift retains the
alternate comparison-tool choice. These behaviors share the existing comparison
and revision-operation consumers rather than adding different Git operations.
Native ownership requirements
A native menu must retain its table, selected revision occurrence(s), source tab and result generation until one action claims it. Replacing results, changing selection/tab, reading, Quit, an attached sheet or closure must prevent retained row/header callbacks from acting on another result or preference identity. Parent-caption and ancestry reads must cancel and drain with their owner. Column reset and root feedback must retain their native sheet ownership through actual detachment, including closure and late replies. Physical menu tracking, VoiceOver, all locale/layout combinations, signed grants and complete source acceptance remain separate gates.
Connected implementation and checkpoint — October 21, 2026
SynchronizationCommitList retains its source side and selected row occurrences
through one-use menus, including lazy parent-caption updates. Dismantling the
native view retires row/header menus and keyboard callbacks. Log metadata and
comparison/clipboard workers remain owned until their actual completion after
cancellation. Root and reset sheets retain the parent Quit fence through actual
detachment. History comparisons pass both captured Shift choice and originating
preferences to the configured comparison window. The shared Return dispatcher
supplies its event's Shift state without changing Find/default-key routing.
Explicit width/order layouts belong to the captured preference store and side. When no explicit layout exists, the standard application store alone imports its previous AppKit autosave layout once, then disables legacy autosave. Existing visibility preferences remain consumers. Actual installed legacy migration has static peer review, while the native receiver uses private preference stores.
The Debug app and four native case/engine combinations pass with system and bundled Git. The first receiver found an incorrect fixture expectation for SVN trailers; matching the pinned helper fixed the fixture without changing the app or repeating its build. No native cases had passed before that correction. Core was unchanged. All three owned receivers are independently absent. Evidence records the checks and limits.
Reviewed outgoing light and dark, and incoming light and dark captures use the configured Menlo 24-point Log font to exercise larger rows. Offscreen columns remain reachable by horizontal scrolling. They do not certify default-size Windows pixel parity or physical input/VoiceOver/signed acceptance.