buttons
This commit is contained in:
+20
-53
@@ -291,49 +291,33 @@ func (s *Server) MergeTask(w http.ResponseWriter, r *http.Request, taskID string
|
||||
writeStoreError(w, err)
|
||||
return
|
||||
}
|
||||
if u.GitName == "" || u.GitEmail == "" {
|
||||
writeError(w, http.StatusBadRequest, errors.New("set your git name and email (PUT /api/me) before merging"))
|
||||
|
||||
sess, err := s.agents.Merge(r.Context(), t, p, u)
|
||||
if err != nil {
|
||||
writeAgentError(w, err)
|
||||
return
|
||||
}
|
||||
writeJSON(w, http.StatusAccepted, sess)
|
||||
}
|
||||
|
||||
func (s *Server) MergeIn(w http.ResponseWriter, r *http.Request, taskID string) {
|
||||
t, p, ok := s.activeTask(w, r, taskID)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
||||
sessions, err := s.store.ListSessions(r.Context(), t.Id)
|
||||
u, err := s.store.GetUser(r.Context(), actor(r))
|
||||
if err != nil {
|
||||
writeStoreError(w, err)
|
||||
return
|
||||
}
|
||||
for _, sess := range sessions {
|
||||
if sess.State == api.AgentSessionStateRunning || sess.State == api.AgentSessionStateQueued {
|
||||
writeError(w, http.StatusConflict, fmt.Errorf("session %s is %s; wait for the turn to end or interrupt it", sess.Id, sess.State))
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
commit, err := git.SquashMerge(p.RepoPath, t.WorktreePath, p.DefaultBranch, squashMessage(t), []string{
|
||||
"GIT_AUTHOR_NAME=" + u.GitName,
|
||||
"GIT_AUTHOR_EMAIL=" + u.GitEmail,
|
||||
"GIT_COMMITTER_NAME=" + u.GitName,
|
||||
"GIT_COMMITTER_EMAIL=" + u.GitEmail,
|
||||
})
|
||||
conflict := &git.ConflictError{}
|
||||
if errors.As(err, &conflict) {
|
||||
writeError(w, http.StatusConflict, err)
|
||||
return
|
||||
}
|
||||
sess, err := s.agents.MergeIn(r.Context(), t, u, p.DefaultBranch)
|
||||
if err != nil {
|
||||
writeError(w, http.StatusInternalServerError, err)
|
||||
writeAgentError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
if !s.removeTask(w, r, t, p) {
|
||||
return
|
||||
}
|
||||
|
||||
t, err = s.store.MergeTask(r.Context(), taskID, commit, actor(r))
|
||||
if err != nil {
|
||||
writeStoreError(w, err)
|
||||
return
|
||||
}
|
||||
writeJSON(w, http.StatusOK, t)
|
||||
writeJSON(w, http.StatusAccepted, sess)
|
||||
}
|
||||
|
||||
func (s *Server) DiscardTask(w http.ResponseWriter, r *http.Request, taskID string) {
|
||||
@@ -342,11 +326,13 @@ func (s *Server) DiscardTask(w http.ResponseWriter, r *http.Request, taskID stri
|
||||
return
|
||||
}
|
||||
|
||||
if !s.removeTask(w, r, t, p) {
|
||||
err := s.agents.RemoveTask(r.Context(), t, p, actor(r))
|
||||
if err != nil {
|
||||
writeError(w, http.StatusInternalServerError, err)
|
||||
return
|
||||
}
|
||||
|
||||
t, err := s.store.DiscardTask(r.Context(), taskID, actor(r))
|
||||
t, err = s.store.DiscardTask(r.Context(), taskID, actor(r))
|
||||
if err != nil {
|
||||
writeStoreError(w, err)
|
||||
return
|
||||
@@ -354,10 +340,6 @@ func (s *Server) DiscardTask(w http.ResponseWriter, r *http.Request, taskID stri
|
||||
writeJSON(w, http.StatusOK, t)
|
||||
}
|
||||
|
||||
func squashMessage(t api.Task) string {
|
||||
return t.Title
|
||||
}
|
||||
|
||||
func (s *Server) activeTask(w http.ResponseWriter, r *http.Request, taskID string) (api.Task, api.Project, bool) {
|
||||
t, err := s.store.GetTask(r.Context(), taskID)
|
||||
if err != nil {
|
||||
@@ -378,21 +360,6 @@ func (s *Server) activeTask(w http.ResponseWriter, r *http.Request, taskID strin
|
||||
return t, p, true
|
||||
}
|
||||
|
||||
func (s *Server) removeTask(w http.ResponseWriter, r *http.Request, t api.Task, p api.Project) bool {
|
||||
err := s.agents.StopTask(r.Context(), t.Id, actor(r))
|
||||
if err != nil {
|
||||
writeError(w, http.StatusInternalServerError, err)
|
||||
return false
|
||||
}
|
||||
|
||||
err = git.RemoveWorktree(p.RepoPath, t.WorktreePath, t.Branch)
|
||||
if err != nil {
|
||||
writeError(w, http.StatusInternalServerError, err)
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func (s *Server) GetStatus(w http.ResponseWriter, r *http.Request) {
|
||||
c, err := s.store.Counts(r.Context())
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user