diff options
author | Douwe Maan <douwe@gitlab.com> | 2015-04-21 16:19:23 +0300 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2015-04-24 13:30:36 +0300 |
commit | 0ff778c0f4a3b599d0f36a1deee5607d03e52b9a (patch) | |
tree | ad89737763ed27faedec8e28ac338a4b1fb94b34 /app | |
parent | 27af24c1c951385bccd298c98044d57ff22ccd1c (diff) |
Link cross-project cross-reference notes to correct project.
Diffstat (limited to 'app')
-rw-r--r-- | app/models/concerns/mentionable.rb | 2 | ||||
-rw-r--r-- | app/models/note.rb | 46 | ||||
-rw-r--r-- | app/services/git_push_service.rb | 2 | ||||
-rw-r--r-- | app/services/notes/create_service.rb | 2 | ||||
-rw-r--r-- | app/services/notes/update_service.rb | 3 |
5 files changed, 15 insertions, 40 deletions
diff --git a/app/models/concerns/mentionable.rb b/app/models/concerns/mentionable.rb index aad5e514793..3ef3e8b67d8 100644 --- a/app/models/concerns/mentionable.rb +++ b/app/models/concerns/mentionable.rb @@ -64,7 +64,7 @@ module Mentionable def create_cross_references!(p = project, a = author, without = []) refs = references(p) - without refs.each do |ref| - Note.create_cross_reference_note(ref, local_reference, a, p) + Note.create_cross_reference_note(ref, local_reference, a) end end diff --git a/app/models/note.rb b/app/models/note.rb index 99e86ac0250..26739426a88 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -77,11 +77,11 @@ class Note < ActiveRecord::Base # +mentioner+'s description or an associated Note. # Create a system Note associated with +noteable+ with a GFM back-reference # to +mentioner+. - def create_cross_reference_note(noteable, mentioner, author, project) - gfm_reference = mentioner_gfm_ref(noteable, mentioner, project) + def create_cross_reference_note(noteable, mentioner, author) + gfm_reference = mentioner_gfm_ref(noteable, mentioner) note_options = { - project: project, + project: noteable.project, author: author, note: cross_reference_note_content(gfm_reference), system: true @@ -236,7 +236,7 @@ class Note < ActiveRecord::Base # Determine whether or not a cross-reference note already exists. def cross_reference_exists?(noteable, mentioner) - gfm_reference = mentioner_gfm_ref(noteable, mentioner) + gfm_reference = mentioner_gfm_ref(noteable, mentioner, nil) notes = if noteable.is_a?(Commit) where(commit_id: noteable.id, noteable_type: 'Commit') else @@ -269,43 +269,19 @@ class Note < ActiveRecord::Base # Prepend the mentioner's namespaced project path to the GFM reference for # cross-project references. For same-project references, return the # unmodified GFM reference. - def mentioner_gfm_ref(noteable, mentioner, project = nil) - if mentioner.is_a?(Commit) - if project.nil? - return mentioner.gfm_reference.sub('commit ', 'commit %') - else - mentioning_project = project - end - else - mentioning_project = mentioner.project - end - - noteable_project_id = noteable_project_id(noteable, mentioning_project) - - full_gfm_reference(mentioning_project, noteable_project_id, mentioner) - end - - # Return the ID of the project that +noteable+ belongs to, or nil if - # +noteable+ is a commit and is not part of the project that owns - # +mentioner+. - def noteable_project_id(noteable, mentioning_project) - if noteable.is_a?(Commit) - if mentioning_project.commit(noteable.id) - # The noteable commit belongs to the mentioner's project - mentioning_project.id - else - nil - end - else - noteable.project.id + def mentioner_gfm_ref(noteable, mentioner, mentioner_project = mentioner.project) + if mentioner.is_a?(Commit) && project.nil? + return mentioner.gfm_reference.sub('commit ', 'commit %') end + + full_gfm_reference(mentioner_project, noteable.project, mentioner) end # Return the +mentioner+ GFM reference. If the mentioner and noteable # projects are not the same, add the mentioning project's path to the # returned value. - def full_gfm_reference(mentioning_project, noteable_project_id, mentioner) - if mentioning_project.id == noteable_project_id + def full_gfm_reference(mentioning_project, noteable_project, mentioner) + if mentioning_project.id == noteable_project mentioner.gfm_reference else if mentioner.is_a?(Commit) diff --git a/app/services/git_push_service.rb b/app/services/git_push_service.rb index 3affd6d6463..1b889e0da8b 100644 --- a/app/services/git_push_service.rb +++ b/app/services/git_push_service.rb @@ -94,7 +94,7 @@ class GitPushService author ||= commit_user(commit) refs.each do |r| - Note.create_cross_reference_note(r, commit, author, project) + Note.create_cross_reference_note(r, commit, author) end end end diff --git a/app/services/notes/create_service.rb b/app/services/notes/create_service.rb index e969061f229..d19a6c2eca3 100644 --- a/app/services/notes/create_service.rb +++ b/app/services/notes/create_service.rb @@ -15,7 +15,7 @@ module Notes # Create a cross-reference note if this Note contains GFM that names an # issue, merge request, or commit. note.references.each do |mentioned| - Note.create_cross_reference_note(mentioned, note.noteable, note.author, note.project) + Note.create_cross_reference_note(mentioned, note.noteable, note.author) end execute_hooks(note) diff --git a/app/services/notes/update_service.rb b/app/services/notes/update_service.rb index 63431b82471..45a0db761ec 100644 --- a/app/services/notes/update_service.rb +++ b/app/services/notes/update_service.rb @@ -13,8 +13,7 @@ module Notes # Create a cross-reference note if this Note contains GFM that # names an issue, merge request, or commit. note.references.each do |mentioned| - Note.create_cross_reference_note(mentioned, note.noteable, - note.author, note.project) + Note.create_cross_reference_note(mentioned, note.noteable, note.author) end end end |