Añade el plugin Redmine Git Hosting 5.0.0

This commit is contained in:
Manuel Cillero 2021-03-20 13:29:16 +01:00
parent cfa0d58b18
commit a3bddad233
458 changed files with 30396 additions and 1 deletions

View file

@ -0,0 +1,81 @@
module ExtendProjectsHelper
def render_feature(repository, feature)
method = "#{feature}_feature"
label, css_class, enabled = send(method, repository)
# Get css class
base_class = ['icon-git']
base_class << css_class
base_class << 'icon-git-disabled' unless enabled
# Get label
base_label = []
base_label << label
base_label << "(#{l(:label_disabled)})" unless enabled
tag.i '', title: base_label.join(' '), class: base_class
end
def deployment_credentials_feature(repository)
label = l :label_deployment_credentials
css_class = 'fas fa-lock'
enabled = repository.deployment_credentials.active.any?
[label, css_class, enabled]
end
def post_receive_urls_feature(repository)
label = l :label_post_receive_urls
css_class = 'fas fa-external-link-alt'
enabled = repository.post_receive_urls.active.any?
[label, css_class, enabled]
end
def mirrors_feature(repository)
label = l :label_repository_mirrors
css_class = 'fas fa-cloud-upload-alt'
enabled = repository.mirrors.active.any?
[label, css_class, enabled]
end
def git_daemon_feature(repository)
label = l :label_git_daemon
css_class = 'fab fa-git'
enabled = repository.git_access_available?
[label, css_class, enabled]
end
def git_http_feature(repository)
label = l :label_smart_http
css_class = 'fas fa-cloud-download-alt'
enabled = repository.smart_http_enabled?
[label, css_class, enabled]
end
def git_notify_feature(repository)
label = l :label_git_notify
css_class = 'fas fa-bullhorn'
enabled = repository.git_notification_enabled?
[label, css_class, enabled]
end
def protected_branch_feature(repository)
label = l :label_protected_branch
css_class = 'fas fa-shield-alt'
enabled = repository.protected_branches_available?
[label, css_class, enabled]
end
def git_annex_feature(repository)
label = l :label_git_annex
css_class = 'fas fa-cloud-upload-alt'
enabled = repository.git_annex_enabled?
[label, css_class, enabled]
end
def public_repo_feature(repository)
label = l :label_public_repo
css_class = 'fas fa-users'
enabled = repository.public_repo?
[label, css_class, enabled]
end
end

View file

@ -0,0 +1,68 @@
module ExtendRepositoriesHelper
def encoding_field(form, _repository)
tag.p do
form.select(
:path_encoding, [nil] + Setting::ENCODINGS,
label: l(:field_scm_path_encoding)
) + '<br />'.html_safe + l(:text_scm_path_encoding_note)
end
end
def available_download_format(repository, rev = nil)
%w[zip tar tar.gz].map { |f| [f, download_git_revision_repository_path(repository, rev: rev, download_format: f)] }
end
def create_readme_field(_form, repository)
return unless repository.new_record?
tag.p do
hidden_field_tag('repository[create_readme]', 'false', id: '') +
tag.label(l(:label_init_repo_with_readme), for: 'repository_create_readme') +
check_box_tag('repository[create_readme]', 'true', RedmineGitHosting::Config.init_repositories_on_create?)
end
end
def enable_git_annex_field(_form, repository)
return unless repository.new_record?
tag.p do
hidden_field_tag('repository[enable_git_annex]', 'false', id: '') +
tag.label(l(:label_init_repo_with_git_annex), for: 'repository_enable_git_annex') +
check_box_tag('repository[enable_git_annex]', 'true')
end
end
def repository_branches_list(branches)
options_for_select branches.collect { |b| [b.to_s, b.to_s] }, selected: branches.find(&:is_default).to_s
end
def render_repository_quick_jump(repository)
options = repository.project.repositories.sort
options.map! { |r| [r.redmine_name, edit_repository_path(r)] }
select_tag 'repository_quick_jump_box',
options_for_select(options, selected: edit_repository_path(repository)),
onchange: 'if (this.value != \'\') { window.location = this.value; }'
end
def link_to_repository(repo, current_repo)
css_class = ['repository', (repo == current_repo ? 'selected' : ''), current_repo.type.split('::')[1].downcase].join(' ')
link_to h(repo.name),
{ controller: 'repositories', action: 'show', id: @project, repository_id: repo.identifier_param, rev: nil, path: nil },
class: css_class
end
def icon_for_url_type(url_type)
font_awesome_icon(RepositoryGitExtra::URLS_ICONS[url_type][:icon])
end
def label_for_url_type(url_type)
RepositoryGitExtra::URLS_ICONS[url_type][:label]
end
def render_options_for_move_repo_select_box(project)
projects = Project.active
.where(Project.allowed_to_condition(User.current, :manage_repository))
.where.not(id: project.id)
project_tree_options_for_select(projects, selected: project) if projects.any?
end
end

View file

@ -0,0 +1,31 @@
module GitHostingHelper
def present(object, klass = nil, *args)
klass ||= "#{object.class.base_class}Presenter".constantize
presenter = klass.new(object, self, *args)
yield presenter if block_given?
presenter
end
def checked_image_with_exclamation(checked = true)
checked ? image_tag('toggle_check.png') : image_tag('exclamation.png')
end
def render_shell_text(text)
Redmine::SyntaxHighlighting.highlight_by_language text, 'shell'
end
def gitolite_project_settings_tabs
tabs = []
tabs << { name: 'db',
action: :show,
partial: 'projects/settings/db',
label: :label_db }
tabs << { name: 'db2',
action: :show,
partial: 'projects/settings/db',
label: :label_db }
tabs
end
end

View file

@ -0,0 +1,28 @@
module GitHostingUsersHelper
def user_settings_tabs
tabs = super
tabs << { name: 'keys', partial: 'gitolite_public_keys/view', label: :label_public_keys }
end
# Hacked render_api_custom_values to add plugin values to user api.
# @NOTE: there is no solution for index.api, because @user is missing
# @TODO
def render_api_custom_values(custom_values, api)
rc = super
if @user.present?
api.array :ssh_keys do
@user.gitolite_public_keys.each do |key|
api.ssh_key do
api.id key.id
api.key_type key.key_type_as_string
api.title key.title
api.key key.key
end
end
end
end
rc
end
end

View file

@ -0,0 +1,128 @@
module GitolitePluginSettingsHelper
def render_gitolite_params_status(params)
tag.ul class: 'list-unstyled' do
content = ''
params.each do |param, installed|
content << tag.li do
image_tag(image_for_param(installed), style: 'vertical-align: bottom; padding-right: 5px;') +
tag.em(label_for_param(param, installed))
end
end
content.html_safe
end
end
def label_for_param(param, install_status)
install_status == 2 ? "#{param} (#{l(:label_gitolite_hook_untouched)})" : param
end
def image_for_param(install_status)
case install_status
when 0, true
'true.png'
when 1, false
'exclamation.png'
else
'warning.png'
end
end
def render_gitolite_version(version)
if version.nil?
css_class = 'label label-error'
label = l(:label_unknown_gitolite_version)
else
css_class = 'label label-success'
label = version
end
tag.span label, class: css_class
end
def render_temp_dir_writeable(state, label)
css_class = state ? 'label label-success' : 'label label-error'
tag.span label, class: css_class
end
def gitolite_plugin_settings_tabs
[
{ name: 'gitolite_config_ssh',
partial: 'settings/redmine_git_hosting/gitolite_config_ssh',
label: :label_tab_ssh },
{ name: 'gitolite_config_storage',
partial: 'settings/redmine_git_hosting/gitolite_config_storage',
label: :label_tab_storage },
{ name: 'gitolite_config_file',
partial: 'settings/redmine_git_hosting/gitolite_config_file',
label: :label_tab_config_file },
{ name: 'gitolite_config_global',
partial: 'settings/redmine_git_hosting/gitolite_config_global',
label: :label_tab_global },
{ name: 'gitolite_config_access',
partial: 'settings/redmine_git_hosting/gitolite_config_access',
label: :label_tab_access },
{ name: 'gitolite_config_hooks',
partial: 'settings/redmine_git_hosting/gitolite_config_hooks',
label: :label_tab_hooks },
{ name: 'gitolite_config_cache',
partial: 'settings/redmine_git_hosting/gitolite_config_cache',
label: :label_tab_cache },
{ name: 'gitolite_config_notify',
partial: 'settings/redmine_git_hosting/gitolite_config_notify',
label: :label_tab_notify },
{ name: 'gitolite_redmine_config',
partial: 'settings/redmine_git_hosting/redmine_config',
label: :label_tab_redmine },
{ name: 'gitolite_sidekiq_interface',
partial: 'settings/redmine_git_hosting/sidekiq_interface',
label: :label_tab_sidekiq_interface },
{ name: 'gitolite_config_test',
partial: 'settings/redmine_git_hosting/gitolite_config_test',
label: :label_tab_config_test },
{ name: 'gitolite_recycle_bin',
partial: 'settings/redmine_git_hosting/gitolite_recycle_bin',
label: :label_tab_gitolite_recycle_bin },
{ name: 'gitolite_rescue',
partial: 'settings/redmine_git_hosting/gitolite_rescue',
label: :label_tab_gitolite_rescue }
]
end
def git_cache_options
[
['Cache Disabled', '0'],
['Until next commit', '-1'],
['1 Minute or until next commit', '60'],
['15 Minutes or until next commit', '900'],
['1 Hour or until next commit', '3600'],
['1 Day or until next commit', '86400']
]
end
def log_level_options
RedmineGitHosting::FileLogger::LOG_LEVELS.map { |level| [l("label_#{level}"), level] }
end
def render_rugged_mandatory_features
content = ''
RedmineGitHosting::Config.rugged_mandatory_features.each do |feature|
opts = if RedmineGitHosting::Config.rugged_features.include?(feature)
{ class: 'label label-success' }
else
{ class: 'label label-error' }
end
content << "#{tag.span feature, opts}\n"
end
content.html_safe
end
def render_rugged_optional_features
content = ''
RedmineGitHosting::Config.rugged_features.each do |feature|
unless RedmineGitHosting::Config.rugged_mandatory_features.include?(feature)
opts = { class: 'label label-success' }
content << tag.span(feature, opts)
end
end
content.html_safe
end
end

View file

@ -0,0 +1,14 @@
module GitolitePublicKeysHelper
def keylabel(key)
key.user == User.current ? key.title&.to_s : "#{key.user.login}@#{key.title}"
end
def can_create_deployment_keys_for_some_project(theuser = User.current)
return true if theuser.admin?
theuser.projects_by_role.each_key do |role|
return true if role.allowed_to?(:create_repository_deployment_credentials)
end
false
end
end

View file

@ -0,0 +1,17 @@
module RepositoryDeploymentCredentialsHelper
def build_list_of_keys(user_keys, other_keys, disabled_keys)
option_array = [[l(:label_deployment_credential_select_deploy_key), -1]]
option_array += user_keys.map { |key| [keylabel(key), key.id] }
if other_keys.present?
option_array2 = other_keys.map { |key| [keylabel(key), key.id] }
maxlen = (option_array + option_array2).map { |x| x.first.length }.max
extra = [maxlen - l(:select_other_keys).length - 2, 6].max / 2
option_array += [[('-' * extra) + ' ' + l(:select_other_keys) + ' ' + ('-' * extra), -2]]
option_array += option_array2
end
options_for_select(option_array, selected: -1, disabled: [-2] + disabled_keys.map(&:id))
end
end

View file

@ -0,0 +1,8 @@
module RepositoryGitConfigKeysHelper
def git_config_key_options
[
[l(:label_git_key_type_config), 'RepositoryGitConfigKey::GitConfig'],
[l(:label_git_key_type_option), 'RepositoryGitConfigKey::Option']
]
end
end

View file

@ -0,0 +1,43 @@
module RepositoryMirrorsHelper
# Mirror Mode
def mirror_mode(mirror)
[l(:label_mirror_full_mirror),
l(:label_mirror_forced_update),
l(:label_mirror_fast_forward)][mirror.push_mode]
end
# Refspec for mirrors
def refspec(mirror, max_refspec = 0)
if mirror.mirror_mode?
l :all_references
else
result = []
result << tag.li(l(:all_branches)) if mirror.include_all_branches
result << tag.li(l(:all_tags)) if mirror.include_all_tags
result << tag.li(mirror.explicit_refspec) if max_refspec.zero? || ((1..max_refspec) === mirror.explicit_refspec.length)
result << tag.li(l(:explicit)) if max_refspec.positive? && (mirror.explicit_refspec.length > max_refspec)
tag.ul(safe_join(result), class: 'list-unstyled') if result.any?
end
end
def mirrors_options
[
[l(:label_mirror_full_mirror), 0],
[l(:label_mirror_forced_update), 1],
[l(:label_mirror_fast_forward), 2]
]
end
def render_push_state(mirror, error)
if error
status = l :label_mirror_push_fail
status_css = 'error'
else
status = l :label_mirror_push_sucess
status_css = 'success'
end
t :label_mirror_push_info_html, mirror_url: mirror.url, status: status, status_css: status_css
end
end

View file

@ -0,0 +1,13 @@
module RepositoryPostReceiveUrlsHelper
# Post-receive Mode
def post_receive_mode(prurl)
label = []
if prurl.github_mode?
label << l(:label_github_post)
label << "(#{l :label_split_payloads})" if prurl.split_payloads?
else
label << l(:label_empty_get)
end
label.join ' '
end
end