diff --git a/pkg/cmd/cli/cmd/cancelbuild.go b/pkg/cmd/cli/cmd/cancelbuild.go index 3db6fa27e5f4..a6a4345c92ee 100644 --- a/pkg/cmd/cli/cmd/cancelbuild.go +++ b/pkg/cmd/cli/cmd/cancelbuild.go @@ -189,16 +189,21 @@ func (o *CancelBuildOptions) Run() error { wg.Add(1) go func(build *buildapi.Build) { defer wg.Done() - build.Status.Cancelled = true err := wait.Poll(500*time.Millisecond, 30*time.Second, func() (bool, error) { + build.Status.Cancelled = true _, err := o.BuildClient.Update(build) - if err != nil && errors.IsConflict(err) { - return false, nil + switch { + case err == nil: + return true, nil + case errors.IsConflict(err): + fmt.Println("update has conflict on", build.Name) + build, err = o.BuildClient.Get(build.Name) + return false, err } return true, err }) if err != nil { - o.ReportError(fmt.Errorf("build %s/%s failed to cancel: %v", build.Namespace, build.Name, err)) + o.ReportError(fmt.Errorf("build %s/%s failed to update: %v", build.Namespace, build.Name, err)) return } // Make sure the build phase is really cancelled. @@ -207,6 +212,7 @@ func (o *CancelBuildOptions) Run() error { if err != nil { return true, err } + fmt.Printf("build %s state is %s\n", build.Name, string(updatedBuild.Status.Phase)) return updatedBuild.Status.Phase == buildapi.BuildPhaseCancelled, nil }) if err != nil {