46 Commits

Author SHA1 Message Date
4077c1b28e Log test results
All checks were successful
Deploy / build (push) Successful in 1m41s
2026-02-27 22:02:13 +01:00
e6f6e2466b Add test step
All checks were successful
Deploy / build (push) Successful in 1m4s
2026-02-27 21:56:51 +01:00
5be1b1cc29 Throw exception on authentication issues 2026-02-27 21:54:30 +01:00
36ecd019a8 Add copilot instructions 2026-02-27 21:53:56 +01:00
472db2dd96 Incrase spacing in staging view
All checks were successful
Deploy / build (push) Successful in 50s
2026-02-27 19:31:10 +01:00
b5097685c7 Put push/pull buttons on one line
All checks were successful
Deploy / build (push) Successful in 49s
2026-02-27 19:29:08 +01:00
6a532322c4 Add credential settings
All checks were successful
Deploy / build (push) Successful in 55s
2026-02-27 19:22:38 +01:00
52fe455c76 Add ahead/behind indicator and push/pull buttons 2026-02-27 19:22:03 +01:00
a27c9fba00 Add watchtower step to workflow
All checks were successful
Deploy / build (push) Successful in 46s
2026-02-27 19:08:42 +01:00
9b1668def9 Add checkmark to mark all files
All checks were successful
Deploy / build (push) Successful in 46s
2026-02-27 19:06:00 +01:00
ec79a0c5cf Remove duplicate Push Container step in deploy workflow
All checks were successful
Deploy / build (push) Successful in 32s
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-27 11:35:11 +01:00
2dcacdbe8d Exclude master from build workflow trigger
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-27 11:34:39 +01:00
e079eed52d Use ubuntu-latest runner in CI/CD workflows
All checks were successful
Deploy / build (push) Successful in 1m22s
Build / build (push) Successful in 1m45s
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-27 11:33:19 +01:00
d803919bf5 Update deploy pipeline: run on master, tag as latest
Some checks failed
Build / build (push) Has been cancelled
Deploy / build (push) Has been cancelled
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-27 11:32:01 +01:00
98de13b410 Add Dockerfile and Gitea CI/CD workflows
Some checks failed
Build / build (push) Has been cancelled
- 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>
2026-02-27 11:29:40 +01:00
8784dfc391 Show commit title, description, author and date on commit detail page
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>
2026-02-27 11:24:40 +01:00
b0016767e8 Show current branch name in staging view
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-27 11:12:13 +01:00
04a69c323e Fix commit graph rendering for branching history
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>
2026-02-27 10:48:34 +01:00
eb222716cd Move parent directory link inline with back to commits
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>
2026-02-27 10:20:07 +01:00
d68933bc2f Render images in file browser blob view
Add /repo/{name}/raw/{hash}/** endpoint serving binary file content
with correct Content-Type. Blob view detects image extensions (png,
jpg, gif, bmp, webp, svg, ico) and renders an <img> tag instead of
a <pre> text block.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-27 10:17:30 +01:00
b0c869829f Fix file browser for directories two levels deep
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>
2026-02-27 10:13:15 +01:00
321e268530 Add Rollback Selected button to staging page
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>
2026-02-27 10:05:41 +01:00
1b6f007eea Remove Stage/Unstage column headers from staging tables
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-27 10:02:20 +01:00
b2b3993d85 Add file diff view to staging page, fix title
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>
2026-02-27 09:57:53 +01:00
fbfffac73f Fix branch/commit view bugs
- 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>
2026-02-27 09:52:59 +01:00
fdc520cfaf Add commits page with graph, diff, file browser, and checkout
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>
2026-02-27 09:44:38 +01:00
383864469d Add delete confirmation page before removing repository
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>
2026-02-27 09:31:03 +01:00
4458eb204b Show remotes in table with editable URLs on remote page
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>
2026-02-27 09:28:43 +01:00
005e0c7d23 Make staging (changes) the default repo view
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-27 09:23:59 +01:00
be130582fc Reorder sidebar: Staging above Branches, rename Changes to Staging
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-27 09:21:34 +01:00
ba3bf697f0 Move '(current)' label to the checkout button column
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-27 09:20:24 +01:00
6efb8f1607 Replace branch dropdown with table listing each branch
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>
2026-02-27 09:19:31 +01:00
45f7c84b43 Move Clone New into repo dropdown, remove sidebar links
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>
2026-02-27 09:18:08 +01:00
8b5bdc0043 Add generic error page with stack trace
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>
2026-02-27 08:04:48 +01:00
2d74b000c4 Throw exception when clone repository name is blank
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>
2026-02-27 07:51:50 +01:00
6e98901b9c Auto-fill repository name from URL when left blank
Derive the repository name from the clone URL by extracting the
last path segment and stripping the .git suffix. Applied to the
web controller, GitService, and telnet interface. The telnet
prompt now shows the default name in brackets.

Also fix flaky contextLoads test by using RANDOM_PORT.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-27 07:41:33 +01:00
c3424362d4 Refactor web UI to use HTML frames layout
Replace single-page layout with a frameset: left navigation frame
with repo dropdown and page links, right content frame showing
the selected page. Split the repo page into separate sub-pages:
branches, changes, remote, and manage.

Uses <frameset> for maximum compatibility with ancient browsers
(Netscape 2+, IE 3+). Clone and delete forms target _top to
reload the full frameset when the repo list changes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-26 12:12:15 +01:00
7fa68da521 Add delete repository feature
GitService.deleteRepository() removes both worktree and git-dir.
Exposed via POST /repo/{name}/delete, a 'Danger Zone' section on
the repo page, and telnet main menu option 4 with confirmation
prompt. Includes unit tests for all layers.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-26 09:26:15 +01:00
8f4ef970f5 Add GPLv3 license
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-26 08:58:25 +01:00
159332ff43 Add unstage files feature
Add GitService.unstageFiles() using JGit reset to move files from
staged back to modified. Exposed via POST /repo/{name}/unstage
endpoint, repo page with checkboxes, and telnet menu option 7.
Includes unit tests for all layers.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-26 08:56:20 +01:00
39f09f03ff Add JaCoCo coverage and improve tests to 98.7%
Add JaCoCo plugin for coverage reporting. Add additional tests
for null/edge cases in TelnetSession, TelnetServer, and
WebgitApplication.main to maximize coverage.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-26 08:48:06 +01:00
6218fe345a Add telnet interface for FreeDOS users
Telnet server with text-based menu for all Git operations.
Enabled via webgit.telnet.enabled=true property, defaults to
port 2323. Includes unit tests for session and server.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-26 08:45:25 +01:00
88385d39a1 Add web controllers and HTML templates
Home page lists repositories with clone form. Repo page shows
branch management, file staging, commit, push and pull controls.
Table-based layout with no JavaScript or CSS for retro browser
compatibility. Includes MockMvc integration tests.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-26 08:43:15 +01:00
239b5367a3 Add GitService with clone, list, branch, commit, push, pull
Implements all core Git operations using JGit with separate
worktree and git-dir paths. Includes comprehensive unit tests.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-26 08:41:25 +01:00
a7d03b3410 Add WebgitProperties configuration
Add configuration properties class with worktreePath and gitDirPath
settings, and JGit dependency.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-26 08:40:17 +01:00
47c7841017 Initial commit 2026-02-26 08:29:29 +01:00