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 |