Patch #2525 » 0001-Redmine-management-of-Git-repositories.patch
app/helpers/repositories_helper.rb | ||
---|---|---|
164 | 164 |
end |
165 | 165 | |
166 | 166 |
def git_field_tags(form, repository) |
167 |
content_tag('p', form.text_field(:url, :label => 'Path to .git directory', :size => 60, :required => true, :disabled => (repository && !repository.root_url.blank?))) |
|
167 |
if Setting.serve_git_repositories? and (repository == nil or repository.url.blank?) |
|
168 |
content_tag('p', form.text_field(:url, :value => GitManager.repositories_root + '/' + repository.project.identifier + '.git'), :label => 'Path to .git directory', :size => 60, :required => true) |
|
169 |
else |
|
170 |
content_tag('p', form.text_field(:url, :label => 'Path to .git directory', :size => 60, :required => true, :disabled => (repository && !repository.root_url.blank?))) |
|
171 |
end |
|
168 | 172 |
end |
169 | 173 | |
170 | 174 |
def cvs_field_tags(form, repository) |
app/models/changeset.rb | ||
---|---|---|
70 | 70 |
scan_comment_for_issue_ids |
71 | 71 |
end |
72 | 72 |
require 'pp' |
73 |
|
|
74 |
def scan_comment_for_issue_ids |
|
75 |
return if comments.blank? |
|
73 | ||
74 |
# returns issue ids found in message |
|
75 |
# three arrays are returned, references issues, fixed ones and wrong numbers (not Issues) |
|
76 |
def self.find_issue_ids(message, project) |
|
77 |
return [[],[]] if message.blank? |
|
76 | 78 |
# keywords used to reference issues |
77 | 79 |
ref_keywords = Setting.commit_ref_keywords.downcase.split(",").collect(&:strip) |
78 | 80 |
# keywords used to fix issues |
79 | 81 |
fix_keywords = Setting.commit_fix_keywords.downcase.split(",").collect(&:strip) |
80 |
# status and optional done ratio applied |
|
81 |
fix_status = IssueStatus.find_by_id(Setting.commit_fix_status_id) |
|
82 |
done_ratio = Setting.commit_fix_done_ratio.blank? ? nil : Setting.commit_fix_done_ratio.to_i |
|
83 | 82 |
|
84 | 83 |
kw_regexp = (ref_keywords + fix_keywords).collect{|kw| Regexp.escape(kw)}.join("|") |
85 |
return if kw_regexp.blank? |
|
84 |
return [[],[]] if kw_regexp.blank?
|
|
86 | 85 |
|
87 | 86 |
referenced_issues = [] |
87 |
fixed_issues = [] |
|
88 |
wrong_issue_ids = [] |
|
88 | 89 |
|
89 | 90 |
if ref_keywords.delete('*') |
90 | 91 |
# find any issue ID in the comments |
91 | 92 |
target_issue_ids = [] |
92 |
comments.scan(%r{([\s\(,-]|^)#(\d+)(?=[[:punct:]]|\s|<|$)}).each { |m| target_issue_ids << m[1] } |
|
93 |
referenced_issues += repository.project.issues.find_all_by_id(target_issue_ids) |
|
93 |
message.scan(%r{([\s\(,-]|^)#(\d+)(?=[[:punct:]]|\s|<|$)}).each { |m| target_issue_ids << m[1] } |
|
94 |
found_issues = project.issues.find_all_by_id(target_issue_ids) |
|
95 |
references_issues += found_issues |
|
96 |
found_issues.each { |issue| target_issue_ids.delete(issue.id.to_s) } |
|
97 |
wrong_issue_ids += target_issue_ids |
|
94 | 98 |
end |
95 | 99 |
|
96 |
comments.scan(Regexp.new("(#{kw_regexp})[\s:]+(([\s,;&]*#?\\d+)+)", Regexp::IGNORECASE)).each do |match|
|
|
100 |
message.scan(Regexp.new("(#{kw_regexp})[\s:]+(([\s,;&]*#?\\d+)+)", Regexp::IGNORECASE)).each do |match|
|
|
97 | 101 |
action = match[0] |
98 | 102 |
target_issue_ids = match[1].scan(/\d+/) |
99 |
target_issues = repository.project.issues.find_all_by_id(target_issue_ids) |
|
100 |
if fix_status && fix_keywords.include?(action.downcase) |
|
101 |
# update status of issues |
|
102 |
logger.debug "Issues fixed by changeset #{self.revision}: #{issue_ids.join(', ')}." if logger && logger.debug? |
|
103 |
target_issues.each do |issue| |
|
104 |
# the issue may have been updated by the closure of another one (eg. duplicate) |
|
105 |
issue.reload |
|
106 |
# don't change the status is the issue is closed |
|
107 |
next if issue.status.is_closed? |
|
108 |
csettext = "r#{self.revision}" |
|
109 |
if self.scmid && (! (csettext =~ /^r[0-9]+$/)) |
|
110 |
csettext = "commit:\"#{self.scmid}\"" |
|
111 |
end |
|
112 |
journal = issue.init_journal(user || User.anonymous, l(:text_status_changed_by_changeset, csettext)) |
|
113 |
issue.status = fix_status |
|
114 |
issue.done_ratio = done_ratio if done_ratio |
|
115 |
issue.save |
|
116 |
Mailer.deliver_issue_edit(journal) if Setting.notified_events.include?('issue_updated') |
|
117 |
end |
|
103 |
target_issues = project.issues.find_all_by_id(target_issue_ids) |
|
104 |
target_issues.each { |issue| target_issue_ids.delete(issue.id.to_s) } |
|
105 |
wrong_issue_ids += target_issue_ids |
|
106 |
if fix_keywords.include?(action.downcase) |
|
107 |
fixed_issues += target_issues |
|
108 |
else |
|
109 |
referenced_issues += target_issues |
|
118 | 110 |
end |
119 |
referenced_issues += target_issues |
|
120 | 111 |
end |
121 |
|
|
122 |
self.issues = referenced_issues.uniq |
|
112 |
return [referenced_issues.uniq, fixed_issues.uniq, wrong_issue_ids.uniq] |
|
113 |
end |
|
114 |
|
|
115 |
def scan_comment_for_issue_ids |
|
116 |
return if comments.blank? |
|
117 |
# status and optional done ratio applied |
|
118 |
fix_status = IssueStatus.find_by_id(Setting.commit_fix_status_id) |
|
119 |
done_ratio = Setting.commit_fix_done_ratio.blank? ? nil : Setting.commit_fix_done_ratio.to_i |
|
120 | ||
121 |
referenced_issues, fixed_issues, wrong_issues = Changeset.find_issue_ids(comments, repository.project) |
|
122 | ||
123 |
# update status of issues |
|
124 |
logger.debug "Issues fixed by changeset #{self.revision}: #{issue_ids.join(', ')}." if logger && logger.debug? |
|
125 |
fixed_issues.each do |issue| |
|
126 |
# the issue may have been updated by the closure of another one (eg. duplicate) |
|
127 |
issue.reload |
|
128 |
# don't change the status is the issue is closed |
|
129 |
next if issue.status.is_closed? |
|
130 |
csettext = "r#{self.revision}" |
|
131 |
if self.scmid && (! (csettext =~ /^r[0-9]+$/)) |
|
132 |
csettext = "commit:\"#{self.scmid}\"" |
|
133 |
end |
|
134 |
journal = issue.init_journal(user || User.anonymous, l(:text_status_changed_by_changeset, csettext)) |
|
135 |
issue.status = fix_status |
|
136 |
issue.done_ratio = done_ratio if done_ratio |
|
137 |
issue.save |
|
138 |
Mailer.deliver_issue_edit(journal) if Setting.notified_events.include?('issue_updated') |
|
139 |
end |
|
140 |
self.issues = (referenced_issues + fixed_issues).uniq |
|
123 | 141 |
end |
124 | 142 |
|
125 | 143 |
# Returns the previous changeset |
app/models/user.rb | ||
---|---|---|
65 | 65 |
validates_length_of :password, :minimum => 4, :allow_nil => true |
66 | 66 |
validates_confirmation_of :password, :allow_nil => true |
67 | 67 | |
68 |
def ssh_key |
|
69 |
return nil if ! Setting.serve_git_repositories? |
|
70 |
load_ssh_key if @ssh_key_entry == nil |
|
71 |
return @ssh_key_entry.key |
|
72 |
end |
|
73 | ||
74 |
def ssh_key_type |
|
75 |
return nil if ! Setting.serve_git_repositories? |
|
76 |
load_ssh_key if @ssh_key_entry == nil |
|
77 |
return @ssh_key_entry.type |
|
78 |
end |
|
79 | ||
80 |
def ssh_key=(key) |
|
81 |
return if ! Setting.serve_git_repositories? |
|
82 |
new_ssh_key if @ssh_key_entry == nil |
|
83 |
key = key.strip if key != nil |
|
84 |
@ssh_key_entry.key = key |
|
85 |
end |
|
86 | ||
87 |
def ssh_key_type=(key_type) |
|
88 |
return if ! Setting.serve_git_repositories? |
|
89 |
new_ssh_key if @ssh_key_entry == nil |
|
90 |
@ssh_key_entry.type = key_type |
|
91 |
end |
|
92 | ||
93 |
def validate |
|
94 |
return if !Setting.serve_git_repositories? |
|
95 |
return if @ssh_key_entry == nil |
|
96 | ||
97 |
errors.add(:ssh_key, "is not valid") if !@ssh_key_entry.validate |
|
98 |
end |
|
99 | ||
68 | 100 |
def before_create |
69 | 101 |
self.mail_notification = false |
70 | 102 |
true |
... | ... | |
74 | 106 |
# update hashed_password if password was set |
75 | 107 |
self.hashed_password = User.hash_password(self.password) if self.password |
76 | 108 |
end |
109 | ||
110 |
def after_save |
|
111 |
return if ! Setting.serve_git_repositories? |
|
112 |
return if @ssh_key_entry == nil |
|
113 |
|
|
114 |
@ssh_key_entry.options = GitManager.get_authorized_keys_options_for_login(login) |
|
115 | ||
116 |
@ssh_key_entry.save |
|
117 |
end |
|
77 | 118 |
|
78 | 119 |
def reload(*args) |
79 | 120 |
@name = nil |
... | ... | |
271 | 312 |
def self.hash_password(clear_password) |
272 | 313 |
Digest::SHA1.hexdigest(clear_password || "") |
273 | 314 |
end |
315 | ||
316 |
def new_ssh_key |
|
317 |
if @ssh_key_entry == nil |
|
318 |
@ssh_key_entry = AuthorizedKeysEntry.new |
|
319 |
@ssh_key_entry.identifier = login |
|
320 |
end |
|
321 |
end |
|
322 | ||
323 |
def load_ssh_key |
|
324 |
@ssh_key_entry = AuthorizedKeysEntry.find_by_identifier(login) |
|
325 |
new_ssh_key if @ssh_key_entry == nil |
|
326 |
end |
|
274 | 327 |
end |
275 | 328 | |
276 | 329 |
class AnonymousUser < User |
app/views/my/account.rhtml | ||
---|---|---|
16 | 16 |
<p><%= f.text_field :mail, :required => true %></p> |
17 | 17 |
<p><%= f.select :language, lang_options_for_select %></p> |
18 | 18 | |
19 |
<% if Setting.serve_git_repositories? %> |
|
20 |
<p><%= f.select :ssh_key_type, AuthorizedKeysEntry::KEY_TYPES %></p> |
|
21 |
<p><%= f.text_area :ssh_key, :rows => 10 %></p> |
|
22 |
<% end %> |
|
23 | ||
19 | 24 |
<% @user.custom_field_values.select(&:editable?).each do |value| %> |
20 | 25 |
<p><%= custom_field_tag_with_label :user, value %></p> |
21 | 26 |
<% end %> |
app/views/settings/_repositories.rhtml | ||
---|---|---|
14 | 14 |
<%= hidden_field_tag 'settings[enabled_scm][]', '' %> |
15 | 15 |
</p> |
16 | 16 | |
17 |
<% # TODO: Should be disabled when Git SCM is not enabled |
|
18 |
%> |
|
19 |
<p><label><%= l(:setting_serve_git_repositories) %></label> |
|
20 |
<%= check_box_tag 'settings[serve_git_repositories]', 1, Setting.serve_git_repositories? %> |
|
21 |
<%= hidden_field_tag 'settings[serve_git_repositories]', 0 %> |
|
22 |
</p> |
|
23 | ||
24 | ||
17 | 25 |
<p><label><%= l(:setting_repositories_encodings) %></label> |
18 | 26 |
<%= text_field_tag 'settings[repositories_encodings]', Setting.repositories_encodings, :size => 60 %><br /><em><%= l(:text_comma_separated) %></em></p> |
19 | 27 |
config/settings.yml | ||
---|---|---|
77 | 77 |
default: 1 |
78 | 78 |
sys_api_enabled: |
79 | 79 |
default: 0 |
80 |
serve_git_repositories: |
|
81 |
default: 0 |
|
80 | 82 |
commit_ref_keywords: |
81 | 83 |
default: 'refs,references,IssueID' |
82 | 84 |
commit_fix_keywords: |
lang/bg.yml | ||
---|---|---|
92 | 92 |
field_firstname: Име |
93 | 93 |
field_lastname: Фамилия |
94 | 94 |
field_mail: Email |
95 |
field_ssh_key: SSH Public Key |
|
96 |
field_ssh_key_type: SSH Public Key Type |
|
95 | 97 |
field_filename: Файл |
96 | 98 |
field_filesize: Големина |
97 | 99 |
field_downloads: Downloads |
... | ... | |
181 | 183 |
setting_feeds_limit: Лимит на Feeds |
182 | 184 |
setting_autofetch_changesets: Автоматично обработване на ревизиите |
183 | 185 |
setting_sys_api_enabled: Разрешаване на WS за управление |
186 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
184 | 187 |
setting_commit_ref_keywords: Отбелязващи ключови думи |
185 | 188 |
setting_commit_fix_keywords: Приключващи ключови думи |
186 | 189 |
setting_autologin: Автоматичен вход |
lang/ca.yml | ||
---|---|---|
106 | 106 |
field_firstname: Nom |
107 | 107 |
field_lastname: Cognom |
108 | 108 |
field_mail: Correu electrònic |
109 |
field_ssh_key: SSH Public Key |
|
110 |
field_ssh_key_type: SSH Public Key Type |
|
109 | 111 |
field_filename: Fitxer |
110 | 112 |
field_filesize: Mida |
111 | 113 |
field_downloads: Baixades |
... | ... | |
202 | 204 |
setting_default_projects_public: Els projectes nous són públics per defecte |
203 | 205 |
setting_autofetch_changesets: Omple automàticament les publicacions |
204 | 206 |
setting_sys_api_enabled: Habilita el WS per a la gestió del dipòsit |
207 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
205 | 208 |
setting_commit_ref_keywords: Paraules claus per a la referència |
206 | 209 |
setting_commit_fix_keywords: Paraules claus per a la correcció |
207 | 210 |
setting_autologin: Entrada automàtica |
lang/cs.yml | ||
---|---|---|
106 | 106 |
field_firstname: Jméno |
107 | 107 |
field_lastname: Příjmení |
108 | 108 |
field_mail: Email |
109 |
field_ssh_key: SSH Public Key |
|
110 |
field_ssh_key_type: SSH Public Key Type |
|
109 | 111 |
field_filename: Soubor |
110 | 112 |
field_filesize: Velikost |
111 | 113 |
field_downloads: Staženo |
... | ... | |
201 | 203 |
setting_default_projects_public: Nové projekty nastavovat jako veřejné |
202 | 204 |
setting_autofetch_changesets: Autofetch commits |
203 | 205 |
setting_sys_api_enabled: Povolit WS pro správu repozitory |
206 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
204 | 207 |
setting_commit_ref_keywords: Klíčová slova pro odkazy |
205 | 208 |
setting_commit_fix_keywords: Klíčová slova pro uzavření |
206 | 209 |
setting_autologin: Automatické přihlašování |
lang/da.yml | ||
---|---|---|
106 | 106 |
field_firstname: Fornavn |
107 | 107 |
field_lastname: Efternavn |
108 | 108 |
field_mail: E-mail |
109 |
field_ssh_key: SSH Public Key |
|
110 |
field_ssh_key_type: SSH Public Key Type |
|
109 | 111 |
field_filename: Fil |
110 | 112 |
field_filesize: Størrelse |
111 | 113 |
field_downloads: Downloads |
... | ... | |
202 | 204 |
setting_default_projects_public: Nye projekter er som standard offentlige |
203 | 205 |
setting_autofetch_changesets: Hent automatisk commits |
204 | 206 |
setting_sys_api_enabled: Aktiver webservice til versionsstyring |
207 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
205 | 208 |
setting_commit_ref_keywords: Nøgleord for sagsreferencer |
206 | 209 |
setting_commit_fix_keywords: Nøgleord for lukning af sager |
207 | 210 |
setting_autologin: Autologin |
lang/de.yml | ||
---|---|---|
106 | 106 |
field_firstname: Vorname |
107 | 107 |
field_lastname: Nachname |
108 | 108 |
field_mail: E-Mail |
109 |
field_ssh_key: SSH Public Key |
|
110 |
field_ssh_key_type: SSH Public Key Type |
|
109 | 111 |
field_filename: Datei |
110 | 112 |
field_filesize: Größe |
111 | 113 |
field_downloads: Downloads |
... | ... | |
203 | 205 |
setting_default_projects_public: Neue Projekte sind standardmäßig öffentlich |
204 | 206 |
setting_autofetch_changesets: Changesets automatisch abrufen |
205 | 207 |
setting_sys_api_enabled: Webservice zur Verwaltung der Projektarchive benutzen |
208 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
206 | 209 |
setting_commit_ref_keywords: Schlüsselwörter (Beziehungen) |
207 | 210 |
setting_commit_fix_keywords: Schlüsselwörter (Status) |
208 | 211 |
setting_autologin: Automatische Anmeldung |
lang/en.yml | ||
---|---|---|
108 | 108 |
field_firstname: Firstname |
109 | 109 |
field_lastname: Lastname |
110 | 110 |
field_mail: Email |
111 |
field_ssh_key: SSH Public Key |
|
112 |
field_ssh_key_type: SSH Public Key Type |
|
111 | 113 |
field_filename: File |
112 | 114 |
field_filesize: Size |
113 | 115 |
field_downloads: Downloads |
... | ... | |
206 | 208 |
setting_default_projects_public: New projects are public by default |
207 | 209 |
setting_autofetch_changesets: Autofetch commits |
208 | 210 |
setting_sys_api_enabled: Enable WS for repository management |
211 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
209 | 212 |
setting_commit_ref_keywords: Referencing keywords |
210 | 213 |
setting_commit_fix_keywords: Fixing keywords |
211 | 214 |
setting_autologin: Autologin |
lang/es.yml | ||
---|---|---|
150 | 150 |
field_lastname: Apellido |
151 | 151 |
field_login: Identificador |
152 | 152 |
field_mail: Correo electrónico |
153 |
field_ssh_key: SSH Public Key |
|
154 |
field_ssh_key_type: SSH Public Key Type |
|
153 | 155 |
field_mail_notification: Notificaciones por correo |
154 | 156 |
field_max_length: Longitud máxima |
155 | 157 |
field_min_length: Longitud mínima |
... | ... | |
627 | 629 |
setting_self_registration: Registro permitido |
628 | 630 |
setting_sequential_project_identifiers: Generar identificadores de proyecto |
629 | 631 |
setting_sys_api_enabled: Habilitar SW para la gestión del repositorio |
632 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
630 | 633 |
setting_text_formatting: Formato de texto |
631 | 634 |
setting_time_format: Formato de hora |
632 | 635 |
setting_user_format: Formato de nombre de usuario |
lang/fi.yml | ||
---|---|---|
101 | 101 |
field_firstname: Etunimi |
102 | 102 |
field_lastname: Sukunimi |
103 | 103 |
field_mail: Sähköposti |
104 |
field_ssh_key: SSH Public Key |
|
105 |
field_ssh_key_type: SSH Public Key Type |
|
104 | 106 |
field_filename: Tiedosto |
105 | 107 |
field_filesize: Koko |
106 | 108 |
field_downloads: Latausta |
... | ... | |
194 | 196 |
setting_feeds_limit: Syötteen sisällön raja |
195 | 197 |
setting_autofetch_changesets: Automaattisten muutosjoukkojen haku |
196 | 198 |
setting_sys_api_enabled: Salli WS tietovaraston hallintaan |
199 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
197 | 200 |
setting_commit_ref_keywords: Viittaavat hakusanat |
198 | 201 |
setting_commit_fix_keywords: Korjaavat hakusanat |
199 | 202 |
setting_autologin: Automaatinen kirjautuminen |
lang/fr.yml | ||
---|---|---|
108 | 108 |
field_firstname: Prénom |
109 | 109 |
field_lastname: Nom |
110 | 110 |
field_mail: Email |
111 |
field_ssh_key: SSH Public Key |
|
112 |
field_ssh_key_type: SSH Public Key Type |
|
111 | 113 |
field_filename: Fichier |
112 | 114 |
field_filesize: Taille |
113 | 115 |
field_downloads: Téléchargements |
... | ... | |
206 | 208 |
setting_default_projects_public: Définir les nouveaux projects comme publics par défaut |
207 | 209 |
setting_autofetch_changesets: Récupération auto. des commits |
208 | 210 |
setting_sys_api_enabled: Activer les WS pour la gestion des dépôts |
211 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
209 | 212 |
setting_commit_ref_keywords: Mot-clés de référencement |
210 | 213 |
setting_commit_fix_keywords: Mot-clés de résolution |
211 | 214 |
setting_autologin: Autologin |
lang/he.yml | ||
---|---|---|
94 | 94 |
field_firstname: שם פרטי |
95 | 95 |
field_lastname: שם משפחה |
96 | 96 |
field_mail: דוא"ל |
97 |
field_ssh_key: SSH Public Key |
|
98 |
field_ssh_key_type: SSH Public Key Type |
|
97 | 99 |
field_filename: קובץ |
98 | 100 |
field_filesize: גודל |
99 | 101 |
field_downloads: הורדות |
... | ... | |
184 | 186 |
setting_feeds_limit: גבול תוכן הזנות |
185 | 187 |
setting_autofetch_changesets: משיכה אוטומתי של עידכונים |
186 | 188 |
setting_sys_api_enabled: אפשר WS לניהול המאגר |
189 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
187 | 190 |
setting_commit_ref_keywords: מילות מפתח מקשרות |
188 | 191 |
setting_commit_fix_keywords: מילות מפתח מתקנות |
189 | 192 |
setting_autologin: חיבור אוטומטי |
lang/hu.yml | ||
---|---|---|
103 | 103 |
field_firstname: Keresztnév |
104 | 104 |
field_lastname: Vezetéknév |
105 | 105 |
field_mail: E-mail |
106 |
field_ssh_key: SSH Public Key |
|
107 |
field_ssh_key_type: SSH Public Key Type |
|
106 | 108 |
field_filename: Fájl |
107 | 109 |
field_filesize: Méret |
108 | 110 |
field_downloads: Letöltések |
... | ... | |
198 | 200 |
setting_default_projects_public: Az új projektek alapértelmezés szerint nyilvánosak |
199 | 201 |
setting_autofetch_changesets: Commitok automatikus lehúzása |
200 | 202 |
setting_sys_api_enabled: WS engedélyezése a tárolók kezeléséhez |
203 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
201 | 204 |
setting_commit_ref_keywords: Hivatkozó kulcsszavak |
202 | 205 |
setting_commit_fix_keywords: Javítások kulcsszavai |
203 | 206 |
setting_autologin: Automatikus bejelentkezés |
lang/it.yml | ||
---|---|---|
92 | 92 |
field_firstname: Nome |
93 | 93 |
field_lastname: Cognome |
94 | 94 |
field_mail: Email |
95 |
field_ssh_key: SSH Public Key |
|
96 |
field_ssh_key_type: SSH Public Key Type |
|
95 | 97 |
field_filename: File |
96 | 98 |
field_filesize: Dimensione |
97 | 99 |
field_downloads: Download |
... | ... | |
181 | 183 |
setting_feeds_limit: Limite contenuti del feed |
182 | 184 |
setting_autofetch_changesets: Acquisisci automaticamente le commit |
183 | 185 |
setting_sys_api_enabled: Abilita WS per la gestione del repository |
186 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
184 | 187 |
setting_commit_ref_keywords: Referencing keywords |
185 | 188 |
setting_commit_fix_keywords: Fixing keywords |
186 | 189 |
setting_autologin: Login automatico |
lang/ja.yml | ||
---|---|---|
93 | 93 |
field_firstname: 名前 |
94 | 94 |
field_lastname: 苗字 |
95 | 95 |
field_mail: メールアドレス |
96 |
field_ssh_key: SSH Public Key |
|
97 |
field_ssh_key_type: SSH Public Key Type |
|
96 | 98 |
field_filename: ファイル |
97 | 99 |
field_filesize: サイズ |
98 | 100 |
field_downloads: ダウンロード |
... | ... | |
182 | 184 |
setting_feeds_limit: フィード内容の上限 |
183 | 185 |
setting_autofetch_changesets: コミットを自動取得する |
184 | 186 |
setting_sys_api_enabled: リポジトリ管理用のWeb Serviceを有効にする |
187 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
185 | 188 |
setting_commit_ref_keywords: 参照用キーワード |
186 | 189 |
setting_commit_fix_keywords: 修正用キーワード |
187 | 190 |
setting_autologin: 自動ログイン |
lang/ko.yml | ||
---|---|---|
94 | 94 |
field_firstname: 이름 |
95 | 95 |
field_lastname: 성 |
96 | 96 |
field_mail: 메일 |
97 |
field_ssh_key: SSH Public Key |
|
98 |
field_ssh_key_type: SSH Public Key Type |
|
97 | 99 |
field_filename: 파일 |
98 | 100 |
field_filesize: 크기 |
99 | 101 |
field_downloads: 다운로드 |
... | ... | |
184 | 186 |
setting_feeds_limit: 내용 피드(RSS Feed) 제한 개수 |
185 | 187 |
setting_autofetch_changesets: 커밋된 변경묶음을 자동으로 가져오기 |
186 | 188 |
setting_sys_api_enabled: 저장소 관리자에 WS 를 허용 |
189 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
187 | 190 |
setting_commit_ref_keywords: 일감 참조에 사용할 키워드들 |
188 | 191 |
setting_commit_fix_keywords: 일감 해결에 사용할 키워드들 |
189 | 192 |
setting_autologin: 자동 로그인 |
lang/lt.yml | ||
---|---|---|
106 | 106 |
field_firstname: Vardas |
107 | 107 |
field_lastname: Pavardė |
108 | 108 |
field_mail: Email |
109 |
field_ssh_key: SSH Public Key |
|
110 |
field_ssh_key_type: SSH Public Key Type |
|
109 | 111 |
field_filename: Byla |
110 | 112 |
field_filesize: Dydis |
111 | 113 |
field_downloads: Atsiuntimai |
... | ... | |
203 | 205 |
setting_default_projects_public: Naujas projektas viešas pagal nutylėjimą |
204 | 206 |
setting_autofetch_changesets: Automatinis pakeitimų siuntimas |
205 | 207 |
setting_sys_api_enabled: Įgalinkite WS sandėlio vadybai |
208 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
206 | 209 |
setting_commit_ref_keywords: Nurodymo reikšminiai žodžiai |
207 | 210 |
setting_commit_fix_keywords: Fiksavimo reikšminiai žodžiai |
208 | 211 |
setting_autologin: Autoregistracija |
lang/nl.yml | ||
---|---|---|
92 | 92 |
field_firstname: Voornaam |
93 | 93 |
field_lastname: Achternaam |
94 | 94 |
field_mail: E-mail |
95 |
field_ssh_key: SSH Public Key |
|
96 |
field_ssh_key_type: SSH Public Key Type |
|
95 | 97 |
field_filename: Bestand |
96 | 98 |
field_filesize: Grootte |
97 | 99 |
field_downloads: Downloads |
... | ... | |
181 | 183 |
setting_feeds_limit: Feedinhoud limiet |
182 | 184 |
setting_autofetch_changesets: Haal commits automatisch op |
183 | 185 |
setting_sys_api_enabled: Gebruik WS voor repository beheer |
186 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
184 | 187 |
setting_commit_ref_keywords: Refererende trefwoorden |
185 | 188 |
setting_commit_fix_keywords: Gefixeerde trefwoorden |
186 | 189 |
setting_autologin: Automatisch inloggen |
lang/no.yml | ||
---|---|---|
105 | 105 |
field_firstname: Fornavn |
106 | 106 |
field_lastname: Etternavn |
107 | 107 |
field_mail: E-post |
108 |
field_ssh_key: SSH Public Key |
|
109 |
field_ssh_key_type: SSH Public Key Type |
|
108 | 110 |
field_filename: Fil |
109 | 111 |
field_filesize: Størrelse |
110 | 112 |
field_downloads: Nedlastinger |
... | ... | |
200 | 202 |
setting_default_projects_public: Nye prosjekter er offentlige som standard |
201 | 203 |
setting_autofetch_changesets: Autohenting av innsendinger |
202 | 204 |
setting_sys_api_enabled: Aktiver webservice for depot-administrasjon |
205 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
203 | 206 |
setting_commit_ref_keywords: Nøkkelord for referanse |
204 | 207 |
setting_commit_fix_keywords: Nøkkelord for retting |
205 | 208 |
setting_autologin: Autoinnlogging |
lang/pl.yml | ||
---|---|---|
161 | 161 |
field_lastname: Nazwisko |
162 | 162 |
field_login: Login |
163 | 163 |
field_mail: Email |
164 |
field_ssh_key: Klucz publiczny SSH |
|
165 |
field_ssh_key_type: Typ klucza SSH |
|
164 | 166 |
field_mail_notification: Powiadomienia Email |
165 | 167 |
field_max_length: Maksymalna długość |
166 | 168 |
field_min_length: Minimalna długość |
... | ... | |
657 | 659 |
setting_self_registration: Własna rejestracja umożliwiona |
658 | 660 |
setting_sequential_project_identifiers: Generuj sekwencyjne identyfikatory projektów |
659 | 661 |
setting_sys_api_enabled: Włączenie WS do zarządzania repozytorium |
662 |
setting_serve_git_repositories: Udostępnij repozytoria GIT poprzez konto SSH Redmine |
|
660 | 663 |
setting_text_formatting: Formatowanie tekstu |
661 | 664 |
setting_time_format: Format czasu |
662 | 665 |
setting_user_format: Personalny format wyświetlania |
lang/pt-br.yml | ||
---|---|---|
105 | 105 |
field_firstname: Nome |
106 | 106 |
field_lastname: Sobrenome |
107 | 107 |
field_mail: Email |
108 |
field_ssh_key: SSH Public Key |
|
109 |
field_ssh_key_type: SSH Public Key Type |
|
108 | 110 |
field_filename: Arquivo |
109 | 111 |
field_filesize: Tamanho |
110 | 112 |
field_downloads: Downloads |
... | ... | |
201 | 203 |
setting_default_projects_public: Novos projetos são públicos por padrão |
202 | 204 |
setting_autofetch_changesets: Auto-obter commits |
203 | 205 |
setting_sys_api_enabled: Ativa WS para gerenciamento do repositório |
206 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
204 | 207 |
setting_commit_ref_keywords: Palavras de referência |
205 | 208 |
setting_commit_fix_keywords: Palavras de fechamento |
206 | 209 |
setting_autologin: Auto-login |
lang/pt.yml | ||
---|---|---|
107 | 107 |
field_firstname: Nome |
108 | 108 |
field_lastname: Apelido |
109 | 109 |
field_mail: E-mail |
110 |
field_ssh_key: SSH Public Key |
|
111 |
field_ssh_key_type: SSH Public Key Type |
|
110 | 112 |
field_filename: Ficheiro |
111 | 113 |
field_filesize: Tamanho |
112 | 114 |
field_downloads: Downloads |
... | ... | |
203 | 205 |
setting_default_projects_public: Projectos novos são públicos por omissão |
204 | 206 |
setting_autofetch_changesets: Buscar automaticamente commits |
205 | 207 |
setting_sys_api_enabled: Activar Web Service para gestão do repositório |
208 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
206 | 209 |
setting_commit_ref_keywords: Palavras-chave de referência |
207 | 210 |
setting_commit_fix_keywords: Palavras-chave de fecho |
208 | 211 |
setting_autologin: Login automático |
lang/ro.yml | ||
---|---|---|
92 | 92 |
field_firstname: Nume |
93 | 93 |
field_lastname: Prenume |
94 | 94 |
field_mail: Email |
95 |
field_ssh_key: SSH Public Key |
|
96 |
field_ssh_key_type: SSH Public Key Type |
|
95 | 97 |
field_filename: Fisier |
96 | 98 |
field_filesize: Marimea fisierului |
97 | 99 |
field_downloads: Download |
... | ... | |
181 | 183 |
setting_feeds_limit: Limita continut feed |
182 | 184 |
setting_autofetch_changesets: Autofetch commits |
183 | 185 |
setting_sys_api_enabled: Setare WS pentru managementul stocului (repository) |
186 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
184 | 187 |
setting_commit_ref_keywords: Cuvinte cheie de referinta |
185 | 188 |
setting_commit_fix_keywords: Cuvinte cheie de rezolvare |
186 | 189 |
setting_autologin: Autentificare automata |
lang/ru.yml | ||
---|---|---|
165 | 165 |
field_lastname: Фамилия |
166 | 166 |
field_login: Пользователь |
167 | 167 |
field_mail: Email |
168 |
field_ssh_key: SSH Public Key |
|
169 |
field_ssh_key_type: SSH Public Key Type |
|
168 | 170 |
field_mail_notification: Уведомления по email |
169 | 171 |
field_max_length: Максимальная длина |
170 | 172 |
field_min_length: Минимальная длина |
... | ... | |
673 | 675 |
setting_self_registration: Возможна саморегистрация |
674 | 676 |
setting_sequential_project_identifiers: Генерировать последовательные идентификаторы проектов |
675 | 677 |
setting_sys_api_enabled: Разрешить WS для управления хранилищем |
678 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
676 | 679 |
setting_text_formatting: Форматирование текста |
677 | 680 |
setting_time_format: Формат времени |
678 | 681 |
setting_user_format: Формат отображения имени |
lang/sk.yml | ||
---|---|---|
106 | 106 |
field_firstname: Meno |
107 | 107 |
field_lastname: Priezvisko |
108 | 108 |
field_mail: Email |
109 |
field_ssh_key: SSH Public Key |
|
110 |
field_ssh_key_type: SSH Public Key Type |
|
109 | 111 |
field_filename: Súbor |
110 | 112 |
field_filesize: Veľkosť |
111 | 113 |
field_downloads: Stiahnuté |
... | ... | |
201 | 203 |
setting_default_projects_public: Nové projekty nastavovať ako verejné |
202 | 204 |
setting_autofetch_changesets: Automatický prenos zmien |
203 | 205 |
setting_sys_api_enabled: Povolit WS pre správu repozitory |
206 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
204 | 207 |
setting_commit_ref_keywords: Klúčové slová pre odkazy |
205 | 208 |
setting_commit_fix_keywords: Klúčové slová pre uzavretie |
206 | 209 |
setting_autologin: Automatické prihlasovanie |
lang/sr.yml | ||
---|---|---|
96 | 96 |
field_firstname: Ime |
97 | 97 |
field_lastname: Prezime |
98 | 98 |
field_mail: Email |
99 |
field_ssh_key: SSH Public Key |
|
100 |
field_ssh_key_type: SSH Public Key Type |
|
99 | 101 |
field_filename: Fajl |
100 | 102 |
field_filesize: Veličina |
101 | 103 |
field_downloads: Preuzimanja |
... | ... | |
186 | 188 |
setting_feeds_limit: Feed content limit |
187 | 189 |
setting_autofetch_changesets: Autofetch commits |
188 | 190 |
setting_sys_api_enabled: Ukljuci WS za menadžment spremišta |
191 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
189 | 192 |
setting_commit_ref_keywords: Referentne ključne reči |
190 | 193 |
setting_commit_fix_keywords: Fiksne ključne reči |
191 | 194 |
setting_autologin: Automatsko prijavljivanje |
lang/sv.yml | ||
---|---|---|
106 | 106 |
field_firstname: Förnamn |
107 | 107 |
field_lastname: Efternamn |
108 | 108 |
field_mail: Mail |
109 |
field_ssh_key: SSH Public Key |
|
110 |
field_ssh_key_type: SSH Public Key Type |
|
109 | 111 |
field_filename: Fil |
110 | 112 |
field_filesize: Storlek |
111 | 113 |
field_downloads: Nerladdningar |
... | ... | |
203 | 205 |
setting_default_projects_public: Nya projekt är publika som standard |
204 | 206 |
setting_autofetch_changesets: Automatisk hämtning av commits |
205 | 207 |
setting_sys_api_enabled: Aktivera WS för repository-hantering |
208 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
206 | 209 |
setting_commit_ref_keywords: Referens-nyckelord |
207 | 210 |
setting_commit_fix_keywords: Fix-nyckelord |
208 | 211 |
setting_autologin: Automatisk inloggning |
lang/th.yml | ||
---|---|---|
103 | 103 |
field_firstname: ชื่อ |
104 | 104 |
field_lastname: นามสกุล |
105 | 105 |
field_mail: อีเมล์ |
106 |
field_ssh_key: SSH Public Key |
|
107 |
field_ssh_key_type: SSH Public Key Type |
|
106 | 108 |
field_filename: แฟ้ม |
107 | 109 |
field_filesize: ขนาด |
108 | 110 |
field_downloads: ดาวน์โหลด |
... | ... | |
198 | 200 |
setting_default_projects_public: โครงการใหม่มีค่าเริ่มต้นเป็น สาธารณะ |
199 | 201 |
setting_autofetch_changesets: ดึง commits อัตโนมัติ |
200 | 202 |
setting_sys_api_enabled: เปิดใช้ WS สำหรับการจัดการที่เก็บต้นฉบับ |
203 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
201 | 204 |
setting_commit_ref_keywords: คำสำคัญ Referencing |
202 | 205 |
setting_commit_fix_keywords: คำสำคัญ Fixing |
203 | 206 |
setting_autologin: เข้าระบบอัตโนมัติ |
lang/tr.yml | ||
---|---|---|
102 | 102 |
field_firstname: Ad |
103 | 103 |
field_lastname: Soyad |
104 | 104 |
field_mail: E-Posta |
105 |
field_ssh_key: SSH Public Key |
|
106 |
field_ssh_key_type: SSH Public Key Type |
|
105 | 107 |
field_filename: Dosya |
106 | 108 |
field_filesize: Boyut |
107 | 109 |
field_downloads: İndirilenler |
... | ... | |
197 | 199 |
setting_default_projects_public: Yeni projeler varsayılan olarak herkese açık |
198 | 200 |
setting_autofetch_changesets: Otomatik gönderi al |
199 | 201 |
setting_sys_api_enabled: Depo yönetimi için WS'yi etkinleştir |
202 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
200 | 203 |
setting_commit_ref_keywords: Başvuru Kelimeleri |
201 | 204 |
setting_commit_fix_keywords: Sabitleme kelimeleri |
202 | 205 |
setting_autologin: Otomatik Giriş |
lang/uk.yml | ||
---|---|---|
97 | 97 |
field_firstname: Ім'я |
98 | 98 |
field_lastname: Прізвище |
99 | 99 |
field_mail: Ел. пошта |
100 |
field_ssh_key: SSH Public Key |
|
101 |
field_ssh_key_type: SSH Public Key Type |
|
100 | 102 |
field_filename: Файл |
101 | 103 |
field_filesize: Розмір |
102 | 104 |
field_downloads: Завантаження |
... | ... | |
189 | 191 |
setting_feeds_limit: Обмеження змісту подачі |
190 | 192 |
setting_autofetch_changesets: Автоматично доставати доповнення |
191 | 193 |
setting_sys_api_enabled: Дозволити WS для управління репозиторієм |
194 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
192 | 195 |
setting_commit_ref_keywords: Ключові слова для посилання |
193 | 196 |
setting_commit_fix_keywords: Призначення ключових слів |
194 | 197 |
setting_autologin: Автоматичний вхід |
lang/vn.yml | ||
---|---|---|
106 | 106 |
field_firstname: Tên lót + Tên |
107 | 107 |
field_lastname: Họ |
108 | 108 |
field_mail: Email |
109 |
field_ssh_key: SSH Public Key |
|
110 |
field_ssh_key_type: SSH Public Key Type |
|
109 | 111 |
field_filename: Tập tin |
110 | 112 |
field_filesize: Cỡ |
111 | 113 |
field_downloads: Tải về |
... | ... | |
202 | 204 |
setting_default_projects_public: Dự án mặc định là công cộng |
203 | 205 |
setting_autofetch_changesets: Autofetch commits |
204 | 206 |
setting_sys_api_enabled: Enable WS for repository management |
207 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
205 | 208 |
setting_commit_ref_keywords: Từ khóa tham khảo |
206 | 209 |
setting_commit_fix_keywords: Từ khóa chỉ vấn đề đã giải quyết |
207 | 210 |
setting_autologin: Tự động đăng nhập |
lang/zh-tw.yml | ||
---|---|---|
106 | 106 |
field_firstname: 名字 |
107 | 107 |
field_lastname: 姓氏 |
108 | 108 |
field_mail: 電子郵件 |
109 |
field_ssh_key: SSH Public Key |
|
110 |
field_ssh_key_type: SSH Public Key Type |
|
109 | 111 |
field_filename: 檔案名稱 |
110 | 112 |
field_filesize: 大小 |
111 | 113 |
field_downloads: 下載次數 |
... | ... | |
203 | 205 |
setting_autofetch_changesets: 自動取得送交版次 |
204 | 206 |
setting_default_projects_public: 新建立之專案預設為「公開」 |
205 | 207 |
setting_sys_api_enabled: 啟用管理版本庫之網頁服務 (Web Service) |
208 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
206 | 209 |
setting_commit_ref_keywords: 送交用於參照項目之關鍵字 |
207 | 210 |
setting_commit_fix_keywords: 送交用於修正項目之關鍵字 |
208 | 211 |
setting_autologin: 自動登入 |
lang/zh.yml | ||
---|---|---|
106 | 106 |
field_firstname: 名字 |
107 | 107 |
field_lastname: 姓氏 |
108 | 108 |
field_mail: 邮件地址 |
109 |
field_ssh_key: SSH Public Key |
|
110 |
field_ssh_key_type: SSH Public Key Type |
|
109 | 111 |
field_filename: 文件 |
110 | 112 |
field_filesize: 大小 |
111 | 113 |
field_downloads: 下载次数 |
... | ... | |
203 | 205 |
setting_default_projects_public: 新建项目默认为公开项目 |
204 | 206 |
setting_autofetch_changesets: 自动获取程序变更 |
205 | 207 |
setting_sys_api_enabled: 启用用于版本库管理的Web Service |
208 |
setting_serve_git_repositories: Serve GIT repositories using Redmine's SSH account |
|
206 | 209 |
setting_commit_ref_keywords: 用于引用问题的关键字 |
207 | 210 |
setting_commit_fix_keywords: 用于解决问题的关键字 |
208 | 211 |
setting_autologin: 自动登录 |
lib/redmine/scm/adapters/git_adapter.rb | ||
---|---|---|
24 | 24 |
|
25 | 25 |
# Git executable name |
26 | 26 |
GIT_BIN = "git" |
27 |
EMPTY_COMMIT = "0000000000000000000000000000000000000000" |
|
28 | ||
29 |
def init(description) |
|
30 |
FileUtils.mkdir_p "#{url}" |
|
31 |
cmd = "#{GIT_BIN} --git-dir #{target('')} init --template=#{RAILS_ROOT}/lib/redmine/scm/adapters/git_templates --bare" |
|
32 |
shellout(cmd) |
|
33 |
Dir["#{url}/**/*"].each do |file| |
|
34 |
if File.file?(file) |
|
35 |
File.open(file, "r") do |source| |
|
36 |
File.open(file + ".new", "w", File.stat(file).mode) do |dest| |
|
37 |
source.each_line do |line| |
|
38 |
dest << line.gsub('#{description}', description).gsub('#{RAILS_ROOT}', RAILS_ROOT).gsub('#{RAILS_ENV}', ENV["RAILS_ENV"]) |
|
39 |
end |
|
40 |
end |
|
41 |
end |
|
42 |
FileUtils.mv file + ".new", file |
|
43 |
end |
|
44 |
end |
|
45 |
end |
|
27 | 46 | |
28 | 47 |
# Get the revision of a particuliar file |
29 | 48 |
def get_rev (rev,path) |
... | ... | |
61 | 80 |
elsif (parsing_descr == 0) && line =~ /^(\w+):\s*(.*)$/ |
62 | 81 |
key = $1 |
63 | 82 |
value = $2 |
64 |
if key == "Author"
|
|
83 |
if key == "Commit"
|
|
65 | 84 |
changeset[:author] = value |
66 | 85 |
elsif key == "CommitDate" |
67 | 86 |
changeset[:date] = value |
... | ... | |
140 | 159 |
cmd = "#{GIT_BIN} --git-dir #{target('')} log --raw --date=iso --pretty=fuller" |
141 | 160 |
cmd << " --reverse" if options[:reverse] |
142 | 161 |
cmd << " -n #{options[:limit].to_i} " if (!options.nil?) && options[:limit] |
143 |
cmd << " #{shell_quote(identifier_from + '..')} " if identifier_from |
|
162 |
cmd << " #{shell_quote(identifier_from + '..')} " if identifier_from and identifier_from != EMPTY_COMMIT
|
|
144 | 163 |
cmd << " #{shell_quote identifier_to} " if identifier_to |
145 | 164 |
shellout(cmd) do |io| |
146 | 165 |
files=[] |
... | ... | |
262 | 281 |
return nil if $? && $?.exitstatus != 0 |
263 | 282 |
cat |
264 | 283 |
end |
284 | ||
285 |
def get_object_type(object) |
|
286 |
cmd = "#{GIT_BIN} --git-dir #{target('')} cat-file -t #{object}" |
|
287 |
type = "" |
|
288 |
GitAdapter.shellout(cmd) do |io| |
|
289 |
return io.read.strip |
|
290 |
end |
|
291 |
end |
|
292 | ||
293 |
def merge_base(old_rev, new_rev) |
|
294 |
cmd = "#{GIT_BIN} --git-dir #{target('')} merge-base #{old_rev} #{new_rev}" |
|
295 |
GitAdapter.shellout(cmd) do |io| |
|
296 |
return io.read.strip |
|
297 |
end |
|
298 |
end |
|
265 | 299 |
end |
266 | 300 |
end |
267 | 301 |
end |
public/stylesheets/application.css | ||
---|---|---|
243 | 243 |
.total-hours span.hours-int { font-size: 120%; } |
244 | 244 | |
245 | 245 |
.autoscroll {overflow-x: auto; padding:1px; margin-bottom: 1.2em;} |
246 |
#user_firstname, #user_lastname, #user_mail, #my_account_form select { width: 90%; } |
|
246 |
#user_firstname, #user_lastname, #user_mail, #user_ssh_key, #my_account_form select { width: 90%; }
|
|
247 | 247 | |
248 | 248 |
.pagination {font-size: 90%} |
249 | 249 |
p.pagination {margin-top:8px;} |