Añade el plugin Redmine Git Hosting 5.0.0
This commit is contained in:
parent
cfa0d58b18
commit
a3bddad233
458 changed files with 30396 additions and 1 deletions
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
Loading…
Add table
Add a link
Reference in a new issue