debian-mirror-gitlab/app/services/system_note_service.rb

419 lines
16 KiB
Ruby
Raw Normal View History

2018-11-18 11:00:15 +05:30
# frozen_string_literal: true
2015-09-11 14:41:01 +05:30
# SystemNoteService
#
# Used for creating system notes (e.g., when a user references a merge request
# from an issue, an issue's assignee changes, an issue is closed, etc.)
2016-09-13 17:45:13 +05:30
module SystemNoteService
extend self
2021-04-29 21:17:54 +05:30
# Called when commits are added to a merge request
2015-09-11 14:41:01 +05:30
#
# noteable - Noteable object
# project - Project owning noteable
# author - User performing the change
# new_commits - Array of Commits added since last push
# existing_commits - Array of Commits added in a previous push
# oldrev - Optional String SHA of a previous Commit
#
# Returns the created Note object
2016-09-13 17:45:13 +05:30
def add_commits(noteable, project, author, new_commits, existing_commits = [], oldrev = nil)
2019-12-21 20:55:43 +05:30
::SystemNotes::CommitService.new(noteable: noteable, project: project, author: author).add_commits(new_commits, existing_commits, oldrev)
2015-09-11 14:41:01 +05:30
end
2018-11-20 20:47:30 +05:30
# Called when a commit was tagged
#
# noteable - Noteable object
# project - Project owning noteable
# author - User performing the tag
# tag_name - The created tag name
#
# Returns the created Note object
def tag_commit(noteable, project, author, tag_name)
2019-12-21 20:55:43 +05:30
::SystemNotes::CommitService.new(noteable: noteable, project: project, author: author).tag_commit(tag_name)
2018-11-20 20:47:30 +05:30
end
2016-09-13 17:45:13 +05:30
def change_assignee(noteable, project, author, assignee)
2019-12-21 20:55:43 +05:30
::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).change_assignee(assignee)
2017-08-17 22:00:37 +05:30
end
2019-07-31 22:56:46 +05:30
def change_issuable_assignees(issuable, project, author, old_assignees)
2019-12-21 20:55:43 +05:30
::SystemNotes::IssuablesService.new(noteable: issuable, project: project, author: author).change_issuable_assignees(old_assignees)
2015-09-11 14:41:01 +05:30
end
2021-01-03 14:25:43 +05:30
def change_issuable_reviewers(issuable, project, author, old_reviewers)
::SystemNotes::IssuablesService.new(noteable: issuable, project: project, author: author).change_issuable_reviewers(old_reviewers)
end
2022-04-04 11:22:00 +05:30
def change_issuable_contacts(issuable, project, author, added_count, removed_count)
::SystemNotes::IssuablesService.new(noteable: issuable, project: project, author: author).change_issuable_contacts(added_count, removed_count)
end
2022-05-07 20:08:51 +05:30
def relate_issuable(noteable, noteable_ref, user)
::SystemNotes::IssuablesService.new(noteable: noteable, project: noteable.project, author: user).relate_issuable(noteable_ref)
2020-11-24 15:15:51 +05:30
end
2022-05-07 20:08:51 +05:30
def unrelate_issuable(noteable, noteable_ref, user)
::SystemNotes::IssuablesService.new(noteable: noteable, project: noteable.project, author: user).unrelate_issuable(noteable_ref)
2015-09-11 14:41:01 +05:30
end
2022-08-27 11:52:29 +05:30
# Called when the due_date or start_date of a Noteable is changed
2015-09-11 14:41:01 +05:30
#
# noteable - Noteable object
# project - Project owning noteable
# author - User performing the change
2018-11-20 20:47:30 +05:30
# due_date - Due date being assigned, or nil
2015-09-11 14:41:01 +05:30
#
# Example Note text:
#
2018-11-20 20:47:30 +05:30
# "removed due date"
2015-09-11 14:41:01 +05:30
#
2022-08-27 11:52:29 +05:30
# "changed due date to September 20, 2018 and changed start date to September 25, 2018"
2015-09-11 14:41:01 +05:30
#
# Returns the created Note object
2022-08-27 11:52:29 +05:30
def change_start_date_or_due_date(noteable, project, author, changed_dates)
::SystemNotes::TimeTrackingService.new(
noteable: noteable,
project: project,
author: author
).change_start_date_or_due_date(changed_dates)
2017-08-17 22:00:37 +05:30
end
# Called when the estimated time of a Noteable is changed
#
# noteable - Noteable object
# project - Project owning noteable
# author - User performing the change
# time_estimate - Estimated time
#
# Example Note text:
#
# "removed time estimate"
#
# "changed time estimate to 3d 5h"
#
# Returns the created Note object
def change_time_estimate(noteable, project, author)
2020-03-13 15:44:24 +05:30
::SystemNotes::TimeTrackingService.new(noteable: noteable, project: project, author: author).change_time_estimate
2017-08-17 22:00:37 +05:30
end
# Called when the spent time of a Noteable is changed
#
# noteable - Noteable object
# project - Project owning noteable
# author - User performing the change
# time_spent - Spent time
#
# Example Note text:
#
# "removed time spent"
#
# "added 2h 30m of time spent"
#
# Returns the created Note object
def change_time_spent(noteable, project, author)
2020-03-13 15:44:24 +05:30
::SystemNotes::TimeTrackingService.new(noteable: noteable, project: project, author: author).change_time_spent
end
2017-08-17 22:00:37 +05:30
2022-08-27 11:52:29 +05:30
# Called when a timelog is added to an issuable
#
# issuable - Issuable object (Issue, WorkItem or MergeRequest)
# project - Project owning the issuable
# author - User performing the change
# timelog - Created timelog
#
# Example Note text:
#
# "subtracted 1h 15m of time spent"
#
# "added 2h 30m of time spent"
#
# Returns the created Note object
def created_timelog(issuable, project, author, timelog)
::SystemNotes::TimeTrackingService.new(noteable: issuable, project: project, author: author).created_timelog(timelog)
end
2022-07-16 23:28:13 +05:30
# Called when a timelog is removed from a Noteable
#
# noteable - Noteable object
# project - Project owning the noteable
# author - User performing the change
# timelog - The removed timelog
#
# Example Note text:
# "deleted 2h 30m of time spent from 22-03-2022"
#
# Returns the created Note object
def remove_timelog(noteable, project, author, timelog)
::SystemNotes::TimeTrackingService.new(noteable: noteable, project: project, author: author).remove_timelog(timelog)
end
2020-03-13 15:44:24 +05:30
def close_after_error_tracking_resolve(issue, project, author)
::SystemNotes::IssuablesService.new(noteable: issue, project: project, author: author).close_after_error_tracking_resolve
2015-09-11 14:41:01 +05:30
end
2018-12-13 13:39:08 +05:30
def change_status(noteable, project, author, status, source = nil)
2019-12-21 20:55:43 +05:30
::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).change_status(status, source)
2015-12-23 02:04:40 +05:30
end
2017-08-17 22:00:37 +05:30
# Called when 'merge when pipeline succeeds' is executed
2019-09-30 21:07:59 +05:30
def merge_when_pipeline_succeeds(noteable, project, author, sha)
2019-12-26 22:10:19 +05:30
::SystemNotes::MergeRequestsService.new(noteable: noteable, project: project, author: author).merge_when_pipeline_succeeds(sha)
2015-12-23 02:04:40 +05:30
end
2017-08-17 22:00:37 +05:30
# Called when 'merge when pipeline succeeds' is canceled
def cancel_merge_when_pipeline_succeeds(noteable, project, author)
2019-12-26 22:10:19 +05:30
::SystemNotes::MergeRequestsService.new(noteable: noteable, project: project, author: author).cancel_merge_when_pipeline_succeeds
2015-09-11 14:41:01 +05:30
end
2019-09-30 21:07:59 +05:30
# Called when 'merge when pipeline succeeds' is aborted
def abort_merge_when_pipeline_succeeds(noteable, project, author, reason)
2019-12-26 22:10:19 +05:30
::SystemNotes::MergeRequestsService.new(noteable: noteable, project: project, author: author).abort_merge_when_pipeline_succeeds(reason)
2019-09-30 21:07:59 +05:30
end
2021-01-29 00:20:46 +05:30
def handle_merge_request_draft(noteable, project, author)
::SystemNotes::MergeRequestsService.new(noteable: noteable, project: project, author: author).handle_merge_request_draft
2017-08-17 22:00:37 +05:30
end
2021-01-29 00:20:46 +05:30
def add_merge_request_draft_from_commit(noteable, project, author, commit)
::SystemNotes::MergeRequestsService.new(noteable: noteable, project: project, author: author).add_merge_request_draft_from_commit(commit)
2016-06-02 11:05:42 +05:30
end
2017-09-10 17:25:29 +05:30
def resolve_all_discussions(merge_request, project, author)
2019-12-26 22:10:19 +05:30
::SystemNotes::MergeRequestsService.new(noteable: merge_request, project: project, author: author).resolve_all_discussions
2017-08-17 22:00:37 +05:30
end
def discussion_continued_in_issue(discussion, project, author, issue)
2019-12-26 22:10:19 +05:30
::SystemNotes::MergeRequestsService.new(project: project, author: author).discussion_continued_in_issue(discussion, issue)
2016-09-13 17:45:13 +05:30
end
2017-09-10 17:25:29 +05:30
def diff_discussion_outdated(discussion, project, author, change_position)
2019-12-26 22:10:19 +05:30
::SystemNotes::MergeRequestsService.new(project: project, author: author).diff_discussion_outdated(discussion, change_position)
2017-09-10 17:25:29 +05:30
end
2016-09-13 17:45:13 +05:30
def change_title(noteable, project, author, old_title)
2019-12-21 20:55:43 +05:30
::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).change_title(old_title)
2017-08-17 22:00:37 +05:30
end
def change_description(noteable, project, author)
2019-12-21 20:55:43 +05:30
::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).change_description
2015-09-11 14:41:01 +05:30
end
2016-09-13 17:45:13 +05:30
def change_issue_confidentiality(issue, project, author)
2019-12-21 20:55:43 +05:30
::SystemNotes::IssuablesService.new(noteable: issue, project: project, author: author).change_issue_confidentiality
2016-06-02 11:05:42 +05:30
end
2015-09-11 14:41:01 +05:30
# Called when a branch in Noteable is changed
#
# noteable - Noteable object
# project - Project owning noteable
# author - User performing the change
# branch_type - 'source' or 'target'
2021-03-11 19:13:27 +05:30
# event_type - the source of event: 'update' or 'delete'
2015-09-11 14:41:01 +05:30
# old_branch - old branch name
2019-07-07 11:18:12 +05:30
# new_branch - new branch name
2015-09-11 14:41:01 +05:30
#
2021-03-11 19:13:27 +05:30
# Example Note text is based on event_type:
2015-09-11 14:41:01 +05:30
#
2021-03-11 19:13:27 +05:30
# update: "changed target branch from `Old` to `New`"
2021-04-17 20:07:23 +05:30
# delete: "deleted the `Old` branch. This merge request now targets the `New` branch"
2015-09-11 14:41:01 +05:30
#
# Returns the created Note object
2021-03-11 19:13:27 +05:30
def change_branch(noteable, project, author, branch_type, event_type, old_branch, new_branch)
::SystemNotes::MergeRequestsService.new(noteable: noteable, project: project, author: author)
.change_branch(branch_type, event_type, old_branch, new_branch)
2015-09-11 14:41:01 +05:30
end
2015-10-24 18:46:33 +05:30
# Called when a branch in Noteable is added or deleted
#
# noteable - Noteable object
# project - Project owning noteable
# author - User performing the change
# branch_type - :source or :target
# branch - branch name
# presence - :add or :delete
#
# Example Note text:
#
2017-08-17 22:00:37 +05:30
# "restored target branch `feature`"
2015-10-24 18:46:33 +05:30
#
# Returns the created Note object
2016-09-13 17:45:13 +05:30
def change_branch_presence(noteable, project, author, branch_type, branch, presence)
2019-12-26 22:10:19 +05:30
::SystemNotes::MergeRequestsService.new(noteable: noteable, project: project, author: author).change_branch_presence(branch_type, branch, presence)
2015-10-24 18:46:33 +05:30
end
2016-06-02 11:05:42 +05:30
# Called when a branch is created from the 'new branch' button on a issue
# Example note text:
#
2017-08-17 22:00:37 +05:30
# "created branch `201-issue-branch-button`"
2019-09-30 21:07:59 +05:30
def new_issue_branch(issue, project, author, branch, branch_project: nil)
2019-12-26 22:10:19 +05:30
::SystemNotes::MergeRequestsService.new(noteable: issue, project: project, author: author).new_issue_branch(branch, branch_project: branch_project)
2016-06-02 11:05:42 +05:30
end
2019-02-15 15:39:39 +05:30
def new_merge_request(issue, project, author, merge_request)
2019-12-26 22:10:19 +05:30
::SystemNotes::MergeRequestsService.new(noteable: issue, project: project, author: author).new_merge_request(merge_request)
2019-02-15 15:39:39 +05:30
end
2022-01-26 12:08:38 +05:30
def cross_reference(mentioned, mentioned_in, author)
::SystemNotes::IssuablesService.new(noteable: mentioned, author: author).cross_reference(mentioned_in)
2015-09-11 14:41:01 +05:30
end
2022-01-26 12:08:38 +05:30
def cross_reference_exists?(mentioned, mentioned_in)
::SystemNotes::IssuablesService.new(noteable: mentioned).cross_reference_exists?(mentioned_in)
2016-09-13 17:45:13 +05:30
end
def change_task_status(noteable, project, author, new_task)
2019-12-21 20:55:43 +05:30
::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).change_task_status(new_task)
2016-09-13 17:45:13 +05:30
end
def noteable_moved(noteable, project, noteable_ref, author, direction:)
2019-12-21 20:55:43 +05:30
::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).noteable_moved(noteable_ref, direction)
2016-09-13 17:45:13 +05:30
end
2022-08-27 11:52:29 +05:30
def noteable_cloned(noteable, project, noteable_ref, author, direction:, created_at: nil)
::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).noteable_cloned(noteable_ref, direction, created_at: created_at)
2021-02-22 17:27:13 +05:30
end
2017-09-10 17:25:29 +05:30
def mark_duplicate_issue(noteable, project, author, canonical_issue)
2019-12-21 20:55:43 +05:30
::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).mark_duplicate_issue(canonical_issue)
2017-09-10 17:25:29 +05:30
end
def mark_canonical_issue_of_duplicate(noteable, project, author, duplicate_issue)
2019-12-21 20:55:43 +05:30
::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).mark_canonical_issue_of_duplicate(duplicate_issue)
2017-09-10 17:25:29 +05:30
end
2021-04-17 20:07:23 +05:30
def add_email_participants(noteable, project, author, body)
::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).add_email_participants(body)
end
2018-03-17 18:26:18 +05:30
def discussion_lock(issuable, author)
2019-12-21 20:55:43 +05:30
::SystemNotes::IssuablesService.new(noteable: issuable, project: issuable.project, author: author).discussion_lock
2018-03-17 18:26:18 +05:30
end
2022-01-26 12:08:38 +05:30
def cross_reference_disallowed?(mentioned, mentioned_in)
::SystemNotes::IssuablesService.new(noteable: mentioned).cross_reference_disallowed?(mentioned_in)
2018-03-17 18:26:18 +05:30
end
2022-08-27 11:52:29 +05:30
def relate_work_item(noteable, work_item, user)
::SystemNotes::IssuablesService
.new(noteable: noteable, project: noteable.project, author: user)
.hierarchy_changed(work_item, 'relate')
end
def unrelate_work_item(noteable, work_item, user)
::SystemNotes::IssuablesService
.new(noteable: noteable, project: noteable.project, author: user)
.hierarchy_changed(work_item, 'unrelate')
end
2019-10-12 21:52:04 +05:30
def zoom_link_added(issue, project, author)
2019-12-21 20:55:43 +05:30
::SystemNotes::ZoomService.new(noteable: issue, project: project, author: author).zoom_link_added
2019-10-12 21:52:04 +05:30
end
def zoom_link_removed(issue, project, author)
2019-12-21 20:55:43 +05:30
::SystemNotes::ZoomService.new(noteable: issue, project: project, author: author).zoom_link_removed
2019-10-12 21:52:04 +05:30
end
2020-04-08 14:13:33 +05:30
def auto_resolve_prometheus_alert(noteable, project, author)
::SystemNotes::IssuablesService.new(noteable: noteable, project: project, author: author).auto_resolve_prometheus_alert
end
2020-05-24 23:13:21 +05:30
# Parameters:
# - version [DesignManagement::Version]
#
# Example Note text:
#
# "added [1 designs](link-to-version)"
# "changed [2 designs](link-to-version)"
#
# Returns [Array<Note>]: the created Note objects
def design_version_added(version)
::SystemNotes::DesignManagementService.new(noteable: version.issue, project: version.issue.project, author: version.author).design_version_added(version)
end
# Called when a new discussion is created on a design
#
# discussion_note - DiscussionNote
#
# Example Note text:
#
# "started a discussion on screen.png"
#
# Returns the created Note object
def design_discussion_added(discussion_note)
design = discussion_note.noteable
::SystemNotes::DesignManagementService.new(noteable: design.issue, project: design.project, author: discussion_note.author).design_discussion_added(discussion_note)
end
2020-07-28 23:09:34 +05:30
# Called when the merge request is approved by user
#
# noteable - Noteable object
# user - User performing approve
#
# Example Note text:
#
# "approved this merge request"
#
# Returns the created Note object
def approve_mr(noteable, user)
merge_requests_service(noteable, noteable.project, user).approve_mr
end
def unapprove_mr(noteable, user)
merge_requests_service(noteable, noteable.project, user).unapprove_mr
end
2022-04-04 11:22:00 +05:30
def change_alert_status(alert, author, reason = nil)
::SystemNotes::AlertManagementService.new(noteable: alert, project: alert.project, author: author).change_alert_status(reason)
2020-07-28 23:09:34 +05:30
end
def new_alert_issue(alert, issue, author)
2020-10-24 23:57:45 +05:30
::SystemNotes::AlertManagementService.new(noteable: alert, project: alert.project, author: author).new_alert_issue(issue)
2020-07-28 23:09:34 +05:30
end
2020-11-24 15:15:51 +05:30
def create_new_alert(alert, monitoring_tool)
::SystemNotes::AlertManagementService.new(noteable: alert, project: alert.project).create_new_alert(monitoring_tool)
end
2021-01-03 14:25:43 +05:30
def change_incident_severity(incident, author)
::SystemNotes::IncidentService.new(noteable: incident, project: incident.project, author: author).change_incident_severity
end
2022-04-04 11:22:00 +05:30
def change_incident_status(incident, author, reason = nil)
::SystemNotes::IncidentService.new(noteable: incident, project: incident.project, author: author).change_incident_status(reason)
2021-12-11 22:18:48 +05:30
end
2021-04-17 20:07:23 +05:30
def log_resolving_alert(alert, monitoring_tool)
::SystemNotes::AlertManagementService.new(noteable: alert, project: alert.project).log_resolving_alert(monitoring_tool)
end
2023-06-20 00:43:36 +05:30
def change_issue_type(issue, author, previous_type)
::SystemNotes::IssuablesService.new(noteable: issue, project: issue.project, author: author).change_issue_type(previous_type)
2021-11-11 11:23:49 +05:30
end
2022-07-16 23:28:13 +05:30
def add_timeline_event(timeline_event)
incidents_service(timeline_event.incident).add_timeline_event(timeline_event)
end
def edit_timeline_event(timeline_event, author, was_changed:)
incidents_service(timeline_event.incident).edit_timeline_event(timeline_event, author, was_changed: was_changed)
end
def delete_timeline_event(noteable, author)
incidents_service(noteable).delete_timeline_event(author)
end
2020-07-28 23:09:34 +05:30
private
def merge_requests_service(noteable, project, author)
::SystemNotes::MergeRequestsService.new(noteable: noteable, project: project, author: author)
end
2022-07-16 23:28:13 +05:30
def incidents_service(incident)
::SystemNotes::IncidentsService.new(noteable: incident)
end
2015-09-11 14:41:01 +05:30
end
2019-12-04 20:38:33 +05:30
2021-06-08 01:23:25 +05:30
SystemNoteService.prepend_mod_with('SystemNoteService')