idea: panel for git needs to be implemented in the TUI #30

Closed
opened 2026-07-15 18:28:54 +00:00 by hugo · 2 comments
Owner

the TUI needs to have a panel "7" that opens a sidebar for git changes and in the main content area it shows a scrollable diff of the current folder. this is to allow to manage the content sync, so it also needs to be able to pull and push and of course commit.

the TUI needs to have a panel "7" that opens a sidebar for git changes and in the main content area it shows a scrollable diff of the current folder. this is to allow to manage the content sync, so it also needs to be able to pull and push and of course commit.
hugo added the idea label 2026-07-15 18:28:54 +00:00
Author
Owner

Implemented in 5433cb5.

Key 7 in the TUI opens the git panel for content sync, driven by the same BDS.Git backend as the GUI git view:

  • Sidebar: the changed files from git status as <code> <path> entries (M/A/D/R/U), with the current branch and ahead/behind counts in the panel title (e.g. Git [main ↑1 ↓0]).
  • Main area: a scrollable whole-folder diff (staged + unstaged), paged with pgup/pgdn and capped at 5000 lines so a huge working tree can't flood the terminal. Enter on a file in the sidebar jumps the diff straight to that file's hunk.
  • c commit: opens a status-line prompt for the message, then git add -A + commit (empty messages are rejected).
  • u pull (ff-only) and s push: run off the UI process so the interface never blocks on the network; the result (or the git error output) lands as a status toast and the panel reloads.
  • A project folder that isn't a git repository shows "Not a git repository." and refuses the actions with a hint instead of erroring.

All key hints live in the status line when the panel is open. Covered by 8 tests against real git repositories (test/bds/tui_test.exs, git view describe block), spec updated (rule GitPanel in specs/tui.allium, allium check clean), all new UI strings translated for de/fr/it/es. Build, full test suite, credo, deps.audit and dialyzer are all clean.

Implemented in 5433cb5. Key `7` in the TUI opens the git panel for content sync, driven by the same `BDS.Git` backend as the GUI git view: - **Sidebar**: the changed files from git status as `<code> <path>` entries (M/A/D/R/U), with the current branch and ahead/behind counts in the panel title (e.g. `Git [main ↑1 ↓0]`). - **Main area**: a scrollable whole-folder diff (staged + unstaged), paged with pgup/pgdn and capped at 5000 lines so a huge working tree can't flood the terminal. Enter on a file in the sidebar jumps the diff straight to that file's hunk. - **`c` commit**: opens a status-line prompt for the message, then `git add -A` + commit (empty messages are rejected). - **`u` pull** (ff-only) and **`s` push**: run off the UI process so the interface never blocks on the network; the result (or the git error output) lands as a status toast and the panel reloads. - A project folder that isn't a git repository shows "Not a git repository." and refuses the actions with a hint instead of erroring. All key hints live in the status line when the panel is open. Covered by 8 tests against real git repositories (test/bds/tui_test.exs, git view describe block), spec updated (rule GitPanel in specs/tui.allium, allium check clean), all new UI strings translated for de/fr/it/es. Build, full test suite, credo, deps.audit and dialyzer are all clean.
hugo closed this issue 2026-07-16 20:00:16 +00:00
Author
Owner

Follow-up in 46fd6c1: the git sidebar now shows the commit history in its lower half, like the GUI — the sidebar splits 50/50 into the changed files (top, navigable) and a History panel (bottom) listing <short hash> <subject> per commit, with ↑ marking commits that still need a push and ↓ remote-only ones. The history refreshes with every panel reload, so a commit made from the panel appears immediately.

Follow-up in 46fd6c1: the git sidebar now shows the commit history in its lower half, like the GUI — the sidebar splits 50/50 into the changed files (top, navigable) and a History panel (bottom) listing `<short hash> <subject>` per commit, with ↑ marking commits that still need a push and ↓ remote-only ones. The history refreshes with every panel reload, so a commit made from the panel appears immediately.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: hugo/bDS2#30