TurtleGit for Mac

View Markdown source ↗

Git command progress parity

Reference: pinned ProgressDlg.cpp/.h, SetDialogs2.cpp and TortoiseProcENG.rc.

Automatic close policy

Settings → Dialogs now exposes Autoclose Git progress dialog with the original three choices: Close manually (0), Auto-close if no further options are available (1), and Auto-close if no errors (2). The preference is AutoCloseGitProgress. Absent/invalid values use manual close; reading an invalid value does not rewrite it. Settings save immediately on macOS rather than waiting for Windows Apply.

Native Clone, Commit, Push, Fetch, merge Pull, Merge, Reset, Clean dry-run/permanent deletion, Format Patch, Export, Abort Merge, Stash Save and Switch/Checkout (regular options and express) progress now apply this policy after success and after building their post-actions. Mode 1 retains a result that offers actions. Mode 2 closes successful results even when they offer actions, without selecting any of them. Failures remain open in all modes. An instance captures its preference on construction; Abort Merge reads it when starting its progress phase. Existing explicit success-close paths, such as footer ReCommit/Commit & Push and Fetch's fast-forward Merge, retain precedence. Existing accepted-cancellation behavior also remains independent of this setting.

Native QA records real repository checks across the three policies: Merge/tag, Reset/Merge Abort and no-change Stash with no post-actions, results offering actions, ordinary Commit acknowledgement and hook rejection, retained transport/merge/switch failures, and preference snapshot/reopening. A hidden settings host uses a private preference domain; it does not prove displayed picker interaction.

Remaining parity

Streaming adoption outside Clone, Push, Fetch, merge-based Pull and Merge, complete progress-window controls/layout, physical Close/Escape/titlebar/nested-sheet/default/accessibility/theme behavior, remaining progress replacements for other command dialogs, command-line closeonend override and libgit2 progress variants remain pending. Native retries that reuse a sheet retain its captured policy; upstream callbacks may create a new progress instance. Rebase split cancellation and signed sandbox/ Finder/App Store acceptance remain pending. Headless checks and unsigned bundle audits do not establish full progress, application or distribution parity. Existing screenshots predate this setting and policy behavior.

Push progress QA records its separate result and close policies.

Reset progress QA records mode/action-dependent close policies and Retry.

Clean progress QA records ordered actions, branch-specific cancellation and Trash completion.

Format Patch progress QA records submission-time policy capture and once-only mail acknowledgement.

Export progress QA records retained Explore results and atomic cancellation.

Switch/Checkout now owns captured full-option progress with source-ordered recovery, ConfirmKillProcess and deferred completion while confirmation is pending. See Switch parity and native QA.

Clone now owns a captured result with ordered Log/Explorer actions, captured Retry and ConfirmKillProcess. See Clone parity and native QA.

Clone now streams byte-oriented CLI output through a port of GitCliOutputParser, with percentage/phase presentation, output limits and automatic end scrolling. See live-output QA; physical and signed acceptance and streaming in other dialogs remain pending.

Push now adopts the shared byte-oriented CLI parser for every remote, branch/tag phase and optional first-parent count. Its live percentage/phase and captured output limit preserve full raw result classification after display truncation. See Push parity and live-output QA; physical/signed acceptance and streaming adoption in other dialogs remain pending.

Fetch, its selected-branch Rebase route and merge-based Pull now stream the shared CLI parser, with captured display limits and complete raw diagnostics. Retry resets the parser and visible phase. The later Merge adoption section supersedes the original completion-time output behavior for the ff-only Merge chosen after Fetch. See Fetch/Pull live-output QA and the individual parity documents; physical/signed acceptance remains pending.

Primary Merge and Fetch's ff-only Merge now adopt the shared source CLI parser and captured-limit presentation. Merge honors ConfirmKillProcess; Merge result close, Fetch explicit/automatic close and Rebase handoff defer while a question is pending. Late answers preserve natural success. See Merge live-output QA. Branch-deletion progress and complete controls/physical/signed acceptance remain pending.

Persistent Action log

Twelve native progress window implementations now preserve displayed results on close and before replacing an attempt, using the source retention/cancellation rules. Settings → Saved Data provides the source Action log group. The Action log guide lists coverage and explicit remaining gaps; headless QA is recorded in the checkpoint.

Abort Merge output adoption, October 11

Abort Merge adopts the shared native output control already used by submodule progress. The actual controller receiver verifies its icon-bearing Copy/Copy All menu dispatch, private Unicode clipboard, preserved selection/viewport, completed fatal prefix and URL attributes and parsed live current-work/percentage values with system and packaged Git. The standalone shared-control regression also passes. Current-work and progress appear above the output; the finished bar is full. New unedited light/dark captures show a real index-lock failure.

This does not complete IDD_GITPROGRESS: animation, completion timing/footer, Dock progress, full options and physical/signed acceptance remain pending for Abort Merge. The hidden inactive native bar renders gray even though its tint is set for failure; source-equivalent red error-bar appearance is not proven. See Merge parity.

Abort Merge completion adoption, October 11

The source-style completion helper now also serves Abort Merge: Success or the Git exit-code status, a single colored footer, optional milliseconds/finish date, and terminal100. Cancellation uses User cancelled; forced invalidation publishes no footer. The reset finish timestamp is captured before later metadata reads. This advances the earlier footer gap; animation, Dock progress and the other remaining requirements still apply. See the latest Merge completion follow-up.

The connected local command progress family adds live Reset/Switch/Stash output, shared native log styling/copy controls, bounded presentation, independent ownership and once-only kill questions.

The Worktree progress family adds live creation/management output, native copy icons, batch output limits, kill confirmation, captured auto-close decisions and Action log preservation.

The Bisect connected family adds streamed Stash/Start/classification/Reset, native copy output, once-only kill confirmation, captured auto-close, Action log and interrupted-session recovery.

Captured transport/progress presentation — October 15, 2026

The connected presentation family now consumes FetchVerbose and DownloadAnimation without extra dialog controls. It shares the source byte-limit interpretation across Clone, Push and common progress. The pinned ProgressDlgLinesLimit entry remains dormant, with no invented consumer. Full workflow, physical and signed acceptance remain partial.

Grouped evidence records 33 affected Core cases, the Debug build and four native groups on both Git engines, including the argument-recorder setup repair. Complete hosted/physical/signed parity is not established.

The connected native Dock progress family now adapts taskbar normal/indeterminate/waiting/error/completion to the application Dock, with concurrent operation and retained-window ownership. Physical/signed and full consumer acceptance remain open. Older Dock-pending entries are historical.

The Synchronization child progress family now adopts parsed live progress, completion details, native Copy menus, Action log and Dock state across separate Checkout/Merge/tag command children. Forced closure retains the actual worker lease and parent continuation until drain; source compact tag waits retain their parent error path. The Debug build and grouped native progress/tag workflows pass on system and bundled Git; four actual captures were reviewed. Full source/physical/signed acceptance remains open.

The Sync failed fast-forward recovery continuation adds the source Resolve-to-Commit action after verified index conflicts. Its fresh inspection preserves the original failure and retains worker/lease/Quit ownership; late cancellation replies cannot target a replacement stage. Grouped system/bundled Git native checks and actual light/dark handoff captures pass. Full generic progress and physical/signed acceptance remain open.

Connected command diagnostics — October 17, 2026

Command identity and failure delivery connects local progress and transport consumers, preserves raw recovery results and keeps completion diagnostics within the captured output limit. Full progress-dialog parity and physical/signed acceptance remain open.

The connected Daemon progress family adopts shared native Copy/styling/completion, captured auto-close, once-only kill questions, Action log and independently owned process/Dock/permission lifetime. Physical and signed acceptance remain separate.

Format Patch now carries actual command receipts and captured output preferences through its progress review, with owned question/progress retirement before the shared Send Mail handoff. Source comparison and batch evidence retain the exact implementation and validation scope; installed/live transport acceptance remains separate.