in commands/mr/mrutils/mrutils.go [54:101]
func MRCheckErrors(mr *gitlab.MergeRequest, err MRCheckErrOptions) error {
if mr.Draft && err.Draft {
return fmt.Errorf("this merge request is still a draft. Run `glab mr update %d --ready` to mark it as ready for review.", mr.IID)
}
dbg.Debug("MergeWhenPipelineSucceeds:", strconv.FormatBool(mr.MergeWhenPipelineSucceeds))
dbg.Debug("DetailedMergeStatus:", mr.DetailedMergeStatus)
if mr.DetailedMergeStatus == "ci_must_pass" {
return fmt.Errorf("this merge request requires a passing pipeline before merging.")
}
if mr.MergeWhenPipelineSucceeds && err.PipelineStatus && mr.Pipeline != nil {
if mr.Pipeline.Status != "success" {
return fmt.Errorf("the pipeline for this merge request has failed. The pipeline must succeed before merging.")
}
}
if mr.State == "merged" && err.Merged {
return fmt.Errorf("this merge request has already been merged.")
}
if mr.State == "closed" && err.Closed {
return fmt.Errorf("this merge request has been closed.")
}
if mr.State == "opened" && err.Opened {
return fmt.Errorf("this merge request is already open.")
}
if mr.Subscribed && err.Subscribed {
return fmt.Errorf("you are already subscribed to this merge request.")
}
if !mr.Subscribed && err.Unsubscribed {
return fmt.Errorf("you are not subscribed to this merge request.")
}
if err.MergePrivilege && !mr.User.CanMerge {
return fmt.Errorf("you do not have permission to merge this merge request.")
}
if err.Conflict && mr.HasConflicts {
return fmt.Errorf("merge conflicts exist. Resolve the conflicts and try again, or merge locally.")
}
return nil
}