- Dockerfile: eclipse-temurin:25-alpine, exposes port 8080
- build.yml: builds on every branch push with Java 25
- deploy.yml: builds and pushes Docker image on v* tags
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Added GitService.getCommitInfo() using getFullMessage() to preserve
the full commit body. Controller splits the message into title (first
line) and body (remainder) for separate display in the template.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Track active lanes via explicit state (openLanes set) rather than
relying on PlotCommit.getPassingLanes() which is not available. Draw
'-' between passing lanes and a commit when the commit's parent is
on a lane to the left (branch convergence), giving output like:
* <- C (lane 0)
| * <- D (lane 0 passing, D on lane 1, no convergence)
* | <- C (lane 0, lane 1 passing)
|-* <- B (lane 1, converges to A on lane 0)
* <- A (lane 0)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Both tree.html and blob.html now show '< Parent directory' on the
same line as '< Back to commits', separated by '|'. In blob view,
parent directory navigates to the containing directory tree.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
TreeWalk was only entering exact-match subtrees, missing intermediate
directories. Now enters all subtrees that are prefix of the target path.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rollback restores selected unstaged files to their HEAD state
using git checkout. The button shares the form with Stage Selected,
distinguished by the submit button's name/value pair.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rename 'Changes' to 'Staging' in the page title and heading.
File names in both modified and staged file lists are now
clickable links that show the diff for that file. The diff
view shows both unstaged (index vs working tree) and staged
(HEAD vs index) differences.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Filter out non-branch refs (like HEAD) from branch list
- Walk all branch tips in commit list so older checkouts still
show newer commits
- Show '(current)' instead of Checkout button for HEAD commit
- Swap nav link order in blob view (commits first, then tree)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
New features:
- Commits list with ASCII graph, hash, message, author, date
- Single commit diff view with per-file diffs
- File tree browser at any commit
- File content viewer at any commit
- Checkout entire commit (detached HEAD)
- Checkout selected files from a commit
New GitService methods: listCommits, getCommitDiff,
listFilesAtCommit, getFileContentAtCommit, checkoutCommit,
checkoutFilesFromCommit.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The Delete Repository button now navigates to a confirmation page
asking 'Are you sure?' with Yes/No options. Only the Yes button
performs the actual delete POST. No JavaScript required.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
List all configured remotes in a table with name, editable URL
field with Save button, and per-remote Push/Pull buttons.
Add GitService.listRemotes() and updateRemoteUrl() methods.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Show branches in a table with a Checkout button per row.
The current branch is shown in bold with '(current)' and
has no checkout button.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Remove the Repositories and Clone New links from the sidebar.
Add a 'Clone New...' option to the repo dropdown that shows the
clone form in the content frame when selected.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add a @ControllerAdvice that catches all exceptions and renders
an error page showing status, error type, message, and full stack
trace in a <pre> block. Uses table-based layout consistent with
the rest of the UI.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Prevents corrupting the shared drive by writing directly into the
root worktree or gitdir paths when the name cannot be derived.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>