Class: CompareService

Inherits:
Object
  • Object
show all
Defined in:
app/services/compare_service.rb

Overview

Compare 2 branches for one repo or between repositories and return Gitlab::Git::Compare object that responds to commits and diffs

Instance Method Summary collapse

Instance Method Details

#execute(source_project, source_branch, target_project, target_branch, diff_options = {}) ⇒ Object


6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'app/services/compare_service.rb', line 6

def execute(source_project, source_branch, target_project, target_branch, diff_options = {})
  source_commit = source_project.commit(source_branch)
  return unless source_commit

  source_sha = source_commit.sha

  # If compare with other project we need to fetch ref first
  unless target_project == source_project
    random_string = SecureRandom.hex

    target_project.repository.fetch_ref(
      source_project.repository.path_to_repo,
      "refs/heads/#{source_branch}",
      "refs/tmp/#{random_string}/head"
    )
  end

  Gitlab::Git::Compare.new(
    target_project.repository.raw_repository,
    target_branch,
    source_sha,
  )
end