git-sync-web 自动提交 2026-09-09 12:38:18
This commit is contained in:
@@ -50,6 +50,11 @@ func NewServer(e *Engine, static fs.FS, password string) *Server {
|
||||
mux.HandleFunc("GET /api/repos/{name}/stats", s.wrapRepo(s.statsRepo))
|
||||
mux.HandleFunc("GET /api/repos/{name}/commits", s.wrapRepo(s.commitsRepo))
|
||||
mux.HandleFunc("GET /api/repos/{name}/commits/{hash}", s.wrapRepo(s.commitDiffRepo))
|
||||
mux.HandleFunc("GET /api/repos/{name}/tree", s.wrapRepo(s.treeRepo))
|
||||
mux.HandleFunc("GET /api/repos/{name}/file", s.wrapRepo(s.fileRepo))
|
||||
mux.HandleFunc("PUT /api/repos/{name}/file", s.wrapRepo(s.fileWriteRepo))
|
||||
mux.HandleFunc("POST /api/repos/{name}/commit", s.wrapRepo(s.commitFileRepo))
|
||||
mux.HandleFunc("GET /api/repos/{name}/diff", s.wrapRepo(s.diffRepo))
|
||||
mux.Handle("/", http.FileServer(http.FS(static)))
|
||||
return s
|
||||
}
|
||||
@@ -329,4 +334,77 @@ func (s *Server) abortPushRepo(w http.ResponseWriter, r *http.Request, name stri
|
||||
return
|
||||
}
|
||||
writeJSON(w, 200, map[string]any{"ok": true})
|
||||
}
|
||||
|
||||
// ---------- 差异与文件编辑(网页端) ----------
|
||||
|
||||
func (s *Server) treeRepo(w http.ResponseWriter, r *http.Request, name string) {
|
||||
writeJSON(w, 200, map[string]any{"files": s.engine.FileTree(name)})
|
||||
}
|
||||
|
||||
func (s *Server) fileRepo(w http.ResponseWriter, r *http.Request, name string) {
|
||||
rel := r.URL.Query().Get("path")
|
||||
if rel == "" {
|
||||
writeErr(w, 400, "缺少 path 参数")
|
||||
return
|
||||
}
|
||||
fc, err := s.engine.ReadFileContent(name, rel)
|
||||
if err != nil {
|
||||
writeErr(w, 400, err.Error())
|
||||
return
|
||||
}
|
||||
writeJSON(w, 200, fc)
|
||||
}
|
||||
|
||||
func (s *Server) fileWriteRepo(w http.ResponseWriter, r *http.Request, name string) {
|
||||
var req struct {
|
||||
Path string `json:"path"`
|
||||
Content string `json:"content"`
|
||||
}
|
||||
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
||||
writeErr(w, 400, "请求体格式错误")
|
||||
return
|
||||
}
|
||||
if req.Path == "" {
|
||||
writeErr(w, 400, "缺少 path")
|
||||
return
|
||||
}
|
||||
if err := s.engine.WriteFileContent(name, req.Path, req.Content); err != nil {
|
||||
writeErr(w, 400, err.Error())
|
||||
return
|
||||
}
|
||||
writeJSON(w, 200, map[string]any{"ok": true})
|
||||
}
|
||||
|
||||
func (s *Server) commitFileRepo(w http.ResponseWriter, r *http.Request, name string) {
|
||||
var req struct {
|
||||
Path string `json:"path"`
|
||||
Message string `json:"message"`
|
||||
}
|
||||
if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
|
||||
writeErr(w, 400, "请求体格式错误")
|
||||
return
|
||||
}
|
||||
if req.Path == "" {
|
||||
writeErr(w, 400, "缺少 path")
|
||||
return
|
||||
}
|
||||
if err := s.engine.CommitFile(name, req.Path, req.Message); err != nil {
|
||||
writeErr(w, 400, err.Error())
|
||||
return
|
||||
}
|
||||
writeJSON(w, 200, map[string]any{"ok": true})
|
||||
}
|
||||
|
||||
func (s *Server) diffRepo(w http.ResponseWriter, r *http.Request, name string) {
|
||||
scope := r.URL.Query().Get("scope")
|
||||
if scope == "" {
|
||||
scope = "working"
|
||||
}
|
||||
res, err := s.engine.WorkingDiff(name, scope)
|
||||
if err != nil {
|
||||
writeErr(w, 400, err.Error())
|
||||
return
|
||||
}
|
||||
writeJSON(w, 200, res)
|
||||
}
|
||||
Reference in New Issue
Block a user