debian-mirror-gitlab/lib/tasks/gitlab/git.rake

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

62 lines
2 KiB
Ruby
Raw Normal View History

2021-03-11 19:13:27 +05:30
# frozen_string_literal: true
2015-12-23 02:04:40 +05:30
namespace :gitlab do
namespace :git do
2018-03-17 18:26:18 +05:30
desc 'GitLab | Git | Check all repos integrity'
task fsck: :gitlab_environment do
2015-12-23 02:04:40 +05:30
failures = []
2018-11-18 11:00:15 +05:30
Project.find_each(batch_size: 100) do |project|
begin
project.repository.fsck
2021-06-08 01:23:25 +05:30
rescue StandardError => e
2018-11-18 11:00:15 +05:30
failures << "#{project.full_path} on #{project.repository_storage}: #{e}"
2015-12-23 02:04:40 +05:30
end
2018-03-17 18:26:18 +05:30
2018-11-18 11:00:15 +05:30
puts "Performed integrity check for #{project.repository.full_path}"
2015-12-23 02:04:40 +05:30
end
2018-11-18 11:00:15 +05:30
if failures.empty?
puts "Done".color(:green)
2018-03-17 18:26:18 +05:30
else
2018-11-18 11:00:15 +05:30
puts "The following repositories reported errors:".color(:red)
failures.each { |f| puts "- #{f}" }
2018-03-17 18:26:18 +05:30
end
end
2021-03-08 18:12:59 +05:30
# Example for all projects:
#
# $ bin/rake gitlab:git:checksum_projects
# 1,cfa3f06ba235c13df0bb28e079bcea62c5848af2
# 2,
# 3,3f3fb58a8106230e3a6c6b48adc2712fb3b6ef87
# 4,0000000000000000000000000000000000000000
#
# Example with a list of project IDs:
#
# $ CHECKSUM_PROJECT_IDS="1,3" bin/rake gitlab:git:checksum_projects
# 1,cfa3f06ba235c13df0bb28e079bcea62c5848af2
# 3,3f3fb58a8106230e3a6c6b48adc2712fb3b6ef87
#
# - If a repository does not exist, the project ID is output with a blank checksum
# - If a repository exists but is empty, the output checksum is `0000000000000000000000000000000000000000`
# - If given specific IDs, projects which do not exist are skipped
desc 'GitLab | Git | Generate checksum of project repository refs'
task checksum_projects: :environment do
project_ids = ENV['CHECKSUM_PROJECT_IDS']&.split(',')
relation = Project
relation = relation.where(id: project_ids) if project_ids.present?
relation.find_each(batch_size: 100) do |project|
next unless project.repo_exists?
result = project.repository.checksum
2021-06-08 01:23:25 +05:30
rescue StandardError => e
2021-03-08 18:12:59 +05:30
result = "Ignored error: #{e.message}".squish.truncate(255)
ensure
puts "#{project.id},#{result}"
end
end
2015-12-23 02:04:40 +05:30
end
end