Añade plugin Redmine Git Hosting 4.0.2
This commit is contained in:
parent
472cb1ea76
commit
bdd66d941f
494 changed files with 36768 additions and 0 deletions
|
@ -0,0 +1,31 @@
|
|||
<% @entries.each do |entry| %>
|
||||
<% tr_id = Digest::MD5.hexdigest(entry.path)
|
||||
depth = params[:depth].to_i %>
|
||||
<% ent_path = Redmine::CodesetUtil.replace_invalid_utf8(entry.path) %>
|
||||
<% ent_name = Redmine::CodesetUtil.replace_invalid_utf8(entry.name) %>
|
||||
<tr id="<%= tr_id %>" class="<%= h params[:parent_id] %> entry <%= entry.kind %>">
|
||||
<td style="padding-left: <%=18 * depth%>px;" class="<%=
|
||||
@repository.report_last_commit ? "filename" : "filename_no_report" %>">
|
||||
<% if entry.is_dir? %>
|
||||
<span class="expander" onclick="scmEntryClick('<%= tr_id %>', '<%= escape_javascript(url_for(
|
||||
:action => 'show',
|
||||
:id => @project,
|
||||
:repository_id => @repository.identifier_param,
|
||||
:path => to_path_param(ent_path),
|
||||
:rev => @rev,
|
||||
:depth => (depth + 1),
|
||||
:parent_id => tr_id)) %>');"> </span>
|
||||
<% end %>
|
||||
<%= link_to h(ent_name),
|
||||
{:action => (entry.is_dir? ? 'show' : 'changes'), :id => @project, :repository_id => @repository.identifier_param, :path => to_path_param(ent_path), :rev => @rev},
|
||||
:class => (entry.is_dir? ? 'icon icon-folder' : "icon icon-file #{Redmine::MimeType.css_class_of(ent_name)}")%>
|
||||
</td>
|
||||
<td class="size"><%= (entry.size ? number_to_human_size(entry.size) : "?") unless entry.is_dir? %></td>
|
||||
<% if @repository.report_last_commit %>
|
||||
<td class="revision"><%= link_to_revision2(entry.changeset, @repository) if entry.changeset %></td>
|
||||
<td class="age"><%= distance_of_time_in_words(entry.lastrev.time, Time.now) if entry.lastrev && entry.lastrev.time %></td>
|
||||
<td class="author"><%= entry.author %></td>
|
||||
<td class="comments"><%= entry.changeset.comments.truncate(50) if entry.changeset %></td>
|
||||
<% end %>
|
||||
</tr>
|
||||
<% end %>
|
|
@ -0,0 +1,51 @@
|
|||
<% show_revision_graph = ( @repository.supports_revision_graph? && path.blank? ) %>
|
||||
<%= if show_revision_graph && revisions && revisions.any?
|
||||
indexed_commits, graph_space = index_commits(revisions, @repository.branches) do |scmid|
|
||||
url_for(
|
||||
:controller => 'archived_repositories',
|
||||
:action => 'revision',
|
||||
:id => project,
|
||||
:repository_id => @repository.identifier_param,
|
||||
:rev => scmid)
|
||||
end
|
||||
render :partial => 'revision_graph',
|
||||
:locals => {
|
||||
:commits => indexed_commits,
|
||||
:space => graph_space
|
||||
}
|
||||
end %>
|
||||
<%= form_tag(
|
||||
{:controller => 'archived_repositories', :action => 'diff', :id => project,
|
||||
:repository_id => @repository.identifier_param, :path => to_path_param(path)},
|
||||
:method => :get
|
||||
) do %>
|
||||
<table class="list changesets">
|
||||
<thead><tr>
|
||||
<th>#</th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th><%= l(:label_date) %></th>
|
||||
<th><%= l(:field_author) %></th>
|
||||
<th><%= l(:field_comments) %></th>
|
||||
</tr></thead>
|
||||
<tbody>
|
||||
<% show_diff = revisions.size > 1 %>
|
||||
<% line_num = 1 %>
|
||||
<% revisions.each do |changeset| %>
|
||||
<tr class="changeset <%= cycle 'odd', 'even' %>">
|
||||
<% id_style = (show_revision_graph ? "padding-left:#{(graph_space + 1) * 20}px" : nil) %>
|
||||
<%= content_tag(:td, :class => 'id', :style => id_style) do %>
|
||||
<%= link_to_revision2(changeset, @repository) %>
|
||||
<% end %>
|
||||
<td class="checkbox"><%= radio_button_tag('rev', changeset.identifier, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('#cbto-#{line_num+1}').attr('checked',true);") if show_diff && (line_num < revisions.size) %></td>
|
||||
<td class="checkbox"><%= radio_button_tag('rev_to', changeset.identifier, (line_num==2), :id => "cbto-#{line_num}", :onclick => "if ($('#cb-#{line_num}').attr('checked')) {$('#cb-#{line_num-1}').attr('checked',true);}") if show_diff && (line_num > 1) %></td>
|
||||
<td class="committed_on"><%= format_time(changeset.committed_on) %></td>
|
||||
<td class="author"><%= changeset.author.to_s.truncate(30) %></td>
|
||||
<td class="comments"><%= textilizable(truncate_at_line_break(changeset.comments)) %></td>
|
||||
</tr>
|
||||
<% line_num += 1 %>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
<%= submit_tag(l(:label_view_diff), :name => nil) if show_diff %>
|
||||
<% end %>
|
|
@ -0,0 +1,46 @@
|
|||
<%= call_hook(:view_repositories_show_contextual, { :repository => @repository, :project => @project }) %>
|
||||
|
||||
<div class="contextual">
|
||||
<%= render :partial => 'navigation' %>
|
||||
</div>
|
||||
|
||||
<h2><%= render :partial => 'breadcrumbs', :locals => { :path => @path, :kind => 'file', :revision => @rev } %></h2>
|
||||
|
||||
<%= render :partial => 'link_to_functions' %>
|
||||
|
||||
<% colors = Hash.new {|k,v| k[v] = (k.size % 12) } %>
|
||||
|
||||
<div class="autoscroll">
|
||||
<table class="filecontent annotate syntaxhl">
|
||||
<tbody>
|
||||
<% line_num = 1; previous_revision = nil %>
|
||||
<% syntax_highlight_lines(@path, Redmine::CodesetUtil.to_utf8_by_setting(@annotate.content)).each do |line| %>
|
||||
<% revision = @annotate.revisions[line_num - 1] %>
|
||||
<tr id="L<%= line_num %>" class="bloc-<%= revision.nil? ? 0 : colors[revision.identifier || revision.revision] %>">
|
||||
<th class="line-num"><a href="#L<%= line_num %>"><%= line_num %></a></th>
|
||||
<td class="revision">
|
||||
<% if revision && revision != previous_revision %>
|
||||
<%= revision.identifier ?
|
||||
link_to_revision2(revision, @repository) : format_revision(revision) %>
|
||||
<% end %>
|
||||
</td>
|
||||
<td class="author">
|
||||
<% if revision && revision != previous_revision %>
|
||||
<% author = Redmine::CodesetUtil.to_utf8(revision.author.to_s,
|
||||
@repository.repo_log_encoding) %>
|
||||
<%= author.split('<').first %>
|
||||
<% end %>
|
||||
</td>
|
||||
<td class="line-code"><pre><%= line.html_safe %></pre></td>
|
||||
</tr>
|
||||
<% line_num += 1; previous_revision = revision %>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<% html_title(l(:button_annotate)) -%>
|
||||
|
||||
<% content_for :header_tags do %>
|
||||
<%= stylesheet_link_tag 'scm' %>
|
||||
<% end %>
|
|
@ -0,0 +1,89 @@
|
|||
<%# This is used to display basic git setup instructions, like on github... %>
|
||||
<% flash.now[:warning] = l(:notice_empty_repository) %>
|
||||
|
||||
<div class="box">
|
||||
<% if User.current.allowed_to?(:view_changesets, @project) %>
|
||||
<h2><%= l(:label_help_git_setup) %> :</h2>
|
||||
|
||||
<pre>
|
||||
<a href="https://git-scm.com/download" target="_blank"><%= l(:label_download_and_install_git) %></a>
|
||||
git config --global user.name "<%= User.current.name(:firstname_lastname) %>"
|
||||
git config --global user.email <%= User.current.mail ? User.current.mail : "mail@example.com" %>
|
||||
<% if !User.current.anonymous? && User.current.gitolite_public_keys.active.length == 0 %>
|
||||
<%= link_to "Upload SSH Public Key", {:controller => 'my', :action => 'account'} %>
|
||||
<% end %>
|
||||
</pre>
|
||||
|
||||
<% if User.current.allowed_to?(:commit_access, @project) %>
|
||||
<div id="repository_setup">
|
||||
<h2><%= l(:label_help_repository_setup_new) %> :</h2>
|
||||
<pre>
|
||||
mkdir <%= @repository.redmine_name %>
|
||||
cd <%= @repository.redmine_name %>
|
||||
git init
|
||||
touch readme.txt
|
||||
git add readme.txt
|
||||
git commit -m 'Initializing <%= @repository.redmine_name %> repository'
|
||||
git remote add origin <span class="git_url_access"></span>
|
||||
git push -u origin master
|
||||
</pre>
|
||||
|
||||
<h2><%= l(:label_help_repository_setup_existing) %> :</h2>
|
||||
<pre>
|
||||
cd existing_git_repo
|
||||
git remote add origin <span class="git_url_access"></span>
|
||||
git push -u origin master
|
||||
</pre>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<h2><%= l(:label_help_repository_clone) %> :</h2>
|
||||
<pre>
|
||||
git clone <span class="git_url_access"></span>
|
||||
</pre>
|
||||
<% else %>
|
||||
<%= l(:label_help_no_repo_rights) %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<% content_for :sidebar do %>
|
||||
<h3><%= l(:label_repository_plural) %></h3>
|
||||
<ul class="repository git">
|
||||
<% @repositories.sort.each do |repo| %>
|
||||
<li class="repository git"><%= link_to h(repo.name), {:controller => 'archived_repositories', :action => 'show', :id => @project, :repository_id => repo.identifier_param, :rev => nil, :path => nil},
|
||||
:class => 'repository' + (@repository.is_a?(Repository::Xitolite) ? ' git' : '') + (repo == @repository ? ' selected' : '') %>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
||||
<% if @repository.is_a?(Repository::Xitolite) && @repository.urls_are_viewable? %>
|
||||
<div class="git_hosting_urls">
|
||||
<h3><%= l(:label_repository_access_url) %></h3>
|
||||
<%= render :partial => 'common/git_urls', :locals => {:repository => @repository} %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<% content_for :header_tags do %>
|
||||
<%= javascript_tag do %>
|
||||
$(document).ready(function() {
|
||||
var key = $('#git_url_list li').first().attr('id');
|
||||
var access = access_list[key];
|
||||
|
||||
$('.git_url_access').html(access.url);
|
||||
|
||||
$('#git_url_list li').on('click', function(){
|
||||
var key = $(this).attr('id');
|
||||
var access = access_list[key];
|
||||
|
||||
$('.git_url_access').html(access.url);
|
||||
|
||||
if (access.commiter == true) {
|
||||
$('#repository_setup').show();
|
||||
} else {
|
||||
$('#repository_setup').hide();
|
||||
}
|
||||
});
|
||||
});
|
||||
<% end %>
|
||||
<% end %>
|
|
@ -0,0 +1,17 @@
|
|||
h2 = l(:label_archived_repositories)
|
||||
|
||||
- if @archived_projects.any?
|
||||
ul
|
||||
- @archived_projects.each do |project|
|
||||
- if project.repositories.any?
|
||||
li
|
||||
= project.name
|
||||
ul
|
||||
- project.repositories.each do |repository|
|
||||
li
|
||||
= link_to h(repository.url), { controller: 'archived_repositories',
|
||||
action: 'show',
|
||||
id: project,
|
||||
repository_id: repository.identifier_param }
|
||||
- else
|
||||
p.nodata = l(:label_no_data)
|
|
@ -0,0 +1,101 @@
|
|||
<div class="contextual">
|
||||
«
|
||||
<% unless @changeset.previous.nil? -%>
|
||||
<%= link_to_revision2(@changeset.previous, @repository, :text => l(:label_previous)) %>
|
||||
<% else -%>
|
||||
<%= l(:label_previous) %>
|
||||
<% end -%>
|
||||
|
|
||||
<% unless @changeset.next.nil? -%>
|
||||
<%= link_to_revision2(@changeset.next, @repository, :text => l(:label_next)) %>
|
||||
<% else -%>
|
||||
<%= l(:label_next) %>
|
||||
<% end -%>
|
||||
»
|
||||
|
||||
<%= form_tag({:controller => 'archived_repositories',
|
||||
:action => 'revision',
|
||||
:id => @project,
|
||||
:repository_id => @repository.identifier_param,
|
||||
:rev => nil},
|
||||
:method => :get) do %>
|
||||
<%= text_field_tag 'rev', @rev, :size => 8 %>
|
||||
<%= submit_tag 'OK', :name => nil %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<h2><%= avatar(@changeset.user, :size => "24") %><%= l(:label_revision) %> <%= format_revision(@changeset) %></h2>
|
||||
|
||||
<% if @changeset.scmid.present? || @changeset.parents.present? || @changeset.children.present? %>
|
||||
<table class="revision-info">
|
||||
<% if @changeset.scmid.present? %>
|
||||
<tr>
|
||||
<td>ID</td><td><%= h(@changeset.scmid) %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
<% if @changeset.parents.present? %>
|
||||
<tr>
|
||||
<td><%= l(:label_parent_revision) %></td>
|
||||
<td>
|
||||
<%= @changeset.parents.collect{
|
||||
|p| link_to_revision2(p, @repository, :text => format_revision(p))
|
||||
}.join(", ").html_safe %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
<% if @changeset.children.present? %>
|
||||
<tr>
|
||||
<td><%= l(:label_child_revision) %></td>
|
||||
<td>
|
||||
<%= @changeset.children.collect{
|
||||
|p| link_to_revision2(p, @repository, :text => format_revision(p))
|
||||
}.join(", ").html_safe %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</table>
|
||||
<% end %>
|
||||
|
||||
<p>
|
||||
<span class="author">
|
||||
<%= authoring(@changeset.committed_on, @changeset.author) %>
|
||||
</span>
|
||||
</p>
|
||||
|
||||
<%= textilizable @changeset.comments %>
|
||||
|
||||
<% if @changeset.issues.visible.any? || User.current.allowed_to?(:manage_related_issues, @repository.project) %>
|
||||
<%= render :partial => 'related_issues' %>
|
||||
<% end %>
|
||||
|
||||
<% if User.current.allowed_to?(:browse_repository, @project) %>
|
||||
<h3><%= l(:label_attachment_plural) %></h3>
|
||||
<ul id="changes-legend">
|
||||
<li class="change change-A"><%= l(:label_added) %></li>
|
||||
<li class="change change-M"><%= l(:label_modified) %></li>
|
||||
<li class="change change-C"><%= l(:label_copied) %></li>
|
||||
<li class="change change-R"><%= l(:label_renamed) %></li>
|
||||
<li class="change change-D"><%= l(:label_deleted) %></li>
|
||||
</ul>
|
||||
|
||||
<p><%= link_to(l(:label_view_diff),
|
||||
:action => 'diff',
|
||||
:id => @project,
|
||||
:repository_id => @repository.identifier_param,
|
||||
:path => "",
|
||||
:rev => @changeset.identifier) if @changeset.filechanges.any? %></p>
|
||||
|
||||
<div class="changeset-changes">
|
||||
<%= render_changeset_changes %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<% content_for :header_tags do %>
|
||||
<%= stylesheet_link_tag "scm" %>
|
||||
<% end %>
|
||||
|
||||
<%
|
||||
title = "#{l(:label_revision)} #{format_revision(@changeset)}"
|
||||
title << " - #{@changeset.comments.truncate(80)}"
|
||||
html_title(title)
|
||||
-%>
|
|
@ -0,0 +1,34 @@
|
|||
<div class="contextual">
|
||||
<%= form_tag(
|
||||
{:controller => 'archived_repositories', :action => 'revision', :id => @project,
|
||||
:repository_id => @repository.identifier_param},
|
||||
:method => :get
|
||||
) do %>
|
||||
<%= l(:label_revision) %>: <%= text_field_tag 'rev', nil, :size => 8 %>
|
||||
<%= submit_tag 'OK' %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<h2><%= l(:label_revision_plural) %></h2>
|
||||
|
||||
<%= render :partial => 'revisions',
|
||||
:locals => {:project => @project,
|
||||
:path => '',
|
||||
:revisions => @changesets,
|
||||
:entry => nil } %>
|
||||
|
||||
<p class="pagination"><%= pagination_links_full @changeset_pages,@changeset_count %></p>
|
||||
|
||||
<% content_for :header_tags do %>
|
||||
<%= stylesheet_link_tag "scm" %>
|
||||
<%= auto_discovery_link_tag(
|
||||
:atom,
|
||||
params.merge(
|
||||
{:format => 'atom', :page => nil, :key => User.current.rss_key})) %>
|
||||
<% end %>
|
||||
|
||||
<% other_formats_links do |f| %>
|
||||
<%= f.link_to 'Atom', :url => {:key => User.current.rss_key} %>
|
||||
<% end %>
|
||||
|
||||
<% html_title(l(:label_revision_plural)) -%>
|
|
@ -0,0 +1,71 @@
|
|||
<%= call_hook(:view_repositories_show_contextual, { :repository => @repository, :project => @project }) %>
|
||||
|
||||
<div class="contextual">
|
||||
<%= render :partial => 'navigation' %>
|
||||
</div>
|
||||
|
||||
<h2><%= render :partial => 'breadcrumbs',
|
||||
:locals => { :path => @path, :kind => 'dir', :revision => @rev } %></h2>
|
||||
|
||||
<% if !@entries.nil? %>
|
||||
<%= render :partial => 'dir_list' %>
|
||||
<% end %>
|
||||
|
||||
<%= render_properties(@properties) %>
|
||||
|
||||
<% if @changesets && !@changesets.empty? %>
|
||||
<h3><%= l(:label_latest_revision_plural) %></h3>
|
||||
<%= render :partial => 'revisions',
|
||||
:locals => {:project => @project, :path => @path,
|
||||
:revisions => @changesets, :entry => nil }%>
|
||||
<% end %>
|
||||
<p>
|
||||
<% has_branches = (!@repository.branches.nil? && @repository.branches.length > 0)
|
||||
sep = '' %>
|
||||
<% if @repository.supports_all_revisions? && @path.blank? %>
|
||||
<%= link_to l(:label_view_all_revisions), :action => 'revisions', :id => @project,
|
||||
:repository_id => @repository.identifier_param %>
|
||||
<% sep = '|' %>
|
||||
<% end %>
|
||||
<% if @repository.supports_directory_revisions? &&
|
||||
( has_branches || !@path.blank? || !@rev.blank? ) %>
|
||||
<%= sep %>
|
||||
<%= link_to l(:label_view_revisions),
|
||||
:action => 'changes',
|
||||
:path => to_path_param(@path),
|
||||
:id => @project,
|
||||
:repository_id => @repository.identifier_param,
|
||||
:rev => @rev %>
|
||||
<% end %>
|
||||
</p>
|
||||
<% if @repository.supports_all_revisions? %>
|
||||
<% content_for :header_tags do %>
|
||||
<%= auto_discovery_link_tag(
|
||||
:atom, params.merge(
|
||||
{:format => 'atom', :action => 'revisions',
|
||||
:id => @project, :page => nil, :key => User.current.rss_key})) %>
|
||||
<% end %>
|
||||
|
||||
<%= call_hook(:view_repositories_show_bottom, { :repository => @repository, :project => @project }) %>
|
||||
|
||||
<% end %>
|
||||
|
||||
<% content_for :sidebar do %>
|
||||
<h3><%= l(:label_repository_plural) %></h3>
|
||||
<ul class="repository git">
|
||||
<% @repositories.sort.each do |repo| %>
|
||||
<li class="repository git"><%= link_to h(repo.name), {:controller => 'archived_repositories', :action => 'show', :id => @project, :repository_id => repo.identifier_param, :rev => nil, :path => nil},
|
||||
:class => 'repository' + (@repository.is_a?(Repository::Xitolite) ? ' git' : '') + (repo == @repository ? ' selected' : '') %>
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
||||
<%= render :partial => 'repositories/download_revision',
|
||||
:locals => { :repository => @repository } %>
|
||||
<% end %>
|
||||
|
||||
<% content_for :header_tags do %>
|
||||
<%= stylesheet_link_tag "scm" %>
|
||||
<% end %>
|
||||
|
||||
<% html_title(l(:label_repository)) -%>
|
|
@ -0,0 +1,12 @@
|
|||
- content_for :header_tags do
|
||||
= bootstrap_load_base
|
||||
= bootstrap_load_module(:alerts)
|
||||
= bootstrap_load_module(:label)
|
||||
= bootstrap_load_module(:modals)
|
||||
= bootstrap_load_module(:tables)
|
||||
= bootstrap_load_module(:sortable)
|
||||
|
||||
= stylesheet_link_tag 'application', plugin: 'redmine_git_hosting'
|
||||
= javascript_include_tag 'application', plugin: 'redmine_git_hosting'
|
||||
|
||||
#modal-box data-label-save="#{l(:button_save)}" data-label-cancel="#{l(:button_cancel)}" data-label-ok="#{l(:button_ok)}"
|
|
@ -0,0 +1,21 @@
|
|||
- content_for :header_tags do
|
||||
= bootstrap_load_module(:tooltip)
|
||||
= additionals_library_load(:clipboardjs)
|
||||
|
||||
= stylesheet_link_tag 'git_urls', plugin: 'redmine_git_hosting'
|
||||
= javascript_include_tag 'git_urls', plugin: 'redmine_git_hosting'
|
||||
|
||||
javascript:
|
||||
$(document).ready(function() { setFirstGitUrl('.git_url_list'); setGitUrls('.git_url'); });
|
||||
|
||||
- repositories = Array.wrap(repository) unless repositories
|
||||
- if repositories.map(&:available_urls_sorted).reject { |h| h.empty? }.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,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,16 @@
|
|||
- if project.module_enabled?(:repository)
|
||||
- if project.repository && project.repository.is_a?(Repository::Xitolite)
|
||||
- if RedmineGitHosting::Config.show_repositories_url? && User.current.allowed_to?(:view_changesets, project)
|
||||
.git_hosting.box
|
||||
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,61 @@
|
|||
- if @project.repositories.any?
|
||||
table.table.table-hover
|
||||
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.present? ? repository.identifier : ''
|
||||
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'
|
||||
|
||||
= link_to l(:button_move), move_repository_git_extras_path(repository),
|
||||
class: 'icon icon-move' if repository.is_a?(Repository::Xitolite) && repository.movable?
|
||||
|
||||
= delete_link repository_path(repository)
|
||||
|
||||
- else
|
||||
p.nodata = l(:label_no_data)
|
||||
|
||||
- if User.current.allowed_to?(:manage_repository, @project)
|
||||
p = link_to l(:label_repository_new), new_project_repository_path(@project), class: 'icon icon-add'
|
||||
|
||||
- content_for :header_tags do
|
||||
= bootstrap_load_module(:label)
|
||||
= bootstrap_load_module(:tables)
|
|
@ -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,42 @@
|
|||
- if @repository.is_a?(Repository::Xitolite) && !@repository.git_annex_enabled?
|
||||
- content_for :header_tags do
|
||||
javascript:
|
||||
$(document).on('click', 'a.modal-box', function(e){
|
||||
e.preventDefault();
|
||||
openModalBox(this, 'modal-box');
|
||||
});
|
||||
|
||||
$(document).on('click', 'a.modal-box-close-only', function(e){
|
||||
e.preventDefault();
|
||||
openModalBox(this, 'modal-box-close-only');
|
||||
});
|
||||
|
||||
#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),
|
||||
class: 'modal-box-close-only'
|
||||
|
||||
= render 'common/git_urls', repository: @repository
|
|
@ -0,0 +1 @@
|
|||
= watcher_link(@repository, User.current)
|
|
@ -0,0 +1,14 @@
|
|||
ul.repository.git
|
||||
- @repositories.sort.each do |repo|
|
||||
- li_class = "#{'repository git' if repo.is_a?(Repository::Xitolite)}"
|
||||
li class="#{li_class}"
|
||||
= 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,15 @@
|
|||
- if @repository.is_a?(Repository::Xitolite)
|
||||
- content_for :header_tags do
|
||||
= bootstrap_load_base
|
||||
= 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;'
|
||||
- if RedmineGitHosting::Config.show_repositories_url?
|
||||
= 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,30 @@
|
|||
.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
|
||||
|
||||
.container
|
||||
.row
|
||||
.col-md-12
|
||||
= call_hook(:view_repository_edit_top, repository: @repository, project: @project)
|
||||
|
||||
.container
|
||||
.row
|
||||
.col-md-6
|
||||
= labelled_form_for :repository, @repository, url: repository_path(@repository), html: { method: :put, id: 'repository-form' } do |f|
|
||||
= render partial: 'form', locals: { f: f }
|
||||
|
||||
.col-md-6#xitolite-options style='vertical-align: top;'
|
||||
= render 'xitolite_options', repository: @repository
|
||||
|
||||
.container
|
||||
.row
|
||||
.col-md-12
|
||||
= call_hook(:view_repository_edit_bottom, repository: @repository, project: @project)
|
|
@ -0,0 +1,78 @@
|
|||
#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', target: 'external' }
|
||||
br
|
||||
| git config --global user.name "#{User.current.name(:firstname_lastname)}"
|
||||
br
|
||||
| git config --global user.email #{User.current.mail ? User.current.mail : "mail@example.com"}
|
||||
- if !User.current.anonymous? && User.current.gitolite_public_keys.length == 0
|
||||
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
|
||||
| mkdir #{@repository.redmine_name}
|
||||
br
|
||||
| cd #{@repository.redmine_name}
|
||||
br
|
||||
| git init
|
||||
br
|
||||
| touch readme.txt
|
||||
br
|
||||
| git add readme.txt
|
||||
br
|
||||
| git commit -m 'Initializing #{@repository.redmine_name} repository'
|
||||
br
|
||||
| git remote add origin <span class="git_url_access"></span>
|
||||
br
|
||||
| git push -u origin master
|
||||
|
||||
h3 = l(:label_help_repository_setup_existing) + ' :'
|
||||
pre
|
||||
code.shell.syntaxhl
|
||||
| cd existing_git_repo
|
||||
br
|
||||
| git remote add origin <span class="git_url_access"></span>
|
||||
br
|
||||
| git push -u origin master
|
||||
|
||||
h3 = l(:label_help_repository_clone) + ' :'
|
||||
pre
|
||||
code.shell.syntaxhl
|
||||
| git clone <span class="git_url_access"></span>
|
||||
|
||||
- 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)}"
|
||||
li class="#{li_class}"
|
||||
= 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,44 @@
|
|||
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
|
||||
= bootstrap_load_base
|
||||
= 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 @@
|
|||
<%= js_render_template('#modal-box', 'repository_deployment_credentials/new') %>
|
|
@ -0,0 +1,10 @@
|
|||
= 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
|
|
@ -0,0 +1,44 @@
|
|||
div
|
||||
- if User.current.git_allowed_to?(:create_repository_deployment_credentials, @repository)
|
||||
.contextual
|
||||
- css_class = (@user_keys.present? || @other_keys.present?) ? 'modal-box' : 'modal-box-close-only'
|
||||
= link_to l(:label_deployment_credential_add),
|
||||
new_repository_deployment_credential_path(@repository),
|
||||
class: "icon icon-add #{css_class}"
|
||||
|
||||
h3 = l(:label_deployment_credentials)
|
||||
|
||||
- if @repository_deployment_credentials.any?
|
||||
table.table.table-hover
|
||||
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(:label_deployment_credential_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 = checked_image_with_exclamation credential.honored?
|
||||
td = 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), class: 'icon icon-edit modal-box'
|
||||
= 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,13 @@
|
|||
= labelled_form_for :repository_deployment_credential, @credential,
|
||||
url: repository_deployment_credentials_path(@repository),
|
||||
authenticity_token: form_authenticity_token,
|
||||
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
|
|
@ -0,0 +1 @@
|
|||
<%= js_render_template('#modal-box', 'repository_deployment_credentials/edit') %>
|
|
@ -0,0 +1,28 @@
|
|||
- if git_config_keys.any?
|
||||
table.table.table-hover
|
||||
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 modal-box'
|
||||
= 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,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 @@
|
|||
<%= js_render_template('#modal-box', 'repository_git_config_keys/new') %>
|
|
@ -0,0 +1,6 @@
|
|||
= 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 }
|
|
@ -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,29 @@
|
|||
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'),
|
||||
class: 'icon icon-add modal-box'
|
||||
|
||||
h3
|
||||
= l(:label_git_config_keys)
|
||||
= link_to "(#{l(:label_gitolite_documentation)})",
|
||||
'https://gitolite.com/gitolite/git-config.html',
|
||||
target: '_blank'
|
||||
|
||||
= 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'),
|
||||
class: 'icon icon-add modal-box'
|
||||
|
||||
h3
|
||||
= l(:label_git_option_keys)
|
||||
= link_to "(#{l(:label_gitolite_documentation)})",
|
||||
'https://gitolite.com/gitolite/options.html',
|
||||
target: '_blank'
|
||||
|
||||
= render 'config_keys', git_config_keys: @repository_git_option_keys
|
|
@ -0,0 +1,6 @@
|
|||
= 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 }
|
|
@ -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 @@
|
|||
<%= js_render_template('#modal-box', 'repository_git_config_keys/edit') %>
|
|
@ -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,11 @@
|
|||
#sortable-url-messages
|
||||
|
||||
ul#sortable-url.list-unstyled data-remote="true" data-update-url="#{sort_urls_repository_git_extras_path(@repository)}"
|
||||
- @repository.available_urls_sorted.keys.each 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 @@
|
|||
$('#sortable-url-messages').html("<%= escape_javascript render_flash_messages %>");
|
|
@ -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,22 @@
|
|||
.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="#{@mirror.mirror_mode? ? 'display: none;' : ''}"
|
||||
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 @@
|
|||
<%= js_render_template('#modal-box', 'repository_mirrors/new') %>
|
|
@ -0,0 +1,6 @@
|
|||
= 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 }
|
|
@ -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,55 @@
|
|||
div
|
||||
- if User.current.git_allowed_to?(:create_repository_mirrors, @repository)
|
||||
.contextual= link_to l(:label_mirror_add), new_repository_mirror_path(@repository), class: 'icon icon-add modal-box'
|
||||
|
||||
h3 = l(:label_repository_mirrors)
|
||||
|
||||
- if @repository_mirrors.any?
|
||||
table.table.table-hover
|
||||
thead
|
||||
tr
|
||||
th = l(:field_url)
|
||||
th = l(:label_mirror_refspec)
|
||||
th = l(:label_mode)
|
||||
th = l(:label_enabled)
|
||||
th
|
||||
tbody
|
||||
- @repository_mirrors.each do |mirror|
|
||||
tr
|
||||
td = mirror.url
|
||||
td = refspec(mirror, 64).html_safe
|
||||
td = mirror_mode(mirror).html_safe
|
||||
td = 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),
|
||||
class: 'modal-box-close-only'
|
||||
|
||||
- if User.current.git_allowed_to?(:edit_repository_mirrors, @repository)
|
||||
= link_to l(:button_edit), edit_repository_mirror_path(@repository, mirror), class: 'icon icon-edit modal-box'
|
||||
= 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,6 @@
|
|||
= 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 }
|
|
@ -0,0 +1,8 @@
|
|||
p style='white-space: nowrap;'
|
||||
= render_push_state(@mirror, @push_failed)
|
||||
|
||||
span
|
||||
b = l(:label_mirror_push_output) + ' :'
|
||||
|
||||
pre class="mirror-push-#{@push_failed == true ? 'error' : ''}" }
|
||||
= @shellout
|
|
@ -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 @@
|
|||
<%= js_render_template('#modal-box', 'repository_mirrors/edit') %>
|
|
@ -0,0 +1,33 @@
|
|||
.flash-messages = error_messages_for 'post_receive_url'
|
||||
|
||||
.box
|
||||
p = f.text_field :url, required: true, size: 65
|
||||
em
|
||||
p
|
||||
= l(:label_mirror_url_accepted_format) + ' :'
|
||||
br
|
||||
| http://example.com
|
||||
br
|
||||
| https://example.com
|
||||
|
||||
p = f.check_box :active
|
||||
|
||||
p = f.select :mode,
|
||||
[['Github-style POST', :github],
|
||||
['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 @@
|
|||
<%= js_render_template('#modal-box', 'repository_post_receive_urls/new') %>
|
|
@ -0,0 +1,6 @@
|
|||
= 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 }
|
|
@ -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,35 @@
|
|||
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), class: 'icon icon-add modal-box'
|
||||
|
||||
h3 = l(:label_post_receive_urls)
|
||||
|
||||
- if @repository_post_receive_urls.any?
|
||||
table.table.table-hover
|
||||
thead
|
||||
tr
|
||||
th = l(:field_url)
|
||||
th = l(:label_mode)
|
||||
th = l(:label_enabled)
|
||||
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).html_safe
|
||||
td = checked_image_with_exclamation post_receive_url.active?
|
||||
td = 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), class: 'icon icon-edit modal-box'
|
||||
= 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,6 @@
|
|||
= 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 }
|
|
@ -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 @@
|
|||
<%= js_render_template('#modal-box', 'repository_post_receive_urls/edit') %>
|
|
@ -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 @@
|
|||
<%= js_render_template('#modal-box', 'repository_protected_branches/new') %>
|
|
@ -0,0 +1,6 @@
|
|||
= 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 }
|
|
@ -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,51 @@
|
|||
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),
|
||||
class: 'icon icon-add modal-box'
|
||||
|
||||
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.table.table-hover 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 == '-' ? 'important' : 'success'
|
||||
span.label class="label-#{color}"
|
||||
= protected_branch.permissions
|
||||
|
||||
td style='font-family: Consolas;'
|
||||
= protected_branch.path
|
||||
|
||||
td = protected_branch.users.map { |u| link_to(u) }.join(', ').html_safe
|
||||
|
||||
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), class: 'icon icon-edit modal-box'
|
||||
= link_to l(:button_clone), clone_repository_protected_branch_path(@repository, protected_branch), class: 'icon icon-copy modal-box'
|
||||
= 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,6 @@
|
|||
= 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 }
|
|
@ -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 @@
|
|||
<%= js_render_template('#modal-box', 'repository_protected_branches/edit') %>
|
|
@ -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(); setBootstrapSwitch(); });
|
|
@ -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 @@
|
|||
<%= js_render_partial('#install_gitolite_hooks', 'settings/redmine_git_hosting/install_hooks_result') %>
|
|
@ -0,0 +1,56 @@
|
|||
/ Gitolite Access Config
|
||||
- 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
|
||||
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
|
||||
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 :show_repositories_url,
|
||||
value: RedmineGitHosting::Config.get_setting(:show_repositories_url, true),
|
||||
value_is_bool: true
|
||||
|
||||
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,30 @@
|
|||
/ Gitolite Cache Config
|
||||
- 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)
|
||||
= text_field_tag 'settings[gitolite_cache_max_size]', gitolite_cache_max_size, size: 20
|
||||
em<
|
||||
' MB
|
||||
br
|
||||
|
||||
p
|
||||
label = l(:label_gitolite_cache_max_elements)
|
||||
= text_field_tag 'settings[gitolite_cache_max_elements]', gitolite_cache_max_elements, size: 20
|
||||
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,45 @@
|
|||
/ Gitolite Config File
|
||||
- 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 ? true : false)
|
||||
|
||||
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
|
||||
|
||||
p
|
||||
label = l(:label_gitolite_identifier_prefix)
|
||||
= hidden_field_tag "settings[gitolite_identifier_prefix]", gitolite_identifier_prefix if disable_button
|
||||
= 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
|
||||
markdown:
|
||||
SSH Key : #{gitolite_identifier_prefix}admin<em>#{gitolite_identifier_suffix}</em>@redmine_1394507971_600081.pub
|
||||
SSH Key : #{gitolite_identifier_prefix}bob<em>#{gitolite_identifier_suffix}</em>@redmine_1394507971_600081.pub
|
||||
|
||||
repo repositories/test
|
||||
RW+ = <em>#{gitolite_identifier_prefix}</em>admin<em>#{gitolite_identifier_suffix}</em> <em>#{gitolite_identifier_prefix}</em>john<em>#{gitolite_identifier_suffix}</em>
|
||||
RW = <em>#{gitolite_identifier_prefix}</em>bob<em>#{gitolite_identifier_suffix}</em> alice
|
||||
R = <em>#{gitolite_identifier_prefix}</em>reporter<em>#{gitolite_identifier_suffix}</em> mike gitweb
|
|
@ -0,0 +1,43 @@
|
|||
/ Gitolite Global Config
|
||||
- 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
|
||||
br
|
||||
em.info
|
||||
= l(:label_gitolite_temp_dir_desc)
|
||||
|
||||
p
|
||||
label = l(:label_gitolite_recycle_bin_expiration_time)
|
||||
= text_field_tag 'settings[gitolite_recycle_bin_expiration_time]', gitolite_recycle_bin_expiration_time, size: 10
|
||||
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}", size: 60
|
||||
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}", size: 60
|
||||
br
|
||||
em.info
|
||||
= l(:label_git_config_email_desc)
|
|
@ -0,0 +1,46 @@
|
|||
/ 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
|
||||
.row
|
||||
.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)
|
||||
= text_field_tag 'settings[gitolite_hooks_url]', gitolite_hooks_url, size: 60
|
||||
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
|
||||
|
||||
.col-md-6
|
||||
#install_gitolite_hooks
|
|
@ -0,0 +1,38 @@
|
|||
/ Gitolite Notifications Config
|
||||
- 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,28 @@
|
|||
/ Gitolite SSH Config
|
||||
- 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
|
||||
|
||||
p
|
||||
label = l(:label_gitolite_ssh_private_key)
|
||||
= text_field_tag 'settings[gitolite_ssh_private_key]', gitolite_ssh_private_key, size: 110
|
||||
|
||||
p
|
||||
label = l(:label_gitolite_ssh_public_key)
|
||||
= text_field_tag 'settings[gitolite_ssh_public_key]', gitolite_ssh_public_key, size: 110
|
||||
|
||||
p
|
||||
label = l(:label_gitolite_server_host)
|
||||
= text_field_tag 'settings[gitolite_server_host]', gitolite_server_host, size: 20
|
||||
|
||||
p
|
||||
label = l(:label_gitolite_server_port)
|
||||
= text_field_tag 'settings[gitolite_server_port]', gitolite_server_port, size: 5
|
|
@ -0,0 +1,27 @@
|
|||
/ 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
|
||||
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
|
||||
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,99 @@
|
|||
h3 = l(:label_permissions_header)
|
||||
|
||||
table.table.table-hover
|
||||
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
|
||||
|
||||
tr
|
||||
td = l(:label_gitolite_libgit2_version)
|
||||
td
|
||||
span.label.label-success = RedmineGitHosting::Config.libgit2_version
|
||||
|
||||
p
|
||||
label = l(:label_gitolite_banner)
|
||||
|
||||
.box
|
||||
pre == RedmineGitHosting::Config.gitolite_banner
|
||||
|
||||
p
|
||||
label = l(:label_path_directories)
|
||||
|
||||
.box
|
||||
pre == (ENV['PATH']).gsub(/:/, "<br/>")
|
|
@ -0,0 +1,75 @@
|
|||
/ Gitolite Display Access
|
||||
- gitolite_user = RedmineGitHosting::Config.get_setting(:gitolite_user)
|
||||
- ssh_server_domain = RedmineGitHosting::Config.get_setting(:ssh_server_domain)
|
||||
- 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 == l(:display_access_setup1)
|
||||
br
|
||||
br
|
||||
span == l(:display_access_setup2)
|
||||
br
|
||||
br
|
||||
span == l(:display_access_setup3)
|
||||
|
||||
p
|
||||
label = l(:label_default_repository)
|
||||
br
|
||||
|
||||
label = l(:label_storage_directory) + ' :'
|
||||
== "~#{gitolite_user}/#{gitolite_global_storage_dir}#{gitolite_redmine_storage_dir}<em>#{hierarchical_organisation ? 'project1/project2/' : ''}project3.git</em>"
|
||||
|
||||
br
|
||||
|
||||
label = l(:label_ssh_access) + ' :'
|
||||
- gitSHP = ssh_server_domain.match(/:\d+$/)
|
||||
== "#{gitSHP ? 'ssh://' : ''}#{gitolite_user}@#{ssh_server_domain}#{gitSHP ? '/' : ':'}#{gitolite_redmine_storage_dir}<em>#{hierarchical_organisation ? 'project1/project2/' : ''}project3.git</em>"
|
||||
|
||||
br
|
||||
|
||||
label = l(:label_http_access) + ' :'
|
||||
== "http://<em>redmine-user</em>@#{http_server_domain}/#{http_server_subdir}<em>#{hierarchical_organisation ? 'project1/project2/' : ''}project3.git</em>"
|
||||
|
||||
br
|
||||
|
||||
label = l(:label_https_access) + ' :'
|
||||
== "https://<em>redmine-user</em>@#{https_server_domain}/#{http_server_subdir}<em>#{hierarchical_organisation ? 'project1/project2/' : ''}project3.git</em>"
|
||||
|
||||
p
|
||||
label = l(:label_example_repository)
|
||||
br
|
||||
|
||||
label = l(:label_storage_directory) + ' :'
|
||||
== "~#{gitolite_user}/#{gitolite_global_storage_dir}#{gitolite_redmine_storage_dir}<em>#{hierarchical_organisation ? 'project1/project2/project3/' : ''}example.git</em>"
|
||||
|
||||
br
|
||||
|
||||
label = l(:label_ssh_access) + ' :'
|
||||
- gitSHP = ssh_server_domain.match(/:\d+$/)
|
||||
== "#{gitSHP ? 'ssh://' : ''}#{gitolite_user}@#{ssh_server_domain}#{gitSHP ? '/' : ':'}#{gitolite_redmine_storage_dir}<em>#{hierarchical_organisation ? 'project1/project2/project3/' : ''}example.git</em>"
|
||||
|
||||
br
|
||||
|
||||
label = l(:label_http_access) + ' :'
|
||||
== "http://<em>redmine-user</em>@#{http_server_domain}/#{http_server_subdir}<em>#{hierarchical_organisation ? 'project1/project2/project3/' : ''}example.git</em>"
|
||||
|
||||
br
|
||||
|
||||
label = l(:label_https_access) + ' :'
|
||||
== "https://<em>redmine-user</em>@#{https_server_domain}/#{http_server_subdir}<em>#{hierarchical_organisation ? 'project1/project2/project3/' : ''}example.git</em>"
|
||||
|
||||
br
|
||||
br
|
||||
|
||||
label = l(:label_etcetera) + '...'
|
||||
|
||||
== l(:display_access_emphasis)
|
||||
== 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.table.table-hover
|
||||
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,10 @@
|
|||
table.table.table-hover
|
||||
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])
|
|
@ -0,0 +1,32 @@
|
|||
/ 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
|
||||
|
||||
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
|
27
plugins/redmine_git_hosting/app/views/users/index.api.rsb
Normal file
27
plugins/redmine_git_hosting/app/views/users/index.api.rsb
Normal file
|
@ -0,0 +1,27 @@
|
|||
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.last_login_on user.last_login_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
|
51
plugins/redmine_git_hosting/app/views/users/show.api.rsb
Normal file
51
plugins/redmine_git_hosting/app/views/users/show.api.rsb
Normal file
|
@ -0,0 +1,51 @@
|
|||
api.user do
|
||||
api.id @user.id
|
||||
api.login @user.login if User.current.admin? || (User.current == @user)
|
||||
api.admin @user.admin? if User.current.admin? || (User.current == @user)
|
||||
api.firstname @user.firstname
|
||||
api.lastname @user.lastname
|
||||
api.mail @user.mail if User.current.admin? || !@user.pref.hide_mail
|
||||
api.created_on @user.created_on
|
||||
api.last_login_on @user.last_login_on
|
||||
api.api_key @user.api_key if User.current.admin? || (User.current == @user)
|
||||
api.status @user.status if User.current.admin?
|
||||
|
||||
render_api_custom_values @user.visible_custom_field_values, api
|
||||
|
||||
if User.current.admin? && include_in_api_response?('groups')
|
||||
api.array :groups do |groups|
|
||||
@user.groups.each do |group|
|
||||
api.group id: group.id, name: group.name
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
api.array :memberships do
|
||||
@memberships.each do |membership|
|
||||
api.membership do
|
||||
api.id membership.id
|
||||
api.project :id => membership.project.id, :name => membership.project.name
|
||||
api.array :roles do
|
||||
membership.member_roles.each do |member_role|
|
||||
if member_role.role
|
||||
attrs = {:id => member_role.role.id, :name => member_role.role.name}
|
||||
attrs.merge!(:inherited => true) if member_role.inherited_from.present?
|
||||
api.role attrs
|
||||
end
|
||||
end
|
||||
end
|
||||
end if membership.project
|
||||
end
|
||||
end if include_in_api_response?('memberships') && @memberships
|
||||
|
||||
api.array :ssh_keys do
|
||||
@user.gitolite_public_keys.each do |key|
|
||||
api.ssh_key do
|
||||
api.id key.id
|
||||
api.key_type key.key_type_as_string
|
||||
api.title key.title
|
||||
api.key key.key
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue