Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/git/cross_repo_comparer.rb')
-rw-r--r--lib/gitlab/git/cross_repo_comparer.rb56
1 files changed, 0 insertions, 56 deletions
diff --git a/lib/gitlab/git/cross_repo_comparer.rb b/lib/gitlab/git/cross_repo_comparer.rb
deleted file mode 100644
index d42b2a3bd98..00000000000
--- a/lib/gitlab/git/cross_repo_comparer.rb
+++ /dev/null
@@ -1,56 +0,0 @@
-# frozen_string_literal: true
-
-module Gitlab
- module Git
- class CrossRepoComparer
- attr_reader :source_repo, :target_repo
-
- def initialize(source_repo, target_repo)
- @source_repo = source_repo
- @target_repo = target_repo
- end
-
- def compare(source_ref, target_ref, straight:)
- ensuring_ref_in_source(target_ref) do |target_commit_id|
- Gitlab::Git::Compare.new(
- source_repo,
- target_commit_id,
- source_ref,
- straight: straight
- )
- end
- end
-
- private
-
- def ensuring_ref_in_source(ref, &blk)
- return yield ref if source_repo == target_repo
-
- # If the commit doesn't exist in the target, there's nothing we can do
- commit_id = target_repo.commit(ref)&.sha
- return unless commit_id
-
- # The commit pointed to by ref may exist in the source even when they
- # are different repositories. This is particularly true of close forks,
- # but may also be the case if a temporary ref for this comparison has
- # already been created in the past, and the result hasn't been GC'd yet.
- return yield commit_id if source_repo.commit(commit_id)
-
- # Worst case: the commit is not in the source repo so we need to fetch
- # it. Use a temporary ref and clean up afterwards
- with_commit_in_source_tmp(commit_id, &blk)
- end
-
- # Fetch the ref into source_repo from target_repo, using a temporary ref
- # name that will be deleted once the method completes. This is a no-op if
- # fetching the source branch fails
- def with_commit_in_source_tmp(commit_id, &blk)
- tmp_ref = "refs/#{::Repository::REF_TMP}/#{SecureRandom.hex}"
-
- yield commit_id if source_repo.fetch_source_branch!(target_repo, commit_id, tmp_ref)
- ensure
- source_repo.delete_refs(tmp_ref) # best-effort
- end
- end
- end
-end