rspec spec/lib/gitlab/background_migration/deserialize_merge_request_diffs_and_commits_spec.rb spec/services/system_note_service_spec.rb fails

$ bundle exec rspec spec/lib/gitlab/background_migration/deserialize_merge_request_diffs_and_commits_spec.rb spec/services/system_note_service_spec.rb
warning: parser/current is loading parser/ruby23, which recognizes
warning: 2.3.5-compliant syntax, but you are running 2.3.6.
warning: please see https://github.com/whitequark/parser#compatibility-with-ruby-mri.

==> Setting up GitLab Shell...
    GitLab Shell setup in 0.929938 seconds...

==> Setting up Gitaly...
warning: parser/current is loading parser/ruby23, which recognizes
warning: 2.3.5-compliant syntax, but you are running 2.3.6.
warning: please see https://github.com/whitequark/parser#compatibility-with-ruby-mri.
 Warning
  You are running as user seanmcgivern, we hope you know what you are doing.
  Things may work/fail for the wrong reasons.
  For correct results you should run this as user git.

    Gitaly setup in 132.055058 seconds...

Gitlab::BackgroundMigration::DeserializeMergeRequestDiffsAndCommits
  #perform
    when the diff IDs passed do not exist
      does not raise
    when the merge request diff has no serialised commits or diffs
      does not raise
    processing multiple merge request diffs
      when BUFFER_ROWS is exceeded
        inserts commit rows in chunks of BUFFER_ROWS
        inserts diff rows in chunks of DIFF_FILE_BUFFER_ROWS
      when BUFFER_ROWS is not exceeded
        only updates once
      when some rows were already inserted due to a previous failure
        does not raise
        logs a message
        ends up with the correct rows
      when the merge request diff update fails
        raises an error
        logs the error
        still adds diff commits
        still adds diff files
    when the merge request diff has valid commits and diffs
      creates correct entries in the merge_request_diff_commits table
      creates correct entries in the merge_request_diff_files table
      sets the st_commits and st_diffs columns to nil
    when the merge request diff has diffs but no commits
      creates correct entries in the merge_request_diff_commits table
      creates correct entries in the merge_request_diff_files table
      sets the st_commits and st_diffs columns to nil
    when the merge request diffs do not have too_large set
      creates correct entries in the merge_request_diff_commits table
      creates correct entries in the merge_request_diff_files table
      sets the st_commits and st_diffs columns to nil
    when the merge request diffs do not have a_mode and b_mode set
      creates correct entries in the merge_request_diff_commits table
      creates correct entries in the merge_request_diff_files table
      sets the st_commits and st_diffs columns to nil
    when the merge request diffs have binary content
      creates correct entries in the merge_request_diff_commits table
      creates correct entries in the merge_request_diff_files table
      sets the st_commits and st_diffs columns to nil
    when the merge request diff has commits, but no diffs
      creates correct entries in the merge_request_diff_commits table
      creates correct entries in the merge_request_diff_files table
      sets the st_commits and st_diffs columns to nil
    when the merge request diffs have invalid content
      creates correct entries in the merge_request_diff_commits table
      creates correct entries in the merge_request_diff_files table
      sets the st_commits and st_diffs columns to nil
    when the merge request diffs are Rugged::Patch instances
      creates correct entries in the merge_request_diff_commits table
      creates correct entries in the merge_request_diff_files table
      sets the st_commits and st_diffs columns to nil
    when the merge request diffs are Rugged::Diff::Delta instances
      creates correct entries in the merge_request_diff_commits table
      creates correct entries in the merge_request_diff_files table
      sets the st_commits and st_diffs columns to nil

SystemNoteService
  .add_commits
    behaves like a system note
      has the correct attributes (FAILED - 1)
    note body
      comparison diff link line
        adds the comparison text (FAILED - 2)
      without existing commits
        adds a message header (FAILED - 3)
        adds a message line for each commit (FAILED - 4)
      summary line for existing commits
        with one existing commit
          includes the existing commit (FAILED - 5)
        with multiple existing commits
          with oldrev
            includes a commit range (FAILED - 6)
            includes a commit count (FAILED - 7)
          without oldrev
            includes a commit range (FAILED - 8)
            includes a commit count (FAILED - 9)
          on a fork
            includes the project namespace (FAILED - 10)
  .change_assignee
    behaves like a system note
      has the correct attributes
    when assignee added
      sets the note text
    when assignee removed
      sets the note text
  .change_issue_assignees
    builds a correct phrase when an assignee is added to a non-assigned issue
    builds a correct phrase when assignee removed
    builds a correct phrase when assignees changed
    builds a correct phrase when three assignees removed and one added
    builds a correct phrase when one assignee changed from a set
    builds a correct phrase when one assignee removed from a set
    behaves like a system note
      has the correct attributes
  .change_label
    behaves like a system note
      has the correct attributes
    with added labels
      sets the note text
    with removed labels
      sets the note text
    with added and removed labels
      sets the note text
  .change_milestone
    for a project milestone
      behaves like a system note
        has the correct attributes
      when milestone added
        sets the note text
      when milestone removed
        sets the note text
    for a group milestone
      behaves like a system note
        has the correct attributes
      when milestone added
        sets the note text to use the milestone name
      when milestone removed
        sets the note text
  .change_status
    with status reopened
      behaves like a system note
        has the correct attributes
    with a source
      sets the note text
  .merge_when_pipeline_succeeds
    posts the 'merge when pipeline succeeds' system note (FAILED - 11)
    behaves like a system note
      has the correct attributes (FAILED - 12)
  .cancel_merge_when_pipeline_succeeds
    posts the 'merge when pipeline succeeds' system note (FAILED - 13)
    behaves like a system note
      has the correct attributes (FAILED - 14)
  .change_title
    when noteable responds to `title`
      sets the note text
      behaves like a system note
        has the correct attributes
  .change_description
    when noteable responds to `description`
      sets the note text
      behaves like a system note
        has the correct attributes
  .change_issue_confidentiality
    issue has been made confidential
      sets the note text
      behaves like a system note
        has the correct attributes
    issue has been made visible
      sets the note text
      behaves like a system note
        has the correct attributes
  .change_branch
    behaves like a system note
      has the correct attributes
    when target branch name changed
      sets the note text
  .change_branch_presence
    behaves like a system note
      has the correct attributes
    when source branch deleted
      sets the note text
  .new_issue_branch
    behaves like a system note
      has the correct attributes
    when a branch is created from the new branch button
      sets the note text
  .cross_reference
    behaves like a system note
      has the correct attributes
    when cross-reference disallowed
      returns nil
      does not create a system note metadata record
    when cross-reference allowed
      behaves like a system note
        has the correct attributes
      note_body
        cross-project
          from Commit
            references the mentioning commit
          from non-Commit
            references the mentioning object
        within the same project
          from Commit
            references the mentioning commit
          from non-Commit
            references the mentioning object
  .cross_reference_disallowed?
    when mentioner is not a MergeRequest
      is falsey
    when mentioner is a MergeRequest
      is truthy when noteable is in commits (FAILED - 15)
      is falsey when noteable is not in commits (FAILED - 16)
    when notable is an ExternalIssue
      is truthy
  .cross_reference_exists?
    issue from commit
      is truthy when already mentioned
      is falsey when not already mentioned
      legacy capitalized cross reference
        is truthy when already mentioned
    commit from commit
      is truthy when already mentioned
      is falsey when not already mentioned
      legacy capitalized cross reference
        is truthy when already mentioned
    commit with cross-reference from fork
      is true when a fork mentions an external issue
      legacy capitalized cross reference
        is true when a fork mentions an external issue
  .noteable_moved
    moved to
      notifies about noteable being moved to
      behaves like cross project mentionable
        contains cross reference to new noteable
        mentions referenced noteable
        mentions referenced project
      behaves like a system note
        has the correct attributes
    moved from
      notifies about noteable being moved from
      behaves like cross project mentionable
        contains cross reference to new noteable
        mentions referenced noteable
        mentions referenced project
      behaves like a system note
        has the correct attributes
    invalid direction
      raises error
  .new_commit_summary
    escapes HTML titles
  JIRA integration
    when noteable is a merge_requests
      blocks cross reference when merge_requests_events is false (FAILED - 17)
      blocks cross reference when merge_requests_events is true (FAILED - 18)
    when a new cross reference is created
      creates a new comment and remote link (FAILED - 19)
    when a link exists
      updates a link but does not create a new comment (FAILED - 20)
    when noteable is a commit
      blocks cross reference when commit_events is false
      blocks cross reference when commit_events is true
    when a new cross reference is created
      creates a new comment and remote link
    when a link exists
      updates a link but does not create a new comment
    new reference
      for commits
        creates comment
        creates remote link
      for issues
        creates comment
        creates remote link
      for snippets
        creates comment
        creates remote link
    existing reference
      does not return success message
      does not try to create comment and remote link
  .discussion_continued_in_issue
    creates a new note in the discussion (FAILED - 21)
    mentions the created issue in the system note (FAILED - 22)
    behaves like a system note
      has the correct attributes (FAILED - 23)
  .change_time_estimate
    behaves like a system note
      has the correct attributes
    with a time estimate
      sets the note text
    without a time estimate
      sets the note text
  .change_time_spent
    behaves like a system note
      has the correct attributes (FAILED - 24)
    when time was added
      sets the note text (FAILED - 25)
    when time was subtracted
      sets the note text (FAILED - 26)
    when time was removed
      sets the note text (FAILED - 27)
  .handle_merge_request_wip
    adding wip note
      sets the note text (FAILED - 28)
      behaves like a system note
        has the correct attributes (FAILED - 29)
    removing wip note
      sets the note text (FAILED - 30)
      behaves like a system note
        has the correct attributes (FAILED - 31)
  .add_merge_request_wip_from_commit
    posts the 'marked as a Work In Progress from commit' system note (FAILED - 32)
    behaves like a system note
      has the correct attributes (FAILED - 33)
  .change_task_status
    posts the 'marked the task as complete' system note
    behaves like a system note
      has the correct attributes
  .resolve_all_discussions
    sets the note text (FAILED - 34)
    behaves like a system note
      has the correct attributes (FAILED - 35)
  .diff_discussion_outdated
    behaves like a system note
      has the correct attributes (FAILED - 36)
    when the change_position is valid for the discussion
      creates a new note in the discussion (FAILED - 37)
      links to the diff in the system note (FAILED - 38)
    when the change_position is invalid for the discussion
      creates a new note in the discussion (FAILED - 39)
      does not create a link (FAILED - 40)
  .mark_duplicate_issue
    within the same project
      should eq "marked this issue as a duplicate of #2"
      behaves like a system note
        has the correct attributes
    across different projects
      should eq "marked this issue as a duplicate of namespace85/project85#1"
      behaves like a system note
        has the correct attributes
  .mark_canonical_issue_of_duplicate
    within the same project
      should eq "marked #2 as a duplicate of this issue"
      behaves like a system note
        has the correct attributes
    across different projects
      should eq "marked namespace87/project87#1 as a duplicate of this issue"
      behaves like a system note
        has the correct attributes
  .discussion_lock
    discussion unlocked
      creates the note text correctly (FAILED - 41)
      behaves like a system note
        has the correct attributes
    discussion locked
      creates the note text correctly (FAILED - 42)
      behaves like a system note
        has the correct attributes

Failures:

  1) SystemNoteService.add_commits behaves like a system note has the correct attributes
     Failure/Error: self.commits_count = commits.size

     NoMethodError:
       undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80d4e89868>
       Did you mean?  commits_count
     Shared Example Group: "a system note" called from ./spec/services/system_note_service_spec.rb:38
     # ./app/models/merge_request_diff.rb:279:in `save_commits'
     # ./app/models/merge_request_diff.rb:53:in `save_git_content'
     # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
     # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
     # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
     # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
     # ./spec/services/system_note_service_spec.rb:33:in `block (3 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:31:in `block (3 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:18:in `block (3 levels) in <top (required)>'

  2) SystemNoteService.add_commits note body comparison diff link line adds the comparison text
     Failure/Error: self.commits_count = commits.size

     NoMethodError:
       undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80d4305460>
       Did you mean?  commits_count
     # ./app/models/merge_request_diff.rb:279:in `save_commits'
     # ./app/models/merge_request_diff.rb:53:in `save_git_content'
     # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
     # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
     # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
     # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
     # ./spec/services/system_note_service_spec.rb:33:in `block (3 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:31:in `block (3 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:44:in `block (4 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:48:in `block (5 levels) in <top (required)>'

  3) SystemNoteService.add_commits note body without existing commits adds a message header
     Failure/Error: self.commits_count = commits.size

     NoMethodError:
       undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80d120b008>
       Did you mean?  commits_count
     # ./app/models/merge_request_diff.rb:279:in `save_commits'
     # ./app/models/merge_request_diff.rb:53:in `save_git_content'
     # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
     # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
     # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
     # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
     # ./spec/services/system_note_service_spec.rb:33:in `block (3 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:31:in `block (3 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:44:in `block (4 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:54:in `block (5 levels) in <top (required)>'

  4) SystemNoteService.add_commits note body without existing commits adds a message line for each commit
     Failure/Error: self.commits_count = commits.size

     NoMethodError:
       undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80c87ad208>
       Did you mean?  commits_count
     # ./app/models/merge_request_diff.rb:279:in `save_commits'
     # ./app/models/merge_request_diff.rb:53:in `save_git_content'
     # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
     # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
     # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
     # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
     # ./spec/services/system_note_service_spec.rb:33:in `block (3 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:34:in `block (3 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:58:in `block (5 levels) in <top (required)>'

  5) SystemNoteService.add_commits note body summary line for existing commits with one existing commit includes the existing commit
     Failure/Error: self.commits_count = commits.size

     NoMethodError:
       undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80caeb90b8>
       Did you mean?  commits_count
     # ./app/models/merge_request_diff.rb:279:in `save_commits'
     # ./app/models/merge_request_diff.rb:53:in `save_git_content'
     # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
     # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
     # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
     # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
     # ./spec/services/system_note_service_spec.rb:33:in `block (3 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:31:in `block (3 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:44:in `block (4 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:66:in `block (5 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:72:in `block (6 levels) in <top (required)>'

  6) SystemNoteService.add_commits note body summary line for existing commits with multiple existing commits with oldrev includes a commit range
     Failure/Error: self.commits_count = commits.size

     NoMethodError:
       undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80caaacb78>
       Did you mean?  commits_count
     # ./app/models/merge_request_diff.rb:279:in `save_commits'
     # ./app/models/merge_request_diff.rb:53:in `save_git_content'
     # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
     # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
     # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
     # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
     # ./spec/services/system_note_service_spec.rb:33:in `block (3 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:31:in `block (3 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:44:in `block (4 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:66:in `block (5 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:83:in `block (7 levels) in <top (required)>'

  7) SystemNoteService.add_commits note body summary line for existing commits with multiple existing commits with oldrev includes a commit count
     Failure/Error: self.commits_count = commits.size

     NoMethodError:
       undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80c9ce96d0>
       Did you mean?  commits_count
     # ./app/models/merge_request_diff.rb:279:in `save_commits'
     # ./app/models/merge_request_diff.rb:53:in `save_git_content'
     # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
     # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
     # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
     # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
     # ./spec/services/system_note_service_spec.rb:33:in `block (3 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:31:in `block (3 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:44:in `block (4 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:66:in `block (5 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:87:in `block (7 levels) in <top (required)>'

  8) SystemNoteService.add_commits note body summary line for existing commits with multiple existing commits without oldrev includes a commit range
     Failure/Error: self.commits_count = commits.size

     NoMethodError:
       undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80cce71608>
       Did you mean?  commits_count
     # ./app/models/merge_request_diff.rb:279:in `save_commits'
     # ./app/models/merge_request_diff.rb:53:in `save_git_content'
     # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
     # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
     # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
     # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
     # ./spec/services/system_note_service_spec.rb:33:in `block (3 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:31:in `block (3 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:44:in `block (4 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:66:in `block (5 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:93:in `block (7 levels) in <top (required)>'

  9) SystemNoteService.add_commits note body summary line for existing commits with multiple existing commits without oldrev includes a commit count
     Failure/Error: self.commits_count = commits.size

     NoMethodError:
       undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80cbe5a148>
       Did you mean?  commits_count
     # ./app/models/merge_request_diff.rb:279:in `save_commits'
     # ./app/models/merge_request_diff.rb:53:in `save_git_content'
     # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
     # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
     # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
     # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
     # ./spec/services/system_note_service_spec.rb:33:in `block (3 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:31:in `block (3 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:44:in `block (4 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:66:in `block (5 levels) in <top (required)>'
     # ./spec/services/system_note_service_spec.rb:97:in `block (7 levels) in <top (required)>'

  10) SystemNoteService.add_commits note body summary line for existing commits with multiple existing commits on a fork includes the project namespace
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80c0522108>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:33:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:103:in `block (7 levels) in <top (required)>'

  11) SystemNoteService.merge_when_pipeline_succeeds posts the 'merge when pipeline succeeds' system note
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80cbc62660>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:301:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:304:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:311:in `block (3 levels) in <top (required)>'

  12) SystemNoteService.merge_when_pipeline_succeeds behaves like a system note has the correct attributes
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80c86ee1f0>
        Did you mean?  commits_count
      Shared Example Group: "a system note" called from ./spec/services/system_note_service_spec.rb:306
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:301:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:304:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:18:in `block (3 levels) in <top (required)>'

  13) SystemNoteService.cancel_merge_when_pipeline_succeeds posts the 'merge when pipeline succeeds' system note
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80cab07820>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:317:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:320:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:327:in `block (3 levels) in <top (required)>'

  14) SystemNoteService.cancel_merge_when_pipeline_succeeds behaves like a system note has the correct attributes
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80cb06a880>
        Did you mean?  commits_count
      Shared Example Group: "a system note" called from ./spec/services/system_note_service_spec.rb:322
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:317:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:320:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:18:in `block (3 levels) in <top (required)>'

  15) SystemNoteService.cross_reference_disallowed? when mentioner is a MergeRequest is truthy when noteable is in commits
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80c918c008>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:516:in `block (4 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:520:in `block (4 levels) in <top (required)>'

  16) SystemNoteService.cross_reference_disallowed? when mentioner is a MergeRequest is falsey when noteable is not in commits
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80c06f9418>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:516:in `block (4 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:526:in `block (4 levels) in <top (required)>'

  17) SystemNoteService JIRA integration when noteable is a merge_requests blocks cross reference when merge_requests_events is false
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80d8eac7b0>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:708:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:721:in `cross_reference'
      # ./spec/services/system_note_service_spec.rb:748:in `block (5 levels) in <top (required)>'

  18) SystemNoteService JIRA integration when noteable is a merge_requests blocks cross reference when merge_requests_events is true
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80d0c7ecc0>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:708:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:721:in `cross_reference'
      # ./spec/services/system_note_service_spec.rb:754:in `block (5 levels) in <top (required)>'

  19) SystemNoteService JIRA integration when a new cross reference is created creates a new comment and remote link
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80cb2033b8>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:708:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:721:in `cross_reference'
      # ./spec/services/system_note_service_spec.rb:760:in `block (5 levels) in <top (required)>'

  20) SystemNoteService JIRA integration when a link exists updates a link but does not create a new comment
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80cafefb08>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:708:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:721:in `cross_reference'
      # ./spec/services/system_note_service_spec.rb:771:in `block (5 levels) in <top (required)>'

  21) SystemNoteService.discussion_continued_in_issue creates a new note in the discussion
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80d9b584a0>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/factories/notes.rb:100:in `block (4 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:881:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:882:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:886:in `reloaded_merge_request'
      # ./spec/services/system_note_service_spec.rb:898:in `block (4 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:898:in `block (3 levels) in <top (required)>'

  22) SystemNoteService.discussion_continued_in_issue mentions the created issue in the system note
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80db083258>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/factories/notes.rb:100:in `block (4 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:881:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:889:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:902:in `block (3 levels) in <top (required)>'

  23) SystemNoteService.discussion_continued_in_issue behaves like a system note has the correct attributes
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80d9491090>
        Did you mean?  commits_count
      Shared Example Group: "a system note" called from ./spec/services/system_note_service_spec.rb:891
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/factories/notes.rb:100:in `block (4 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:881:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:889:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:18:in `block (3 levels) in <top (required)>'

  24) SystemNoteService.change_time_spent behaves like a system note has the correct attributes
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80d113dae0>
        Did you mean?  commits_count
      Shared Example Group: "a system note" called from ./spec/services/system_note_service_spec.rb:941
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:931:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:938:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:18:in `block (3 levels) in <top (required)>'

  25) SystemNoteService.change_time_spent when time was added sets the note text
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80de66e9d0>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:931:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:970:in `spend_time!'
      # ./spec/services/system_note_service_spec.rb:947:in `block (4 levels) in <top (required)>'

  26) SystemNoteService.change_time_spent when time was subtracted sets the note text
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80c9c6dd00>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:931:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:970:in `spend_time!'
      # ./spec/services/system_note_service_spec.rb:955:in `block (4 levels) in <top (required)>'

  27) SystemNoteService.change_time_spent when time was removed sets the note text
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80c82071c8>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:931:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:970:in `spend_time!'
      # ./spec/services/system_note_service_spec.rb:963:in `block (4 levels) in <top (required)>'

  28) SystemNoteService.handle_merge_request_wip adding wip note sets the note text
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80c9413650>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:977:in `block (4 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:979:in `block (4 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:986:in `block (4 levels) in <top (required)>'

  29) SystemNoteService.handle_merge_request_wip adding wip note behaves like a system note has the correct attributes
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80c061c220>
        Did you mean?  commits_count
      Shared Example Group: "a system note" called from ./spec/services/system_note_service_spec.rb:981
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:977:in `block (4 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:979:in `block (4 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:18:in `block (3 levels) in <top (required)>'

  30) SystemNoteService.handle_merge_request_wip removing wip note sets the note text
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80cac65ed8>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:991:in `block (4 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:993:in `block (4 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1000:in `block (4 levels) in <top (required)>'

  31) SystemNoteService.handle_merge_request_wip removing wip note behaves like a system note has the correct attributes
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80cbead848>
        Did you mean?  commits_count
      Shared Example Group: "a system note" called from ./spec/services/system_note_service_spec.rb:995
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:991:in `block (4 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:993:in `block (4 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:18:in `block (3 levels) in <top (required)>'

  32) SystemNoteService.add_merge_request_wip_from_commit posts the 'marked as a Work In Progress from commit' system note
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80c86cfca0>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:1007:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1012:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1024:in `block (3 levels) in <top (required)>'

  33) SystemNoteService.add_merge_request_wip_from_commit behaves like a system note has the correct attributes
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80cafcfd30>
        Did you mean?  commits_count
      Shared Example Group: "a system note" called from ./spec/services/system_note_service_spec.rb:1019
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:1007:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1012:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:18:in `block (3 levels) in <top (required)>'

  34) SystemNoteService.resolve_all_discussions sets the note text
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80cc857920>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:1046:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1048:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1055:in `block (3 levels) in <top (required)>'

  35) SystemNoteService.resolve_all_discussions behaves like a system note has the correct attributes
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80de743180>
        Did you mean?  commits_count
      Shared Example Group: "a system note" called from ./spec/services/system_note_service_spec.rb:1050
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:1046:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1048:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:18:in `block (3 levels) in <top (required)>'

  36) SystemNoteService.diff_discussion_outdated behaves like a system note has the correct attributes
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80df560e20>
        Did you mean?  commits_count
      Shared Example Group: "a system note" called from ./spec/services/system_note_service_spec.rb:1070
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/factories/notes.rb:100:in `block (4 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1060:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1068:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:18:in `block (3 levels) in <top (required)>'

  37) SystemNoteService.diff_discussion_outdated when the change_position is valid for the discussion creates a new note in the discussion
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80c9d50380>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/factories/notes.rb:100:in `block (4 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1060:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1061:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1065:in `reloaded_merge_request'
      # ./spec/services/system_note_service_spec.rb:1078:in `block (5 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1078:in `block (4 levels) in <top (required)>'

  38) SystemNoteService.diff_discussion_outdated when the change_position is valid for the discussion links to the diff in the system note
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80de7aa150>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/factories/notes.rb:100:in `block (4 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1060:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1068:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1082:in `block (4 levels) in <top (required)>'

  39) SystemNoteService.diff_discussion_outdated when the change_position is invalid for the discussion creates a new note in the discussion
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80ce0e2738>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/factories/notes.rb:100:in `block (4 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1060:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1061:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1065:in `reloaded_merge_request'
      # ./spec/services/system_note_service_spec.rb:1095:in `block (5 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1095:in `block (4 levels) in <top (required)>'

  40) SystemNoteService.diff_discussion_outdated when the change_position is invalid for the discussion does not create a link
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80cb984fb0>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/factories/notes.rb:100:in `block (4 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1060:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1068:in `block (3 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1099:in `block (4 levels) in <top (required)>'

  41) SystemNoteService.discussion_lock discussion unlocked creates the note text correctly
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80cb123b28>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:1164:in `block (5 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1163:in `each'
      # ./spec/services/system_note_service_spec.rb:1163:in `block (4 levels) in <top (required)>'

  42) SystemNoteService.discussion_lock discussion locked creates the note text correctly
      Failure/Error: self.commits_count = commits.size

      NoMethodError:
        undefined method `commits_count=' for #<MergeRequestDiff:0x00007f80df22b688>
        Did you mean?  commits_count
      # ./app/models/merge_request_diff.rb:279:in `save_commits'
      # ./app/models/merge_request_diff.rb:53:in `save_git_content'
      # ./app/models/merge_request.rb:516:in `block in create_merge_request_diff'
      # ./lib/gitlab/gitaly_client.rb:270:in `allow_n_plus_1_calls'
      # ./app/models/merge_request.rb:515:in `create_merge_request_diff'
      # ./app/models/merge_request.rb:508:in `ensure_merge_request_diff'
      # ./spec/services/system_note_service_spec.rb:1183:in `block (5 levels) in <top (required)>'
      # ./spec/services/system_note_service_spec.rb:1182:in `each'
      # ./spec/services/system_note_service_spec.rb:1182:in `block (4 levels) in <top (required)>'

Finished in 4 minutes 30.1 seconds (files took 25.67 seconds to load)
174 examples, 42 failures

Seen in https://gitlab.com/andrew-gitlab/gitlab-ce/-/jobs/48115019.