Commit Graph

6 Commits

Author SHA1 Message Date
Levi Neely 7dabd4b9e6 Support deleting remote branches via the delete button
The delete button and context menu action now detect whether the
selected branch is remote (tracked via Qt::UserRole on list items).
Remote branches are deleted with `git push --delete <remote> <branch>`
with an appropriate confirmation dialog warning about server-side
removal. Local branches continue using `git branch -D`.
2026-07-16 05:38:10 +02:00
Levi Neely 3642f8b743 Preserve selection during auto-refresh
- Only refresh status model when git output actually changes (skip
  beginResetModel/endResetModel if raw output is identical)
- Filesystem watcher triggers updateStatus only, not refreshAll —
  branch/stash/worktree lists only rebuild on explicit user actions
- Branch list refreshes on HEAD file change (branch switch) with delay
  to avoid interrupting interactions
2026-07-16 04:42:07 +02:00
Levi Neely 3febe2f184 Fix auto-refresh: watch .git directory instead of just files
Watching individual files (.git/index, .git/HEAD) fails reliably
because git replaces them via atomic rename, which removes inotify
watches. Watch the .git directory itself via directoryChanged signal
which fires on any create/delete/rename inside it. Keep file watches
as fallback. Also watch refs/heads for branch tip changes.
2026-07-16 04:28:24 +02:00
Levi Neely a7e7542d70 Fix auto-refresh: re-add file watch after atomic replace
QFileSystemWatcher drops watches when git replaces index/HEAD via
atomic rename. Re-add the path after each fileChanged signal.
Also refresh all tabs (branches, stashes, worktrees) on fs change,
not just status.
2026-07-16 04:24:10 +02:00
Levi Neely ac8980a203 Use Kate's native diff viewer, add per-file and full changeset diff
- Integrate with libkateprivate's Utils::showDiff() to use Kate's built-in
  diff widget (respects user's Unified/SideBySide/Raw style preference)
- Add bundled kate-compat headers for DiffParams and Utils::showDiff decl
- CMakeLists.txt auto-detects libkateprivate, falls back to plain text diff
- Add 'Diff selected' button: shows diff for selected files with
  stage/unstage/discard actions available in the diff viewer
- Add 'Diff All' button: shows git diff HEAD for full changeset review
- Staged diffs show unstage action, unstaged diffs show stage+discard
- ReloadOnShow flag keeps diff views fresh after interactive operations
2026-07-16 04:21:51 +02:00
Levi Neely ab2d531240 Git++ Kate plugin: initial release
Full-featured Git integration for Kate with tabbed side panel:

Status tab:
- Live file status tree (staged/changed/untracked)
- Stage, unstage, discard with double-click support
- Commit with inline message editor and amend support
- Push, pull, fetch with progress spinner
- Filesystem watcher for auto-refresh

Branches tab:
- Filterable list of local and remote branches
- Checkout, create, delete, compare
- Create worktree from branch
- Copy branch name to clipboard

Stashes tab:
- List all stashes with apply, pop, drop, diff

Worktrees tab:
- List active worktrees
- Create (with branch picker), remove, prune
- Open worktree as Kate project

Indicators:
- Panel header with repo/branch/dirty state
- Status bar widget always visible
- Detached HEAD warning
- Remote operation progress
2026-07-15 16:58:05 +02:00