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 | 24 | class MergeRequest < ActiveRecord::Base |
25 | 25 | include Issuable |
26 | 26 | |
27 | - BROKEN_DIFF = "--broken-diff" | |
28 | - | |
29 | 27 | attr_accessible :title, :assignee_id, :target_branch, :source_branch, :milestone_id, |
30 | 28 | :author_id_of_changes, :state_event |
31 | 29 | |
... | ... | @@ -109,22 +107,18 @@ class MergeRequest < ActiveRecord::Base |
109 | 107 | end |
110 | 108 | |
111 | 109 | def diffs |
112 | - st_diffs || [] | |
110 | + load_diffs(st_diffs) || [] | |
113 | 111 | end |
114 | 112 | |
115 | 113 | def reloaded_diffs |
116 | 114 | if opened? && unmerged_diffs.any? |
117 | - self.st_diffs = unmerged_diffs | |
115 | + self.st_diffs = dump_diffs(unmerged_diffs) | |
118 | 116 | self.save |
119 | 117 | end |
120 | - | |
121 | - rescue Grit::Git::GitTimeout | |
122 | - self.st_diffs = [BROKEN_DIFF] | |
123 | - self.save | |
124 | 118 | end |
125 | 119 | |
126 | 120 | def broken_diffs? |
127 | - diffs == [BROKEN_DIFF] | |
121 | + diffs == [Gitlab::Git::Diff::BROKEN_DIFF] | |
128 | 122 | end |
129 | 123 | |
130 | 124 | def valid_diffs? |
... | ... | @@ -132,11 +126,7 @@ class MergeRequest < ActiveRecord::Base |
132 | 126 | end |
133 | 127 | |
134 | 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 | 130 | end |
141 | 131 | |
142 | 132 | def last_commit |
... | ... | @@ -222,4 +212,12 @@ class MergeRequest < ActiveRecord::Base |
222 | 212 | def load_commits(array) |
223 | 213 | array.map { |hash| Commit.new(Gitlab::Git::Commit.new(hash)) } |
224 | 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 | 223 | end | ... | ... |