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,3 @@
|
|||
- content_for :header_tags do
|
||||
= stylesheet_link_tag 'application', plugin: 'redmine_git_hosting'
|
||||
= javascript_include_tag 'application', plugin: 'redmine_git_hosting'
|
|
@ -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)
|
|
@ -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 }
|
|
@ -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'
|
|
@ -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)) }
|
|
@ -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)
|
||||
});
|
||||
});
|
|
@ -0,0 +1 @@
|
|||
= render partial: 'gitolite_public_keys/view'
|
|
@ -0,0 +1,2 @@
|
|||
- content_for :header_tags do
|
||||
meta name="go-import" content="#{@repository.go_url} git #{@repository.go_access_url}"
|
|
@ -0,0 +1,3 @@
|
|||
- if @repositories.size > 1
|
||||
- content_for :sidebar do
|
||||
= call_hook(:view_repositories_show_sidebar, repository: @repository)
|
|
@ -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
|
|
@ -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; }"
|
|
@ -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}'); });
|
|
@ -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
|
|
@ -0,0 +1,2 @@
|
|||
- if User.current.allowed_to? :add_repository_xitolite_watchers, @project
|
||||
= watcher_link @repository, User.current
|
|
@ -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(); });
|
|
@ -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); }); });
|
|
@ -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
|
|
@ -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)
|
|
@ -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)
|
|
@ -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'); });
|
|
@ -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};
|
|
@ -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};
|
|
@ -0,0 +1,8 @@
|
|||
- report = RepositoryGlobalStats.new(repository).build
|
||||
|
||||
ul.thumbnails
|
||||
- report.each do |key, value|
|
||||
li.span4
|
||||
.thumbnail
|
||||
.title = key
|
||||
.value = value
|
|
@ -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();
|
||||
});
|
|
@ -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);'
|
|
@ -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);'
|
|
@ -0,0 +1,2 @@
|
|||
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_deployment_credentials/edit_modal') %>');
|
||||
showModal('ajax-modal', '600px');
|
|
@ -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
|
|
@ -0,0 +1,2 @@
|
|||
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_deployment_credentials/new_modal') %>');
|
||||
showModal('ajax-modal', '600px');
|
|
@ -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
|
|
@ -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);'
|
|
@ -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
|
|
@ -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);'
|
|
@ -0,0 +1,2 @@
|
|||
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_git_config_keys/edit_modal') %>');
|
||||
showModal('ajax-modal', '600px');
|
|
@ -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
|
|
@ -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
|
|
@ -0,0 +1,2 @@
|
|||
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_git_config_keys/new_modal') %>');
|
||||
showModal('ajax-modal', '600px');
|
|
@ -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
|
|
@ -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'); });
|
|
@ -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')
|
|
@ -0,0 +1,2 @@
|
|||
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_git_extras/sort_urls_modal') %>');
|
||||
showModal('ajax-modal', '400px');
|
|
@ -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')}) });
|
|
@ -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);'
|
|
@ -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
|
|
@ -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);'
|
|
@ -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
|
|
@ -0,0 +1,2 @@
|
|||
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_mirrors/edit_modal') %>');
|
||||
showModal('ajax-modal', '600px');
|
|
@ -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
|
|
@ -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
|
|
@ -0,0 +1,2 @@
|
|||
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_mirrors/new_modal') %>');
|
||||
showModal('ajax-modal', '600px');
|
|
@ -0,0 +1,2 @@
|
|||
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_mirrors/push_modal') %>');
|
||||
showModal('ajax-modal', '600px');
|
|
@ -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
|
|
@ -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);'
|
|
@ -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
|
|
@ -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);'
|
|
@ -0,0 +1,2 @@
|
|||
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_post_receive_urls/edit_modal') %>');
|
||||
showModal('ajax-modal', '600px');
|
|
@ -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
|
|
@ -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
|
|
@ -0,0 +1,2 @@
|
|||
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_post_receive_urls/new_modal') %>');
|
||||
showModal('ajax-modal', '600px');
|
|
@ -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
|
|
@ -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);'
|
|
@ -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
|
|
@ -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);'
|
|
@ -0,0 +1,2 @@
|
|||
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_protected_branches/edit_modal') %>');
|
||||
showModal('ajax-modal', '600px');
|
|
@ -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
|
|
@ -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'); });
|
|
@ -0,0 +1,2 @@
|
|||
$('#ajax-modal').html('<%= escape_javascript(render partial: 'repository_protected_branches/new_modal') %>');
|
||||
showModal('ajax-modal', '600px');
|
|
@ -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
|
|
@ -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(); });
|
|
@ -0,0 +1,4 @@
|
|||
div style='height: 50%;'
|
||||
ul.authors-list
|
||||
- @authors.each do |author|
|
||||
li = mail_to author.email, author.name
|
|
@ -0,0 +1,2 @@
|
|||
$('#ajax-modal').html("<%= escape_javascript(render partial: 'settings/redmine_git_hosting/install_hooks_result') %>");
|
||||
showModal('ajax-modal', '600px');
|
|
@ -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)
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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)
|
|
@ -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/>')
|
|
@ -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)
|
|
@ -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(); });
|
|
@ -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
|
|
@ -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);'
|
|
@ -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'
|
|
@ -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
|
29
plugins/redmine_git_hosting/app/views/users/index.api.rsb
Normal file
29
plugins/redmine_git_hosting/app/views/users/index.api.rsb
Normal 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
|
Loading…
Add table
Add a link
Reference in a new issue