Commit 9ada6788 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Split commit_id and noteable_id for Note

parent aa8d4d9f
...@@ -204,7 +204,7 @@ class MergeRequest < ActiveRecord::Base ...@@ -204,7 +204,7 @@ class MergeRequest < ActiveRecord::Base
def mr_and_commit_notes def mr_and_commit_notes
commit_ids = commits.map(&:id) commit_ids = commits.map(&:id)
Note.where("(noteable_type = 'MergeRequest' AND noteable_id = :mr_id) OR (noteable_type = 'Commit' AND noteable_id IN (:commit_ids))", mr_id: id, commit_ids: commit_ids) Note.where("(noteable_type = 'MergeRequest' AND noteable_id = :mr_id) OR (noteable_type = 'Commit' AND commit_id IN (:commit_ids))", mr_id: id, commit_ids: commit_ids)
end end
# Returns the raw diff for this merge request # Returns the raw diff for this merge request
......
...@@ -20,7 +20,7 @@ require 'file_size_validator' ...@@ -20,7 +20,7 @@ require 'file_size_validator'
class Note < ActiveRecord::Base class Note < ActiveRecord::Base
attr_accessible :note, :noteable, :noteable_id, :noteable_type, :project_id, attr_accessible :note, :noteable, :noteable_id, :noteable_type, :project_id,
:attachment, :line_code :attachment, :line_code, :commit_id
attr_accessor :notify attr_accessor :notify
attr_accessor :notify_author attr_accessor :notify_author
...@@ -35,10 +35,14 @@ class Note < ActiveRecord::Base ...@@ -35,10 +35,14 @@ class Note < ActiveRecord::Base
validates :note, :project, presence: true validates :note, :project, presence: true
validates :attachment, file_size: { maximum: 10.megabytes.to_i } validates :attachment, file_size: { maximum: 10.megabytes.to_i }
validates :noteable_id, presence: true, if: ->(n) { n.noteable_type.present? && n.noteable_type != 'Commit' }
validates :commit_id, presence: true, if: ->(n) { n.noteable_type == 'Commit' }
mount_uploader :attachment, AttachmentUploader mount_uploader :attachment, AttachmentUploader
# Scopes # Scopes
scope :common, ->{ where(noteable_id: nil) } scope :for_commits, ->{ where(noteable_type: "Commit") }
scope :common, ->{ where(noteable_id: nil, commit_id: nil) }
scope :today, ->{ where("created_at >= :date", date: Date.today) } scope :today, ->{ where("created_at >= :date", date: Date.today) }
scope :last_week, ->{ where("created_at >= :date", date: (Date.today - 7.days)) } scope :last_week, ->{ where("created_at >= :date", date: (Date.today - 7.days)) }
scope :since, ->(day) { where("created_at >= :date", date: (day)) } scope :since, ->(day) { where("created_at >= :date", date: (day)) }
...@@ -66,7 +70,7 @@ class Note < ActiveRecord::Base ...@@ -66,7 +70,7 @@ class Note < ActiveRecord::Base
# override to return commits, which are not active record # override to return commits, which are not active record
def noteable def noteable
if for_commit? if for_commit?
project.commit(noteable_id) project.commit(commit_id)
else else
super super
end end
......
...@@ -203,15 +203,15 @@ class Project < ActiveRecord::Base ...@@ -203,15 +203,15 @@ class Project < ActiveRecord::Base
end end
def build_commit_note(commit) def build_commit_note(commit)
notes.new(noteable_id: commit.id, noteable_type: "Commit") notes.new(commit_id: commit.id, noteable_type: "Commit")
end end
def commit_notes(commit) def commit_notes(commit)
notes.where(noteable_id: commit.id, noteable_type: "Commit", line_code: nil) notes.where(commit_id: commit.id, noteable_type: "Commit", line_code: nil)
end end
def commit_line_notes(commit) def commit_line_notes(commit)
notes.where(noteable_id: commit.id, noteable_type: "Commit").where("line_code IS NOT NULL") notes.where(commit_id: commit.id, noteable_type: "Commit").where("line_code IS NOT NULL")
end end
def public? def public?
......
module NoteEvent module NoteEvent
def note_commit_id def note_commit_id
target.noteable_id target.commit_id
end end
def note_short_commit_id def note_short_commit_id
...@@ -16,7 +16,11 @@ module NoteEvent ...@@ -16,7 +16,11 @@ module NoteEvent
end end
def note_target_id def note_target_id
target.noteable_id if note_commit?
target.commit_id
else
target.noteable_id.to_s
end
end end
def wall_note? def wall_note?
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
%div= msg %div= msg
= f.hidden_field :noteable_id = f.hidden_field :noteable_id
= f.hidden_field :commit_id
= f.hidden_field :noteable_type = f.hidden_field :noteable_type
= f.text_area :note, size: 255, class: 'note-text js-gfm-input' = f.text_area :note, size: 255, class: 'note-text js-gfm-input'
#preview-note.preview_note.hide #preview-note.preview_note.hide
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
%div= msg %div= msg
= f.hidden_field :noteable_id = f.hidden_field :noteable_id
= f.hidden_field :commit_id
= f.hidden_field :noteable_type = f.hidden_field :noteable_type
= f.hidden_field :line_code = f.hidden_field :line_code
= f.text_area :note, size: 255, class: 'line-note-text js-gfm-input' = f.text_area :note, size: 255, class: 'line-note-text js-gfm-input'
......
...@@ -9,6 +9,7 @@ production: ...@@ -9,6 +9,7 @@ production:
username: postgres username: postgres
password: password:
# host: localhost # host: localhost
# port: 5432
# socket: /tmp/postgresql.sock # socket: /tmp/postgresql.sock
# #
......
class MoveNoteableCommitToOwnField < ActiveRecord::Migration
def up
add_column :notes, :commit_id, :string, null: true
add_column :notes, :new_noteable_id, :integer, null: true
Note.where(noteable_type: 'Commit').update_all('commit_id = noteable_id')
Note.where("noteable_type != 'Commit'").update_all('new_noteable_id = CAST (noteable_id AS INTEGER)')
remove_column :notes, :noteable_id
rename_column :notes, :new_noteable_id, :noteable_id
end
def down
remove_column :notes, :commit_id
remove_column :notes, :new_noteable_id
end
end
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
# #
# It's strongly recommended to check this file into your version control system. # It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20121205201726) do ActiveRecord::Schema.define(:version => 20121218164840) do
create_table "events", :force => true do |t| create_table "events", :force => true do |t|
t.string "target_type" t.string "target_type"
...@@ -78,8 +78,8 @@ ActiveRecord::Schema.define(:version => 20121205201726) do ...@@ -78,8 +78,8 @@ ActiveRecord::Schema.define(:version => 20121205201726) do
t.boolean "closed", :default => false, :null => false t.boolean "closed", :default => false, :null => false
t.datetime "created_at", :null => false t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false t.datetime "updated_at", :null => false
t.text "st_commits", :limit => 2147483647 t.text "st_commits"
t.text "st_diffs", :limit => 2147483647 t.text "st_diffs"
t.boolean "merged", :default => false, :null => false t.boolean "merged", :default => false, :null => false
t.integer "state", :default => 1, :null => false t.integer "state", :default => 1, :null => false
t.integer "milestone_id" t.integer "milestone_id"
...@@ -124,7 +124,6 @@ ActiveRecord::Schema.define(:version => 20121205201726) do ...@@ -124,7 +124,6 @@ ActiveRecord::Schema.define(:version => 20121205201726) do
create_table "notes", :force => true do |t| create_table "notes", :force => true do |t|
t.text "note" t.text "note"
t.string "noteable_id"
t.string "noteable_type" t.string "noteable_type"
t.integer "author_id" t.integer "author_id"
t.datetime "created_at", :null => false t.datetime "created_at", :null => false
...@@ -132,10 +131,11 @@ ActiveRecord::Schema.define(:version => 20121205201726) do ...@@ -132,10 +131,11 @@ ActiveRecord::Schema.define(:version => 20121205201726) do
t.integer "project_id" t.integer "project_id"
t.string "attachment" t.string "attachment"
t.string "line_code" t.string "line_code"
t.string "commit_id"
t.integer "noteable_id"
end end
add_index "notes", ["created_at"], :name => "index_notes_on_created_at" add_index "notes", ["created_at"], :name => "index_notes_on_created_at"
add_index "notes", ["noteable_id"], :name => "index_notes_on_noteable_id"
add_index "notes", ["noteable_type"], :name => "index_notes_on_noteable_type" add_index "notes", ["noteable_type"], :name => "index_notes_on_noteable_type"
add_index "notes", ["project_id"], :name => "index_notes_on_project_id" add_index "notes", ["project_id"], :name => "index_notes_on_project_id"
......
...@@ -42,7 +42,7 @@ describe MergeRequest do ...@@ -42,7 +42,7 @@ describe MergeRequest do
before do before do
merge_request.stub(:commits) { [merge_request.project.commit] } merge_request.stub(:commits) { [merge_request.project.commit] }
create(:note, noteable: merge_request.commits.first) create(:note, commit_id: merge_request.commits.first.id, noteable_type: 'Commit')
create(:note, noteable: merge_request) create(:note, noteable: merge_request)
end end
......
...@@ -81,18 +81,18 @@ describe Note do ...@@ -81,18 +81,18 @@ describe Note do
describe "Commit notes" do describe "Commit notes" do
before do before do
@note = create(:note, @note = create(:note,
noteable_id: commit.id, commit_id: commit.id,
noteable_type: "Commit") noteable_type: "Commit")
end end
it "should be accessible through #noteable" do it "should be accessible through #noteable" do
@note.noteable_id.should == commit.id @note.commit_id.should == commit.id
@note.noteable.should be_a(Commit) @note.noteable.should be_a(Commit)
@note.noteable.should == commit @note.noteable.should == commit
end end
it "should save a valid note" do it "should save a valid note" do
@note.noteable_id.should == commit.id @note.commit_id.should == commit.id
@note.noteable == commit @note.noteable == commit
end end
...@@ -104,13 +104,13 @@ describe Note do ...@@ -104,13 +104,13 @@ describe Note do
describe "Pre-line commit notes" do describe "Pre-line commit notes" do
before do before do
@note = create(:note, @note = create(:note,
noteable_id: commit.id, commit_id: commit.id,
noteable_type: "Commit", noteable_type: "Commit",
line_code: "0_16_1") line_code: "0_16_1")
end end
it "should save a valid note" do it "should save a valid note" do
@note.noteable_id.should == commit.id @note.commit_id.should == commit.id
@note.noteable.id.should == commit.id @note.noteable.id.should == commit.id
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment