Commit 9ada67881970b05d4be49cbe329b4bf50ffe4f77
1 parent
aa8d4d9f
Exists in
master
and in
4 other branches
Split commit_id and noteable_id for Note
Showing
11 changed files
with
54 additions
and
28 deletions
Show diff stats
app/models/merge_request.rb
... | ... | @@ -204,7 +204,7 @@ class MergeRequest < ActiveRecord::Base |
204 | 204 | |
205 | 205 | def mr_and_commit_notes |
206 | 206 | commit_ids = commits.map(&:id) |
207 | - 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) | |
207 | + 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) | |
208 | 208 | end |
209 | 209 | |
210 | 210 | # Returns the raw diff for this merge request | ... | ... |
app/models/note.rb
... | ... | @@ -20,7 +20,7 @@ require 'file_size_validator' |
20 | 20 | class Note < ActiveRecord::Base |
21 | 21 | |
22 | 22 | attr_accessible :note, :noteable, :noteable_id, :noteable_type, :project_id, |
23 | - :attachment, :line_code | |
23 | + :attachment, :line_code, :commit_id | |
24 | 24 | |
25 | 25 | attr_accessor :notify |
26 | 26 | attr_accessor :notify_author |
... | ... | @@ -35,10 +35,14 @@ class Note < ActiveRecord::Base |
35 | 35 | validates :note, :project, presence: true |
36 | 36 | validates :attachment, file_size: { maximum: 10.megabytes.to_i } |
37 | 37 | |
38 | + validates :noteable_id, presence: true, if: ->(n) { n.noteable_type.present? && n.noteable_type != 'Commit' } | |
39 | + validates :commit_id, presence: true, if: ->(n) { n.noteable_type == 'Commit' } | |
40 | + | |
38 | 41 | mount_uploader :attachment, AttachmentUploader |
39 | 42 | |
40 | 43 | # Scopes |
41 | - scope :common, ->{ where(noteable_id: nil) } | |
44 | + scope :for_commits, ->{ where(noteable_type: "Commit") } | |
45 | + scope :common, ->{ where(noteable_id: nil, commit_id: nil) } | |
42 | 46 | scope :today, ->{ where("created_at >= :date", date: Date.today) } |
43 | 47 | scope :last_week, ->{ where("created_at >= :date", date: (Date.today - 7.days)) } |
44 | 48 | scope :since, ->(day) { where("created_at >= :date", date: (day)) } |
... | ... | @@ -66,7 +70,7 @@ class Note < ActiveRecord::Base |
66 | 70 | # override to return commits, which are not active record |
67 | 71 | def noteable |
68 | 72 | if for_commit? |
69 | - project.commit(noteable_id) | |
73 | + project.commit(commit_id) | |
70 | 74 | else |
71 | 75 | super |
72 | 76 | end | ... | ... |
app/models/project.rb
... | ... | @@ -203,15 +203,15 @@ class Project < ActiveRecord::Base |
203 | 203 | end |
204 | 204 | |
205 | 205 | def build_commit_note(commit) |
206 | - notes.new(noteable_id: commit.id, noteable_type: "Commit") | |
206 | + notes.new(commit_id: commit.id, noteable_type: "Commit") | |
207 | 207 | end |
208 | 208 | |
209 | 209 | def commit_notes(commit) |
210 | - notes.where(noteable_id: commit.id, noteable_type: "Commit", line_code: nil) | |
210 | + notes.where(commit_id: commit.id, noteable_type: "Commit", line_code: nil) | |
211 | 211 | end |
212 | 212 | |
213 | 213 | def commit_line_notes(commit) |
214 | - notes.where(noteable_id: commit.id, noteable_type: "Commit").where("line_code IS NOT NULL") | |
214 | + notes.where(commit_id: commit.id, noteable_type: "Commit").where("line_code IS NOT NULL") | |
215 | 215 | end |
216 | 216 | |
217 | 217 | def public? | ... | ... |
app/roles/note_event.rb
1 | 1 | module NoteEvent |
2 | 2 | def note_commit_id |
3 | - target.noteable_id | |
3 | + target.commit_id | |
4 | 4 | end |
5 | 5 | |
6 | 6 | def note_short_commit_id |
... | ... | @@ -16,7 +16,11 @@ module NoteEvent |
16 | 16 | end |
17 | 17 | |
18 | 18 | def note_target_id |
19 | - target.noteable_id | |
19 | + if note_commit? | |
20 | + target.commit_id | |
21 | + else | |
22 | + target.noteable_id.to_s | |
23 | + end | |
20 | 24 | end |
21 | 25 | |
22 | 26 | def wall_note? | ... | ... |
app/views/notes/_common_form.html.haml
app/views/notes/_per_line_form.html.haml
config/database.yml.postgresql
db/migrate/20121218164840_move_noteable_commit_to_own_field.rb
0 → 100644
... | ... | @@ -0,0 +1,15 @@ |
1 | +class MoveNoteableCommitToOwnField < ActiveRecord::Migration | |
2 | + def up | |
3 | + add_column :notes, :commit_id, :string, null: true | |
4 | + add_column :notes, :new_noteable_id, :integer, null: true | |
5 | + Note.where(noteable_type: 'Commit').update_all('commit_id = noteable_id') | |
6 | + Note.where("noteable_type != 'Commit'").update_all('new_noteable_id = CAST (noteable_id AS INTEGER)') | |
7 | + remove_column :notes, :noteable_id | |
8 | + rename_column :notes, :new_noteable_id, :noteable_id | |
9 | + end | |
10 | + | |
11 | + def down | |
12 | + remove_column :notes, :commit_id | |
13 | + remove_column :notes, :new_noteable_id | |
14 | + end | |
15 | +end | ... | ... |
db/schema.rb
... | ... | @@ -11,7 +11,7 @@ |
11 | 11 | # |
12 | 12 | # It's strongly recommended to check this file into your version control system. |
13 | 13 | |
14 | -ActiveRecord::Schema.define(:version => 20121205201726) do | |
14 | +ActiveRecord::Schema.define(:version => 20121218164840) do | |
15 | 15 | |
16 | 16 | create_table "events", :force => true do |t| |
17 | 17 | t.string "target_type" |
... | ... | @@ -69,19 +69,19 @@ ActiveRecord::Schema.define(:version => 20121205201726) do |
69 | 69 | add_index "keys", ["user_id"], :name => "index_keys_on_user_id" |
70 | 70 | |
71 | 71 | create_table "merge_requests", :force => true do |t| |
72 | - t.string "target_branch", :null => false | |
73 | - t.string "source_branch", :null => false | |
74 | - t.integer "project_id", :null => false | |
72 | + t.string "target_branch", :null => false | |
73 | + t.string "source_branch", :null => false | |
74 | + t.integer "project_id", :null => false | |
75 | 75 | t.integer "author_id" |
76 | 76 | t.integer "assignee_id" |
77 | 77 | t.string "title" |
78 | - t.boolean "closed", :default => false, :null => false | |
79 | - t.datetime "created_at", :null => false | |
80 | - t.datetime "updated_at", :null => false | |
81 | - t.text "st_commits", :limit => 2147483647 | |
82 | - t.text "st_diffs", :limit => 2147483647 | |
83 | - t.boolean "merged", :default => false, :null => false | |
84 | - t.integer "state", :default => 1, :null => false | |
78 | + t.boolean "closed", :default => false, :null => false | |
79 | + t.datetime "created_at", :null => false | |
80 | + t.datetime "updated_at", :null => false | |
81 | + t.text "st_commits" | |
82 | + t.text "st_diffs" | |
83 | + t.boolean "merged", :default => false, :null => false | |
84 | + t.integer "state", :default => 1, :null => false | |
85 | 85 | t.integer "milestone_id" |
86 | 86 | end |
87 | 87 | |
... | ... | @@ -124,7 +124,6 @@ ActiveRecord::Schema.define(:version => 20121205201726) do |
124 | 124 | |
125 | 125 | create_table "notes", :force => true do |t| |
126 | 126 | t.text "note" |
127 | - t.string "noteable_id" | |
128 | 127 | t.string "noteable_type" |
129 | 128 | t.integer "author_id" |
130 | 129 | t.datetime "created_at", :null => false |
... | ... | @@ -132,10 +131,11 @@ ActiveRecord::Schema.define(:version => 20121205201726) do |
132 | 131 | t.integer "project_id" |
133 | 132 | t.string "attachment" |
134 | 133 | t.string "line_code" |
134 | + t.string "commit_id" | |
135 | + t.integer "noteable_id" | |
135 | 136 | end |
136 | 137 | |
137 | 138 | add_index "notes", ["created_at"], :name => "index_notes_on_created_at" |
138 | - add_index "notes", ["noteable_id"], :name => "index_notes_on_noteable_id" | |
139 | 139 | add_index "notes", ["noteable_type"], :name => "index_notes_on_noteable_type" |
140 | 140 | add_index "notes", ["project_id"], :name => "index_notes_on_project_id" |
141 | 141 | ... | ... |
spec/models/merge_request_spec.rb
... | ... | @@ -42,7 +42,7 @@ describe MergeRequest do |
42 | 42 | |
43 | 43 | before do |
44 | 44 | merge_request.stub(:commits) { [merge_request.project.commit] } |
45 | - create(:note, noteable: merge_request.commits.first) | |
45 | + create(:note, commit_id: merge_request.commits.first.id, noteable_type: 'Commit') | |
46 | 46 | create(:note, noteable: merge_request) |
47 | 47 | end |
48 | 48 | ... | ... |
spec/models/note_spec.rb
... | ... | @@ -81,18 +81,18 @@ describe Note do |
81 | 81 | describe "Commit notes" do |
82 | 82 | before do |
83 | 83 | @note = create(:note, |
84 | - noteable_id: commit.id, | |
84 | + commit_id: commit.id, | |
85 | 85 | noteable_type: "Commit") |
86 | 86 | end |
87 | 87 | |
88 | 88 | it "should be accessible through #noteable" do |
89 | - @note.noteable_id.should == commit.id | |
89 | + @note.commit_id.should == commit.id | |
90 | 90 | @note.noteable.should be_a(Commit) |
91 | 91 | @note.noteable.should == commit |
92 | 92 | end |
93 | 93 | |
94 | 94 | it "should save a valid note" do |
95 | - @note.noteable_id.should == commit.id | |
95 | + @note.commit_id.should == commit.id | |
96 | 96 | @note.noteable == commit |
97 | 97 | end |
98 | 98 | |
... | ... | @@ -104,13 +104,13 @@ describe Note do |
104 | 104 | describe "Pre-line commit notes" do |
105 | 105 | before do |
106 | 106 | @note = create(:note, |
107 | - noteable_id: commit.id, | |
107 | + commit_id: commit.id, | |
108 | 108 | noteable_type: "Commit", |
109 | 109 | line_code: "0_16_1") |
110 | 110 | end |
111 | 111 | |
112 | 112 | it "should save a valid note" do |
113 | - @note.noteable_id.should == commit.id | |
113 | + @note.commit_id.should == commit.id | |
114 | 114 | @note.noteable.id.should == commit.id |
115 | 115 | end |
116 | 116 | ... | ... |