Añade plugin Redmine Git Hosting 4.0.2

This commit is contained in:
Manuel Cillero 2020-12-05 13:57:05 +01:00
parent 472cb1ea76
commit bdd66d941f
494 changed files with 36768 additions and 0 deletions

View file

@ -0,0 +1,55 @@
namespace :redmine_git_hosting do
namespace :ci do
unless Rails.env.production?
RSpec::Core::RakeTask.new do |task|
task.rspec_opts = '--pattern plugins/redmine_git_hosting/spec/\*\*\{,/\*/\*\*\}/\*_spec.rb --color'
end
end
desc 'Check unit tests results'
task check_unit_tests_results: [:environment] do
gitolite_admin_dir = RedmineGitHosting::Config.gitolite_admin_dir
gitolite_temp_dir = RedmineGitHosting::Config.gitolite_temp_dir
puts '#####################'
puts 'TESTS RESULTS'
puts ''
puts "gitolite_temp_dir : #{gitolite_temp_dir}"
puts "gitolite_admin_dir : #{gitolite_admin_dir}"
puts ''
ls_dir(gitolite_temp_dir)
ls_dir("#{gitolite_temp_dir}/git")
ls_dir("#{gitolite_temp_dir}/git/gitolite-admin.git")
begin
repo = Rugged::Repository.new(gitolite_admin_dir)
puts "git repo work dir : #{repo.workdir}"
puts "git repo path : #{repo.path}"
puts ''
puts 'GIT STATUS :'
puts '------------'
puts %x[ git --work-tree "#{repo.workdir}" --git-dir "#{repo.path}" status ]
puts ''
puts 'GIT LOG :'
puts '---------'
puts %x[ git --work-tree "#{repo.workdir}" --git-dir "#{repo.path}" log ]
rescue => e
puts 'Error while getting tests results'
puts e.message
end
end
task all: ['spec', 'check_unit_tests_results']
def ls_dir(dir)
puts "* ls -hal #{dir}"
puts %x[ ls -hal "#{dir}" ]
puts ''
end
end
task default: 'redmine_git_hosting:ci:all'
task rspec: 'redmine_git_hosting:ci:all'
task test: 'redmine_git_hosting:ci:all'
end

View file

@ -0,0 +1,163 @@
namespace :redmine_git_hosting do
namespace :migration_tools do
desc 'Fix migration numbers (add missing trailing 0 to some migrations)'
task fix_migration_numbers: [:environment] do
puts ''
%w[2011072600000 2011080700000 2011081300000 2011081700000 2012052100000 2012052100001 2012052200000].each do |migration|
old_name = "#{migration}-redmine_git_hosting"
new_name = "#{migration}0-redmine_git_hosting"
puts "old_name : #{old_name}"
puts "new_name : #{new_name}"
# Get the old migration name
query = "SELECT * FROM #{ActiveRecord::Base.connection.quote_string('schema_migrations')} WHERE #{ActiveRecord::Base.connection.quote_string('version')} = '#{ActiveRecord::Base.connection.quote_string(old_name)}';"
result = ActiveRecord::Base.connection.execute(query)
# If present, rename
if !result.to_a.empty?
query = "DELETE FROM #{ActiveRecord::Base.connection.quote_string('schema_migrations')} WHERE #{ActiveRecord::Base.connection.quote_string('version')} = '#{ActiveRecord::Base.connection.quote_string(old_name)}';"
ActiveRecord::Base.connection.execute(query)
query = "INSERT INTO #{ActiveRecord::Base.connection.quote_string('schema_migrations')} (VERSION) VALUES ('#{ActiveRecord::Base.connection.quote_string(new_name)}');"
ActiveRecord::Base.connection.execute(query)
else
# Check the new name is present
query = "SELECT * FROM #{ActiveRecord::Base.connection.quote_string('schema_migrations')} WHERE #{ActiveRecord::Base.connection.quote_string('version')} = '#{ActiveRecord::Base.connection.quote_string(new_name)}';"
result = ActiveRecord::Base.connection.execute(query)
if result.to_a.empty?
puts "Error : migration is missing #{new_name}"
else
puts 'Already migrated, pass!'
puts ''
end
next
end
puts ''
end
puts 'Done!'
end
desc 'Rename SSH keys'
task rename_ssh_keys: [:environment] do
puts ''
puts 'Delete SSH keys in Gitolite and reset identifier :'
puts ''
GitolitePublicKey.all.each do |ssh_key|
puts " - Delete SSH key #{ssh_key.identifier}"
RedmineGitHosting::GitoliteAccessor.destroy_ssh_key(ssh_key, bypass_sidekiq: true)
ssh_key.reset_identifiers
end
puts ''
puts 'Add SSH keys with new name in Gitolite :'
puts ''
GitolitePublicKey.all.each do |ssh_key|
puts " - Add SSH key : #{ssh_key.identifier}"
RedmineGitHosting::GitoliteAccessor.create_ssh_key(ssh_key, bypass_sidekiq: true)
end
puts ''
options = { message: 'Gitolite configuration has been modified, resync all projects...', bypass_sidekiq: true }
RedmineGitHosting::GitoliteAccessor.update_projects('all', options)
puts 'Done!'
end
desc 'Update repositories type (from Git to Xitolite)'
task update_repositories_type: [:environment] do
puts ''
puts 'Update repositories type (from Git to Xitolite) :'
puts ''
Repository::Git.all.each do |repository|
# Don't update real Git repositories
next if repository.url.start_with?('/')
# Don't update orphan repositories
if repository.project.nil?
puts "Repository with id : '#{repository.id}' doesn't have a project, skipping !!"
puts ''
next
end
# Update Gitolite repositories
if repository.identifier.nil? || repository.identifier.empty?
puts repository.project.identifier
repository.update_attribute(:type, 'Repository::Xitolite')
puts 'Done!'
puts ''
else
puts repository.identifier
repository.update_attribute(:type, 'Repository::Xitolite')
puts 'Done!'
puts ''
end
end
end
desc 'Check GitExtras presence'
task check_git_extras_presence: [:environment] do
puts ''
puts 'Checking for GitExtras presence'
puts ''
Repository::Xitolite.all.each do |repository|
if repository.project.nil?
puts " - ERROR : Repository with id '##{repository.id}' has no associated project ! You should take a look at it !"
puts ''
next
elsif !repository.extra.nil?
puts " - Repository '#{repository.redmine_name}' has an entry in RepositoryGitExtras table, update it :"
repository.extra.save!
else
puts " - Repository '#{repository.redmine_name}' has no entry in RepositoryGitExtras table, create it :"
default_extra_options = {
git_http: RedmineGitHosting::Config.gitolite_http_by_default?,
git_daemon: RedmineGitHosting::Config.gitolite_daemon_by_default?,
git_notify: RedmineGitHosting::Config.gitolite_notify_by_default?,
git_annex: false,
default_branch: 'master',
key: RedmineGitHosting::Utils::Crypto.generate_secret(64)
}
extra = repository.build_extra(default_extra_options)
extra.save!
end
puts ' Done!'
puts ''
end
puts 'Done!'
end
end
desc 'Migrate to v1.0 version'
task migrate_to_v1: [:environment] do
## First step : rename migrations in DB
task('redmine_git_hosting:migration_tools:fix_migration_numbers').invoke
## Migrate DB only for redmine_git_hosting plugin
ENV['NAME'] = 'redmine_git_hosting'
task('redmine:plugins:migrate').invoke
## Rename SSH keys (reset identifier)
task('redmine_git_hosting:migration_tools:rename_ssh_keys').invoke
## Update repositories type
task('redmine_git_hosting:migration_tools:update_repositories_type').invoke
end
end

View file

@ -0,0 +1,98 @@
namespace :redmine_git_hosting do
desc 'Update plugin settings in database (This will read settings from `<redmine_root>/redmine_git_hosting.yml` and `<plugin_root>/settings.yml`)'
task update_settings: [:environment] do
RedmineGitHosting::ConsoleLogger.title('Reloading settings from command line') do
RedmineGitHosting::Config.reload_from_file!
end
end
desc 'Dump plugin settings in console'
task dump_settings: [:environment] do
RedmineGitHosting::Config.dump_settings
end
desc 'Purge expired repositories from Recycle Bin'
task purge_recycle_bin: [:environment] do
RedmineGitHosting::ConsoleLogger.title('Purging Recycle Bin from command line') do
RedmineGitHosting::GitoliteAccessor.purge_recycle_bin
end
end
desc 'Update/repair Gitolite configuration'
task update_repositories: [:environment] do
RedmineGitHosting::ConsoleLogger.title('Performing manual update_repositories operation from command line') do
RedmineGitHosting::GitoliteAccessor.update_projects('all', { message: "Resync all projects (#{Project.all.length})..." })
end
end
desc 'Fetch commits from gitolite repositories/update gitolite configuration'
task fetch_changesets: [:environment] do
RedmineGitHosting::ConsoleLogger.title('Performing manual fetch_changesets operation from command line') do
RedmineGitHosting::GitoliteAccessor.flush_git_cache
Repository.fetch_changesets
end
end
desc 'Check repositories identifier uniqueness'
task check_repository_uniqueness: [:environment] do
RedmineGitHosting::ConsoleLogger.title('Checking repositories identifier uniqueness...') do
if Repository::Xitolite.have_duplicated_identifier?
RedmineGitHosting::ConsoleLogger.warn('Detected non-unique repository identifiers!')
puts YAML::dump(Repository::Xitolite.identifiers_to_hash.reject! { |k, v| v == 1 })
else
RedmineGitHosting::ConsoleLogger.info('No duplication detected, good !')
end
end
end
desc 'Resync ssh_keys'
task resync_ssh_keys: [:environment] do
RedmineGitHosting::ConsoleLogger.title('Performing manual resync_ssh_keys operation from command line') do
RedmineGitHosting::GitoliteAccessor.resync_ssh_keys(bypass_sidekiq: true)
end
end
desc 'Regenerate ssh_keys'
task regenerate_ssh_keys: [:environment] do
RedmineGitHosting::ConsoleLogger.title('Performing manual regenerate_ssh_keys operation from command line') do
RedmineGitHosting::GitoliteAccessor.regenerate_ssh_keys(bypass_sidekiq: true)
end
end
desc 'Install/update Gitolite hooks'
task install_hook_files: [:environment] do
RedmineGitHosting::ConsoleLogger.title('Installing/updating Gitolite hooks') do
puts YAML::dump(RedmineGitHosting::Config.install_hooks!)
end
end
desc 'Install/update Gitolite hook parameters'
task install_hook_parameters: [:environment] do
RedmineGitHosting::ConsoleLogger.title('Installing/updating Gitolite hook parameters') do
puts YAML::dump(RedmineGitHosting::Config.update_hook_params!)
end
end
task install_gitolite_hooks: [:install_hook_files, :install_hook_parameters]
desc 'Show library version'
task :version do
puts "Redmine Git Hosting #{version("plugins/redmine_git_hosting/init.rb")}"
end
def version(path)
line = File.read(Rails.root.join(path))[/^\s*version\s*.*/]
line.match(/.*version\s*['"](.*)['"]/)[1]
end
end