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,3 @@
- content_for :header_tags do
= stylesheet_link_tag 'application', plugin: 'redmine_git_hosting'
= javascript_include_tag 'application', plugin: 'redmine_git_hosting'

View file

@ -0,0 +1,23 @@
- content_for :header_tags do
= additionals_library_load :clipboardjs
= stylesheet_link_tag 'git_urls', plugin: 'redmine_git_hosting'
= javascript_include_tag 'git_urls', plugin: 'redmine_git_hosting'
javascript:
$(function() {
setFirstGitUrl('.git_url_list'); setGitUrls('.git_url');
$('.clipboard-button').tooltip();
})
- repositories ||= Array.wrap(repository)
- if repositories.map(&:available_urls_sorted).any?
- repositories.sort_by { |r| r.is_default ? 0 : 1 }.each do |repository|
- next if repository.available_urls_sorted.empty?
- present repository do |p|
.repository-urls
= p.link_to_repository if repositories.count > 1
= p.git_urls_box
- else
#git_url_box = l(:label_repository_access_not_configured)

View file

@ -0,0 +1,16 @@
- if @project.module_enabled?(:repository) && \
@project.repository.is_a?(Repository::Xitolite) && \
User.current.allowed_to?(:view_changesets, @project)
.git_hosting
h3
= @project.repositories.count > 1 ? l(:label_repository_plural) : l(:label_repository)
= render partial: 'common/git_urls', locals: { repositories: @project.gitolite_repos }
- if @project.repositories.count > 1
.clear-both
p
= link_to l(:label_see_other_repositories), { controller: '/repositories',
action: 'show',
id: @project,
repository_id: @project.repository.identifier_param,
rev: nil,
path: nil }

View file

@ -0,0 +1,29 @@
#validation_messages
= error_messages_for 'gitolite_public_key'
= labelled_form_for :gitolite_public_key, GitolitePublicKey.new,
url: { controller: 'gitolite_public_keys', action: 'create', user_id: params[:id], tab: params[:id] && 'keys' },
html: { method: :post } do |f|
p
= f.text_field :title, label: :label_identifier_can_be_arbitrary, required: true, style: 'width: 97%;'
- if can_create_deployment_keys_for_some_project(@user)
p
= f.select :key_type,
options_for_select([[l(:label_user_key), 0], [l(:label_deploy_key), 1]]),
{ required: true, label: :label_key_type },
{ class: 'select_key_type' }
#key_type_options style="display: none;"
p
= f.check_box :delete_when_unused, required: true, label: :label_deployment_credential_delete_when_unused
p
= f.text_area :key, label: :label_public_key, required: true,
style: 'width: 97%; height: 200px; overflow: auto;',
cols: nil,
rows: nil
em
= l(:label_cut_and_paste)
br
br
= submit_tag l(:button_create), name: 'create_button'
= submit_tag l(:button_cancel), name: 'cancel_button'

View file

@ -0,0 +1,21 @@
table.list
- if ssh_keys.empty?
tr
td
label = l(:label_no_public_keys)
- else
- ssh_keys.each do |key|
tr class="#{'highlight' if @gitolite_public_key == key}"
td style="text-align: left;"
= h(key)
td style="text-align: left;"
i.fas.fa-check style="color: green; margin-left: 5px; margin-right: 5px;"
= key.fingerprint
- if params[:id]
td style="text-align: left;"
= key.gitolite_path
td.buttons style="width: 10%;"
= link_to l(:button_delete), public_key_path(key, user_id: params[:id]),
method: 'delete',
class: 'icon icon-del',
data: { confirm: l(:text_gitolite_key_destroy_confirmation, title: keylabel(key)) }

View file

@ -0,0 +1,37 @@
h3 = l(:label_my_public_keys)
fieldset.public_key_view
legend = l(:label_current_user_keys)
= render partial: 'gitolite_public_keys/ssh_keys', locals: { ssh_keys: @gitolite_user_keys }
br
fieldset.public_key_view
legend = l(:label_current_deploy_keys)
= render partial: 'gitolite_public_keys/ssh_keys', locals: { ssh_keys: @gitolite_deploy_keys }
br
fieldset.public_key_view
legend = l(:label_public_key_new)
= render partial: 'gitolite_public_keys/form', locals: { user: @user }
- content_for :header_tags do
= stylesheet_link_tag 'application', plugin: 'redmine_git_hosting'
javascript:
function key_type_change(element) {
var idx = element.selectedIndex;
if (idx == 0) {
$('#key_type_options').hide();
$('#gitolite_public_key_delete_when_unused').prop("checked", true);
} else {
$('#key_type_options').show();
}
}
$(document).ready(function() {
$('#gitolite_public_key_key_type').on('change', function() {
key_type_change(this)
});
});

View file

@ -0,0 +1 @@
= render partial: 'gitolite_public_keys/view'

View file

@ -0,0 +1,2 @@
- content_for :header_tags do
meta name="go-import" content="#{@repository.go_url} git #{@repository.go_access_url}"

View file

@ -0,0 +1,3 @@
- if @repositories.size > 1
- content_for :sidebar do
= call_hook(:view_repositories_show_sidebar, repository: @repository)

View file

@ -0,0 +1,64 @@
- if User.current.admin?
.contextual
= link_to l(:label_administration), plugin_settings_path(id: 'redmine_git_hosting'), class: 'icon icon-settings'
- if User.current.allowed_to? :manage_repository, @project
p = link_to l(:label_repository_new),
new_project_repository_path(@project),
class: 'icon icon-add'
- if @project.repositories.any?
.autoscroll
table.list
thead
tr
th = l :field_identifier
th = l :field_repository_is_default
th = l :label_scm
th = l :label_repository
th = l :label_repository_default_branch
th = l :label_repository_enabled_capabilities
th
tbody
- @project.repositories.sort.each do |repository|
tr
td = repository.identifier.presence || ''
td = checked_image repository.is_default?
td = repository.scm_name
td = link_to h(repository.url),
{ controller: 'repositories',
action: 'show',
id: @project,
repository_id: repository.identifier_param }
td
- if repository.is_a? Repository::Xitolite
span.label.label-info = repository.git_default_branch
td align='center'
- if repository.is_a? Repository::Xitolite
- if repository.git_annex_enabled?
= render_feature repository, :git_annex
- else
= render_feature repository, :deployment_credentials
= render_feature repository, :post_receive_urls
= render_feature repository, :mirrors
= render_feature repository, :git_daemon
= render_feature repository, :git_http
= render_feature repository, :git_notify
= render_feature repository, :protected_branch
= render_feature repository, :public_repo
td.buttons
- if User.current.allowed_to? :manage_repository, @project
= link_to l(:label_user_plural), committers_repository_path(repository), class: 'icon icon-user'
= link_to l(:button_edit), edit_repository_path(repository), class: 'icon icon-edit'
- if repository.is_a?(Repository::Xitolite) && repository.movable?
= link_to l(:button_move), move_repository_git_extras_path(repository), class: 'icon icon-move'
= delete_link repository_path(repository)
javascript:
$(function() {
$('.icon-git').tooltip();
})
- else
p.nodata = l :label_no_data

View file

@ -0,0 +1,6 @@
- if repository.downloadable?
= font_awesome_icon 'fas_download', post_text: l(:label_download_format)
'
= select_tag :download, options_for_select(available_download_format(repository, @rev)),
prompt: l(:label_download_select_format),
onchange: "if (this.value != '') { window.location = this.value; }"

View file

@ -0,0 +1,30 @@
- if @repository.is_a?(Repository::Xitolite) && !@repository.git_annex_enabled?
#repository-tabs
ul
- if User.current.git_allowed_to?(:view_repository_deployment_credentials, @repository)
li#tab-repository_deployment_credentials
= link_to font_awesome_icon('fas_lock', post_text: l(:label_deployment_credentials)),
repository_deployment_credentials_path(@repository)
- if User.current.git_allowed_to?(:view_repository_mirrors, @repository)
li#tab-repository_mirrors
= link_to font_awesome_icon('fas_cloud-upload-alt', post_text: l(:label_repository_mirrors)),
repository_mirrors_path(@repository)
- if User.current.git_allowed_to?(:view_repository_post_receive_urls, @repository)
li#tab-repository_post_receive_urls
= link_to font_awesome_icon('fas_external-link-alt', post_text: l(:label_post_receive_urls)),
repository_post_receive_urls_path(@repository)
- if User.current.git_allowed_to?(:view_repository_git_config_keys, @repository)
li#tab-repository_git_config_keys
= link_to font_awesome_icon('fas_th-list', post_text: l(:label_git_config_keys)),
repository_git_config_keys_path(@repository)
- if User.current.git_allowed_to?(:view_repository_protected_branches, @repository)
li#tab-repository_protected_branches
= link_to font_awesome_icon('fas_shield-alt', post_text: l(:label_protected_branches)),
repository_protected_branches_path(@repository)
javascript:
$(document).ready(function() { setRepositoryActiveTab('#{@tab}'); });

View file

@ -0,0 +1,13 @@
- if @repository.is_a?(Repository::Xitolite)
= render partial: 'common/git_hosting_js_headers'
.git_hosting.box
h3
= l(:label_repository_access_url)
- unless @repository.git_annex_enabled?
'
= link_to l(:label_sort_urls),
sort_urls_repository_git_extras_path(@repository),
remote: true
= render 'common/git_urls', repository: @repository

View file

@ -0,0 +1,2 @@
- if User.current.allowed_to? :add_repository_xitolite_watchers, @project
= watcher_link @repository, User.current

View file

@ -0,0 +1,17 @@
ul.repository.git
- @repositories.sort.each do |repo|
li class="#{'repository git' if repo.is_a? Repository::Xitolite}"
= link_to_repository repo, @repository
- if User.current.allowed_to? :manage_repository, @project
'
= link_to "(#{l(:label_settings)})", edit_repository_path(repo)
- if @repository.try(:watchers) && \
(User.current.allowed_to?(:add_repository_xitolite_watchers, @project) || \
(@repository.watchers.present? && User.current.allowed_to?(:view_repository_xitolite_watchers, @project)))
#watchers
= render 'watchers/watchers', watched: @repository
javascript:
$(document).ready(function() { $('#sidebar p').remove(); });

View file

@ -0,0 +1,14 @@
#readme_container.box
h2.readme_trigger style='cursor: pointer;'
| README
hr
#readme_at_repo_dir.wiki
- if html.html_safe.respond_to?(:force_encoding)
= html.html_safe.force_encoding('UTF-8')
- else
= html.html_safe
javascript:
$(document).ready(function() { $("#readme_trigger").click(function(){ $("#readme_at_repo_dir").toggle(500); }); });

View file

@ -0,0 +1,13 @@
- if @repository.is_a? Repository::Xitolite
- content_for :header_tags do
= stylesheet_link_tag 'application', plugin: 'redmine_git_hosting'
= stylesheet_link_tag 'markdown', plugin: 'redmine_git_hosting'
.git_hosting_urls.box
.container
.row
.col-md-8 style='vertical-align: middle;'
= render 'common/git_urls', repository: @repository
.col-md-4 style='text-align: right; vertical-align: middle;'
- if RedmineGitHosting::Config.download_revision_enabled?
= render 'repositories/download_revision', repository: @repository

View file

@ -0,0 +1,85 @@
- if repository.is_a? Repository::Xitolite
= form_for repository.extra, url: repository_git_extras_path(repository), html: { method: :put, remote: true } do |f|
.box.tabular
.container
.row
.col-md-12
#xitolite-messages
= error_messages_for repository.extra
.row
.col-md-6
- unless repository.git_annex_enabled?
p
= label_tag 'repository_git_extra[git_daemon]', l(:label_enable_git_daemon)
= f.check_box :git_daemon, disabled: (!repository.public_project? && !repository.public_repo?)
- if User.current.git_allowed_to?(:create_repository_protected_branches, repository)
p
= label_tag 'repository_git_extra[protected_branch]', l(:label_enable_protected_branches)
= f.check_box :protected_branch
p
= label_tag 'repository_git_extra[public_repo]', l(:label_enable_public_repo)
= f.check_box :public_repo
p
= label_tag 'repository_git_extra[git_http]', l(:label_enable_smart_http)
= f.check_box :git_http
p
= label_tag 'repository_git_extra[git_https]', l(:label_enable_smart_https)
= f.check_box :git_https
p
= label_tag 'repository_git_extra[git_go]', l(:label_enable_go_url)
= f.check_box :git_go
p
= label_tag 'repository_git_extra[git_ssh]', l(:label_enable_ssh_url)
= f.check_box :git_ssh
.col-md-6
p
= label_tag 'repository_git_extra[git_notify]', l(:label_enable_git_notify)
= f.check_box :git_notify
- if repository.git_notification_enabled?
p
= label_tag 'repository_git_extra[notification_sender]', l(:label_git_notification_sender)
= f.text_field :notification_sender
p
= label_tag 'repository_git_extra[notification_prefix]', l(:label_git_notification_prefix)
= f.text_field :notification_prefix
- unless repository.git_annex_enabled?
p
= label_tag 'repository_git_extra[default_branch]', l(:label_repository_default_branch)
- if repository.branches.present?
= f.select :default_branch, repository_branches_list(repository.branches)
- else
span.label.label-info = repository.git_default_branch
p
label = l :label_mirroring_keys_installed
= image_tag(RedmineGitHosting::Config.mirroring_keys_installed? ? 'true.png' : 'exclamation.png')
p
label = l :label_repository_exists_in_gitolite
= image_tag(repository.exists_in_gitolite? ? 'true.png' : 'exclamation.png')
p
- if repository.empty_in_gitolite?
label = l :label_empty_repository
= image_tag 'true.png'
- else
label = l :label_git_objects_count
= repository.git_objects_count
p
label = l :label_browse_repository
= link_to h(repository.url),
{ controller: 'repositories', action: 'show', id: @project, repository_id: repository.identifier_param }
p = f.submit l(:button_save)

View file

@ -0,0 +1,24 @@
.contextual
= render_repository_quick_jump(@repository)
h2
= link_to l(:label_settings), settings_project_path(@project, tab: 'repositories')
'
= Additionals::LIST_SEPARATOR
= l(:label_repository)
'
= Additionals::LIST_SEPARATOR
= @repository.redmine_name
.splitcontent
.splitcontentleft
= call_hook(:view_repository_edit_top, repository: @repository, project: @project)
= labelled_form_for :repository, @repository, url: repository_path(@repository), html: { method: :put, id: 'repository-form' } do |f|
= render partial: 'form', locals: { f: f }
.splitcontentright
#xitolite-options style='vertical-align: top;'
= render 'xitolite_options', repository: @repository
= call_hook(:view_repository_edit_bottom, repository: @repository, project: @project)

View file

@ -0,0 +1,88 @@
#flash_warning.flash.warning = l :notice_empty_repository
- if @repository.urls_are_viewable?
- content_for :header_tags do
= stylesheet_link_tag 'application', plugin: 'redmine_git_hosting'
.git_hosting_urls.box
.container
.row
.col-md-8 style='vertical-align: middle;'
= render 'common/git_urls', repository: @repository
.col-md-4 style='text-align: right; vertical-align: middle;'
.box
- if User.current.allowed_to? :view_changesets, @project
h3
= l :label_help_git_setup
| :
pre
code.shell.syntaxhl
= link_to l(:label_download_and_install_git), 'https://git-scm.com/download', class: 'external'
br
== render_shell_text "git config --global user.name \"#{User.current.name(:firstname_lastname)}\""
br
== render_shell_text "git config --global user.email #{User.current.mail || 'mail@example.com'}"
- if !User.current.anonymous? && User.current.gitolite_public_keys.empty?
br
= link_to 'Upload SSH Public Key', public_keys_path
- if User.current.allowed_to? :commit_access, @project
#repository_setup
h3
= l :label_help_repository_setup_new
| :
pre
code.shell.syntaxhl
== render_shell_text "mkdir #{@repository.redmine_name}"
br
== render_shell_text "cd #{@repository.redmine_name}"
br
== render_shell_text 'git init'
br
== render_shell_text 'touch readme.txt'
br
== render_shell_text 'git add readme.txt'
br
== render_shell_text "git commit -m 'Initializing #{@repository.redmine_name} repository'"
br
' git remote add origin
span.git_url_access
br
== render_shell_text 'git push -u origin master'
h3
= l :label_help_repository_setup_existing
| :
pre
code.shell.syntaxhl
== render_shell_text 'cd existing_git_rep'
br
' git remote add origin
span.git_url_access
br
== render_shell_text 'git push -u origin master'
h3
= l :label_help_repository_clone
| :
pre
code.shell.syntaxhl
' git clone
span.git_url_access
- else
= l :label_help_no_repo_rights
- content_for :sidebar do
h3 = l :label_repository_plural
ul.repository.git
- @repositories.sort.each do |repo|
li class="#{'repository git' if repo.is_a?(Repository::Xitolite)}"
= link_to_repository(repo, @repository)
- if User.current.allowed_to?(:manage_repository, @project)
'
= link_to "(#{l(:label_settings)})", edit_repository_path(repo)
javascript:
$(document).ready(function() { setGitUrlsInstructions('.git_url'); });

View file

@ -0,0 +1,49 @@
- report = RepositoryCommitsStats.new(repository)
#chart_commits_per_month style='height: 300px; width: 47%; margin: 10px; float: left;'
#chart_commits_per_day style='height: 300px; width: 47%; margin: 10px; float: left;'
.clear-both style='margin: 10px;'
#chart_commits_per_hour style = 'height: 500px; width: 47%; margin: 10px; float: left;'
#chart_commits_per_weekday style= 'height: 300px; width: 47%; margin: 10px; float: left;'
#chart_commits_per_weekday style='margin-top: 20px;'
javascript:
var chart_commits_per_month = new Object();
chart_commits_per_month.label = "#{l(:label_commits_per_month)}";
chart_commits_per_month.label_y_axis = "#{l(:label_commits_number)}";
chart_commits_per_month.target = '#chart_commits_per_month';
chart_commits_per_month.categories = #{report.commits_per_month[:categories].to_json.html_safe};
chart_commits_per_month.series = #{report.commits_per_month[:series].to_json.html_safe};
var chart_commits_per_day = new Object();
chart_commits_per_day.label = "#{l(:label_commits_per_day)}";
chart_commits_per_day.label_y_axis = "#{l(:label_commits_number)}";
chart_commits_per_day.target = '#chart_commits_per_day';
chart_commits_per_day.categories = #{report.commits_per_day[:categories].to_json.html_safe};
chart_commits_per_day.series = #{report.commits_per_day[:series].to_json.html_safe};
chart_commits_per_day.legend = {
layout: 'vertical',
align: 'left',
verticalAlign: 'top',
x: 50,
y: 50,
floating: true,
borderWidth: 1,
backgroundColor: '#fff'
};
var chart_commits_per_hour = new Object();
chart_commits_per_hour.label = "#{l(:label_commits_per_hour)}";
chart_commits_per_hour.label_y_axis = "#{l(:label_hour)}";
chart_commits_per_hour.label_x_axis = "#{l(:label_commits_number)}";
chart_commits_per_hour.target = '#chart_commits_per_hour';
chart_commits_per_hour.categories = #{report.commits_per_hours[:categories].to_json.html_safe};
chart_commits_per_hour.series = #{report.commits_per_hours[:series].to_json.html_safe};
var chart_commits_per_weekday = new Object();
chart_commits_per_weekday.label = "#{l(:label_commits_per_weekday)}";
chart_commits_per_weekday.target = '#chart_commits_per_weekday';
chart_commits_per_weekday.series = #{report.commits_per_weekday.to_json.html_safe};

View file

@ -0,0 +1,34 @@
- report = RepositoryContributorsStats.new(repository)
ul.thumbnails
- @author_charts = []
- report.commits_per_author.each do |commits_data|
- idx = report.commits_per_author.index(commits_data)
- @author_charts.push("chart_commits_per_author_#{idx}")
javascript:
var chart_commits_per_author_#{idx} = new Object();
chart_commits_per_author_#{idx}.label = "";
chart_commits_per_author_#{idx}.label_y_axis = "#{l(:label_commits_number)}";
chart_commits_per_author_#{idx}.target = '#chart_commits_per_author_#{idx}';
chart_commits_per_author_#{idx}.categories = #{commits_data[:categories].to_json.html_safe};
chart_commits_per_author_#{idx}.series = #{commits_data[:series].to_json.html_safe};
chart_commits_per_author_#{idx}.legend = {};
li.span6
.thumbnail id="contributor-#{idx}"
h4
= commits_data[:author_name]
'
small = commits_data[:author_mail]
h5 = commits_data[:total_commits]
div id="chart_commits_per_author_#{idx}" style='height: 200px; width: 100%'
#chart_commits_per_author
javascript:
var chart_commits_per_author = new Object();
chart_commits_per_author.label = "#{l(:label_commits_per_author)}";
chart_commits_per_author.label_y_axis = "#{l(:label_commits_number)}";
chart_commits_per_author.target = '#chart_commits_per_author';
chart_commits_per_author.categories = #{report.commits_per_author_global[:categories].to_json.html_safe};
chart_commits_per_author.series = #{report.commits_per_author_global[:series].to_json.html_safe};

View file

@ -0,0 +1,8 @@
- report = RepositoryGlobalStats.new(repository).build
ul.thumbnails
- report.each do |key, value|
li.span4
.thumbnail
.title = key
.value = value

View file

@ -0,0 +1,43 @@
h2 = l :label_statistics
#statistics-tabs
ul
li
a href="#statistics-global"
= l(:label_repository_statistics_global)
li
a href="#statistics-commits"
= l(:label_repository_statistics_commits)
li
a href="#statistics-contributors"
= l(:label_repository_statistics_contributors)
#statistics-global
= render 'repositories/statistics/global', repository: @repository
#statistics-commits
= render 'repositories/statistics/commits', repository: @repository
#statistics-contributors
= render 'repositories/statistics/contributors', repository: @repository
.clear-both style="margin: 10px;"
p = link_to l(:button_back), action: 'show', id: @project
- html_title(l(:label_repository), l(:label_statistics))
- content_for :header_tags do
= javascript_include_tag('highcharts/highcharts', plugin: 'redmine_git_hosting')
= javascript_include_tag('highcharts/modules/drilldown', plugin: 'redmine_git_hosting')
= stylesheet_link_tag 'application', plugin: 'redmine_git_hosting'
= javascript_include_tag 'set_highcharts', plugin: 'redmine_git_hosting'
- charts = @author_charts.map { |chart| "createZoomableAreaChart(#{chart});" }
javascript:
$(document).ready(function() {
createAreaChart(chart_commits_per_month);
createZoomableAreaChart(chart_commits_per_day);
createBarChart(chart_commits_per_hour);
createPieChart(chart_commits_per_weekday);
#{raw charts.join("\n")}
createColumnChart(chart_commits_per_author);
$("#statistics-tabs").tabs();
});

View file

@ -0,0 +1,17 @@
h3.title = l :label_deployment_credential_edit
= labelled_form_for :repository_deployment_credential, @credential,
url: repository_deployment_credential_path(@repository, @credential),
authenticity_token: form_authenticity_token,
html: { method: :put, class: 'tabular', remote: true } do |f|
.flash-messages = error_messages_for 'credential'
.box
p = f.select :perm, options_for_select(RepositoryDeploymentCredential::VALID_PERMS, @credential.perm), required: true
p = f.check_box :active
.buttons
= submit_tag l :button_save
'
= link_to_function l(:button_cancel), 'hideModal(this);'

View file

@ -0,0 +1,25 @@
h3.title = l(:label_deployment_credential_add)
= labelled_form_for :repository_deployment_credential, @credential,
url: repository_deployment_credentials_path(@repository),
html: { method: :post, class: 'tabular', remote: true } do |f|
.flash-messages = error_messages_for 'credential'
.box
- if @user_keys.present? || @other_keys.present?
p = f.select :gitolite_public_key_id,
build_list_of_keys(@user_keys, @other_keys, @disabled_keys),
required: true,
label: :label_deployment_credential_select_deploy_key
p = f.select :perm,
options_for_select(RepositoryDeploymentCredential::VALID_PERMS, RepositoryDeploymentCredential::DEFAULT_PERM),
required: true,
label: :label_permissions
- else
= link_to l(:label_deployment_credential_create_key_first), public_keys_path
.buttons
= submit_tag l(:button_add)
'
= link_to_function l(:button_cancel), 'hideModal(this);'

View file

@ -0,0 +1,2 @@
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_deployment_credentials/edit_modal') %>');
showModal('ajax-modal', '600px');

View file

@ -0,0 +1,54 @@
div
- if User.current.git_allowed_to?(:create_repository_deployment_credentials, @repository)
.contextual
= link_to l(:label_deployment_credential_add),
new_repository_deployment_credential_path(@repository),
remote: true,
class: 'icon icon-add'
h3 = l(:label_deployment_credentials)
- if @repository_deployment_credentials.any?
table.list
thead
tr
th = l(:label_deployment_credential_owner)
th = l(:label_deployment_credential_public_key_name)
th = l(:label_deployment_credential_public_key_file)
th = l(:label_permissions)
th = l(:label_deployment_credential_honored)
th = l(:field_active)
th
tbody
- @repository_deployment_credentials.sort_by { |x| [x.user.login, x.gitolite_public_key.title] }.each do |credential|
tr
td = credential.user.login
td
- if credential.user == User.current
= link_to credential.gitolite_public_key.title, public_keys_path
- elsif User.current.admin?
= link_to credential.gitolite_public_key.title, edit_user_path(credential.user, tab: 'keys')
- else
= credential.gitolite_public_key.title
td = credential.gitolite_public_key.gitolite_path
td = credential.perm
td.tick = checked_image_with_exclamation credential.honored?
td.tick = checked_image_with_exclamation credential.active?
td.buttons
- if User.current.git_allowed_to?(:edit_repository_deployment_credentials, @repository) && \
(User.current.admin? || User.current == credential.user)
= link_to l(:button_edit),
edit_repository_deployment_credential_path(@repository, credential),
remote: true,
class: 'icon icon-edit'
= link_to l(:button_delete),
repository_deployment_credential_path(@repository, credential),
remote: true,
method: :delete,
data: { confirm: l(:text_are_you_sure) },
class: 'icon icon-del'
- else
p.nodata = l :label_no_data

View file

@ -0,0 +1,2 @@
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_deployment_credentials/new_modal') %>');
showModal('ajax-modal', '600px');

View file

@ -0,0 +1,28 @@
- if git_config_keys.any?
table.list
thead
tr
th = l :label_key
th = l :field_value
th
tbody
- git_config_keys.each do |git_config_key|
tr
td
span.label.label-info = git_config_key.key
td
span.label.label-success = git_config_key.value
td.buttons
- if User.current.git_allowed_to?(:edit_repository_git_config_keys, @repository)
= link_to l(:button_edit),
edit_repository_git_config_key_path(@repository, git_config_key),
class: 'icon icon-edit'
= link_to l(:button_delete),
repository_git_config_key_path(@repository, git_config_key),
remote: true,
method: :delete,
data: { confirm: l(:text_are_you_sure) },
class: 'icon icon-del'
- else
p.nodata = l :label_no_data

View file

@ -0,0 +1,12 @@
h3.title = l :label_git_config_keys
= labelled_form_for :repository_git_config_key, @git_config_key,
url: repository_git_config_key_path(@repository, @git_config_key),
authenticity_token: form_authenticity_token,
html: { method: :put, class: 'tabular', remote: true } do |f|
= render partial: 'form', locals: { f: f }
.buttons
= submit_tag l(:button_save)
'
= link_to_function l(:button_cancel), 'hideModal(this);'

View file

@ -0,0 +1,9 @@
.flash-messages = error_messages_for 'git_config_key'
.box
p = f.select :type,
options_for_select(git_config_key_options, @git_config_key.type),
{ required: @git_config_key.new_record?, prompt: 'Select a key type' },
{ disabled: !@git_config_key.new_record? }
p = f.text_field :key, required: true, size: 65, label: :label_key
p = f.text_field :value, required: true, size: 65

View file

@ -0,0 +1,12 @@
h3.title = l(:label_git_config_keys)
= labelled_form_for :repository_git_config_key, @git_config_key,
url: repository_git_config_keys_path(@repository),
authenticity_token: form_authenticity_token,
html: { method: :post, class: 'tabular', remote: true } do |f|
= render partial: 'form', locals: { f: f }
.buttons
= submit_tag l(:button_add)
'
= link_to_function l(:button_cancel), 'hideModal(this);'

View file

@ -0,0 +1,2 @@
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_git_config_keys/edit_modal') %>');
showModal('ajax-modal', '600px');

View file

@ -0,0 +1,9 @@
api.array :repository_git_config_keys, api_meta(total_count: @repository_git_config_keys.count) do
@repository_git_config_keys.each do |git_config_key|
api.git_config_key do
api.id git_config_key.id
api.key git_config_key.key
api.value git_config_key.value
end
end
end

View file

@ -0,0 +1,32 @@
div
- if User.current.git_allowed_to?(:create_repository_git_config_keys, @repository)
.contextual
= link_to l(:label_git_config_key_add),
new_repository_git_config_key_path(@repository, type: 'git_config'),
remote: true,
class: 'icon icon-add'
h3
= l(:label_git_config_keys)
'
= link_to "(#{l(:label_gitolite_documentation)})",
'https://gitolite.com/gitolite/git-config.html',
class: 'external'
= render 'config_keys', git_config_keys: @repository_git_config_keys
- if User.current.git_allowed_to?(:create_repository_git_config_keys, @repository)
.contextual
= link_to l(:label_git_option_key_add),
new_repository_git_config_key_path(@repository, type: 'git_option'),
remote: true,
class: 'icon icon-add'
h3
= l(:label_git_option_keys)
'
= link_to "(#{l(:label_gitolite_documentation)})",
'https://gitolite.com/gitolite/options.html',
class: 'external'
= render 'config_keys', git_config_keys: @repository_git_option_keys

View file

@ -0,0 +1,2 @@
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_git_config_keys/new_modal') %>');
showModal('ajax-modal', '600px');

View file

@ -0,0 +1,5 @@
api.git_config_key do
api.id @git_config_key.id
api.key @git_config_key.key
api.value @git_config_key.value
end

View file

@ -0,0 +1,10 @@
ul#sortable-url.list-unstyled data-remote="true" data-update-url="#{sort_urls_repository_git_extras_path(@repository)}"
- @repository.available_urls_sorted.each_key do |url_type|
li.url_type.draggable id="repository_git_extra_#{url_type}"
= icon_for_url_type url_type
'
span
= label_for_url_type url_type
javascript:
$(document).ready(function() { setSortableElement('#sortable-url', '#sortable-url'); });

View file

@ -0,0 +1,17 @@
h2 = l :label_move_repository, repo_name: @repository.gitolite_repository_name
.box
= labelled_form_for :repository_mover, @move_repository_form,
url: move_repository_git_extras_path(@repository),
authenticity_token: form_authenticity_token,
html: { method: :post, class: 'tabular', data: { confirm: l(:text_are_you_sure) } } do |f|
.flash-messages = error_messages_for 'move_repository_form'
p
= f.select :project_id,
render_options_for_move_repo_select_box(@project),
required: true
p
= f.submit l(:button_move)
'
= link_to l(:button_cancel), settings_project_path(@project, tab: 'repositories')

View file

@ -0,0 +1,2 @@
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_git_extras/sort_urls_modal') %>');
showModal('ajax-modal', '400px');

View file

@ -0,0 +1,3 @@
$('#xitolite-options').html("<%= escape_javascript(render 'repositories/xitolite_options', repository: @repository) %>");
$('#xitolite-messages').append("<%= escape_javascript render_flash_messages %>");
$('#xitolite-messages').children().each(function(index, element){ $(element).delay(3000).slideUp(200, function(){$(this).alert('close')}) });

View file

@ -0,0 +1,12 @@
h3.title = l :label_mirror_edit
= labelled_form_for :repository_mirror, @mirror,
url: repository_mirror_path(@repository, @mirror),
authenticity_token: form_authenticity_token,
html: { method: :put, class: 'tabular', remote: true } do |f|
= render partial: 'form', locals: { f: f }
.buttons
= submit_tag l(:button_save)
'
= link_to_function l(:button_cancel), 'hideModal(this);'

View file

@ -0,0 +1,23 @@
.flash-messages = error_messages_for 'mirror'
.box
p = f.text_field :url, required: true, size: 65
em
p
= l :label_mirror_url_accepted_format
' :
br
| ssh://git@redmine.example.org/project1/project2/project3/project4.git
br
| ssh://git@redmine.example.org:2222/project1/project2/project3/project4.git
p = f.check_box :active
p = f.select :push_mode,
options_for_select(mirrors_options, @mirror.push_mode),
{ label: :label_mirror_push_mode },
onchange: 'push_mode_change(this); return false;'
#ref_spec_options style="#{'display: none;' if @mirror.mirror_mode?}"
p = f.check_box :include_all_branches, label: :label_mirror_include_all_branches
p = f.check_box :include_all_tags, label: :label_mirror_include_all_tags
p = f.text_field :explicit_refspec, label: :label_mirror_explicit_refspec, size: 65

View file

@ -0,0 +1,12 @@
h3.title = l :label_mirror_add
= labelled_form_for :repository_mirror, @mirror,
url: repository_mirrors_path(@repository),
authenticity_token: form_authenticity_token,
html: { method: :post, class: 'tabular', remote: true } do |f|
= render partial: 'form', locals: { f: f }
.buttons
= submit_tag l(:button_add)
'
= link_to_function l(:button_cancel), 'hideModal(this);'

View file

@ -0,0 +1,9 @@
p style='white-space: nowrap;'
= render_push_state @mirror, @push_failed
strong
= l :label_mirror_push_output
' :
pre class="mirror-push-#{'error' if @push_failed}"
= @shellout

View file

@ -0,0 +1,2 @@
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_mirrors/edit_modal') %>');
showModal('ajax-modal', '600px');

View file

@ -0,0 +1,13 @@
api.array :repository_mirrors, api_meta(total_count: @repository_mirrors.count) do
@repository_mirrors.each do |mirror|
api.mirror do
api.id mirror.id
api.url mirror.url
api.active mirror.active
api.push_mode mirror.push_mode_to_s
api.include_all_branches mirror.include_all_branches
api.include_all_tags mirror.include_all_tags
api.explicit_refspec mirror.explicit_refspec
end
end
end

View file

@ -0,0 +1,67 @@
div
- if User.current.git_allowed_to? :create_repository_mirrors, @repository
.contextual
= link_to l(:label_mirror_add),
new_repository_mirror_path(@repository),
remote: true,
class: 'icon icon-add'
h3 = l :label_repository_mirrors
- if @repository_mirrors.any?
table.list
thead
tr
th = l :field_url
th = l :label_mirror_refspec
th = l :label_mode
th = l :field_active
th
tbody
- @repository_mirrors.each do |mirror|
tr
td
= mirror.url
td
= refspec mirror, 64
td
= mirror_mode mirror
td.tick
= checked_image_with_exclamation mirror.active?
td.buttons
- if User.current.git_allowed_to?(:push_repository_mirrors, @repository)
= link_to font_awesome_icon('fas_rocket', post_text: l(:label_mirror_push), class: 'fa-lg'),
push_repository_mirror_path(@repository, mirror), remote: true
- if User.current.git_allowed_to?(:edit_repository_mirrors, @repository)
= link_to l(:button_edit), edit_repository_mirror_path(@repository, mirror), remote: true, class: 'icon icon-edit'
= link_to l(:button_delete),
repository_mirror_path(@repository, mirror),
remote: true,
method: :delete,
data: { confirm: l(:text_are_you_sure) },
class: 'icon icon-del'
- else
p.nodata = l :label_no_data
.git_hosting_spacer
div style='margin: 2px 3px; width: 99%;'
div
= clipboardjs_button_for 'mirror_pubkey'
span style='margin-left: 10px;'
= l :label_mirror_help
' :
.git_hosting_spacer
textarea#mirror_pubkey readonly='readonly' style='height: 100px; width: 99%; font-family: sans-serif;'
= RedmineGitHosting::Config.mirroring_public_key
.git_hosting_spacer

View file

@ -0,0 +1,2 @@
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_mirrors/new_modal') %>');
showModal('ajax-modal', '600px');

View file

@ -0,0 +1,2 @@
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_mirrors/push_modal') %>');
showModal('ajax-modal', '600px');

View file

@ -0,0 +1,9 @@
api.mirror do
api.id @mirror.id
api.url @mirror.url
api.active @mirror.active
api.push_mode @mirror.push_mode_to_s
api.include_all_branches @mirror.include_all_branches
api.include_all_tags @mirror.include_all_tags
api.explicit_refspec @mirror.explicit_refspec
end

View file

@ -0,0 +1,12 @@
h3.title = l :label_post_receive_url_edit
= labelled_form_for :repository_post_receive_url, @post_receive_url,
url: repository_post_receive_url_path(@repository, @post_receive_url),
authenticity_token: form_authenticity_token,
html: { method: :put, class: 'tabular', remote: true } do |f|
= render partial: 'form', locals: { f: f }
.buttons
= submit_tag l(:button_save)
'
= link_to_function l(:button_cancel), 'hideModal(this);'

View file

@ -0,0 +1,30 @@
.flash-messages = error_messages_for 'post_receive_url'
.box
p = f.url_field :url,
size: 65,
placeholder: 'https://example.com',
required: true
p = f.check_box :active
p = f.select :mode,
[['Github-style POST', :github],
['Empty POST request', :post],
['Empty GET request', :get]],
{},
onchange: 'post_mode_change(this); return false;'
#payload_options style="#{@post_receive_url.github_mode? ? '' : 'display: none;'}"
p = f.check_box :split_payloads
- if @repository.branches.any?
p = f.check_box :use_triggers, onchange: 'trigger_mode_change(this); return false;'
#triggers_options style="#{@post_receive_url.use_triggers? ? '' : 'display: none;'}"
= hidden_field_tag 'repository_post_receive_url[triggers][]', ''
- @repository.branches.each do |branch|
p
label
= check_box_tag 'repository_post_receive_url[triggers][]', branch.to_s, @post_receive_url.triggers.include?(branch.to_s)
= branch.to_s

View file

@ -0,0 +1,12 @@
h3.title = l :label_post_receive_url_add
= labelled_form_for :repository_post_receive_url, @post_receive_url,
url: repository_post_receive_urls_path(@repository),
authenticity_token: form_authenticity_token,
html: { method: :post, class: 'tabular', remote: true } do |f|
= render partial: 'form', locals: { f: f }
.buttons
= submit_tag l(:button_add)
'
= link_to_function l(:button_cancel), 'hideModal(this);'

View file

@ -0,0 +1,2 @@
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_post_receive_urls/edit_modal') %>');
showModal('ajax-modal', '600px');

View file

@ -0,0 +1,13 @@
api.array :repository_post_receive_urls, api_meta(total_count: @repository_post_receive_urls.count) do
@repository_post_receive_urls.each do |post_receive_url|
api.post_receive_url do
api.id post_receive_url.id
api.url post_receive_url.url
api.mode post_receive_url.mode.to_s
api.active post_receive_url.active
api.use_triggers post_receive_url.use_triggers
api.triggers post_receive_url.triggers
api.split_payloads post_receive_url.split_payloads
end
end
end

View file

@ -0,0 +1,54 @@
div
- if User.current.git_allowed_to? :create_repository_post_receive_urls, @repository
.contextual
= link_to l(:label_post_receive_url_add),
new_repository_post_receive_url_path(@repository),
remote: true, class: 'icon icon-add'
h3 = l(:label_post_receive_urls)
- if @repository_post_receive_urls.any?
table.list
thead
tr
th = l :field_url
th = l :label_mode
th = l :field_active
th = l :label_use_triggers
th = l :label_triggers
th
tbody
- @repository_post_receive_urls.each do |post_receive_url|
tr
td
= post_receive_url.url
td
= post_receive_mode post_receive_url
td.tick
= checked_image_with_exclamation post_receive_url.active?
td.tick
= checked_image_with_exclamation post_receive_url.use_triggers?
td
- post_receive_url.triggers.each do |trigger|
span.label.label-info
= trigger
td.buttons
- if User.current.git_allowed_to?(:edit_repository_post_receive_urls, @repository)
= link_to l(:button_edit),
edit_repository_post_receive_url_path(@repository, post_receive_url),
remote: true,
class: 'icon icon-edit'
= link_to l(:button_delete),
repository_post_receive_url_path(@repository, post_receive_url),
remote: true,
method: :delete,
data: { confirm: l(:text_are_you_sure) },
class: 'icon icon-del'
- else
p.nodata = l :label_no_data

View file

@ -0,0 +1,2 @@
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_post_receive_urls/new_modal') %>');
showModal('ajax-modal', '600px');

View file

@ -0,0 +1,9 @@
api.post_receive_url do
api.id @post_receive_url.id
api.url @post_receive_url.url
api.mode @post_receive_url.mode.to_s
api.active @post_receive_url.active
api.use_triggers @post_receive_url.use_triggers
api.triggers @post_receive_url.triggers
api.split_payloads @post_receive_url.split_payloads
end

View file

@ -0,0 +1,12 @@
h3.title = l :label_protected_branch_edit
= labelled_form_for :repository_protected_branche, @protected_branch,
url: repository_protected_branch_path(@repository, @protected_branch),
authenticity_token: form_authenticity_token,
html: { method: :put, class: 'tabular', remote: true } do |f|
= render partial: 'form', locals: { f: f }
.buttons
= submit_tag l(:button_save)
'
= link_to_function l(:button_cancel), 'hideModal(this);'

View file

@ -0,0 +1,35 @@
.flash-messages = error_messages_for 'protected_branch'
.box
p = f.text_field :path, required: true, size: 65, label: l(:label_branch_path)
p = f.select :permissions,
options_for_select(RepositoryProtectedBranche::VALID_PERMS, @protected_branch.permissions),
required: true,
label: :label_permissions
= hidden_field_tag 'user_ids[]', ''
= hidden_field_tag 'group_ids[]', ''
.container
.row
.col-md-6
h4
= font_awesome_icon 'fas_user', post_text: l(:label_user_plural), class: 'fa-lg'
- @project.users_available.each do |user|
p style='padding: 0px;'
label style='margin-left: 0; width: auto; font-weight: lighter;'
= check_box_tag 'user_ids[]', user.id, @protected_branch.users.include?(user)
= user
br
.col-md-6
h4
= font_awesome_icon 'fas_users', post_text: l(:label_group_plural), class: 'fa-lg'
- @project.groups_available.each do |group|
p style= 'padding: 0px;'
label style='margin-left: 0; width: auto; font-weight: lighter;'
= check_box_tag 'group_ids[]', group.id, @protected_branch.groups.include?(group)
= group
br

View file

@ -0,0 +1,12 @@
h3.title = l :label_protected_branch_add
= labelled_form_for :repository_protected_branche, @protected_branch,
url: repository_protected_branches_path(@repository),
authenticity_token: form_authenticity_token,
html: { method: :post, class: 'tabular', remote: true } do |f|
= render partial: 'form', locals: { f: f }
.buttons
= submit_tag l(:button_add)
'
= link_to_function l(:button_cancel), 'hideModal(this);'

View file

@ -0,0 +1,2 @@
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_protected_branches/edit_modal') %>');
showModal('ajax-modal', '600px');

View file

@ -0,0 +1,11 @@
api.array :repository_protected_branches, api_meta(total_count: @repository_protected_branches.count) do
@repository_protected_branches.each do |protected_branch|
api.protected_branch do
api.id protected_branch.id
api.path protected_branch.path
api.permissions protected_branch.permissions
api.user_list protected_branch.user_list
api.position protected_branch.position
end
end
end

View file

@ -0,0 +1,70 @@
div
- if User.current.git_allowed_to? :create_repository_protected_branches, @repository
.contextual
= link_to l(:label_protected_branch_add),
new_repository_protected_branch_path(@repository),
remote: true, class: 'icon icon-add'
h3
= l(:label_protected_branches)
= link_to "(#{l(:label_gitolite_documentation)})", 'https://gitolite.com/gitolite/conf.html#rules', class: 'external'
- if @repository_protected_branches.any?
table#protected_branches.list[
data-update-url="#{sort_repository_protected_branches_url}"
style="opacity: #{@repository.protected_branches_enabled? ? '1' : '0.5'}"]
thead
tr
th
th = l :label_permissions
th = l :label_branch_path
th = l :label_user_list
th
tbody
- @repository_protected_branches.each do |protected_branch|
tr.protected_branch id="protected_branch_#{protected_branch.id}"
td
span.handle
| [drag]
td
- color = protected_branch.permissions == '-' ? 'error' : 'success'
span.label class="label-#{color}"
= protected_branch.permissions
td style='font-family: Consolas;'
= protected_branch.path
td
- cnt = 0
- protected_branch.users.each do |user|
- if cnt.positive?
' ,
= link_to_user user
- cnt += 1
td.buttons
- if User.current.git_allowed_to?(:edit_repository_protected_branches, @repository)
= link_to l(:button_edit),
edit_repository_protected_branch_path(@repository, protected_branch),
remote: true,
class: 'icon icon-edit'
= link_to l(:button_clone),
clone_repository_protected_branch_path(@repository, protected_branch),
remote: true,
class: 'icon icon-copy'
= link_to l(:button_delete),
repository_protected_branch_path(@repository, protected_branch),
remote: true,
method: :delete,
data: { confirm: l(:text_are_you_sure) },
class: 'icon icon-del'
- unless @repository.protected_branches_enabled?
em = l :protected_branches_reminder
- else
p.nodata = l :label_no_data
javascript:
$(document).ready(function() { setSortableElement('#protected_branches tbody', '#protected_branches'); });

View file

@ -0,0 +1,2 @@
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_protected_branches/new_modal') %>');
showModal('ajax-modal', '600px');

View file

@ -0,0 +1,7 @@
api.protected_branch do
api.id @protected_branch.id
api.path @protected_branch.path
api.permissions @protected_branch.permissions
api.user_list @protected_branch.user_list
api.position @protected_branch.position
end

View file

@ -0,0 +1,23 @@
= render partial: 'common/git_hosting_js_headers'
- content_for :header_tags do
= additionals_library_load :select2
span
= l :label_need_help
' :
= link_to l(:label_redmine_git_hosting_wiki), RedmineGitHosting::Config::GITHUB_WIKI, class: 'external'
br
span
= l :label_open_issue
' :
= link_to l(:label_redmine_git_hosting_issue), RedmineGitHosting::Config::GITHUB_ISSUE, class: 'external'
br
br
= render_tabs gitolite_plugin_settings_tabs
javascript:
$(document).ready(function() { setSettingsActiveTab(); });

View file

@ -0,0 +1,4 @@
div style='height: 50%;'
ul.authors-list
- @authors.each do |author|
li = mail_to author.email, author.name

View file

@ -0,0 +1,2 @@
$('#ajax-modal').html("<%= escape_javascript(render partial: 'settings/redmine_git_hosting/install_hooks_result') %>");
showModal('ajax-modal', '600px');

View file

@ -0,0 +1,53 @@
/ Gitolite Access Config
ruby:
ssh_server_domain = RedmineGitHosting::Config.get_setting :ssh_server_domain
http_server_domain = RedmineGitHosting::Config.get_setting :http_server_domain
https_server_domain = RedmineGitHosting::Config.get_setting :https_server_domain
http_server_subdir = RedmineGitHosting::Config.get_setting :http_server_subdir
gitolite_http_by_default = RedmineGitHosting::Config.get_setting :gitolite_http_by_default
h3 = l :label_gitolite_access_config
p
label = l :label_ssh_server_domain
= text_field_tag 'settings[ssh_server_domain]', ssh_server_domain, size: 60, required: true
br
em.info
= l :label_default_domain_name
' :
= Setting.host_name.split('/').first
p
label = l :label_http_server_domain
= text_field_tag 'settings[http_server_domain]', http_server_domain, size: 60, required: true
br
em.info
= l :label_default_domain_name
' :
= Setting.host_name.split('/').first
p
label = l :label_https_server_domain
= text_field_tag 'settings[https_server_domain]', https_server_domain, size: 60
br
em.info
= l :label_https_server_domain_desc
p
label = l :label_http_server_subdir
= text_field_tag 'settings[http_server_subdir]', http_server_subdir, size: 60
p
label = l :label_gitolite_http_by_default
= select_tag 'settings[gitolite_http_by_default]', options_for_select(RepositoryGitExtra::SMART_HTTP_OPTIONS, gitolite_http_by_default)
p
= additionals_settings_checkbox :gitolite_daemon_by_default,
value: RedmineGitHosting::Config.get_setting(:gitolite_daemon_by_default, true),
value_is_bool: true
p
= additionals_settings_checkbox :download_revision_enabled,
value: RedmineGitHosting::Config.get_setting(:download_revision_enabled, true),
value_is_bool: true,
label: l(:label_gitolite_download_revision_enabled)

View file

@ -0,0 +1,37 @@
/ Gitolite Cache Config
ruby:
gitolite_cache_max_time = RedmineGitHosting::Config.get_setting :gitolite_cache_max_time
gitolite_cache_max_size = RedmineGitHosting::Config.get_setting :gitolite_cache_max_size
gitolite_cache_max_elements = RedmineGitHosting::Config.get_setting :gitolite_cache_max_elements
gitolite_cache_adapter = RedmineGitHosting::Config.get_setting :gitolite_cache_adapter
h3 = l :label_gitolite_cache_config
p
label = l :label_gitolite_cache_max_time
= select_tag 'settings[gitolite_cache_max_time]', options_for_select(git_cache_options, gitolite_cache_max_time)
br
p
label = l :label_gitolite_cache_max_size
= number_field_tag 'settings[gitolite_cache_max_size]',
gitolite_cache_max_size,
size: 20,
min: -1
em<
' MB
br
p
label = l :label_gitolite_cache_max_elements
= number_field_tag 'settings[gitolite_cache_max_elements]',
gitolite_cache_max_elements,
size: 20,
min: 1
br
p
label = l :label_gitolite_cache_adapter
= select_tag 'settings[gitolite_cache_adapter]', options_for_select(GitCache::CACHE_ADAPTERS, gitolite_cache_adapter)
br
em = l :label_gitolite_cache_adapter_desc

View file

@ -0,0 +1,55 @@
/ Gitolite Config File
ruby:
gitolite_config_file = RedmineGitHosting::Config.get_setting(:gitolite_config_file)
gitolite_identifier_prefix = RedmineGitHosting::Config.get_setting(:gitolite_identifier_prefix)
gitolite_identifier_strip_user_id = RedmineGitHosting::Config.get_setting(:gitolite_identifier_strip_user_id, true)
disable_button = gitolite_config_file == RedmineGitHosting::Config::GITOLITE_DEFAULT_CONFIG_FILE
h3 = l :label_gitolite_config_file
p
label = l :label_gitolite_config_file
= text_field_tag 'settings[gitolite_config_file]', gitolite_config_file, size: 60, required: true
p
label = l :label_gitolite_identifier_prefix
- if disable_button
= hidden_field_tag 'settings[gitolite_identifier_prefix]', gitolite_identifier_prefix
= text_field_tag 'settings[gitolite_identifier_prefix]', gitolite_identifier_prefix, size: 60, disabled: disable_button
br
em.info
= l :label_gitolite_identifier_prefix_desc
p
= additionals_settings_checkbox :gitolite_identifier_strip_user_id,
value: gitolite_identifier_strip_user_id,
value_is_bool: true,
disabled: disable_button
br
em.info
= l :label_gitolite_identifier_strip_user_id_desc
br
.git_hosting_access_box
h3 = l :label_ssh_keys_current_access_patterns
- gitolite_identifier_suffix = gitolite_identifier_strip_user_id ? '' : '_user_id'
pre
div
| SSH Key: #{gitolite_identifier_prefix}admin<em>#{gitolite_identifier_suffix}</em>@redmine_1394507971_600081.pub
div
| SSH Key: #{gitolite_identifier_prefix}bob<em>#{gitolite_identifier_suffix}</em>@redmine_1394507971_600081.pub
br
div
| repo repositories/test
div
| RW+ = <em>#{gitolite_identifier_prefix}</em>admin<em>#{gitolite_identifier_suffix}</em>
| <em>#{gitolite_identifier_prefix}</em>john<em>#{gitolite_identifier_suffix}</em>
div
| RW = <em>#{gitolite_identifier_prefix}</em>bob<em>#{gitolite_identifier_suffix}</em> alice
div
| R = <em>#{gitolite_identifier_prefix}</em>reporter<em>#{gitolite_identifier_suffix}</em> mike gitweb

View file

@ -0,0 +1,55 @@
/ Gitolite Global Config
ruby:
gitolite_recycle_bin_expiration_time = RedmineGitHosting::Config.get_setting :gitolite_recycle_bin_expiration_time
gitolite_temp_dir = RedmineGitHosting::Config.get_setting :gitolite_temp_dir
gitolite_log_level = RedmineGitHosting::Config.get_setting :gitolite_log_level
git_config_username = RedmineGitHosting::Config.get_setting :git_config_username
git_config_email = RedmineGitHosting::Config.get_setting :git_config_email
h3 = l :label_gitolite_global_config
p
label = l :label_gitolite_temp_dir
= text_field_tag 'settings[gitolite_temp_dir]', gitolite_temp_dir, size: 60, required: true
br
em.info
= l :label_gitolite_temp_dir_desc
p
label = l :label_gitolite_recycle_bin_expiration_time
= number_field_tag 'settings[gitolite_recycle_bin_expiration_time]',
gitolite_recycle_bin_expiration_time,
size: 10,
required: true,
min: -1
br
em.info
= l :label_gitolite_recycle_bin_expiration_time_desc
p
label = l :label_gitolite_log_level
= select_tag 'settings[gitolite_log_level]', options_for_select(log_level_options, gitolite_log_level)
br
em.info
= l :label_gitolite_log_level_desc
p
label = l :label_git_config_username
= text_field_tag 'settings[git_config_username]',
git_config_username.to_s,
size: 60,
required: true
br
em.info
= l :label_git_config_username_desc
p
label = l :label_git_config_email
= text_field_tag 'settings[git_config_email]',
git_config_email.to_s,
size: 60,
required: true
br
em.info
= l :label_git_config_email_desc

View file

@ -0,0 +1,45 @@
/ Gitolite Hooks Config
- gitolite_hooks_url = RedmineGitHosting::Config.get_setting :gitolite_hooks_url
.contextual
= link_to font_awesome_icon('fas_rocket', post_text: l(:label_install_gitolite_hooks), class: 'fa-lg'),
install_gitolite_hooks_path('redmine_git_hosting'),
remote: true
h3 = l :label_gitolite_hooks_config
.container
.col-md-6 style='vertical-align: top;'
p
= additionals_settings_checkbox :gitolite_overwrite_existing_hooks,
value: RedmineGitHosting::Config.get_setting(:gitolite_overwrite_existing_hooks, true),
value_is_bool: true
p
= additionals_settings_checkbox :gitolite_hooks_are_asynchronous,
value: RedmineGitHosting::Config.get_setting(:gitolite_hooks_are_asynchronous, true),
value_is_bool: true
p
= additionals_settings_checkbox :gitolite_hooks_debug,
value: RedmineGitHosting::Config.get_setting(:gitolite_hooks_debug, true),
value_is_bool: true
p
label = l :label_gitolite_hooks_url
= url_field_tag 'settings[gitolite_hooks_url]', gitolite_hooks_url, size: 60, required: true
br
em.info
= l :label_default_gitolite_hooks_url
' :
= "#{Setting.protocol}://#{Setting.host_name.split('/').first}"
p
label = l :label_gitolite_hooks_url
span.label.label-info = RedmineGitHosting::Config.gitolite_hooks_url
p
label = l :label_gitolite_hooks_namespace
span.label.label-info = RedmineGitHosting::Config.gitolite_hooks_namespace
#install_gitolite_hooks

View file

@ -0,0 +1,39 @@
/ Gitolite Notifications Config
ruby:
gitolite_notify_global_prefix = RedmineGitHosting::Config.get_setting :gitolite_notify_global_prefix
gitolite_notify_global_sender_address = RedmineGitHosting::Config.get_setting :gitolite_notify_global_sender_address
gitolite_notify_global_include = RedmineGitHosting::Config.get_setting :gitolite_notify_global_include
gitolite_notify_global_exclude = RedmineGitHosting::Config.get_setting :gitolite_notify_global_exclude
h3 = l :label_gitolite_notify_config
p
= additionals_settings_checkbox :gitolite_notify_by_default,
value: RedmineGitHosting::Config.get_setting(:gitolite_notify_by_default, true),
value_is_bool: true
p
label = l :label_gitolite_notify_global_prefix
= text_field_tag 'settings[gitolite_notify_global_prefix]', gitolite_notify_global_prefix, size: 60
p
label = l :label_gitolite_notify_global_sender_address
= text_field_tag 'settings[gitolite_notify_global_sender_address]', gitolite_notify_global_sender_address, size: 60
p
label = l :label_gitolite_notify_global_include
= additionals_select2_tag 'settings[gitolite_notify_global_include]',
options_for_select(gitolite_notify_global_include.map { |mail| [mail, mail] }, gitolite_notify_global_include),
data: gitolite_notify_global_include,
multiple: true,
placeholder: '+ add email',
tags: true
p
label = l :label_gitolite_notify_global_exclude
= additionals_select2_tag 'settings[gitolite_notify_global_exclude]',
options_for_select(gitolite_notify_global_exclude.map { |mail| [mail, mail] }, gitolite_notify_global_exclude),
data: gitolite_notify_global_exclude,
multiple: true,
placeholder: '+ add email',
tags: true

View file

@ -0,0 +1,46 @@
/ Gitolite SSH Config
ruby:
gitolite_user = RedmineGitHosting::Config.get_setting :gitolite_user
gitolite_server_host = RedmineGitHosting::Config.get_setting :gitolite_server_host
gitolite_server_port = RedmineGitHosting::Config.get_setting :gitolite_server_port
gitolite_ssh_private_key = RedmineGitHosting::Config.get_setting :gitolite_ssh_private_key
gitolite_ssh_public_key = RedmineGitHosting::Config.get_setting :gitolite_ssh_public_key
h3 = l :label_gitolite_ssh_config
p
label = l(:label_gitolite_user)
= text_field_tag 'settings[gitolite_user]',
gitolite_user,
size: 20,
required: true
p
label = l(:label_gitolite_ssh_private_key)
= text_field_tag 'settings[gitolite_ssh_private_key]',
gitolite_ssh_private_key,
size: 110,
required: true
p
label = l(:label_gitolite_ssh_public_key)
= text_field_tag 'settings[gitolite_ssh_public_key]',
gitolite_ssh_public_key,
size: 110,
required: true
p
label = l(:label_gitolite_server_host)
= text_field_tag 'settings[gitolite_server_host]',
gitolite_server_host,
size: 20,
required: true
p
label = l(:label_gitolite_server_port)
= number_field_tag 'settings[gitolite_server_port]',
gitolite_server_port,
size: 5,
min: 1,
max: 65_535,
required: true

View file

@ -0,0 +1,33 @@
/ Gitolite Storage Config
- gitolite_global_storage_dir = RedmineGitHosting::Config.get_setting(:gitolite_global_storage_dir)
- gitolite_redmine_storage_dir = RedmineGitHosting::Config.get_setting(:gitolite_redmine_storage_dir)
- gitolite_recycle_bin_dir = RedmineGitHosting::Config.get_setting(:gitolite_recycle_bin_dir)
h3 = l(:label_gitolite_storage_config)
p
label = l(:label_gitolite_global_storage_dir)
= text_field_tag 'settings[gitolite_global_storage_dir]',
gitolite_global_storage_dir,
size: 60,
required: true
br
em.info
= l(:label_gitolite_global_storage_dir_desc)
p
label = l(:label_gitolite_recycle_bin_dir)
= text_field_tag 'settings[gitolite_recycle_bin_dir]',
gitolite_recycle_bin_dir,
size: 60,
required: true
br
em.info
= l(:label_gitolite_recycle_bin_dir_desc)
p
label = l(:label_gitolite_redmine_storage_dir)
= text_field_tag 'settings[gitolite_redmine_storage_dir]', gitolite_redmine_storage_dir, size: 60
br
em.info
= l(:label_gitolite_redmine_storage_dir_desc)

View file

@ -0,0 +1,94 @@
h3 = l :label_permissions_header
table.list.git-results
tr
td = l(:label_temp_dir_writeable)
td = render_temp_dir_writeable(RedmineGitHosting::Config.temp_dir_writeable?(reset: true), RedmineGitHosting::Config.gitolite_admin_dir)
tr
td = l(:label_redmine_user)
td
span.label.label-success = RedmineGitHosting::Config.redmine_user
tr
td = l(:label_gitolite_user)
td
span.label.label-success = RedmineGitHosting::Config.gitolite_user
tr
td = l(:label_sudo_redmine_to_gitolite_user)
td
= image_tag(RedmineGitHosting::Config.can_redmine_sudo_to_gitolite_user? ? 'true.png' : 'exclamation.png')
tr
td = l :label_gitolite_bin_dir
td
- if RedmineGitHosting::Config.gitolite_bin_dir
span.label.label-success RedmineGitHosting::Config.gitolite_bin_dir
- else
= image_tag 'exclamation.png'
tr
td = l :label_gitolite_lib_dir
td
- if RedmineGitHosting::Config.gitolite_lib_dir
span.label.label-success RedmineGitHosting::Config.gitolite_lib_dir
- else
= image_tag 'exclamation.png'
tr
td = l :label_gitolite_local_code_dir
td
- if RedmineGitHosting::Config.gitolite_local_code_dir
span.label.label-success = RedmineGitHosting::Config.gitolite_local_code_dir
- else
= image_tag('exclamation.png')
- gitolite_checks = RedmineGitHosting::Config.check_hooks_install!
tr
td = l :label_gitolite_hooks_installed
td = render_gitolite_params_status(gitolite_checks[:hook_files])
tr
td = l :label_gitolite_hooks_params_installed
td = render_gitolite_params_status(gitolite_checks[:global_params])
tr
td = l :label_gitolite_mailer_params_installed
td = render_gitolite_params_status(gitolite_checks[:mailer_params])
tr
td = l :label_mirroring_keys_installed
td
= image_tag(RedmineGitHosting::Config.mirroring_keys_installed? ? 'true.png' : 'exclamation.png')
tr
td = l :label_git_version
td
span.label.label-success = Repository::Xitolite.scm_version_string
tr
td = l :label_gitolite_version
td = render_gitolite_version(RedmineGitHosting::Config.gitolite_version)
tr
td = l(:label_gitolite_repository_count)
td
span.label.label-success = RedmineGitHosting::Config.gitolite_repository_count
tr
td = l :label_gitolite_rugged_features
td
= render_rugged_mandatory_features
= render_rugged_optional_features
br
fieldset.box.tabular
legend = l :label_gitolite_banner
pre == RedmineGitHosting::Config.gitolite_banner
br
fieldset.box.tabular
legend = l(:label_path_directories)
pre == (ENV['PATH']).gsub(/:/, '<br/>')

View file

@ -0,0 +1,130 @@
/ Gitolite Display Access
ruby:
gitolite_user = RedmineGitHosting::Config.get_setting :gitolite_user
ssh_server_domain = RedmineGitHosting::Config.get_setting :ssh_server_domain
git_shp = ssh_server_domain.match(/:\d+$/)
gitolite_global_storage_dir = RedmineGitHosting::Config.get_setting :gitolite_global_storage_dir
gitolite_redmine_storage_dir = RedmineGitHosting::Config.get_setting :gitolite_redmine_storage_dir
http_server_subdir = RedmineGitHosting::Config.get_setting :http_server_subdir
http_server_domain = RedmineGitHosting::Config.http_root_url
https_server_domain = RedmineGitHosting::Config.https_root_url
hierarchical_organisation = RedmineGitHosting::Config.get_setting :hierarchical_organisation, true
.git_hosting_access_box
h3 = l :label_repos_current_access_patterns
span = t :display_access_setup1_html
br
br
span = t :display_access_setup2_html
br
br
span = t :display_access_setup3_html
p
label = l(:label_default_repository)
br
label
= l :label_storage_directory
' :
= "~#{gitolite_user}/#{gitolite_global_storage_dir}#{gitolite_redmine_storage_dir}"
em
= "#{'project1/project2/' if hierarchical_organisation}project3.git"
br
label
= l :label_ssh_access
' :
= "#{'ssh://' if git_shp}#{gitolite_user}@#{ssh_server_domain}#{git_shp ? '/' : ':'}#{gitolite_redmine_storage_dir}"
em
= "#{'project1/project2/' if hierarchical_organisation}project3.git"
br
label
= l :label_http_access
' :
| http://
em
| redmine-user
= "@#{https_server_domain}/#{http_server_subdir}"
em
= "#{'project1/project2/' if hierarchical_organisation}project3.git"
br
label
= l :label_https_access
' :
| https://
em
| redmine-user
= "@#{https_server_domain}/#{http_server_subdir}"
em
= "#{'project1/project2/' if hierarchical_organisation}project3.git"
p
label = l :label_example_repository
br
label
= l :label_storage_directory
' :
= "~#{gitolite_user}/#{gitolite_global_storage_dir}#{gitolite_redmine_storage_dir}"
em
= "#{'project1/project2/project3/' if hierarchical_organisation}example.git"
br
label
= l :label_ssh_access
' :
= "#{'ssh://' if git_shp}#{gitolite_user}@#{ssh_server_domain}#{git_shp ? '/' : ':'}#{gitolite_redmine_storage_dir}"
em
= "#{'project1/project2/project3/' if hierarchical_organisation}example.git"
br
label
= l :label_http_access
' :
| http://
em
| redmine-user
= "@#{https_server_domain}/#{http_server_subdir}"
em
= "#{'project1/project2/project3/' if hierarchical_organisation}example.git"
br
label
= l :label_https_access
' :
| https://
em
| redmine-user
= "@#{https_server_domain}/#{http_server_subdir}"
em
= "#{'project1/project2/project3/' if hierarchical_organisation}example.git"
br
br
label
= l :label_etcetera
| ...
= t :display_access_emphasis_html
'
== hierarchical_organisation ? l(:display_access_hierarchical) : l(:display_access_flat)

View file

@ -0,0 +1,28 @@
h3 = l(:label_empty_recycle_bin)
- if !RedmineGitHosting::RecycleBin || !RedmineGitHosting::RecycleBin.content.empty?
table.list
tr
th = l(:label_repository)
th = l(:label_recycle_bin_content_size)
th
= l(:label_delete_from_recyle_bin)
| (
= link_to l(:label_select_all), 'javascript:void(0);', id: 'select_all_delete'
| )
- RedmineGitHosting::RecycleBin.content.each do |trash_object|
tr
td = trash_object.path
td = trash_object.size
td = check_box_tag 'settings[rescue][delete_trash_repo][]', trash_object.path, false, class: 'empty_trash'
#delete_warning.alert.alert-error style='display: none;'
= l(:label_delete_warning)
- else
p.nodata style='padding: 5px 0 0;'
= l(:label_no_data)
javascript:
$(document).ready(function() { setRecycleBinWarnings(); });

View file

@ -0,0 +1,11 @@
p
= label_tag 'settings[rescue][resync_all_projects]', l(:label_resync_all_projects)
= check_box_tag 'settings[rescue][resync_all_projects]', 'true', false
p
= label_tag 'settings[rescue][resync_all_ssh_keys]', l(:label_resync_all_ssh_keys)
= check_box_tag 'settings[rescue][resync_all_ssh_keys]', 'true', false
p
= label_tag 'settings[rescue][flush_gitolite_cache]', l(:label_flush_cache)
= check_box_tag 'settings[rescue][flush_gitolite_cache]', 'true', false

View file

@ -0,0 +1,15 @@
h3.title = l :label_install_hook_results
table.list.git-results
tr
td = l :label_gitolite_hooks_installed
td = render_gitolite_params_status @gitolite_checks[:hook_files]
tr
td = l :label_gitolite_hooks_params_installed
td = render_gitolite_params_status @gitolite_checks[:global_params]
tr
td = l :label_gitolite_mailer_params_installed
td = render_gitolite_params_status @gitolite_checks[:mailer_params]
.buttons
= link_to_function l(:button_cancel), 'hideModal(this);'

View file

@ -0,0 +1,34 @@
/ Redmine Config
- all_projects_use_git = RedmineGitHosting::Config.get_setting(:all_projects_use_git, true)
h3 = l :label_redmine_config
p
= additionals_settings_checkbox :redmine_has_rw_access_on_all_repos,
value: RedmineGitHosting::Config.get_setting(:redmine_has_rw_access_on_all_repos, true),
value_is_bool: true
p
= additionals_settings_checkbox :all_projects_use_git, value: all_projects_use_git, value_is_bool: true
p
= additionals_settings_checkbox :init_repositories_on_create,
value: RedmineGitHosting::Config.get_setting(:init_repositories_on_create, true),
value_is_bool: true,
disabled: !all_projects_use_git
p
= additionals_settings_checkbox :delete_git_repositories,
value: RedmineGitHosting::Config.get_setting(:delete_git_repositories, true),
value_is_bool: true
em.info
= l(:info_delete_git_repositories)
p
= additionals_settings_checkbox :hierarchical_organisation,
value: RedmineGitHosting::Config.get_setting(:hierarchical_organisation, true),
value_is_bool: true
br
= render partial: 'settings/redmine_git_hosting/gitolite_display_access'

View file

@ -0,0 +1,5 @@
/ Gitolite Sidekiq Config
p
= additionals_settings_checkbox :gitolite_use_sidekiq,
value: RedmineGitHosting::Config.get_setting(:gitolite_use_sidekiq, true),
value_is_bool: true

View file

@ -0,0 +1,29 @@
api.array :users, api_meta(total_count: @user_count, offset: @offset, limit: @limit) do
@users.each do |user|
api.user do
api.id user.id
api.login user.login
api.admin user.admin?
api.firstname user.firstname
api.lastname user.lastname
api.mail user.mail
api.created_on user.created_on
api.updated_on user.updated_on
api.last_login_on user.last_login_on
api.passwd_changed_on user.passwd_changed_on
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
render_api_custom_values user.visible_custom_field_values, api
end
end
end