func abortChange(c *Command, r *http.Request, user *auth.UserState) Response { chID := muxVars(r)["id"] state := c.d.overlord.State() state.Lock() defer state.Unlock() chg := state.Change(chID) if chg == nil { return NotFound("cannot find change with id %q", chID) } var reqData struct { Action string `json:"action"` } decoder := json.NewDecoder(r.Body) if err := decoder.Decode(&reqData); err != nil { return BadRequest("cannot decode data from request body: %v", err) } if reqData.Action != "abort" { return BadRequest("change action %q is unsupported", reqData.Action) } if chg.Status().Ready() { return BadRequest("cannot abort change %s with nothing pending", chID) } // flag the change chg.Abort() // actually ask to proceed with the abort ensureStateSoon(state) return SyncResponse(change2changeInfo(chg), nil) }
func getChange(c *Command, r *http.Request, user *auth.UserState) Response { chID := muxVars(r)["id"] state := c.d.overlord.State() state.Lock() defer state.Unlock() chg := state.Change(chID) if chg == nil { return NotFound("cannot find change with id %q", chID) } return SyncResponse(change2changeInfo(chg), nil) }