in azure-devops/azext_devops/dev/repos/pull_request.py [0:0]
def update_pull_request(id, title=None, description=None, auto_complete=None, # pylint: disable=redefined-builtin
squash=None, delete_source_branch=None, bypass_policy=None, draft=None,
bypass_policy_reason=None, merge_commit_message=None, organization=None, detect=None,
transition_work_items=None, status=None):
"""Update a pull request.
:param id: ID of the pull request.
:type id: int
:param title: New title for the pull request.
:type title: str
:param description: New description for the pull request. Can include markdown. Each value sent to this
arg will be a new line. For example: --description "First Line" "Second Line"
:type description: list of str
:param auto_complete: Set the pull request to complete automatically when all policies have passed and
the source branch can be merged into the target branch.
:type auto_complete: bool
:param squash: Squash the commits in the source branch when merging into the target branch.
:type squash: bool
:param delete_source_branch: Delete the source branch after the pull request has been completed
and merged into the target branch.
:type delete_source_branch: bool
:param bypass_policy: Bypass required policies (if any) and completes the pull request once it
can be merged.
:type bypass_policy: bool
:param bypass_policy_reason: Reason for bypassing the required policies.
:type bypass_policy_reason: str
:param draft: Publish the PR or convert to draft mode.
:type draft: bool
:param merge_commit_message: Message displayed when commits are merged.
:type merge_commit_message: str
:param transition_work_items: Transition any work items linked to the pull request into the next logical state.
(e.g. Active -> Resolved)
:type transition_work_items: bool
:param status: Set the new state of pull request.
:type status: str
:rtype: :class:`GitPullRequest <v5_0.git.models.GitPullRequest>`
"""
organization = resolve_instance(detect=detect, organization=organization)
client = get_git_client(organization)
existing_pr = client.get_pull_request_by_id(id)
if description is not None:
multi_line_description = '\n'.join(description)
else:
multi_line_description = None
pr = GitPullRequest(title=title, description=multi_line_description)
if (bypass_policy is not None or # pylint: disable=too-many-boolean-expressions
bypass_policy_reason is not None or
squash is not None or
merge_commit_message is not None or
delete_source_branch is not None or
transition_work_items is not None):
completion_options = existing_pr.completion_options
if completion_options is None:
completion_options = GitPullRequestCompletionOptions()
if bypass_policy is not None:
completion_options.bypass_policy = bypass_policy
if bypass_policy_reason is not None:
completion_options.bypass_reason = bypass_policy_reason
if delete_source_branch is not None:
completion_options.delete_source_branch = delete_source_branch
if squash is not None:
completion_options.squash_merge = squash
if merge_commit_message is not None:
completion_options.merge_commit_message = merge_commit_message
if transition_work_items is not None:
completion_options.transition_work_items = transition_work_items
pr.completion_options = completion_options
if auto_complete is not None:
if auto_complete:
pr.auto_complete_set_by = IdentityRef(id=resolve_identity_as_id(ME, organization))
else:
pr.auto_complete_set_by = IdentityRef(id=EMPTY_UUID)
if draft is not None:
pr.is_draft = draft
if status is not None:
pr.status = status
if status == 'completed':
pr.last_merge_source_commit = existing_pr.last_merge_source_commit
if not pr.completion_options:
pr.completion_options = existing_pr.completion_options
pr = client.update_pull_request(git_pull_request_to_update=pr,
project=existing_pr.repository.project.name,
repository_id=existing_pr.repository.name,
pull_request_id=id)
return pr