Edits history of script submission #23980 for ' Update merge request (gitlab)'

  • bunnative
    One script reply has been approved by the moderators
    Ap­pro­ved
    //native
    
    /**
     * Update merge request
     * Change a merge request's title, description, target branch, labels, assignees or reviewers, or close or reopen it. Empty fields are left unchanged; labels replaces all labels, add_labels and remove_labels change some, clear_assignees and clear_reviewers remove everyone.
     */
    export async function main(
      auth: RT.Gitlab,
      project: string,
      merge_request_iid: number,
      title: string | undefined,
      description: string | undefined,
      target_branch: string | undefined,
      labels: string[] | undefined,
      add_labels: string[] | undefined,
      remove_labels: string[] | undefined,
      assignee_ids: number[] | undefined,
      reviewer_ids: number[] | undefined,
      state_event: "keep" | "close" | "reopen" | undefined,
      clear_assignees: boolean = false,
      clear_reviewers: boolean = false
    ) {
      const list = (v: string[] | undefined) =>
        v?.length ? v.join(",") : undefined
      const url = `${(auth.baseUrl || "https://gitlab.com").replace(/\/+$/, "")}/api/v4/projects/${encodeURIComponent(project)}/merge_requests/${merge_request_iid}`
    
      const response = await fetch(url, {
        method: "PUT",
        headers: {
          Authorization: `Bearer ${auth.token}`,
          "Content-Type": "application/json",
          Accept: "application/json",
        },
        body: JSON.stringify({
          title: title || undefined,
          description: description || undefined,
          target_branch: target_branch || undefined,
          labels: list(labels),
          add_labels: list(add_labels),
          remove_labels: list(remove_labels),
          // An empty list leaves them as they are; clear_* removes everyone.
          assignee_ids: clear_assignees
            ? []
            : assignee_ids?.length
              ? assignee_ids
              : undefined,
          reviewer_ids: clear_reviewers
            ? []
            : reviewer_ids?.length
              ? reviewer_ids
              : undefined,
          state_event:
            state_event && state_event !== "keep" ? state_event : undefined,
        }),
      })
    
      if (!response.ok) {
        throw new Error(`${response.status} ${await response.text()}`)
      }
    
      return await response.json()
    }
    

    Submitted by hugo989 8 hours ago