Add repo-detail panel and /api/repo endpoint
New <repo-detail> component listens for repo:select and shows a repo's remotes, local branches (current + upstream), and recent commits. Backed by GET /api/repo (restricted to indexed repos) and read-only git readers LocalBranches/RecentCommits/RemoteDetails via repos.BuildDetail. <repo-list> highlights the selection; page docks the two panels left/right. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
||||
"net/http"
|
||||
"os"
|
||||
"os/signal"
|
||||
"path/filepath"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
@@ -80,6 +81,17 @@ func main() {
|
||||
e.GET("/api/repos", func(c echo.Context) error {
|
||||
return c.JSON(http.StatusOK, scanner.Index.List())
|
||||
})
|
||||
e.GET("/api/repo", func(c echo.Context) error {
|
||||
// Only serve details for a repo we already discovered — never run git
|
||||
// against an arbitrary path supplied in the query string. Clean the
|
||||
// input so separator style (/, \) doesn't defeat the exact-match lookup.
|
||||
path := filepath.Clean(c.QueryParam("path"))
|
||||
base, ok := scanner.Index.Get(path)
|
||||
if !ok {
|
||||
return c.JSON(http.StatusNotFound, map[string]string{"error": "unknown repository"})
|
||||
}
|
||||
return c.JSON(http.StatusOK, repos.BuildDetail(c.Request().Context(), g, base))
|
||||
})
|
||||
|
||||
// Serve with graceful shutdown.
|
||||
go func() {
|
||||
|
||||
Reference in New Issue
Block a user