Skip to content

Commit cb6d0fe

Browse files
author
root
committed
Merge branch 'devel' into feat_protected_branches
2 parents 668b8b8 + 95e9608 commit cb6d0fe

28 files changed

+594
-579
lines changed

Diff for: app/models/repository_mirror.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ def to_s
5050

5151
def push
5252
begin
53-
push_message = RedmineGitolite::GitoliteWrapper.sudo_pipe("bash") do
54-
[ 'cd', repository.gitolite_repository_path, '&&', 'env', 'GIT_SSH=~/.ssh/run_gitolite_admin_ssh', 'git', 'push', *push_args, '2>&1' ].join(' ')
53+
push_message = RedmineGitolite::GitoliteWrapper.sudo_pipe("sh") do
54+
[ 'cd', repository.gitolite_repository_path, '&&', 'env', 'GIT_SSH=$HOME/.ssh/run_gitolite_admin_ssh', 'git', 'push', *push_args, '2>&1' ].join(' ')
5555
end
5656
push_failed = false
5757
rescue RedmineGitolite::GitHosting::GitHostingException => e

Diff for: app/services/git_notifier.rb

+133
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
class GitNotifier
2+
unloadable
3+
4+
5+
attr_reader :email_prefix
6+
attr_reader :sender_address
7+
attr_reader :default_list
8+
attr_reader :mail_mapping
9+
10+
attr_reader :mailer
11+
attr_reader :smtp_auth
12+
attr_reader :smtp_server
13+
attr_reader :smtp_port
14+
attr_reader :smtp_user
15+
attr_reader :smtp_pass
16+
17+
18+
def initialize(repository)
19+
@repository = repository
20+
@project = repository.project
21+
@email_prefix = ''
22+
@sender_address = ''
23+
@default_list = []
24+
@mail_mapping = {}
25+
26+
if ActionMailer::Base.delivery_method == :smtp
27+
@mailer = 'smtp'
28+
else
29+
@mailer = 'sendmail'
30+
end
31+
32+
@smtp_auth =
33+
if ActionMailer::Base.smtp_settings.has_key?(:authentication) &&
34+
ActionMailer::Base.smtp_settings[:authentication] != :none
35+
true
36+
else
37+
false
38+
end
39+
40+
@smtp_server = ActionMailer::Base.smtp_settings[:address]
41+
@smtp_port = ActionMailer::Base.smtp_settings[:port]
42+
@smtp_user = ActionMailer::Base.smtp_settings[:user_name]
43+
@smtp_pass = ActionMailer::Base.smtp_settings[:password]
44+
45+
build_notifier
46+
end
47+
48+
49+
def mailing_list
50+
@mail_mapping.keys
51+
end
52+
53+
54+
private
55+
56+
57+
def build_notifier
58+
set_email_prefix
59+
set_sender_address
60+
set_default_list
61+
set_mail_mapping
62+
end
63+
64+
65+
def set_email_prefix
66+
if !@repository.git_notification.nil? && !@repository.git_notification.prefix.empty?
67+
@email_prefix = @repository.git_notification.prefix
68+
else
69+
@email_prefix = RedmineGitolite::Config.get_setting(:gitolite_notify_global_prefix)
70+
end
71+
end
72+
73+
74+
def set_sender_address
75+
if !@repository.git_notification.nil? && !@repository.git_notification.sender_address.empty?
76+
@sender_address = @repository.git_notification.sender_address
77+
else
78+
@sender_address = RedmineGitolite::Config.get_setting(:gitolite_notify_global_sender_address)
79+
end
80+
end
81+
82+
83+
def set_default_list
84+
@default_list = @project.member_principals.map(&:user).compact.uniq
85+
.select{|user| user.allowed_to?(:receive_git_notifications, @project)}
86+
.map(&:mail).uniq.sort
87+
end
88+
89+
90+
def set_mail_mapping
91+
mail_mapping = {}
92+
93+
# First collect all project users
94+
default_users = @default_list.map{ |mail| mail_mapping[mail] = :project }
95+
96+
# Then add global include list
97+
RedmineGitolite::Config.get_setting(:gitolite_notify_global_include).sort.map{ |mail| mail_mapping[mail] = :global }
98+
99+
# Then filter
100+
mail_mapping = filter_list(mail_mapping)
101+
102+
# Then add local include list
103+
if !@repository.git_notification.nil? && !@repository.git_notification.include_list.empty?
104+
@repository.git_notification.include_list.sort.map{ |mail| mail_mapping[mail] = :local }
105+
end
106+
107+
@mail_mapping = mail_mapping
108+
end
109+
110+
111+
def filter_list(merged_map)
112+
mail_mapping = {}
113+
exclude_list = []
114+
115+
# Build exclusion list
116+
if !RedmineGitolite::Config.get_setting(:gitolite_notify_global_exclude).empty?
117+
exclude_list = RedmineGitolite::Config.get_setting(:gitolite_notify_global_exclude)
118+
end
119+
120+
if !@repository.git_notification.nil? && !@repository.git_notification.exclude_list.empty?
121+
exclude_list = exclude_list + @repository.git_notification.exclude_list
122+
end
123+
124+
exclude_list = exclude_list.uniq.sort
125+
126+
merged_map.each do |mail, from|
127+
mail_mapping[mail] = from unless exclude_list.include?(mail)
128+
end
129+
130+
return mail_mapping
131+
end
132+
133+
end

Diff for: app/views/repositories/_form.html.erb

+1-1
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@
166166

167167
<p>
168168
<%= label_tag "", l(:label_mirroring_keys_installed) %>
169-
<%= image_tag (RedmineGitolite::Mirrors.mirroring_keys_installed? ? 'true.png' : 'exclamation.png') %>
169+
<%= image_tag (RedmineGitolite::GitoliteWrapper.mirroring_keys_installed? ? 'true.png' : 'exclamation.png') %>
170170
</p>
171171

172172
<% else %>

Diff for: app/views/repository_git_notifications/_form.html.erb

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
</div>
3030

3131
<%= javascript_tag do %>
32-
var mailing_list_default_users = <%= raw @repository.mailing_list_default_users.to_json %>;
32+
var mailing_list_default_users = <%= raw @repository.default_list.to_json %>;
3333

3434
function loadTagIt(target, autocomplete){
3535
if (autocomplete == true){

Diff for: app/views/repository_git_notifications/index.html.erb

+5-5
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232

3333
<h3 class="git"><%= l(:label_git_notifications) %></h3>
3434

35-
<% if @repository.mailing_list_default_users.any? ||
35+
<% if @repository.default_list.any? ||
3636
(!@git_notification.nil? && @git_notification.include_list.any?) ||
3737
(!@git_notification.nil? && @git_notification.exclude_list.any?) %>
3838

@@ -60,9 +60,9 @@
6060
</tr>
6161
<tr>
6262
<td>
63-
<% if @repository.mailing_list_default_users.any? %>
63+
<% if @repository.default_list.any? %>
6464
<ul>
65-
<% @repository.mailing_list_default_users.each do |item| %>
65+
<% @repository.default_list.each do |item| %>
6666
<li><%= item %></li>
6767
<% end %>
6868
</ul>
@@ -90,9 +90,9 @@
9090
</td>
9191

9292
<td>
93-
<% if @repository.mailing_list_effective.any? %>
93+
<% if @repository.mail_mapping.any? %>
9494
<ul>
95-
<% @repository.mailing_list_effective.each do |item, from| %>
95+
<% @repository.mail_mapping.each do |item, from| %>
9696
<li><%= item %> (<%= from %>)</li>
9797
<% end %>
9898
</ul>

Diff for: app/views/repository_mirrors/index.html.erb

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262

6363
<div class="spacer"></div>
6464

65-
<% mirror_pubkey = RedmineGitolite::Mirrors.mirroring_public_key %>
65+
<% mirror_pubkey = RedmineGitolite::GitoliteWrapper.mirroring_public_key %>
6666

6767
<div style="margin: 2px 3px; width: 99%;">
6868

Diff for: app/views/settings/_gitolite_config_global.html.erb

-8
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
gitolite_recycle_bin_expiration_time = RedmineGitolite::Config.get_setting(:gitolite_recycle_bin_expiration_time)
44

55
gitolite_temp_dir = RedmineGitolite::Config.get_setting(:gitolite_temp_dir)
6-
gitolite_timeout = RedmineGitolite::Config.get_setting(:gitolite_timeout)
76
gitolite_log_level = RedmineGitolite::Config.get_setting(:gitolite_log_level)
87
gitolite_log_split = RedmineGitolite::Config.get_setting(:gitolite_log_split)
98

@@ -20,13 +19,6 @@
2019
<em><%= l(:label_gitolite_temp_dir_desc) %></em>
2120
</p>
2221

23-
<p>
24-
<label><%= l(:label_gitolite_timeout) %></label>
25-
<%= text_field_tag("settings[gitolite_timeout]", "#{gitolite_timeout}", :size => 10) %>
26-
<br />
27-
<em><%= l(:label_gitolite_timeout_desc) %></em>
28-
</p>
29-
3022
<p>
3123
<label><%= l(:label_gitolite_recycle_bin_expiration_time) %></label>
3224
<%= text_field_tag("settings[gitolite_recycle_bin_expiration_time]", gitolite_recycle_bin_expiration_time, :size => 10) %>

Diff for: app/views/settings/_gitolite_config_test.html.erb

+7-7
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,29 @@
55
<tr>
66
<td><%= l(:label_temp_dir_writeable) %></td>
77
<td>
8-
<% state = RedmineGitolite::Scripts.temp_dir_writeable?(:reset => true) %>
9-
<span class="label label-<%= state ? 'success' : 'important' %>"><%= RedmineGitolite::Scripts.get_temp_dir_path %></span>
8+
<% state = RedmineGitolite::GitoliteWrapper.temp_dir_writeable?(:reset => true) %>
9+
<span class="label label-<%= state ? 'success' : 'important' %>"><%= RedmineGitolite::GitoliteWrapper.gitolite_admin_dir %></span>
1010
</td>
1111
</tr>
1212

1313
<tr>
1414
<td><%= l(:label_redmine_user) %></td>
15-
<td><span class="label label-success"><%= RedmineGitolite::Scripts.redmine_user %></span></td>
15+
<td><span class="label label-success"><%= RedmineGitolite::GitoliteWrapper.redmine_user %></span></td>
1616
</tr>
1717

1818
<tr>
1919
<td><%= l(:label_gitolite_user) %></td>
20-
<td><span class="label label-success"><%= RedmineGitolite::Scripts.gitolite_user %></span></td>
20+
<td><span class="label label-success"><%= RedmineGitolite::GitoliteWrapper.gitolite_user %></span></td>
2121
</tr>
2222

2323
<tr>
2424
<td><%= l(:label_sudo_gitolite_to_redmine_user) %></td>
25-
<td><%= image_tag (RedmineGitolite::Scripts.can_gitolite_sudo_to_redmine_user? ? 'true.png' : 'exclamation.png') %></td>
25+
<td><%= image_tag (RedmineGitolite::GitoliteWrapper.can_gitolite_sudo_to_redmine_user? ? 'true.png' : 'exclamation.png') %></td>
2626
</tr>
2727

2828
<tr>
2929
<td><%= l(:label_sudo_redmine_to_gitolite_user) %></td>
30-
<td><%= image_tag (RedmineGitolite::Scripts.can_redmine_sudo_to_gitolite_user? ? 'true.png' : 'exclamation.png') %></td>
30+
<td><%= image_tag (RedmineGitolite::GitoliteWrapper.can_redmine_sudo_to_gitolite_user? ? 'true.png' : 'exclamation.png') %></td>
3131
</tr>
3232

3333
<% hooks_manager = RedmineGitolite::Hooks.new %>
@@ -62,7 +62,7 @@
6262

6363
<tr>
6464
<td><%= l(:label_mirroring_keys_installed) %></td>
65-
<td><%= image_tag (RedmineGitolite::Mirrors.mirroring_keys_installed?(:reset => true) ? 'true.png' : 'exclamation.png') %></td>
65+
<td><%= image_tag (RedmineGitolite::GitoliteWrapper.mirroring_keys_installed?(:reset => true) ? 'true.png' : 'exclamation.png') %></td>
6666
</tr>
6767

6868
<tr>

Diff for: config/locales/plugin_settings/en.yml

-9
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,6 @@ en:
4343

4444
label_gitolite_temp_dir: Temporary dir for lock file and data
4545
label_gitolite_temp_dir_desc: (Must be absolute)
46-
label_gitolite_scripts_dir: Scripts dir
47-
label_gitolite_scripts_dir_desc: (Can be absolute or relative to Redmine root)
48-
label_gitolite_timeout: Git timeout
49-
label_gitolite_timeout_desc: (In seconds)
5046

5147
label_gitolite_recycle_bin_expiration_time: Expiration time for repositories in recycle bin
5248
label_gitolite_recycle_bin_expiration_time_desc: (In hours)
@@ -150,19 +146,14 @@ en:
150146
label_sudo_redmine_to_gitolite_user: Redmine user is able to sudo to Git user?
151147
label_sudo_gitolite_to_redmine_user: Git user is able to sudo to Redmine user?
152148
label_unknown_gitolite_version: Unknown version
153-
label_scripts_dir_writeable: Scripts directory writeable?
154149
label_temp_dir_writeable: Temp directory writeable?
155-
label_gitolite_admin_ssh_script_installed: Script for Gitolite Admin command installed?
156-
label_git_cmd_script_installed: Script for Git command installed?
157-
label_shell_cmd_script_installed: Script for Shell command installed?
158150
label_mirroring_keys_installed: Mirrors keys installed?
159151
label_gitolite_version: Gitolite version
160152
label_gitolite_banner: Gitolite banner
161153
label_path_directories: PATH directories
162154
label_gitolite_hooks_params_installed: Hooks parameters installed?
163155
label_gitolite_hooks_installed: Hooks installed?
164156
label_redmine_user: Redmine username
165-
label_sudo_version: Sudo version
166157
label_git_version: Git version
167158

168159
# Recycle Bin

Diff for: config/locales/plugin_settings/fr.yml

-9
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,6 @@ fr:
4343

4444
label_gitolite_temp_dir: Répertoire temporaire pour les fichiers de verrouillage et les données
4545
label_gitolite_temp_dir_desc: (Doit être absolu)
46-
label_gitolite_scripts_dir: Répertoire des scripts
47-
label_gitolite_scripts_dir_desc: (Peut être absolu ou relatif à la racine de Redmine)
48-
label_gitolite_timeout: Délai d'expiration Git
49-
label_gitolite_timeout_desc: (En secondes)
5046

5147
label_gitolite_recycle_bin_expiration_time: Temps d'expiration pour les dépôts dans la corbeille
5248
label_gitolite_recycle_bin_expiration_time_desc: (En heures)
@@ -150,19 +146,14 @@ fr:
150146
label_sudo_redmine_to_gitolite_user: L'utilisateur Redmine peut sudo vers l'utilisateur Git?
151147
label_sudo_gitolite_to_redmine_user: L'utilisateur Git peut sudo vers l'utilisateur Redmine?
152148
label_unknown_gitolite_version: Version inconnue
153-
label_scripts_dir_writeable: Le répertoire des scripts est accessible en écriture?
154149
label_temp_dir_writeable: Le répertoire temporaire est accessible en écriture?
155-
label_gitolite_admin_ssh_script_installed: Script pour les commandes Gitolite Admin installé?
156-
label_git_cmd_script_installed: Script pour les commandes Git installé?
157-
label_shell_cmd_script_installed: Script pour les commandes Shell installé?
158150
label_mirroring_keys_installed: Clés de miroir installées?
159151
label_gitolite_version: Version de Gitolite
160152
label_gitolite_banner: Gitolite banner
161153
label_path_directories: Répertoires du PATH
162154
label_gitolite_hooks_params_installed: Paramètres des hooks installés?
163155
label_gitolite_hooks_installed: Hooks installés?
164156
label_redmine_user: Nom d'utilisateur Redmine
165-
label_sudo_version: Version de Sudo
166157
label_git_version: Version de Git
167158

168159
# Recycle Bin

0 commit comments

Comments
 (0)