Skip to content

GitWorkbench 1.6.0

Choose a tag to compare

@gpambrozio gpambrozio released this 02 Jul 18:50
dc58a1f

What's new

  • Image & PDF diff viewing (#12, #15): the diff pane now renders images and PDFs the host provides bytes for, instead of a "Binary file" placeholder.

    • Images — added/deleted show on their own over a transparency checkerboard; modified images offer a before/after comparison in three modes: Side by Side, Swipe (draggable divider, vertical or horizontal), and Fade (opacity cross-fade / onion skin).
    • PDFs — old and new rendered side by side (PDFKit).
    • CLIGitProvider loads the old/new blob bytes across working-tree, commit, and stash contexts, size-capped at 10 MB and best-effort — an oversized blob or an unclassifiable git error (e.g. a conflicted blob) falls back to the placeholder rather than blanking the pane. Rendering uses only system frameworks (AppKit / PDFKit), so the zero-dependency rule holds.
  • Resizable commit-message / diff split in History (#15): drag the divider at the changed-files / diff boundary to grow the diff; the commit message shrinks and scrolls (keeping a 2-line minimum) and grows back to its natural height. A long commit body now caps automatically so it can't push the diff off-screen. The chosen height persists per-repo, alongside the column widths.

  • Ahead/behind for local branches in the rail (#14): each local branch row shows how far it has diverged from its upstream as {ahead}↑ {behind}↓, matching the toolbar's Pull/Push convention.

Fixes

  • Dark mode: the selected segmented-control label (e.g. "Side by Side", the unified/split toggle) was white-on-white and unreadable — now pinned to a dark ink on the white pill. Neutral tints used for chips, tracks, hover states, and secondary/disabled button fills now invert to a light tint in dark mode (via WorkbenchTheme.neutralFill) instead of vanishing on the dark surface.
  • Staging a binary image/PDF in the mock-backed demo no longer drops its diff.

Breaking

  • WorkbenchTheme.init's isDark is now a required parameter (no default). A host building a custom theme must state whether the surfaces it supplies are light or dark, so its neutral tints render correctly in dark mode. .standard / .darkStandard are unaffected.

Zero new third-party dependencies; Swift 6 language mode preserved.

Full Changelog: 1.5.0...1.6.0