Skip to content

v0.9.0

Choose a tag to compare

@cst8t cst8t released this 05 Jul 15:23

What's New

Commit patch export

  • New backend and command export_commit_patch_file to export patches built from one or more commits
  • Export supports selecting multiple commits and writes an aggregated patch (oldest → newest)
  • Root (initial) commits are handled correctly and produce new-file hunks
  • Exports include full index object IDs (--full-index) and binary diffs for accurate round-trip application
  • CLI and gix backends return the same patch output

Commit message recovery

  • New API get_commit_message_recovery and TypeScript type CommitMessageRecovery
  • Reads the repository COMMIT_EDITMSG file and returns a cleaned message and timestamp when a draft exists
  • UI now offers a “Restore previous message” action when no draft is present and a recoverable edit message exists
  • Commit box will clear saved drafts after a successful commit and preserve them after failures

SSH signing / allowed signers support

  • New SSH allowed-signers status API get_ssh_allowed_signer_status and operation add_ssh_signing_key_to_allowed_signers
  • CLI and gix backends inspect user.signingkey, user.email, and gpg.ssh.allowedSignersFile to determine:
    • whether setup is needed
    • whether the allowed signers file is configured / exists
    • whether the signing key is present and trusted
  • New types SshAllowedSignerStatus and SshAllowedSignerReason
  • UI repair flows:
    • Log/signature popover can show instructions and add the configured SSH signing key to the allowed signers file
    • Identity panel surfaces allowed-signers state and lets users add the configured signing key
  • Tests for status, adding keys, and edge cases (inline key, private key paired pub file, missing email, configured-but-missing-file)

Patch import: safer 3-way apply and conflict handling

  • Import now supports three-way apply via ImportPatchRequest.three_way
  • Three-way apply is used as a retry path when normal git apply --binary fails
  • Three-way apply blocks when tracked files are dirty and will return a clear error code when blocked
  • Conflict results from 3-way apply are returned as an operation result (so the UI can route to conflict resolution)
  • Tests covering three-way conflicts, blocked conditions, and partial/no-blob patches

File tree, unversioned items and staging improvements

  • New unversioned “items” representation with file vs directory kinds (shows directories like assets/)
  • Untracked directory rows can be selected and staged as a unit
  • File tree compaction and default expand/collapse heuristics for large sections:
    • Avoid expanding huge folders by default; allow manual expansion
    • Selecting a compacted folder selects its descendants
  • Large root-level lists are virtualized to keep UI responsive and allow scrolling to later rows
  • Folder rows show "new" badge for directories introduced by the patch/untracked content
  • Better handling of submodules in status and unversioned item filtering

Staging and operation feedback

  • Introduced delayed operation feedback:
    • Inline small banner after 500ms for quick operations
    • Popup status overlay after 2500ms for long-running operations
  • Staging operations (stage/unstage/all) are tracked with an operation lock so bulk actions are disabled while busy
  • Visual inline feedback for staging operations in both staging view and centre panel
  • Staging UI: selection, bulk actions, and virtualized lists handle large selections and files with spaces robustly

Commit box and draft UX

  • Commit message drafts are saved per-repository while typing and restored on revisit
  • Merge messages and amend interplay handled correctly (merge messages not overwritten by drafts)
  • Offer to restore COMMIT_EDITMSG content when no local draft exists (and it's different from the latest commit message)
  • Commit API updated to allow async result (commit handler can return false to indicate failure and keep draft)
  • Clear drafts only on confirmed successful commit

Log and refs UI improvements

  • Commit ref chips layout refined:
    • Prominent ref line for selected/checkout commits, inline meta refs for others
    • Priority ordering of refs (HEAD, local branches, upstream, remotes, tags)
    • Overflow handling with descriptive “N more refs” tooltips
  • Signature popover:
    • Copy actions for signer and fingerprint
    • Repair flow button for SSH signing (adds configured key to allowed signers if available)
    • Explanatory text for SSH allowed-signers status
  • Context menu additions: export commit patch(s) from a single commit or a multi-selection

API, TypeScript and wiring

  • New API endpoints and TypeScript functions:
    • exportCommitPatchFile / exportCommitPatchFile TS binding
    • getCommitMessageRecovery TS binding
    • getSshAllowedSignerStatus and addSshSigningKeyToAllowedSigners TS bindings
    • openMicrosoftStoreUpdatePage replaces older request method for MS Store flow
  • Backend: many repo command functions made async / moved to background threads to avoid blocking the Tauri main thread (e.g., commit_changes, stage_files, unstage_*, stage_all)
  • New internal CLI handler helpers for:
    • resolving SSH signing keys (supports inline key:: prefix, file, or key.pub suffix)
    • default and resolved allowed signers paths
    • robust commit-hash validation and building commit-based patches
    • safer three-way patch apply with status inspection
    • full-index patch generation for single-commit export

Configuration & migration

  • Removed or ignored legacy enableUpdateWithMSStoreFlow manual config keys during migration; config persists but the old key is ignored in the new config shape
  • New settings types and defaults updated to reflect store flow changes

Microsoft Store / update flow

  • Microsoft Store update flow simplified:
    • New action opens the Microsoft Store update page (open_microsoft_store_update_page) instead of attempting a direct in-process Store install
    • Local test harness simplified to three modes (available / mandatory / none)
    • Update dialog copy and state reflect “Store opened” and the new open-flow states

Tests and quality

  • Large suite updates and new tests:
    • CLI and gix handler behaviour (export/import/ssh allowed signers, commit recovery)
    • Staging view virtualization, large-list behaviour, compact folder selection, inline feedback timing
    • Commit box draft saving, recovery, and commit-clear behaviour
    • Identity panel allowed-signers repair flow and prompts
    • Log view: ref layout, signature repair flow, export commit patches

Fixes

  • Patch export now includes full-index object IDs for accurate patches suitable for three-way application
  • Fixed multiple UI race conditions and long-running work on the UI thread by moving heavy operations to background threads
  • Fixed unversioned paths handling to show directory entries and avoid losing folder selections
  • Improved detection and filtering of submodule entries from unversioned lists and repo status
  • Fixed staging selection and bulk operations to disable during active staging operations
  • Fixed commit draft lifecycle and ensured drafts are preserved after failed commits and cleared on success
  • Fixed signature popover copying and improved repair UX for SSH signing keys
  • Fixed Microsoft Store update flow to avoid unsupported in-process flows and present the Store page cleanly
  • Fixed a number of edge-case patch import and three-way-apply failure modes with clearer error codes
  • Various test fixes and added coverage for new features and regression scenarios

Full Changelog: v0.8.1...v0.9.0