diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-05-19 18:44:42 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-05-19 18:44:42 +0300 |
commit | 4555e1b21c365ed8303ffb7a3325d773c9b8bf31 (patch) | |
tree | 5423a1c7516cffe36384133ade12572cf709398d /app/models/context_commits_diff.rb | |
parent | e570267f2f6b326480d284e0164a6464ba4081bc (diff) |
Add latest changes from gitlab-org/gitlab@13-12-stable-eev13.12.0-rc42
Diffstat (limited to 'app/models/context_commits_diff.rb')
-rw-r--r-- | app/models/context_commits_diff.rb | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/app/models/context_commits_diff.rb b/app/models/context_commits_diff.rb new file mode 100644 index 00000000000..fe1a72b79f2 --- /dev/null +++ b/app/models/context_commits_diff.rb @@ -0,0 +1,58 @@ +# frozen_string_literal: true + +class ContextCommitsDiff + include ActsAsPaginatedDiff + + attr_reader :merge_request + + def initialize(merge_request) + @merge_request = merge_request + end + + def empty? + commits.empty? + end + + def commits_count + merge_request.context_commits_count + end + + def diffs(diff_options = nil) + Gitlab::Diff::FileCollection::Compare.new( + self, + project: merge_request.project, + diff_options: diff_options, + diff_refs: diff_refs + ) + end + + def raw_diffs(options = {}) + compare.diffs(options.merge(paths: paths)) + end + + def diff_refs + Gitlab::Diff::DiffRefs.new( + base_sha: commits.last&.diff_refs&.base_sha, + head_sha: commits.first&.diff_refs&.head_sha + ) + end + + private + + def compare + @compare ||= + Gitlab::Git::Compare.new( + merge_request.project.repository.raw_repository, + commits.last&.diff_refs&.base_sha, + commits.first&.diff_refs&.head_sha + ) + end + + def commits + @commits ||= merge_request.project.repository.commits_by(oids: merge_request.recent_context_commits.map(&:id)) + end + + def paths + merge_request.merge_request_context_commit_diff_files.map(&:path) + end +end |