Commit 6a4a17f3399904b43275c4a2d53322cb2b011aca
1 parent
5f8f685b
Exists in
master
and in
4 other branches
Remove native git calls from MR. Dump diff as array, not class
Showing
1 changed file
with
12 additions
and
14 deletions
Show diff stats
app/models/merge_request.rb
@@ -24,8 +24,6 @@ require Rails.root.join("lib/static_model") | @@ -24,8 +24,6 @@ require Rails.root.join("lib/static_model") | ||
24 | class MergeRequest < ActiveRecord::Base | 24 | class MergeRequest < ActiveRecord::Base |
25 | include Issuable | 25 | include Issuable |
26 | 26 | ||
27 | - BROKEN_DIFF = "--broken-diff" | ||
28 | - | ||
29 | attr_accessible :title, :assignee_id, :target_branch, :source_branch, :milestone_id, | 27 | attr_accessible :title, :assignee_id, :target_branch, :source_branch, :milestone_id, |
30 | :author_id_of_changes, :state_event | 28 | :author_id_of_changes, :state_event |
31 | 29 | ||
@@ -109,22 +107,18 @@ class MergeRequest < ActiveRecord::Base | @@ -109,22 +107,18 @@ class MergeRequest < ActiveRecord::Base | ||
109 | end | 107 | end |
110 | 108 | ||
111 | def diffs | 109 | def diffs |
112 | - st_diffs || [] | 110 | + load_diffs(st_diffs) || [] |
113 | end | 111 | end |
114 | 112 | ||
115 | def reloaded_diffs | 113 | def reloaded_diffs |
116 | if opened? && unmerged_diffs.any? | 114 | if opened? && unmerged_diffs.any? |
117 | - self.st_diffs = unmerged_diffs | 115 | + self.st_diffs = dump_diffs(unmerged_diffs) |
118 | self.save | 116 | self.save |
119 | end | 117 | end |
120 | - | ||
121 | - rescue Grit::Git::GitTimeout | ||
122 | - self.st_diffs = [BROKEN_DIFF] | ||
123 | - self.save | ||
124 | end | 118 | end |
125 | 119 | ||
126 | def broken_diffs? | 120 | def broken_diffs? |
127 | - diffs == [BROKEN_DIFF] | 121 | + diffs == [Gitlab::Git::Diff::BROKEN_DIFF] |
128 | end | 122 | end |
129 | 123 | ||
130 | def valid_diffs? | 124 | def valid_diffs? |
@@ -132,11 +126,7 @@ class MergeRequest < ActiveRecord::Base | @@ -132,11 +126,7 @@ class MergeRequest < ActiveRecord::Base | ||
132 | end | 126 | end |
133 | 127 | ||
134 | def unmerged_diffs | 128 | def unmerged_diffs |
135 | - # Only show what is new in the source branch compared to the target branch, not the other way around. | ||
136 | - # The linex below with merge_base is equivalent to diff with three dots (git diff branch1...branch2) | ||
137 | - # From the git documentation: "git diff A...B" is equivalent to "git diff $(git-merge-base A B) B" | ||
138 | - common_commit = project.repo.git.native(:merge_base, {}, [target_branch, source_branch]).strip | ||
139 | - diffs = project.repo.diff(common_commit, source_branch) | 129 | + project.repository.diffs_between(source_branch, target_branch) |
140 | end | 130 | end |
141 | 131 | ||
142 | def last_commit | 132 | def last_commit |
@@ -222,4 +212,12 @@ class MergeRequest < ActiveRecord::Base | @@ -222,4 +212,12 @@ class MergeRequest < ActiveRecord::Base | ||
222 | def load_commits(array) | 212 | def load_commits(array) |
223 | array.map { |hash| Commit.new(Gitlab::Git::Commit.new(hash)) } | 213 | array.map { |hash| Commit.new(Gitlab::Git::Commit.new(hash)) } |
224 | end | 214 | end |
215 | + | ||
216 | + def dump_diffs(diffs) | ||
217 | + diffs.map(&:to_hash) | ||
218 | + end | ||
219 | + | ||
220 | + def load_diffs(array) | ||
221 | + array.map { |hash| Gitlab::Git::Diff.new(hash) } | ||
222 | + end | ||
225 | end | 223 | end |