Skip to content

Latest commit

 

History

History
217 lines (187 loc) · 10.3 KB

File metadata and controls

217 lines (187 loc) · 10.3 KB

Changelog

All notable changes to rgitui are documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

0.1.7 - 2026-04-18

Added

  • Dedicated Stashes panel (Alt+8): lists every stash with its message and OID, with inline Apply, Pop, and Drop buttons. Dropping a stash prompts a confirmation dialog. A stash-count badge appears in the toolbar. The command palette also gains Git: Create Branch from Stash, visible when stashes exist.
  • Diff line-wrap toggle: new "Wrap Long Lines in Diff" setting in the Diff settings card switches between wrapping and horizontal scrolling. Wrapping respects the text layouter so lines break correctly in all diff modes.
  • Diff horizontal scrollbar: in no-wrap Unified mode, the whole list scrolls horizontally with a draggable scrollbar at the bottom. In Split and Three-way modes each column keeps its own horizontal scroll area so long lines no longer bleed across the column divider. The line-number gutter stays pinned in all modes.
  • Diff vertical scrollbar: a draggable vertical scrollbar now sits next to the diff body in every mode.
  • Watch all worktrees (General settings): when enabled, the filesystem watcher tracks every linked worktree, so external changes in any worktree trigger a refresh.

Changed

  • Wrap-mode diff viewer is virtualized: only the visible rows (plus a small overdraw buffer) are rendered per frame, and wrapped-line heights are measured once and cached. Large diffs stay responsive while scrolling with wrap enabled.
  • Stash detail summary: stash entries in the detail panel now show a clean subject line. The WIP on <branch>: <sha> prefix is stripped, with graceful fallbacks to the branch name or full message for custom stash names.

Fixed

  • Wrap mode no longer overlaps lines: wrapped continuation lines used to paint on top of the row below because flex-shrink squeezed rows when total content exceeded the viewport. Wrapped text now correctly extends the row it belongs to.
  • Word-diff noise on reformatted hunks: word-level highlighting paired deletion line i with addition line i regardless of whether the counts matched. On a reformat (e.g. inlining a closure body into a multi-line match block) the pairing lined up semantically unrelated rows and every coincidental token match produced a misleading highlight. Word-diff is now skipped when deletion and addition line counts differ, so reformats render as clean red/green blocks.
  • Command palette stale after stash operations: after Apply / Pop / Drop, the palette's has_stashes, has_changes, and related predicates are rebuilt once the active tab finishes refreshing, so the next open reflects the actual repo state.
  • Commit graph lane artifacts with worktrees: fixed a ghost lane-0 column extending above main_tip when the newest commits were on side branches, a dangling stub on lane 1 at the main-tip row, and missing pass-through strokes across worktree virtual rows for merge-in lanes. Worktrees whose HEAD isn't in the visible commit list are now routed to orphan slots instead of being silently dropped.
  • Action button clipping in dialogs: the Discard and Unstage buttons in the sidebar file list, and the action buttons in the Create PR dialog, were clipped against the right edge on Windows. Right padding now matches the rest of the dialog surface.

0.1.2 - 2026-04-09

Added

  • macOS support: Bundle embedded fonts (IBM Plex Sans, Lilex, JetBrains Mono) so text and icons render correctly on macOS. Ad-hoc code sign the .app bundle to prevent Gatekeeper "damaged" errors. Generate .icns app icon from PNGs during the Mac bundle step.
  • macOS CI: Add macos-14 to the CI test matrix alongside Linux and Windows.
  • Configurable commit limit: New commit_limit setting (default 1000) lets users control how many commits are loaded per repo.

Changed

  • Startup performance: Repos now load during the splash animation instead of after it. Active tab refreshes first; inactive tabs load after it completes. Avatar disk cache loads on a background thread.
  • Commit walk uses git subprocess: Replaced libgit2's revwalk with git log subprocess, leveraging commit-graph files for ~100x speedup on large repos (Linux kernel: 14.7s to 1.2s).
  • Two-phase commit loading: First 100 commits load immediately so the graph appears fast, remaining commits load in the background.
  • Deferred commit metadata: GPG signature checking and co-author parsing are skipped during the commit walk and computed on-demand when clicking a commit, reducing per-commit overhead.
  • Parallel status computation: Working tree status now runs on a separate thread in parallel with stash enumeration and the commit walk.
  • Lightweight initial refresh: Initial repo load skips ahead/behind computation for all branches; it runs in the background after the UI appears.
  • Diff computation: Removed redundant diff.stats() call (~31% CPU savings) and intra-diff thread serialization overhead. Diff cache prewarming fires once per tab and only for the active tab initially.
  • Diff cache shared across workspace: The LRU diff cache is now stored in ViewCaches and shared between project and graph subscriptions.
  • Selected commit priority: On cache miss, the clicked commit's diff task is submitted to the thread pool before neighbor prefetch tasks to ensure it gets processed first.

Fixed

  • Resolved clippy warnings in bisect view and workspace events.
  • Fixed unnecessary reference creation in events.rs and items-after-test-module ordering in bisect.rs.

0.1.0 - 2026-04-08

First public release. rgitui is a GPU-accelerated, multi-repo desktop Git client built with GPUI. This release establishes a feature-complete baseline for day-to-day use.

Added

Core git operations

  • Stage, unstage, and discard changes at file, hunk, and line granularity
  • Commit and amend with a message editor, co-author support, and optional AI-generated commit messages (Gemini)
  • Branch management: create, checkout, rename, delete, and switch from the sidebar or command palette
  • Tag management: create annotated and lightweight tags, delete, and checkout
  • Stash: save (with optional name), pop, apply, drop, and create branch from stash
  • Remote operations: fetch, pull, push, and force push with multi-remote support and automatic upstream tracking
  • Cherry-pick, revert, and reset (hard / soft / mixed)
  • Merge with conflict detection and inline "accept ours / accept theirs" resolution
  • Interactive rebase with pick / squash / reword / fixup / drop actions
  • Bisect with start, good, bad, skip, and reset commands
  • Worktrees: create, list, and switch
  • Submodule initialization, update, and management
  • Clean untracked files
  • Undo stack for recent local git operations
  • Crash recovery: workspace snapshots restored after unclean shutdown

Views

  • Animated commit graph with lane-based coloring and Bezier-curve edges
  • Unified, side-by-side, and three-way conflict diff modes with syntax highlighting via syntect
  • Blame view with per-line author avatars
  • File history view
  • Reflog viewer
  • Submodule panel
  • Global search via git grep
  • Commit graph search
  • Detail panel with commit metadata, file list, and diff stats
  • Issues and Pull Requests panels for GitHub repositories

UI

  • Multi-repo tab bar with drag-resizable sidebar, detail, diff, and commit panels
  • Toolbar with fetch, pull, push, branch, stash, create PR, refresh, settings, search, file explorer, and terminal actions
  • Status bar showing branch, ahead/behind counts, staged/unstaged/stash counts, repository path, and active operation status
  • Command palette (Ctrl+P) with context-aware commands
  • Keyboard shortcuts help overlay
  • Animated splash screen with skip-on-input
  • Catppuccin Mocha (default), Catppuccin Latte, and One Dark themes
  • JSON theme loader for user themes
  • Toast notifications and confirmation dialogs for destructive actions

Integrations

  • GitHub device-flow authentication
  • Create pull request flow
  • Issues and PRs fetched via GitHub API with 60-second TTL caching
  • AI commit message generation via Google Gemini (optional)
  • Filesystem watcher for external repo changes

Platform support

  • Windows x86_64 zip archive and Inno Setup installer (adds rgitui to PATH optionally, integrates with Add/Remove Programs)
  • Linux x86_64 AppImage and tarball
  • macOS x86_64 and aarch64 (Apple Silicon) DMG

Performance

  • Pre-computed trigonometric tables for commit graph edge rendering
  • Per-frame memoization of Utc::now() for relative timestamps
  • LRU caching for styled diff rows, blame, file history, and avatars
  • Parallelized diff stat batching and stash / worktree enumeration
  • Background git operations via GPUI's background executor to keep the UI thread responsive
  • Diff prefetching (±25 commits, 200-entry cache) for instant navigation

Developer experience

  • CI pipeline for Windows and Linux running fmt, clippy, tests, and release builds
  • Automated release workflow that builds Windows (zip + installer), Linux (AppImage + tarball), macOS (x86_64 + aarch64 DMG), computes SHA256 sums, and attaches release notes from this CHANGELOG
  • Background update checker that notifies when a newer release is available; can be disabled in Settings

Known limitations

  • Windows and macOS binaries are not yet code-signed, so SmartScreen and Gatekeeper will warn on first run. Choose "Run anyway" / right-click → Open to launch. Signing is tracked for a future release.
  • Updates are announced in-app but not applied automatically; follow the link in the notification to download the new version.
  • Only x86_64 Windows and Linux, and x86_64/aarch64 macOS are built by CI. Other architectures can be compiled locally with cargo build --release.