Commit 79bfbe5918b414cc44fbb506f0b350c04f49c1e9

Authored by Dmitriy Zaporozhets
1 parent d9be420e

Remove commits/diff store login from MergeRequest model

Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
app/models/merge_request.rb
... ... @@ -30,6 +30,9 @@ class MergeRequest &lt; ActiveRecord::Base
30 30  
31 31 belongs_to :target_project, foreign_key: :target_project_id, class_name: "Project"
32 32 belongs_to :source_project, foreign_key: :source_project_id, class_name: "Project"
  33 + has_one :merge_request_diff, dependent: :destroy
  34 +
  35 + delegate :commits, :diffs, :last_commit, :last_commit_short_sha, to: :merge_request_diff, prefix: nil
33 36  
34 37 attr_accessible :title, :assignee_id, :source_project_id, :source_branch, :target_project_id, :target_branch, :milestone_id, :author_id_of_changes, :state_event, :description
35 38  
... ... @@ -53,11 +56,8 @@ class MergeRequest &lt; ActiveRecord::Base
53 56 end
54 57  
55 58 state :opened
56   -
57 59 state :reopened
58   -
59 60 state :closed
60   -
61 61 state :merged
62 62 end
63 63  
... ... @@ -75,15 +75,10 @@ class MergeRequest &lt; ActiveRecord::Base
75 75 end
76 76  
77 77 state :unchecked
78   -
79 78 state :can_be_merged
80   -
81 79 state :cannot_be_merged
82 80 end
83 81  
84   - serialize :st_commits
85   - serialize :st_diffs
86   -
87 82 validates :source_project, presence: true, unless: :allow_broken
88 83 validates :source_branch, presence: true
89 84 validates :target_project, presence: true
... ... @@ -105,7 +100,7 @@ class MergeRequest &lt; ActiveRecord::Base
105 100 scope :closed, -> { with_states(:closed, :merged) }
106 101  
107 102 def validate_branches
108   - if target_project==source_project && target_branch == source_branch
  103 + if target_project == source_project && target_branch == source_branch
109 104 errors.add :branch_conflict, "You can not use same project/branch for source and target"
110 105 end
111 106  
... ... @@ -120,8 +115,7 @@ class MergeRequest &lt; ActiveRecord::Base
120 115 end
121 116  
122 117 def reload_code
123   - self.reloaded_commits
124   - self.reloaded_diffs
  118 + merge_request_diff.reload_content if opened?
125 119 end
126 120  
127 121 def check_if_can_be_merged
... ... @@ -132,42 +126,6 @@ class MergeRequest &lt; ActiveRecord::Base
132 126 end
133 127 end
134 128  
135   - def diffs
136   - @diffs ||= (load_diffs(st_diffs) || [])
137   - end
138   -
139   - def reloaded_diffs
140   - if opened? && unmerged_diffs.any?
141   - self.st_diffs = dump_diffs(unmerged_diffs)
142   - self.save
143   - end
144   - end
145   -
146   - def broken_diffs?
147   - diffs == broken_diffs
148   - rescue
149   - true
150   - end
151   -
152   - def valid_diffs?
153   - !broken_diffs?
154   - end
155   -
156   - def unmerged_diffs
157   - diffs = if for_fork?
158   - Gitlab::Satellite::MergeAction.new(author, self).diffs_between_satellite
159   - else
160   - Gitlab::Git::Diff.between(target_project.repository, source_branch, target_branch)
161   - end
162   -
163   - diffs ||= []
164   - diffs
165   - end
166   -
167   - def last_commit
168   - commits.first
169   - end
170   -
171 129 def merge_event
172 130 self.target_project.events.where(target_id: self.id, target_type: "MergeRequest", action: Event::MERGED).last
173 131 end
... ... @@ -176,39 +134,6 @@ class MergeRequest &lt; ActiveRecord::Base
176 134 self.target_project.events.where(target_id: self.id, target_type: "MergeRequest", action: Event::CLOSED).last
177 135 end
178 136  
179   - def commits
180   - load_commits(st_commits || [])
181   - end
182   -
183   - def probably_merged?
184   - unmerged_commits.empty? &&
185   - commits.any? && opened?
186   - end
187   -
188   - def reloaded_commits
189   - if opened? && unmerged_commits.any?
190   - self.st_commits = dump_commits(unmerged_commits)
191   - save
192   -
193   - end
194   - commits
195   - end
196   -
197   - def unmerged_commits
198   - if for_fork?
199   - commits = Gitlab::Satellite::MergeAction.new(self.author, self).commits_between
200   - else
201   - commits = target_project.repository.commits_between(self.target_branch, self.source_branch)
202   - end
203   -
204   - if commits.present?
205   - commits = Commit.decorate(commits).
206   - sort_by(&:created_at).
207   - reverse
208   - end
209   - commits
210   - end
211   -
212 137 def merge!(user_id)
213 138 self.author_id_of_changes = user_id
214 139 self.merge
... ... @@ -247,10 +172,6 @@ class MergeRequest &lt; ActiveRecord::Base
247 172 Gitlab::Satellite::MergeAction.new(current_user, self).format_patch
248 173 end
249 174  
250   - def last_commit_short_sha
251   - @last_commit_short_sha ||= last_commit.sha[0..10]
252   - end
253   -
254 175 def for_fork?
255 176 target_project != source_project
256 177 end
... ... @@ -327,34 +248,4 @@ class MergeRequest &lt; ActiveRecord::Base
327 248 message << description.to_s
328 249 message
329 250 end
330   -
331   - private
332   -
333   - def dump_commits(commits)
334   - commits.map(&:to_hash)
335   - end
336   -
337   - def load_commits(array)
338   - array.map { |hash| Commit.new(Gitlab::Git::Commit.new(hash)) }
339   - end
340   -
341   - def dump_diffs(diffs)
342   - if diffs == broken_diffs
343   - broken_diffs
344   - elsif diffs.respond_to?(:map)
345   - diffs.map(&:to_hash)
346   - end
347   - end
348   -
349   - def load_diffs(raw)
350   - if raw == broken_diffs
351   - broken_diffs
352   - elsif raw.respond_to?(:map)
353   - raw.map { |hash| Gitlab::Git::Diff.new(hash) }
354   - end
355   - end
356   -
357   - def broken_diffs
358   - [Gitlab::Git::Diff::BROKEN_DIFF]
359   - end
360 251 end
... ...
app/observers/merge_request_observer.rb
... ... @@ -6,6 +6,7 @@ class MergeRequestObserver &lt; ActivityObserver
6 6 create_event(merge_request, Event.determine_action(merge_request))
7 7 end
8 8  
  9 + merge_request.create_merge_request_diff
9 10 notification.new_merge_request(merge_request, current_user)
10 11 merge_request.create_cross_references!(merge_request.project, current_user)
11 12 execute_hooks(merge_request)
... ...