Skip to content

enhance: add quick search and filtering to history toolbar - #2839

Open
tib8 wants to merge 4 commits into
sourcegit-scm:developfrom
tib8:history-quick-search
Open

tib8 wants to merge 4 commits into
sourcegit-scm:developfrom
tib8:history-quick-search

Conversation

@tib8

@tib8 tib8 commented Oct 29, 2026 •

Copy link
Copy Markdown

The "Quick search" works directly in the history tree. It is able to filter the list to show only the matching items.
(some other PRs of mine are also visible on this screenshot)

image

Add quick search to the dashboard history so users can find and navigate matching commits directly in the graph. Move the existing Commit Search and settings icons into a dedicated toolbar above the column headers.

The toolbar includes a search field styled like the sidebar filter, a match counter, previous/next buttons, and a funnel toggle. Enabling the funnel shows only matching commits and gives the search field a yellow background in both light and dark themes.

Search uses the Mixed matching rules: literal, case-insensitive matching of a SHA prefix, author name/email, or the full commit message. It searches only commits already loaded in history, respecting the current history filters and commit limit. The implementation is independent of the separate Mixed Commit Search feature.

  • Ctrl+F (Cmd+F on macOS) focuses quick search.
  • F3 / Shift+F3 and Enter / Shift+Enter navigate matches and wrap at either end.
  • Escape clears quick search and restores the unfiltered history.
  • Ctrl+Shift+F retains the existing Commit Search panel behavior; detail editors keep their own search shortcuts.

Search selects a matching commit and scrolls it into view, including during match navigation and filter changes. Filtered graphs collapse hidden ancestry and remove transitive ancestor links, retaining meaningful branches without accumulating redundant parallel lanes. Original commit parent hashes remain unchanged.

Queries are debounced and cancellable, and stream full messages from one read-only Git process. Searching with the funnel disabled does not rebuild the graph.

Validation:

  • dotnet format --verify-no-changes src/SourceGit.csproj --no-restore passed (the formatting check used by CI).
  • dotnet run --project tests/HistoryQuickSearchChecks --artifacts-path C:\sourcegit\build\history-graph-checks passed all 54 checks, including Git matching, cancellation, keyboard input, offscreen navigation, filtering, hidden merges, and redundant ancestry.
  • The real repository's 665 fix: matches were checked at the first and last results; the filtered graph remained compact (46 units versus 94 for the full graph).
  • Headless previews were inspected in light and dark themes.
  • Debug build succeeded with zero warnings and zero errors.

Based on the latest upstream develop and targeting develop, as required by the contributing guidelines.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant