Class: LegacyDiffNote
- Inherits:
-
Note
- Object
- ActiveRecord::Base
- ApplicationRecord
- Note
- LegacyDiffNote
- Includes:
- NoteOnDiff
- Defined in:
- app/models/legacy_diff_note.rb
Overview
A note on merge request or commit diffs, using the legacy implementation.
All new diff notes are of the type ‘DiffNote`, but any diff notes created before the introduction of the new implementation still use `LegacyDiffNote`.
A note of this type is never resolvable.
Constant Summary
Constants inherited from Note
Note::ISSUE_TASK_SYSTEM_NOTE_PATTERN, Note::NON_DIFF_NOTE_TYPES, Note::TYPES_RESTRICTED_BY_GROUP_ABILITY, Note::TYPES_RESTRICTED_BY_PROJECT_ABILITY
Constants included from ThrottledTouch
ThrottledTouch::TOUCH_INTERVAL
Constants included from Gitlab::SQL::Pattern
Gitlab::SQL::Pattern::MIN_CHARS_FOR_PARTIAL_MATCHING, Gitlab::SQL::Pattern::REGEX_QUOTED_TERM
Constants included from ResolvableNote
ResolvableNote::RESOLVABLE_TYPES
Constants included from CacheMarkdownField
CacheMarkdownField::INVALIDATED_BY
Constants included from Redactable
Redactable::UNSUBSCRIBE_PATTERN
Constants inherited from ApplicationRecord
Constants included from ResetOnUnionError
ResetOnUnionError::MAX_RESET_PERIOD
Instance Attribute Summary
Attributes inherited from Note
#command_names, #commands_changes, #redacted_note_html, #skip_keep_around_commits, #total_reference_count, #user_visible_reference_count
Attributes included from CacheMarkdownField
#skip_markdown_cache_validation
Attributes included from Importable
Instance Method Summary collapse
-
#active?(diff_refs = nil) ⇒ Boolean
Check if this note is part of an “active” discussion.
- #diff ⇒ Object
- #diff_file ⇒ Object
- #diff_file_hash ⇒ Object
- #diff_line ⇒ Object
- #discussion_class ⇒ Object
- #original_line_code ⇒ Object
- #project_repository ⇒ Object
Methods included from NoteOnDiff
#created_at_diff?, #diff_attributes, #diff_note?
Methods inherited from Note
#attribute_names_for_serialization, #award_emoji?, #banzai_render_context, #broadcast_noteable_notes_changed, #bump_updated_at, #can_be_award_emoji?, #can_be_discussion_note?, #can_create_todo?, #check_for_spam?, cherry_picked_merge_requests, #commit, #confidential?, #contains_emoji_only?, #contributor?, count_for_collection, #diff_note?, #discussion, #discussion_id, discussions, #editable?, #edited?, #emoji_awardable?, #exportable_record?, find_discussion, #for_alert_mangement_alert?, #for_commit?, #for_design?, #for_issuable?, #for_issue?, #for_merge_request?, #for_personal_snippet?, #for_project_noteable?, #for_project_snippet?, #for_snippet?, #for_vulnerability?, #for_work_item?, grouped_diff_discussions, #hook_attrs, #human_max_access, #in_reply_to?, #issuable_ability_name, #last_edited_at, #max_attachment_size, #mentioned_filtered_user_ids_for, #mentioned_users, #merge_requests, model_name, #note, #note_html, #noteable, #noteable_ability_name, #noteable_author?, #noteable_type=, #notify_after_create, #notify_after_destroy, #parent_user, #part_of_discussion?, positions, #post_processed_cache_key, #project_name, #references, #resource_parent, #retrieve_upload, search, #show_outdated_changes?, simple_sorts, #skip_notification?, #skip_project_check?, #start_of_discussion?, #supports_suggestion?, #system_note_visible_for?, #system_note_with_references?, #to_discussion, #touch, #touch_noteable, #trigger_note_subscription_create, #trigger_note_subscription_destroy, #trigger_note_subscription_update, #user_mention_class, #user_mention_identifier, #user_mentions, with_web_entity_associations
Methods included from Gitlab::Utils::Override
#extended, extensions, #included, #method_added, #override, #prepended, #queue_verification, verify!
Methods included from Spammable
#allow_possible_spam?, #check_for_spam, #check_for_spam?, #clear_spam_flags!, #invalidate_if_spam, #needs_recaptcha!, #recaptcha_error!, #render_recaptcha?, #spam, #spam!, #spam_description, #spam_title, #spammable_attribute_changed?, #spammable_entity_type, #spammable_text, #submittable_as_spam?, #submittable_as_spam_by?, #supports_recaptcha?, #unrecoverable_spam_error!
Methods included from ThrottledTouch
Methods included from Gitlab::SQL::Pattern
Methods included from Editable
Methods included from ResolvableNote
#potentially_resolvable?, #resolvable?, #resolve!, #resolve_without_save, #resolved?, #to_be_resolved?, #unresolve!, #unresolve_without_save
Methods included from AfterCommitQueue
#run_after_commit, #run_after_commit_or_now
Methods included from CacheMarkdownField
#attribute_invalidated?, #banzai_render_context, #cached_html_for, #cached_html_up_to_date?, #can_cache_field?, #invalidated_markdown_cache?, #latest_cached_markdown_version, #local_version, #mentionable_attributes_changed?, #mentioned_filtered_user_ids_for, #parent_user, #refresh_markdown_cache, #refresh_markdown_cache!, #rendered_field_content, #skip_project_check?, #store_mentions!, #updated_cached_html_for
Methods included from FasterCacheKeys
Methods included from Awardable
#awarded_emoji?, #downvotes, #emoji_awardable?, #grouped_awards, #upvotes, #user_authored?, #user_can_award?
Methods included from Mentionable
#all_references, #create_cross_references!, #create_new_cross_references!, #directly_addressed_users, #extractors, #gfm_reference, #local_reference, #matches_cross_reference_regex?, #mentioned_users, #referenced_group_users, #referenced_groups, #referenced_mentionables, #referenced_project_users, #referenced_projects, #referenced_users, #user_mention_class, #user_mention_identifier
Methods included from Participable
#participant?, #participants, #visible_participants
Methods inherited from ApplicationRecord
cached_column_list, #create_or_load_association, declarative_enum, default_select_columns, id_in, id_not_in, iid_in, pluck_primary_key, primary_key_in, #readable_by?, safe_ensure_unique, safe_find_or_create_by, safe_find_or_create_by!, #to_ability_name, underscore, where_exists, where_not_exists, with_fast_read_statement_timeout, without_order
Methods included from SensitiveSerializableHash
Instance Method Details
#active?(diff_refs = nil) ⇒ Boolean
Check if this note is part of an “active” discussion
This will always return true for anything except MergeRequest noteables, which have special logic.
If the note’s current diff cannot be matched in the MergeRequest’s current diff, it’s considered inactive.
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'app/models/legacy_diff_note.rb', line 53 def active?(diff_refs = nil) return @active if defined?(@active) return true if for_commit? return true unless diff_line return false unless noteable return false if diff_refs && diff_refs != noteable.diff_refs noteable_diff = find_noteable_diff if noteable_diff parsed_lines = Gitlab::Diff::Parser.new.parse(noteable_diff.diff.each_line) @active = parsed_lines.any? { |line_obj| line_obj.text == diff_line.text } else @active = false end @active end |
#diff ⇒ Object
30 31 32 |
# File 'app/models/legacy_diff_note.rb', line 30 def diff @diff ||= Gitlab::Git::Diff.new(st_diff) if st_diff.respond_to?(:map) end |
#diff_file ⇒ Object
34 35 36 |
# File 'app/models/legacy_diff_note.rb', line 34 def diff_file @diff_file ||= Gitlab::Diff::File.new(diff, repository: project_repository) if diff end |
#diff_file_hash ⇒ Object
26 27 28 |
# File 'app/models/legacy_diff_note.rb', line 26 def diff_file_hash line_code.split('_')[0] if line_code end |
#diff_line ⇒ Object
38 39 40 |
# File 'app/models/legacy_diff_note.rb', line 38 def diff_line @diff_line ||= diff_file&.line_for_line_code(self.line_code) end |
#discussion_class ⇒ Object
18 19 20 |
# File 'app/models/legacy_diff_note.rb', line 18 def discussion_class(*) LegacyDiffDiscussion end |
#original_line_code ⇒ Object
42 43 44 |
# File 'app/models/legacy_diff_note.rb', line 42 def original_line_code self.line_code end |
#project_repository ⇒ Object
22 23 24 |
# File 'app/models/legacy_diff_note.rb', line 22 def project_repository Gitlab::SafeRequestStore.fetch("project:#{project_id}:repository") { self.project.repository } end |