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/repository.rb')
-rw-r--r--lib/gitlab/git/repository.rb72
1 files changed, 62 insertions, 10 deletions
diff --git a/lib/gitlab/git/repository.rb b/lib/gitlab/git/repository.rb
index 71be986882c..d27f721bb2c 100644
--- a/lib/gitlab/git/repository.rb
+++ b/lib/gitlab/git/repository.rb
@@ -47,6 +47,8 @@ module Gitlab
attr_reader :storage, :gl_repository, :gl_project_path, :container
+ delegate :list_all_blobs, to: :gitaly_blob_client
+
# This remote name has to be stable for all types of repositories that
# can join an object pool. If it's structure ever changes, a migration
# has to be performed on the object pools to update the remote names.
@@ -338,16 +340,28 @@ module Gitlab
# Return repo size in megabytes
def size
if Feature.enabled?(:use_repository_info_for_repository_size)
- bytes = gitaly_repository_client.repository_info.size
-
- (bytes.to_f / 1024 / 1024).round(2)
+ repository_info_size_megabytes
else
kilobytes = gitaly_repository_client.repository_size
-
(kilobytes.to_f / 1024).round(2)
end
end
+ # Return repository recent objects size in mebibytes
+ #
+ # This differs from the #size method in that it does not include the size of:
+ # - stale objects
+ # - cruft packs of unreachable objects
+ #
+ # see: https://gitlab.com/gitlab-org/gitaly/-/blob/257ee33ca268d48c8f99dcbfeaaf7d8b19e07f06/internal/gitaly/service/repository/repository_info.go#L41-62
+ def recent_objects_size
+ wrapped_gitaly_errors do
+ recent_size_in_bytes = gitaly_repository_client.repository_info.objects.recent_size
+
+ Gitlab::Utils.bytes_to_megabytes(recent_size_in_bytes)
+ end
+ end
+
# Return git object directory size in bytes
def object_directory_size
gitaly_repository_client.get_object_directory_size.to_f * 1024
@@ -525,15 +539,13 @@ module Gitlab
empty_diff_stats
end
- def find_changed_paths(commits, merge_commit_diff_mode: nil)
- processed_commits = commits.reject { |ref| ref.blank? || Gitlab::Git.blank_ref?(ref) }
+ def find_changed_paths(treeish_objects, merge_commit_diff_mode: nil)
+ processed_objects = treeish_objects.compact
- return [] if processed_commits.empty?
+ return [] if processed_objects.empty?
wrapped_gitaly_errors do
- gitaly_commit_client.find_changed_paths(
- processed_commits, merge_commit_diff_mode: merge_commit_diff_mode
- )
+ gitaly_commit_client.find_changed_paths(processed_objects, merge_commit_diff_mode: merge_commit_diff_mode)
end
rescue CommandError, TypeError, NoRepository
[]
@@ -741,6 +753,16 @@ module Gitlab
raise DeleteBranchError, e
end
+ def async_delete_refs(*refs)
+ raise "async_delete_refs only supports project repositories" unless container.is_a?(Project)
+
+ records = refs.map do |ref|
+ BatchedGitRefUpdates::Deletion.new(project_id: container.id, ref: ref, created_at: Time.current, updated_at: Time.current)
+ end
+
+ BatchedGitRefUpdates::Deletion.bulk_insert!(records)
+ end
+
def delete_refs(...)
wrapped_gitaly_errors do
gitaly_delete_refs(...)
@@ -956,6 +978,18 @@ module Gitlab
end
end
+ def rebase_to_ref(user, source_sha:, target_ref:, first_parent_ref:, expected_old_oid: "")
+ wrapped_gitaly_errors do
+ gitaly_operation_client.user_rebase_to_ref(
+ user,
+ source_sha: source_sha,
+ target_ref: target_ref,
+ first_parent_ref: first_parent_ref,
+ expected_old_oid: expected_old_oid
+ )
+ end
+ end
+
def squash(user, start_sha:, end_sha:, author:, message:)
wrapped_gitaly_errors do
gitaly_operation_client.user_squash(user, start_sha, end_sha, author, message)
@@ -1164,8 +1198,26 @@ module Gitlab
end
end
+ def get_patch_id(old_revision, new_revision)
+ wrapped_gitaly_errors do
+ gitaly_commit_client.get_patch_id(old_revision, new_revision)
+ end
+ end
+
+ def object_pool
+ wrapped_gitaly_errors do
+ gitaly_repository_client.object_pool.object_pool
+ end
+ end
+
private
+ def repository_info_size_megabytes
+ bytes = gitaly_repository_client.repository_info.size
+
+ Gitlab::Utils.bytes_to_megabytes(bytes).round(2)
+ end
+
def empty_diff_stats
Gitlab::Git::DiffStatsCollection.new([])
end