Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
797f777900 |
@@ -31,6 +31,17 @@ class ApplicationController < ActionController::Base
|
||||
super
|
||||
cookies.delete(:autologin)
|
||||
end
|
||||
# Remove broken cookie after upgrade from 0.8.x (#4292)
|
||||
# See https://rails.lighthouseapp.com/projects/8994/tickets/3360
|
||||
# TODO: remove it when Rails is fixed
|
||||
before_filter :delete_broken_cookies
|
||||
def delete_broken_cookies
|
||||
if cookies['_redmine_session'] && cookies['_redmine_session'] !~ /--/
|
||||
cookies.delete '_redmine_session'
|
||||
redirect_to home_path
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
# FIXME: Remove this when all of Rack and Rails have learned how to
|
||||
# properly use encodings
|
||||
|
||||
@@ -67,7 +67,7 @@ class AttachmentsController < ApplicationController
|
||||
return
|
||||
end
|
||||
|
||||
@attachment = Attachment.new(:file => request.raw_post)
|
||||
@attachment = Attachment.new(:file => request.body)
|
||||
@attachment.author = User.current
|
||||
@attachment.filename = Redmine::Utils.random_hex(16)
|
||||
|
||||
|
||||
@@ -18,13 +18,12 @@
|
||||
class TimelogController < ApplicationController
|
||||
menu_item :issues
|
||||
|
||||
before_filter :find_project_for_new_time_entry, :only => [:create]
|
||||
before_filter :find_project, :only => [:create]
|
||||
before_filter :find_time_entry, :only => [:show, :edit, :update]
|
||||
before_filter :find_time_entries, :only => [:bulk_edit, :bulk_update, :destroy]
|
||||
before_filter :authorize, :except => [:new, :index, :report]
|
||||
|
||||
before_filter :find_optional_project, :only => [:index, :report]
|
||||
before_filter :find_optional_project_for_new_time_entry, :only => [:new]
|
||||
before_filter :find_optional_project, :only => [:new, :index, :report]
|
||||
before_filter :authorize_global, :only => [:new, :index, :report]
|
||||
|
||||
accept_rss_auth :index
|
||||
@@ -134,13 +133,9 @@ class TimelogController < ApplicationController
|
||||
flash[:notice] = l(:notice_successful_create)
|
||||
if params[:continue]
|
||||
if params[:project_id]
|
||||
redirect_to :action => 'new', :project_id => @time_entry.project, :issue_id => @time_entry.issue,
|
||||
:time_entry => {:issue_id => @time_entry.issue_id, :activity_id => @time_entry.activity_id},
|
||||
:back_url => params[:back_url]
|
||||
redirect_to :action => 'new', :project_id => @time_entry.project, :issue_id => @time_entry.issue, :back_url => params[:back_url]
|
||||
else
|
||||
redirect_to :action => 'new',
|
||||
:time_entry => {:project_id => @time_entry.project_id, :issue_id => @time_entry.issue_id, :activity_id => @time_entry.activity_id},
|
||||
:back_url => params[:back_url]
|
||||
redirect_to :action => 'new', :back_url => params[:back_url]
|
||||
end
|
||||
else
|
||||
redirect_back_or_default :action => 'index', :project_id => @time_entry.project
|
||||
@@ -263,7 +258,7 @@ private
|
||||
end
|
||||
end
|
||||
|
||||
def find_optional_project_for_new_time_entry
|
||||
def find_project
|
||||
if (project_id = (params[:project_id] || params[:time_entry] && params[:time_entry][:project_id])).present?
|
||||
@project = Project.find(project_id)
|
||||
end
|
||||
@@ -271,15 +266,12 @@ private
|
||||
@issue = Issue.find(issue_id)
|
||||
@project ||= @issue.project
|
||||
end
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
|
||||
def find_project_for_new_time_entry
|
||||
find_optional_project_for_new_time_entry
|
||||
if @project.nil?
|
||||
render_404
|
||||
return false
|
||||
end
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
render_404
|
||||
end
|
||||
|
||||
def find_optional_project
|
||||
|
||||
@@ -176,11 +176,9 @@ class UsersController < ApplicationController
|
||||
def destroy
|
||||
@user.destroy
|
||||
respond_to do |format|
|
||||
format.html { redirect_to :back }
|
||||
format.html { redirect_to(users_url) }
|
||||
format.api { head :ok }
|
||||
end
|
||||
rescue ::ActionController::RedirectBackError
|
||||
redirect_to(users_url)
|
||||
end
|
||||
|
||||
def edit_membership
|
||||
|
||||
@@ -110,15 +110,10 @@ class Attachment < ActiveRecord::Base
|
||||
logger.info("Saving attachment '#{self.diskfile}' (#{@temp_file.size} bytes)")
|
||||
md5 = Digest::MD5.new
|
||||
File.open(diskfile, "wb") do |f|
|
||||
if @temp_file.respond_to?(:read)
|
||||
buffer = ""
|
||||
while (buffer = @temp_file.read(8192))
|
||||
f.write(buffer)
|
||||
md5.update(buffer)
|
||||
end
|
||||
else
|
||||
f.write(@temp_file)
|
||||
md5.update(@temp_file)
|
||||
buffer = ""
|
||||
while (buffer = @temp_file.read(8192))
|
||||
f.write(buffer)
|
||||
md5.update(buffer)
|
||||
end
|
||||
end
|
||||
self.digest = md5.hexdigest
|
||||
|
||||
@@ -395,8 +395,7 @@ class Mailer < ActionMailer::Base
|
||||
'X-Redmine-Host' => Setting.host_name,
|
||||
'X-Redmine-Site' => Setting.app_title,
|
||||
'X-Auto-Response-Suppress' => 'OOF',
|
||||
'Auto-Submitted' => 'auto-generated',
|
||||
'List-Id' => "<#{Setting.mail_from.to_s.gsub('@', '.')}>"
|
||||
'Auto-Submitted' => 'auto-generated'
|
||||
end
|
||||
|
||||
# Appends a Redmine header field (name is prepended with 'X-Redmine-')
|
||||
|
||||
@@ -126,8 +126,8 @@ class Query < ActiveRecord::Base
|
||||
:list_subprojects => [ "*", "!*", "=" ],
|
||||
:date => [ "=", ">=", "<=", "><", "<t+", ">t+", "t+", "t", "w", ">t-", "<t-", "t-", "!*", "*" ],
|
||||
:date_past => [ "=", ">=", "<=", "><", ">t-", "<t-", "t-", "t", "w", "!*", "*" ],
|
||||
:string => [ "=", "~", "!", "!~", "!*", "*" ],
|
||||
:text => [ "~", "!~", "!*", "*" ],
|
||||
:string => [ "=", "~", "!", "!~" ],
|
||||
:text => [ "~", "!~" ],
|
||||
:integer => [ "=", ">=", "<=", "><", "!*", "*" ],
|
||||
:float => [ "=", ">=", "<=", "><", "!*", "*" ] }
|
||||
|
||||
|
||||
@@ -141,7 +141,7 @@ class Repository < ActiveRecord::Base
|
||||
elsif repository.is_default?
|
||||
1
|
||||
else
|
||||
identifier.to_s <=> repository.identifier.to_s
|
||||
identifier <=> repository.identifier
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
<h2><%= l(:label_spent_time) %></h2>
|
||||
|
||||
<% labelled_form_for @time_entry, :url => time_entries_path do |f| %>
|
||||
<%= hidden_field_tag 'project_id', params[:project_id] if params[:project_id] %>
|
||||
<%= render :partial => 'form', :locals => {:f => f} %>
|
||||
<%= submit_tag l(:button_create) %>
|
||||
<%= submit_tag l(:button_create_and_continue), :name => 'continue' %>
|
||||
|
||||
@@ -85,30 +85,4 @@ module ActionController
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# CVE-2012-2660
|
||||
# https://groups.google.com/group/rubyonrails-security/browse_thread/thread/f1203e3376acec0f
|
||||
class Request
|
||||
protected
|
||||
|
||||
# Remove nils from the params hash
|
||||
def deep_munge(hash)
|
||||
hash.each_value do |v|
|
||||
case v
|
||||
when Array
|
||||
v.grep(Hash) { |x| deep_munge(x) }
|
||||
when Hash
|
||||
deep_munge(v)
|
||||
end
|
||||
end
|
||||
|
||||
keys = hash.keys.find_all { |k| hash[k] == [nil] }
|
||||
keys.each { |k| hash[k] = nil }
|
||||
hash
|
||||
end
|
||||
|
||||
def parse_query(qs)
|
||||
deep_munge(super)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1026,7 +1026,7 @@ ar:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1040,7 +1040,7 @@ bs:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1028,7 +1028,7 @@ ca:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1029,7 +1029,7 @@ cs:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1043,7 +1043,7 @@ da:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1026,7 +1026,7 @@ el:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1028,7 +1028,7 @@ en-GB:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -384,7 +384,7 @@ en:
|
||||
setting_issue_group_assignment: Allow issue assignment to groups
|
||||
setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
|
||||
setting_commit_cross_project_ref: Allow issues of all the other projects to be referenced and fixed
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
|
||||
permission_add_project: Create project
|
||||
permission_add_subprojects: Create subprojects
|
||||
|
||||
@@ -1063,7 +1063,7 @@ es:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1029,7 +1029,7 @@ eu:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1028,7 +1028,7 @@ fa:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1047,7 +1047,7 @@ fi:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -380,7 +380,7 @@ fr:
|
||||
setting_issue_group_assignment: Permettre l'assignement des demandes aux groupes
|
||||
setting_default_issue_start_date_to_creation_date: Donner à la date de début d'une nouvelle demande la valeur de la date du jour
|
||||
setting_commit_cross_project_ref: Permettre le référencement et la résolution des demandes de tous les autres projets
|
||||
setting_unsubscribe: Permettre aux utilisateurs de supprimer leur propre compte
|
||||
setting_unsubscribe: Permettre aux utilisateurs de se désinscrire
|
||||
|
||||
permission_add_project: Créer un projet
|
||||
permission_add_subprojects: Créer des sous-projets
|
||||
|
||||
@@ -1037,7 +1037,7 @@ gl:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1031,7 +1031,7 @@ he:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
# Croatian translations for Ruby on Rails
|
||||
# by Helix d.o.o. (info@helix.hr)
|
||||
|
||||
hr:
|
||||
direction: ltr
|
||||
date:
|
||||
@@ -1029,7 +1032,7 @@ hr:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1045,7 +1045,7 @@
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1032,7 +1032,7 @@ id:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1027,7 +1027,7 @@ it:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -348,7 +348,7 @@ ja:
|
||||
setting_welcome_text: ウェルカムメッセージ
|
||||
setting_default_language: 既定の言語
|
||||
setting_login_required: 認証が必要
|
||||
setting_self_registration: ユーザによるアカウント登録
|
||||
setting_self_registration: ユーザは自分で登録できる
|
||||
setting_attachment_max_size: 添付ファイルサイズの上限
|
||||
setting_issues_export_limit: エクスポートするチケット数の上限
|
||||
setting_mail_from: 送信元メールアドレス
|
||||
@@ -1055,9 +1055,9 @@ ja:
|
||||
permission_manage_related_issues: 関連するチケットの管理
|
||||
field_ldap_filter: LDAPフィルタ
|
||||
label_search_for_watchers: ウォッチャーを検索して追加
|
||||
notice_account_deleted: アカウントが削除されました。
|
||||
setting_unsubscribe: ユーザによるアカウント削除を許可
|
||||
button_delete_my_account: 自分のアカウントを削除
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
本当にアカウントを削除しますか?
|
||||
アカウントは恒久的に削除されます。削除後に再度アカウントを有効にする手段はありません。
|
||||
Are you sure you want to proceed?
|
||||
Your account will be permanently deleted, with no way to reactivate it.
|
||||
|
||||
@@ -1076,7 +1076,7 @@ ko:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1086,7 +1086,7 @@ lt:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1020,7 +1020,7 @@ lv:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1026,7 +1026,7 @@ mk:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1026,7 +1026,7 @@ mn:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1008,7 +1008,7 @@ nl:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1016,7 +1016,7 @@
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1043,7 +1043,7 @@ pl:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
pt-BR:
|
||||
# formatos de data e hora
|
||||
direction: ltr
|
||||
date:
|
||||
formats:
|
||||
@@ -1048,7 +1049,7 @@ pt-BR:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1031,7 +1031,7 @@ pt:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1023,7 +1023,7 @@ ro:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1026,7 +1026,7 @@ sk:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1026,7 +1026,7 @@ sl:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1026,7 +1026,7 @@ sr-YU:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1027,7 +1027,7 @@ sr:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -203,8 +203,7 @@ sv:
|
||||
notice_email_error: "Ett fel inträffade när mail skickades (%{value})"
|
||||
notice_feeds_access_key_reseted: Din RSS-nyckel återställdes.
|
||||
notice_api_access_key_reseted: Din API-nyckel återställdes.
|
||||
notice_failed_to_save_issues: "Misslyckades med att spara %{count} ärende(n) på %{total} valda: %{ids}."
|
||||
notice_failed_to_save_time_entries: "Misslyckades med att spara %{count} tidloggning(ar) på %{total} valda: %{ids}."
|
||||
notice_failed_to_save_issues: "Misslyckades med att spara %{count} ärende(n) på %{total} valt: %{ids}."
|
||||
notice_failed_to_save_members: "Misslyckades med att spara medlem(mar): %{errors}."
|
||||
notice_no_issue_selected: "Inget ärende är markerat! Var vänlig, markera de ärenden du vill ändra."
|
||||
notice_account_pending: "Ditt konto skapades och avvaktar nu administratörens godkännande."
|
||||
@@ -214,14 +213,11 @@ sv:
|
||||
notice_issue_done_ratios_updated: "% klart uppdaterade."
|
||||
notice_gantt_chart_truncated: "Schemat förminskades eftersom det överskrider det maximala antalet aktiviteter som får visas (%{max})"
|
||||
notice_issue_successful_create: Ärende %{id} skapades.
|
||||
notice_issue_update_conflict: Detta ärende har uppdaterats av en annan användare samtidigt som du redigerade det.
|
||||
notice_account_deleted: Ditt konto har avslutats permanent.
|
||||
|
||||
error_can_t_load_default_data: "Standardkonfiguration gick inte att läsa in: %{value}"
|
||||
error_scm_not_found: "Inlägg och/eller revision finns inte i detta versionsarkiv."
|
||||
error_scm_command_failed: "Ett fel inträffade vid försök att nå versionsarkivet: %{value}"
|
||||
error_scm_annotate: "Inlägget existerar inte eller kan inte kommenteras."
|
||||
error_scm_annotate_big_text_file: Inlägget kan inte annoteras eftersom det överskrider maximal storlek för textfiler.
|
||||
error_issue_not_found_in_project: 'Ärendet hittades inte eller så tillhör det inte detta projekt'
|
||||
error_no_tracker_in_project: 'Ingen ärendetyp är associerad med projektet. Vänligen kontrollera projektinställningarna.'
|
||||
error_no_default_issue_status: 'Ingen status är definierad som standard för nya ärenden. Vänligen kontrollera din konfiguration (Gå till "Administration -> Ärendestatus").'
|
||||
@@ -235,7 +231,7 @@ sv:
|
||||
error_workflow_copy_target: 'Vänligen välj ärendetyp(er) och roll(er) för mål'
|
||||
error_unable_delete_issue_status: 'Ärendestatus kunde inte tas bort'
|
||||
error_unable_to_connect: "Kan inte ansluta (%{value})"
|
||||
error_attachment_too_big: Denna fil kan inte laddas upp eftersom den överstiger maximalt tillåten filstorlek (%{max_size})
|
||||
|
||||
warning_attachments_not_saved: "%{count} fil(er) kunde inte sparas."
|
||||
|
||||
mail_subject_lost_password: "Ditt %{value} lösenord"
|
||||
@@ -362,9 +358,6 @@ sv:
|
||||
field_root_directory: Rotmapp
|
||||
field_cvsroot: CVSROOT
|
||||
field_cvs_module: Modul
|
||||
field_repository_is_default: Huvudarkiv
|
||||
field_multiple: Flera värden
|
||||
field_ldap_filter: LDAP-filter
|
||||
|
||||
setting_app_title: Applikationsrubrik
|
||||
setting_app_subtitle: Applikationsunderrubrik
|
||||
@@ -391,7 +384,6 @@ sv:
|
||||
setting_time_format: Tidsformat
|
||||
setting_cross_project_issue_relations: Tillåt ärenderelationer mellan projekt
|
||||
setting_issue_list_default_columns: Standardkolumner i ärendelistan
|
||||
setting_repositories_encodings: Encoding för bilagor och versionsarkiv
|
||||
setting_emails_header: Mail-header
|
||||
setting_emails_footer: Signatur
|
||||
setting_protocol: Protokoll
|
||||
@@ -424,9 +416,6 @@ sv:
|
||||
setting_commit_logtime_activity_id: Aktivitet för loggad tid
|
||||
setting_gantt_items_limit: Maximalt antal aktiviteter som visas i gantt-schemat
|
||||
setting_issue_group_assignment: Tillåt att ärenden tilldelas till grupper
|
||||
setting_default_issue_start_date_to_creation_date: Använd dagens datum som startdatum för nya ärenden
|
||||
setting_commit_cross_project_ref: Tillåt ärende i alla de andra projekten att bli refererade och fixade
|
||||
setting_unsubscribe: Tillåt användare att avsluta prenumereration
|
||||
|
||||
permission_add_project: Skapa projekt
|
||||
permission_add_subprojects: Skapa underprojekt
|
||||
@@ -485,7 +474,6 @@ sv:
|
||||
permission_delete_own_messages: Ta bort egna meddelanden
|
||||
permission_export_wiki_pages: Exportera wikisidor
|
||||
permission_manage_subtasks: Hantera underaktiviteter
|
||||
permission_manage_related_issues: Hantera relaterade ärenden
|
||||
|
||||
project_module_issue_tracking: Ärendeuppföljning
|
||||
project_module_time_tracking: Tidsuppföljning
|
||||
@@ -636,10 +624,6 @@ sv:
|
||||
zero: 0 stängda
|
||||
one: 1 stängd
|
||||
other: "%{count} stängda"
|
||||
label_x_issues:
|
||||
zero: 0 ärenden
|
||||
one: 1 ärende
|
||||
other: "%{count} ärenden"
|
||||
label_total: Total
|
||||
label_permissions: Behörigheter
|
||||
label_current_status: Nuvarande status
|
||||
@@ -700,7 +684,6 @@ sv:
|
||||
label_not_contains: innehåller inte
|
||||
label_day_plural: dagar
|
||||
label_repository: Versionsarkiv
|
||||
label_repository_new: Nytt versionsarkiv
|
||||
label_repository_plural: Versionsarkiv
|
||||
label_browse: Bläddra
|
||||
label_modification: "%{count} ändring"
|
||||
@@ -753,7 +736,6 @@ sv:
|
||||
label_statistics: Statistik
|
||||
label_commits_per_month: Commits per månad
|
||||
label_commits_per_author: Commits per författare
|
||||
label_diff: diff
|
||||
label_view_diff: Visa skillnader
|
||||
label_diff_inline: i texten
|
||||
label_diff_side_by_side: sida vid sida
|
||||
@@ -882,13 +864,6 @@ sv:
|
||||
label_issues_visibility_public: Alla icke-privata ärenden
|
||||
label_issues_visibility_own: Ärenden skapade av eller tilldelade till användaren
|
||||
label_git_report_last_commit: Rapportera senaste commit av filer och mappar
|
||||
label_parent_revision: Förälder
|
||||
label_child_revision: Barn
|
||||
label_export_options: "%{export_format} exportalternativ"
|
||||
label_copy_attachments: Kopiera bilagor
|
||||
label_item_position: "%{position}/%{count}"
|
||||
label_completed_versions: Klara versioner
|
||||
label_search_for_watchers: Sök efter bevakare att lägga till
|
||||
|
||||
button_login: Logga in
|
||||
button_submit: Skicka
|
||||
@@ -936,9 +911,6 @@ sv:
|
||||
button_quote: Citera
|
||||
button_duplicate: Duplicera
|
||||
button_show: Visa
|
||||
button_edit_section: Redigera denna sektion
|
||||
button_export: Exportera
|
||||
button_delete_my_account: Ta bort mitt konto
|
||||
|
||||
status_active: aktiv
|
||||
status_registered: registrerad
|
||||
@@ -966,7 +938,6 @@ sv:
|
||||
text_tip_issue_begin_day: ärende som börjar denna dag
|
||||
text_tip_issue_end_day: ärende som slutar denna dag
|
||||
text_tip_issue_begin_end_day: ärende som börjar och slutar denna dag
|
||||
text_project_identifier_info: Ändast gemener (a-z), siffror, streck och understreck är tillåtna.<br />När identifieraren sparats kan den inte ändras.
|
||||
text_caracters_maximum: "max %{count} tecken."
|
||||
text_caracters_minimum: "Måste vara minst %{count} tecken lång."
|
||||
text_length_between: "Längd mellan %{min} och %{max} tecken."
|
||||
@@ -1014,16 +985,11 @@ sv:
|
||||
text_zoom_in: Zooma in
|
||||
text_warn_on_leaving_unsaved: Nuvarande sida innehåller osparad text som kommer försvinna om du lämnar sidan.
|
||||
text_scm_path_encoding_note: "Standard: UTF-8"
|
||||
text_git_repository_note: Versionsarkiv är tomt och lokalt (t.ex. /gitrepo, c:\gitrepo)
|
||||
text_mercurial_repository_note: Lokalt versionsarkiv (t.ex. /hgrepo, c:\hgrepo)
|
||||
text_scm_command: Kommando
|
||||
text_scm_command_version: Version
|
||||
text_scm_config: Du kan konfigurera dina scm-kommando i config/configuration.yml. Vänligen starta om applikationen när ändringar gjorts.
|
||||
text_scm_command_not_available: Scm-kommando är inte tillgängligt. Vänligen kontrollera inställningarna i administratörspanelen.
|
||||
text_issue_conflict_resolution_overwrite: Använd mina ändringar i alla fall (tidigare anteckningar kommer behållas men några ändringar kan bli överskrivna)
|
||||
text_issue_conflict_resolution_add_notes: Lägg till mina anteckningar och kasta mina andra ändringar
|
||||
text_issue_conflict_resolution_cancel: Kasta alla mina ändringar och visa igen %{link}
|
||||
text_account_destroy_confirmation: "Är du säker på att du vill fortsätta?\nDitt konto kommer tas bort permanent, utan möjlighet att återaktivera det."
|
||||
|
||||
default_role_manager: Projektledare
|
||||
default_role_developer: Utvecklare
|
||||
@@ -1051,21 +1017,58 @@ sv:
|
||||
enumeration_doc_categories: Dokumentkategorier
|
||||
enumeration_activities: Aktiviteter (tidsuppföljning)
|
||||
enumeration_system_activity: Systemaktivitet
|
||||
label_diff: diff
|
||||
text_git_repository_note: Repository is bare and local (e.g. /gitrepo, c:\gitrepo)
|
||||
description_query_sort_criteria_direction: Sort direction
|
||||
description_project_scope: Search scope
|
||||
description_filter: Filter
|
||||
description_search: Sökfält
|
||||
description_choose_project: Projekt
|
||||
description_project_scope: Sökomfång
|
||||
description_notes: Anteckningar
|
||||
description_message_content: Meddelandeinnehåll
|
||||
description_query_sort_criteria_attribute: Sorteringsattribut
|
||||
description_query_sort_criteria_direction: Sorteringsriktning
|
||||
description_user_mail_notification: Mailnotifieringsinställningar
|
||||
description_available_columns: Tillgängliga Kolumner
|
||||
description_selected_columns: Valda Kolumner
|
||||
description_all_columns: Alla kolumner
|
||||
description_issue_category_reassign: Välj ärendekategori
|
||||
description_wiki_subpages_reassign: Välj ny föräldersida
|
||||
description_date_range_list: Välj intervall från listan
|
||||
description_date_range_interval: Ange intervall genom att välja start- och slutdatum
|
||||
description_date_from: Ange startdatum
|
||||
description_date_to: Ange slutdatum
|
||||
description_user_mail_notification: Mail notification settings
|
||||
description_date_from: Enter start date
|
||||
description_message_content: Message content
|
||||
description_available_columns: Available Columns
|
||||
description_date_range_interval: Choose range by selecting start and end date
|
||||
description_issue_category_reassign: Choose issue category
|
||||
description_search: Searchfield
|
||||
description_notes: Notes
|
||||
description_date_range_list: Choose range from list
|
||||
description_choose_project: Projects
|
||||
description_date_to: Enter end date
|
||||
description_query_sort_criteria_attribute: Sort attribute
|
||||
description_wiki_subpages_reassign: Choose new parent page
|
||||
description_selected_columns: Selected Columns
|
||||
label_parent_revision: Parent
|
||||
label_child_revision: Child
|
||||
error_scm_annotate_big_text_file: The entry cannot be annotated, as it exceeds the maximum text file size.
|
||||
setting_default_issue_start_date_to_creation_date: Use current date as start date for new issues
|
||||
button_edit_section: Edit this section
|
||||
setting_repositories_encodings: Attachments and repositories encodings
|
||||
description_all_columns: All Columns
|
||||
button_export: Export
|
||||
label_export_options: "%{export_format} export options"
|
||||
error_attachment_too_big: This file cannot be uploaded because it exceeds the maximum allowed file size (%{max_size})
|
||||
notice_failed_to_save_time_entries: "Failed to save %{count} time entrie(s) on %{total} selected: %{ids}."
|
||||
label_x_issues:
|
||||
zero: 0 Ärende
|
||||
one: 1 Ärende
|
||||
other: "%{count} Ärenden"
|
||||
label_repository_new: New repository
|
||||
field_repository_is_default: Main repository
|
||||
label_copy_attachments: Copy attachments
|
||||
label_item_position: "%{position}/%{count}"
|
||||
label_completed_versions: Completed versions
|
||||
text_project_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
|
||||
field_multiple: Multiple values
|
||||
setting_commit_cross_project_ref: Allow issues of all the other projects to be referenced and fixed
|
||||
text_issue_conflict_resolution_add_notes: Add my notes and discard my other changes
|
||||
text_issue_conflict_resolution_overwrite: Apply my changes anyway (previous notes will be kept but some changes may be overwritten)
|
||||
notice_issue_update_conflict: The issue has been updated by an other user while you were editing it.
|
||||
text_issue_conflict_resolution_cancel: Discard all my changes and redisplay %{link}
|
||||
permission_manage_related_issues: Manage related issues
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
Your account will be permanently deleted, with no way to reactivate it.
|
||||
|
||||
@@ -1023,7 +1023,7 @@ th:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1045,7 +1045,7 @@ tr:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -1077,7 +1077,7 @@ vi:
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to delete their own account
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
|
||||
@@ -255,7 +255,6 @@
|
||||
notice_gantt_chart_truncated: "由於項目數量超過可顯示數量的最大值 (%{max}),故此甘特圖尾部已被截斷"
|
||||
notice_issue_successful_create: "問題 %{id} 已建立。"
|
||||
notice_issue_update_conflict: "當您正在編輯這個問題的時候,它已經被其他人搶先一步更新過。"
|
||||
notice_account_deleted: "您的帳戶已被永久刪除。"
|
||||
|
||||
error_can_t_load_default_data: "無法載入預設組態: %{value}"
|
||||
error_scm_not_found: "在儲存機制中找不到這個項目或修訂版。"
|
||||
@@ -466,7 +465,6 @@
|
||||
setting_issue_group_assignment: 允許問題被指派至群組
|
||||
setting_default_issue_start_date_to_creation_date: 設定新問題的起始日期為今天的日期
|
||||
setting_commit_cross_project_ref: 允許關聯並修正其他專案的問題
|
||||
setting_unsubscribe: 允許用戶取消註冊(刪除帳戶)
|
||||
|
||||
permission_add_project: 建立專案
|
||||
permission_add_subprojects: 建立子專案
|
||||
@@ -928,7 +926,6 @@
|
||||
label_copy_attachments: 複製附件
|
||||
label_item_position: "%{position} / %{count}"
|
||||
label_completed_versions: 已完成版本
|
||||
label_search_for_watchers: 搜尋可供加入的監看者
|
||||
|
||||
button_login: 登入
|
||||
button_submit: 送出
|
||||
@@ -978,7 +975,6 @@
|
||||
button_show: 顯示
|
||||
button_edit_section: 編輯此區塊
|
||||
button_export: 匯出
|
||||
button_delete_my_account: 刪除我的帳戶
|
||||
|
||||
status_active: 活動中
|
||||
status_registered: 註冊完成
|
||||
@@ -1063,9 +1059,6 @@
|
||||
text_issue_conflict_resolution_overwrite: "直接套用我的變更 (先前的筆記將會被保留,但是某些變更可能會被複寫)"
|
||||
text_issue_conflict_resolution_add_notes: "新增我的筆記並捨棄我其他的變更"
|
||||
text_issue_conflict_resolution_cancel: "捨棄我全部的變更並重新顯示 %{link}"
|
||||
text_account_destroy_confirmation: |-
|
||||
您確定要繼續這個動作嗎?
|
||||
您的帳戶將會被永久刪除,且無法被重新啟用。
|
||||
|
||||
default_role_manager: 管理人員
|
||||
default_role_developer: 開發人員
|
||||
@@ -1111,3 +1104,10 @@
|
||||
description_date_range_interval: 選擇起始與結束日期以設定範圍區間
|
||||
description_date_from: 輸入起始日期
|
||||
description_date_to: 輸入結束日期
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
Are you sure you want to proceed?
|
||||
Your account will be permanently deleted, with no way to reactivate it.
|
||||
|
||||
@@ -1007,29 +1007,29 @@ zh:
|
||||
button_export: 导出
|
||||
label_export_options: "%{export_format} 导出选项"
|
||||
error_attachment_too_big: 该文件无法上传。超过文件大小限制 (%{max_size})
|
||||
notice_failed_to_save_time_entries: "无法保存下列所选取的 %{total} 个项目中的 %{count} 工时: %{ids}。"
|
||||
notice_failed_to_save_time_entries: "Failed to save %{count} time entrie(s) on %{total} selected: %{ids}."
|
||||
label_x_issues:
|
||||
zero: 0 问题
|
||||
one: 1 问题
|
||||
other: "%{count} 问题"
|
||||
label_repository_new: 新建版本库
|
||||
field_repository_is_default: 主版本库
|
||||
label_copy_attachments: 复制附件
|
||||
label_repository_new: New repository
|
||||
field_repository_is_default: Main repository
|
||||
label_copy_attachments: Copy attachments
|
||||
label_item_position: "%{position}/%{count}"
|
||||
label_completed_versions: 已完成的版本
|
||||
text_project_identifier_info: 仅小写字母(a-z)、数字、破折号(-)和下划线(_)可以使用。<br />一旦保存,标识无法修改。
|
||||
field_multiple: 多重取值
|
||||
setting_commit_cross_project_ref: 允许引用/修复所有其他项目的问题
|
||||
text_issue_conflict_resolution_add_notes: 添加说明并取消我的其他变更处理。
|
||||
text_issue_conflict_resolution_overwrite: 直接套用我的变更 (先前的说明将被保留,但是某些变更内容可能会被覆盖)
|
||||
notice_issue_update_conflict: 当您正在编辑这个问题的时候,它已经被其他人抢先一步更新过了。
|
||||
text_issue_conflict_resolution_cancel: 取消我所有的变更并重新刷新显示 %{link} 。
|
||||
permission_manage_related_issues: 相关问题管理
|
||||
field_ldap_filter: LDAP 过滤器
|
||||
label_search_for_watchers: 通过查找方式添加跟踪者
|
||||
notice_account_deleted: 您的账号已被永久删除(账号已无法恢复)。
|
||||
setting_unsubscribe: 允许用户退订
|
||||
button_delete_my_account: 删除我的账号
|
||||
label_completed_versions: Completed versions
|
||||
text_project_identifier_info: Only lower case letters (a-z), numbers, dashes and underscores are allowed.<br />Once saved, the identifier cannot be changed.
|
||||
field_multiple: Multiple values
|
||||
setting_commit_cross_project_ref: Allow issues of all the other projects to be referenced and fixed
|
||||
text_issue_conflict_resolution_add_notes: Add my notes and discard my other changes
|
||||
text_issue_conflict_resolution_overwrite: Apply my changes anyway (previous notes will be kept but some changes may be overwritten)
|
||||
notice_issue_update_conflict: The issue has been updated by an other user while you were editing it.
|
||||
text_issue_conflict_resolution_cancel: Discard all my changes and redisplay %{link}
|
||||
permission_manage_related_issues: Manage related issues
|
||||
field_ldap_filter: LDAP filter
|
||||
label_search_for_watchers: Search for watchers to add
|
||||
notice_account_deleted: Your account has been permanently deleted.
|
||||
setting_unsubscribe: Allow users to unsubscribe
|
||||
button_delete_my_account: Delete my account
|
||||
text_account_destroy_confirmation: |-
|
||||
确定继续处理?
|
||||
您的账号一旦删除,将无法再次激活使用。
|
||||
Are you sure you want to proceed?
|
||||
Your account will be permanently deleted, with no way to reactivate it.
|
||||
|
||||
@@ -259,8 +259,7 @@ ActionController::Routing::Routes.draw do |map|
|
||||
repository_views.connect 'projects/:id/repository/:repository_id/revisions/:rev/diff.:format',
|
||||
:action => 'diff'
|
||||
repository_views.connect 'projects/:id/repository/:repository_id/revisions/:rev/raw/*path',
|
||||
:action => 'entry', :format => 'raw',
|
||||
:requirements => { :rev => /[a-z0-9\.\-_]+/ }
|
||||
:action => 'entry', :format => 'raw'
|
||||
repository_views.connect 'projects/:id/repository/:repository_id/revisions/:rev/:action/*path',
|
||||
:requirements => {
|
||||
:action => /(browse|show|entry|changes|annotate|diff)/,
|
||||
@@ -291,8 +290,7 @@ ActionController::Routing::Routes.draw do |map|
|
||||
repository_views.connect 'projects/:id/repository/revisions/:rev/diff.:format',
|
||||
:action => 'diff'
|
||||
repository_views.connect 'projects/:id/repository/revisions/:rev/raw/*path',
|
||||
:action => 'entry', :format => 'raw',
|
||||
:requirements => { :rev => /[a-z0-9\.\-_]+/ }
|
||||
:action => 'entry', :format => 'raw'
|
||||
repository_views.connect 'projects/:id/repository/revisions/:rev/:action/*path',
|
||||
:requirements => {
|
||||
:action => /(browse|show|entry|changes|annotate|diff)/,
|
||||
|
||||
@@ -4,33 +4,6 @@ Redmine - project management software
|
||||
Copyright (C) 2006-2012 Jean-Philippe Lang
|
||||
http://www.redmine.org/
|
||||
|
||||
== 2012-06-05 v1.4.3
|
||||
|
||||
* Defect #11038: "Create and continue" should preserve project, issue and activity when logging time
|
||||
* Defect #11046: Redmine.pm does not support "bind as user" ldap authentication
|
||||
* Defect #11051: reposman.rb fails in 1.4.2 because of missing require for rubygems
|
||||
* Fix for Rails vulnerability CVE-2012-2660
|
||||
|
||||
== 2012-05-13 v1.4.2
|
||||
|
||||
* Defect #10744: rake task redmine:email:test broken
|
||||
* Defect #10787: "Allow users to unsubscribe" option is confusing
|
||||
* Defect #10827: Cannot access Repositories page and Settings in a Project - Error 500
|
||||
* Defect #10829: db:migrate fails 0.8.2 -> 1.4.1
|
||||
* Defect #10832: REST Uploads fail with fastcgi
|
||||
* Defect #10837: reposman and rdm-mailhandler not working with ruby 1.9.x
|
||||
* Defect #10856: can not load translations from hr.yml with ruby1.9.3-p194
|
||||
* Defect #10865: Filter reset when deleting locked user
|
||||
* Feature #9790: Allow filtering text custom fields on "is null" and "is not null"
|
||||
* Feature #10778: svn:ignore for config/additional_environment.rb
|
||||
* Feature #10875: Partial Albanian Translations
|
||||
* Feature #10888: Bring back List-Id to help aid Gmail filtering
|
||||
* Patch #10733: Traditional Chinese language file (to r9502)
|
||||
* Patch #10745: Japanese translation update (r9519)
|
||||
* Patch #10750: Swedish Translation for r9522
|
||||
* Patch #10785: Bulgarian translation (jstoolbar)
|
||||
* Patch #10800: Simplified Chinese translation
|
||||
|
||||
== 2012-04-20 v1.4.1
|
||||
|
||||
* Defect #8574: Time report: date range fields not enabled when using the calendar popup
|
||||
|
||||
@@ -1,9 +1,64 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
# == Synopsis
|
||||
#
|
||||
# Reads an email from standard input and forward it to a Redmine server
|
||||
# through a HTTP request.
|
||||
#
|
||||
# == Usage
|
||||
#
|
||||
# rdm-mailhandler [options] --url=<Redmine URL> --key=<API key>
|
||||
#
|
||||
# == Arguments
|
||||
#
|
||||
# -u, --url URL of the Redmine server
|
||||
# -k, --key Redmine API key
|
||||
#
|
||||
# General options:
|
||||
# --unknown-user=ACTION how to handle emails from an unknown user
|
||||
# ACTION can be one of the following values:
|
||||
# ignore: email is ignored (default)
|
||||
# accept: accept as anonymous user
|
||||
# create: create a user account
|
||||
# --no-permission-check disable permission checking when receiving
|
||||
# the email
|
||||
# --key-file=PATH path to a file that contains the Redmine
|
||||
# API key (use this option instead of --key
|
||||
# if you don't the key to appear in the
|
||||
# command line)
|
||||
# --no-check-certificate do not check server certificate
|
||||
# -h, --help show this help
|
||||
# -v, --verbose show extra information
|
||||
# -V, --version show version information and exit
|
||||
#
|
||||
# Issue attributes control options:
|
||||
# -p, --project=PROJECT identifier of the target project
|
||||
# -s, --status=STATUS name of the target status
|
||||
# -t, --tracker=TRACKER name of the target tracker
|
||||
# --category=CATEGORY name of the target category
|
||||
# --priority=PRIORITY name of the target priority
|
||||
# -o, --allow-override=ATTRS allow email content to override attributes
|
||||
# specified by previous options
|
||||
# ATTRS is a comma separated list of attributes
|
||||
#
|
||||
# == Examples
|
||||
# No project specified. Emails MUST contain the 'Project' keyword:
|
||||
#
|
||||
# rdm-mailhandler --url http://redmine.domain.foo --key secret
|
||||
#
|
||||
# Fixed project and default tracker specified, but emails can override
|
||||
# both tracker and priority attributes using keywords:
|
||||
#
|
||||
# rdm-mailhandler --url https://domain.foo/redmine --key secret \\
|
||||
# --project foo \\
|
||||
# --tracker bug \\
|
||||
# --allow-override tracker,priority
|
||||
|
||||
require 'net/http'
|
||||
require 'net/https'
|
||||
require 'uri'
|
||||
require 'optparse'
|
||||
require 'getoptlong'
|
||||
require 'rdoc/usage'
|
||||
|
||||
module Net
|
||||
class HTTPS < HTTP
|
||||
@@ -23,68 +78,64 @@ module Net
|
||||
end
|
||||
|
||||
class RedmineMailHandler
|
||||
VERSION = '0.2'
|
||||
VERSION = '0.1'
|
||||
|
||||
attr_accessor :verbose, :issue_attributes, :allow_override, :unknown_user, :no_permission_check, :url, :key, :no_check_certificate
|
||||
|
||||
def initialize
|
||||
self.issue_attributes = {}
|
||||
|
||||
optparse = OptionParser.new do |opts|
|
||||
opts.banner = "Usage: rdm-mailhandler.rb [options] --url=<Redmine URL> --key=<API key>"
|
||||
opts.separator("")
|
||||
opts.separator("Reads an email from standard input and forward it to a Redmine server through a HTTP request.")
|
||||
opts.separator("")
|
||||
opts.separator("Required arguments:")
|
||||
opts.on("-u", "--url URL", "URL of the Redmine server") {|v| self.url = v}
|
||||
opts.on("-k", "--key KEY", "Redmine API key") {|v| self.key = v}
|
||||
opts.separator("")
|
||||
opts.separator("General options:")
|
||||
opts.on("--unknown-user ACTION", "how to handle emails from an unknown user",
|
||||
"ACTION can be one of the following values:",
|
||||
"* ignore: email is ignored (default)",
|
||||
"* accept: accept as anonymous user",
|
||||
"* create: create a user account") {|v| self.unknown_user = v}
|
||||
opts.on("--no-permission-check", "disable permission checking when receiving",
|
||||
"the email") {self.no_permission_check = '1'}
|
||||
opts.on("--key-file FILE", "path to a file that contains the Redmine",
|
||||
"API key (use this option instead of --key",
|
||||
"if you don't the key to appear in the",
|
||||
"command line)") {|v| read_key_from_file(v)}
|
||||
opts.on("--no-check-certificate", "do not check server certificate") {self.no_check_certificate = true}
|
||||
opts.on("-h", "--help", "show this help") {puts opts; exit 1}
|
||||
opts.on("-v", "--verbose", "show extra information") {self.verbose = true}
|
||||
opts.on("-V", "--version", "show version information and exit") {puts VERSION; exit}
|
||||
opts.separator("")
|
||||
opts.separator("Issue attributes control options:")
|
||||
opts.on("-p", "--project PROJECT", "identifier of the target project") {|v| self.issue_attributes['project'] = v}
|
||||
opts.on("-s", "--status STATUS", "name of the target status") {|v| self.issue_attributes['status'] = v}
|
||||
opts.on("-t", "--tracker TRACKER", "name of the target tracker") {|v| self.issue_attributes['tracker'] = v}
|
||||
opts.on( "--category CATEGORY", "name of the target category") {|v| self.issue_attributes['category'] = v}
|
||||
opts.on( "--priority PRIORITY", "name of the target priority") {|v| self.issue_attributes['priority'] = v}
|
||||
opts.on("-o", "--allow-override ATTRS", "allow email content to override attributes",
|
||||
"specified by previous options",
|
||||
"ATTRS is a comma separated list of attributes") {|v| self.allow_override = v}
|
||||
opts.separator("")
|
||||
opts.separator("Examples:")
|
||||
opts.separator("No project specified. Emails MUST contain the 'Project' keyword:")
|
||||
opts.separator(" rdm-mailhandler.rb --url http://redmine.domain.foo --key secret")
|
||||
opts.separator("")
|
||||
opts.separator("Fixed project and default tracker specified, but emails can override")
|
||||
opts.separator("both tracker and priority attributes using keywords:")
|
||||
opts.separator(" rdm-mailhandler.rb --url https://domain.foo/redmine --key secret \\")
|
||||
opts.separator(" --project foo \\")
|
||||
opts.separator(" --tracker bug \\")
|
||||
opts.separator(" --allow-override tracker,priority")
|
||||
opts = GetoptLong.new(
|
||||
[ '--help', '-h', GetoptLong::NO_ARGUMENT ],
|
||||
[ '--version', '-V', GetoptLong::NO_ARGUMENT ],
|
||||
[ '--verbose', '-v', GetoptLong::NO_ARGUMENT ],
|
||||
[ '--url', '-u', GetoptLong::REQUIRED_ARGUMENT ],
|
||||
[ '--key', '-k', GetoptLong::REQUIRED_ARGUMENT],
|
||||
[ '--key-file', GetoptLong::REQUIRED_ARGUMENT],
|
||||
[ '--project', '-p', GetoptLong::REQUIRED_ARGUMENT ],
|
||||
[ '--status', '-s', GetoptLong::REQUIRED_ARGUMENT ],
|
||||
[ '--tracker', '-t', GetoptLong::REQUIRED_ARGUMENT],
|
||||
[ '--category', GetoptLong::REQUIRED_ARGUMENT],
|
||||
[ '--priority', GetoptLong::REQUIRED_ARGUMENT],
|
||||
[ '--allow-override', '-o', GetoptLong::REQUIRED_ARGUMENT],
|
||||
[ '--unknown-user', GetoptLong::REQUIRED_ARGUMENT],
|
||||
[ '--no-permission-check', GetoptLong::NO_ARGUMENT],
|
||||
[ '--no-check-certificate', GetoptLong::NO_ARGUMENT]
|
||||
)
|
||||
|
||||
opts.summary_width = 27
|
||||
opts.each do |opt, arg|
|
||||
case opt
|
||||
when '--url'
|
||||
self.url = arg.dup
|
||||
when '--key'
|
||||
self.key = arg.dup
|
||||
when '--key-file'
|
||||
begin
|
||||
self.key = File.read(arg).strip
|
||||
rescue Exception => e
|
||||
$stderr.puts "Unable to read the key from #{arg}: #{e.message}"
|
||||
exit 1
|
||||
end
|
||||
when '--help'
|
||||
usage
|
||||
when '--verbose'
|
||||
self.verbose = true
|
||||
when '--version'
|
||||
puts VERSION; exit
|
||||
when '--project', '--status', '--tracker', '--category', '--priority'
|
||||
self.issue_attributes[opt.gsub(%r{^\-\-}, '')] = arg.dup
|
||||
when '--allow-override'
|
||||
self.allow_override = arg.dup
|
||||
when '--unknown-user'
|
||||
self.unknown_user = arg.dup
|
||||
when '--no-permission-check'
|
||||
self.no_permission_check = '1'
|
||||
when '--no-check-certificate'
|
||||
self.no_check_certificate = true
|
||||
end
|
||||
end
|
||||
optparse.parse!
|
||||
|
||||
unless url && key
|
||||
puts "Some arguments are missing. Use `rdm-mailhandler.rb --help` for getting help."
|
||||
exit 1
|
||||
end
|
||||
RDoc.usage if url.nil?
|
||||
end
|
||||
|
||||
def submit(email)
|
||||
@@ -130,15 +181,6 @@ class RedmineMailHandler
|
||||
def debug(msg)
|
||||
puts msg if verbose
|
||||
end
|
||||
|
||||
def read_key_from_file(filename)
|
||||
begin
|
||||
self.key = File.read(filename).strip
|
||||
rescue Exception => e
|
||||
$stderr.puts "Unable to read the key from #{filename}:\n#{e.message}"
|
||||
exit 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
handler = RedmineMailHandler.new
|
||||
|
||||
@@ -366,19 +366,12 @@ sub is_member {
|
||||
);
|
||||
$sthldap->execute($auth_source_id);
|
||||
while (my @rowldap = $sthldap->fetchrow_array) {
|
||||
my $bind_as = $rowldap[3] ? $rowldap[3] : "";
|
||||
my $bind_pw = $rowldap[4] ? $rowldap[4] : "";
|
||||
if ($bind_as =~ m/\$login/) {
|
||||
# replace $login with $redmine_user and use $redmine_pass
|
||||
$bind_as =~ s/\$login/$redmine_user/g;
|
||||
$bind_pw = $redmine_pass
|
||||
}
|
||||
my $ldap = Authen::Simple::LDAP->new(
|
||||
host => ($rowldap[2] eq "1" || $rowldap[2] eq "t") ? "ldaps://$rowldap[0]:$rowldap[1]" : $rowldap[0],
|
||||
port => $rowldap[1],
|
||||
basedn => $rowldap[5],
|
||||
binddn => $bind_as,
|
||||
bindpw => $bind_pw,
|
||||
binddn => $rowldap[3] ? $rowldap[3] : "",
|
||||
bindpw => $rowldap[4] ? $rowldap[4] : "",
|
||||
filter => "(".$rowldap[6]."=%s)"
|
||||
);
|
||||
my $method = $r->method;
|
||||
|
||||
@@ -1,13 +1,96 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
require 'optparse'
|
||||
# == Synopsis
|
||||
#
|
||||
# reposman: manages your repositories with Redmine
|
||||
#
|
||||
# == Usage
|
||||
#
|
||||
# reposman [OPTIONS...] -s [DIR] -r [HOST]
|
||||
#
|
||||
# Examples:
|
||||
# reposman --svn-dir=/var/svn --redmine-host=redmine.example.net --scm subversion
|
||||
# reposman -s /var/git -r redmine.example.net -u http://svn.example.net --scm git
|
||||
#
|
||||
# == Arguments (mandatory)
|
||||
#
|
||||
# -s, --svn-dir=DIR use DIR as base directory for svn repositories
|
||||
# -r, --redmine-host=HOST assume Redmine is hosted on HOST. Examples:
|
||||
# -r redmine.example.net
|
||||
# -r http://redmine.example.net
|
||||
# -r https://example.net/redmine
|
||||
# -k, --key=KEY use KEY as the Redmine API key (you can use the
|
||||
# --key-file option as an alternative)
|
||||
#
|
||||
# == Options
|
||||
#
|
||||
# -o, --owner=OWNER owner of the repository. using the rails login
|
||||
# allow user to browse the repository within
|
||||
# Redmine even for private project. If you want to
|
||||
# share repositories through Redmine.pm, you need
|
||||
# to use the apache owner.
|
||||
# -g, --group=GROUP group of the repository. (default: root)
|
||||
# --scm=SCM the kind of SCM repository you want to create (and
|
||||
# register) in Redmine (default: Subversion).
|
||||
# reposman is able to create Git and Subversion
|
||||
# repositories. For all other kind, you must specify
|
||||
# a --command option
|
||||
# -u, --url=URL the base url Redmine will use to access your
|
||||
# repositories. This option is used to automatically
|
||||
# register the repositories in Redmine. The project
|
||||
# identifier will be appended to this url. Examples:
|
||||
# -u https://example.net/svn
|
||||
# -u file:///var/svn/
|
||||
# if this option isn't set, reposman won't register
|
||||
# the repositories in Redmine
|
||||
# -c, --command=COMMAND use this command instead of "svnadmin create" to
|
||||
# create a repository. This option can be used to
|
||||
# create repositories other than subversion and git
|
||||
# kind.
|
||||
# This command override the default creation for git
|
||||
# and subversion.
|
||||
# -f, --force force repository creation even if the project
|
||||
# repository is already declared in Redmine
|
||||
# --key-file=PATH path to a file that contains the Redmine API key
|
||||
# (use this option instead of --key if you don't
|
||||
# the key to appear in the command line)
|
||||
# -t, --test only show what should be done
|
||||
# -h, --help show help and exit
|
||||
# -v, --verbose verbose
|
||||
# -V, --version print version and exit
|
||||
# -q, --quiet no log
|
||||
#
|
||||
# == References
|
||||
#
|
||||
# You can find more information on the redmine's wiki : http://www.redmine.org/wiki/redmine/HowTos
|
||||
|
||||
|
||||
require 'getoptlong'
|
||||
require 'rdoc/usage'
|
||||
require 'find'
|
||||
require 'etc'
|
||||
require 'rubygems'
|
||||
|
||||
Version = "1.4"
|
||||
Version = "1.3"
|
||||
SUPPORTED_SCM = %w( Subversion Darcs Mercurial Bazaar Git Filesystem )
|
||||
|
||||
opts = GetoptLong.new(
|
||||
['--svn-dir', '-s', GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--redmine-host', '-r', GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--key', '-k', GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--key-file', GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--owner', '-o', GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--group', '-g', GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--url', '-u', GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--command' , '-c', GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--scm', GetoptLong::REQUIRED_ARGUMENT],
|
||||
['--test', '-t', GetoptLong::NO_ARGUMENT],
|
||||
['--force', '-f', GetoptLong::NO_ARGUMENT],
|
||||
['--verbose', '-v', GetoptLong::NO_ARGUMENT],
|
||||
['--version', '-V', GetoptLong::NO_ARGUMENT],
|
||||
['--help' , '-h', GetoptLong::NO_ARGUMENT],
|
||||
['--quiet' , '-q', GetoptLong::NO_ARGUMENT]
|
||||
)
|
||||
|
||||
$verbose = 0
|
||||
$quiet = false
|
||||
$redmine_host = ''
|
||||
@@ -50,84 +133,36 @@ module SCM
|
||||
|
||||
end
|
||||
|
||||
def read_key_from_file(filename)
|
||||
begin
|
||||
$api_key = File.read(filename).strip
|
||||
rescue Exception => e
|
||||
$stderr.puts "Unable to read the key from #{filename}: #{e.message}"
|
||||
exit 1
|
||||
begin
|
||||
opts.each do |opt, arg|
|
||||
case opt
|
||||
when '--svn-dir'; $repos_base = arg.dup
|
||||
when '--redmine-host'; $redmine_host = arg.dup
|
||||
when '--key'; $api_key = arg.dup
|
||||
when '--key-file'
|
||||
begin
|
||||
$api_key = File.read(arg).strip
|
||||
rescue Exception => e
|
||||
$stderr.puts "Unable to read the key from #{arg}: #{e.message}"
|
||||
exit 1
|
||||
end
|
||||
when '--owner'; $svn_owner = arg.dup; $use_groupid = false;
|
||||
when '--group'; $svn_group = arg.dup; $use_groupid = false;
|
||||
when '--url'; $svn_url = arg.dup
|
||||
when '--scm'; $scm = arg.dup.capitalize; log("Invalid SCM: #{$scm}", :exit => true) unless SUPPORTED_SCM.include?($scm)
|
||||
when '--command'; $command = arg.dup
|
||||
when '--verbose'; $verbose += 1
|
||||
when '--test'; $test = true
|
||||
when '--force'; $force = true
|
||||
when '--version'; puts Version; exit
|
||||
when '--help'; RDoc::usage
|
||||
when '--quiet'; $quiet = true
|
||||
end
|
||||
end
|
||||
rescue
|
||||
exit 1
|
||||
end
|
||||
|
||||
def set_scm(scm)
|
||||
$scm = scm.capitalize
|
||||
unless SUPPORTED_SCM.include?($scm)
|
||||
log("Invalid SCM: #{$scm}\nValid SCM are: #{SUPPORTED_SCM.join(', ')}", :exit => true)
|
||||
end
|
||||
end
|
||||
|
||||
optparse = OptionParser.new do |opts|
|
||||
opts.banner = "Usage: reposman.rb [OPTIONS...] -s [DIR] -r [HOST] -k [KEY]"
|
||||
opts.separator("")
|
||||
opts.separator("Manages your repositories with Redmine.")
|
||||
opts.separator("")
|
||||
opts.separator("Required arguments:")
|
||||
opts.on("-s", "--svn-dir DIR", "use DIR as base directory for svn repositories") {|v| $repos_base = v}
|
||||
opts.on("-r", "--redmine-host HOST","assume Redmine is hosted on HOST. Examples:",
|
||||
" -r redmine.example.net",
|
||||
" -r http://redmine.example.net",
|
||||
" -r https://redmine.example.net") {|v| $redmine_host = v}
|
||||
opts.on("-k", "--key KEY", "use KEY as the Redmine API key",
|
||||
"(you can use --key-file option as an alternative)") {|v| $api_key = v}
|
||||
opts.separator("")
|
||||
opts.separator("Options:")
|
||||
opts.on("-o", "--owner OWNER", "owner of the repository. using the rails login",
|
||||
"allows users to browse the repository within",
|
||||
"Redmine even for private projects. If you want to",
|
||||
"share repositories through Redmine.pm, you need",
|
||||
"to use the apache owner.") {|v| $svn_owner = v; $use_groupid = false}
|
||||
opts.on("-g", "--group GROUP", "group of the repository (default: root)") {|v| $svn_group = v; $use_groupid = false}
|
||||
opts.on("-u", "--url URL", "the base url Redmine will use to access your",
|
||||
"repositories. This option is used to register",
|
||||
"the repositories in Redmine automatically. The",
|
||||
"project identifier will be appended to this url.",
|
||||
"Examples:",
|
||||
" -u https://example.net/svn",
|
||||
" -u file:///var/svn/",
|
||||
"if this option isn't set, reposman won't register",
|
||||
"the repositories in Redmine") {|v| $svn_url = v}
|
||||
opts.on( "--scm SCM", "the kind of SCM repository you want to create",
|
||||
"(and register) in Redmine (default: Subversion).",
|
||||
"reposman is able to create Git and Subversion",
|
||||
"repositories.",
|
||||
"For all other kind, you must specify a --command",
|
||||
"option") {|v| set_scm(v)}
|
||||
opts.on("-c", "--command COMMAND", "use this command instead of `svnadmin create` to",
|
||||
"create a repository. This option can be used to",
|
||||
"create repositories other than subversion and git",
|
||||
"kind.",
|
||||
"This command override the default creation for",
|
||||
"git and subversion.") {|v| $command = v}
|
||||
opts.on( "--key-file FILE", "path to a file that contains the Redmine API key",
|
||||
"(use this option instead of --key if you don't",
|
||||
"want the key to appear in the command line)") {|v| read_key_from_file(v)}
|
||||
opts.on("-t", "--test", "only show what should be done") {$test = true}
|
||||
opts.on("-f", "--force", "force repository creation even if the project", "repository is already declared in Redmine") {$force = true}
|
||||
opts.on("-v", "--verbose", "verbose") {$verbose += 1}
|
||||
opts.on("-V", "--version", "show version and exit") {puts Version; exit}
|
||||
opts.on("-h", "--help", "show help and exit") {puts opts; exit 1}
|
||||
opts.on("-q", "--quiet", "no log") {$quiet = true}
|
||||
opts.separator("")
|
||||
opts.separator("Examples:")
|
||||
opts.separator(" reposman.rb --svn-dir=/var/svn --redmine-host=redmine.host")
|
||||
opts.separator(" reposman.rb -s /var/git -r redmine.host -u http://git.host --scm git")
|
||||
opts.separator("")
|
||||
opts.separator("You can find more information on the redmine's wiki:\nhttp://www.redmine.org/projects/redmine/wiki/HowTos")
|
||||
|
||||
opts.summary_width = 25
|
||||
end
|
||||
optparse.parse!
|
||||
|
||||
if $test
|
||||
log("running in test mode")
|
||||
end
|
||||
@@ -144,8 +179,7 @@ end
|
||||
$svn_url += "/" if $svn_url and not $svn_url.match(/\/$/)
|
||||
|
||||
if ($redmine_host.empty? or $repos_base.empty?)
|
||||
puts "Some arguments are missing. Use reposman.rb --help for getting help."
|
||||
exit 1
|
||||
RDoc::usage
|
||||
end
|
||||
|
||||
unless File.directory?($repos_base)
|
||||
|
||||
@@ -4,7 +4,7 @@ module Redmine
|
||||
module VERSION #:nodoc:
|
||||
MAJOR = 1
|
||||
MINOR = 4
|
||||
TINY = 3
|
||||
TINY = 1
|
||||
|
||||
# Branch values:
|
||||
# * official release: nil
|
||||
|
||||
@@ -176,7 +176,7 @@ END_DESC
|
||||
|
||||
ActionMailer::Base.raise_delivery_errors = true
|
||||
begin
|
||||
Mailer.deliver_test_email(user)
|
||||
Mailer.deliver_test_email(User.current)
|
||||
puts l(:notice_email_sent, user.mail)
|
||||
rescue Exception => e
|
||||
abort l(:notice_email_error, e.message)
|
||||
|
||||
@@ -1,126 +0,0 @@
|
||||
// ** I18N
|
||||
|
||||
// Calendar SQ language
|
||||
// Encoding: any
|
||||
// Distributed under the same terms as the calendar itself.
|
||||
|
||||
// For translators: please use UTF-8 if possible. We strongly believe that
|
||||
// Unicode is the answer to a real internationalized world. Also please
|
||||
// include your contact information in the header, as can be seen above.
|
||||
|
||||
// full day names
|
||||
Calendar._DN = new Array
|
||||
("Sunday",
|
||||
"Monday",
|
||||
"Tuesday",
|
||||
"Wednesday",
|
||||
"Thursday",
|
||||
"Friday",
|
||||
"Saturday",
|
||||
"Sunday");
|
||||
|
||||
// Please note that the following array of short day names (and the same goes
|
||||
// for short month names, _SMN) isn't absolutely necessary. We give it here
|
||||
// for exemplification on how one can customize the short day names, but if
|
||||
// they are simply the first N letters of the full name you can simply say:
|
||||
//
|
||||
// Calendar._SDN_len = N; // short day name length
|
||||
// Calendar._SMN_len = N; // short month name length
|
||||
//
|
||||
// If N = 3 then this is not needed either since we assume a value of 3 if not
|
||||
// present, to be compatible with translation files that were written before
|
||||
// this feature.
|
||||
|
||||
// short day names
|
||||
Calendar._SDN = new Array
|
||||
("Sun",
|
||||
"Mon",
|
||||
"Tue",
|
||||
"Wed",
|
||||
"Thu",
|
||||
"Fri",
|
||||
"Sat",
|
||||
"Sun");
|
||||
|
||||
// First day of the week. "0" means display Sunday first, "1" means display
|
||||
// Monday first, etc.
|
||||
Calendar._FD = 0;
|
||||
|
||||
// full month names
|
||||
Calendar._MN = new Array
|
||||
("January",
|
||||
"February",
|
||||
"March",
|
||||
"April",
|
||||
"May",
|
||||
"June",
|
||||
"July",
|
||||
"August",
|
||||
"September",
|
||||
"October",
|
||||
"November",
|
||||
"December");
|
||||
|
||||
// short month names
|
||||
Calendar._SMN = new Array
|
||||
("Jan",
|
||||
"Feb",
|
||||
"Mar",
|
||||
"Apr",
|
||||
"May",
|
||||
"Jun",
|
||||
"Jul",
|
||||
"Aug",
|
||||
"Sep",
|
||||
"Oct",
|
||||
"Nov",
|
||||
"Dec");
|
||||
|
||||
// tooltips
|
||||
Calendar._TT = {};
|
||||
Calendar._TT["INFO"] = "About the calendar";
|
||||
|
||||
Calendar._TT["ABOUT"] =
|
||||
"DHTML Date/Time Selector\n" +
|
||||
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-)
|
||||
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
|
||||
"Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." +
|
||||
"\n\n" +
|
||||
"Date selection:\n" +
|
||||
"- Use the \xab, \xbb buttons to select year\n" +
|
||||
"- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" +
|
||||
"- Hold mouse button on any of the above buttons for faster selection.";
|
||||
Calendar._TT["ABOUT_TIME"] = "\n\n" +
|
||||
"Time selection:\n" +
|
||||
"- Click on any of the time parts to increase it\n" +
|
||||
"- or Shift-click to decrease it\n" +
|
||||
"- or click and drag for faster selection.";
|
||||
|
||||
Calendar._TT["PREV_YEAR"] = "Prev. year (hold for menu)";
|
||||
Calendar._TT["PREV_MONTH"] = "Prev. month (hold for menu)";
|
||||
Calendar._TT["GO_TODAY"] = "Go Today";
|
||||
Calendar._TT["NEXT_MONTH"] = "Next month (hold for menu)";
|
||||
Calendar._TT["NEXT_YEAR"] = "Next year (hold for menu)";
|
||||
Calendar._TT["SEL_DATE"] = "Select date";
|
||||
Calendar._TT["DRAG_TO_MOVE"] = "Drag to move";
|
||||
Calendar._TT["PART_TODAY"] = " (today)";
|
||||
|
||||
// the following is to inform that "%s" is to be the first day of week
|
||||
// %s will be replaced with the day name.
|
||||
Calendar._TT["DAY_FIRST"] = "Display %s first";
|
||||
|
||||
// This may be locale-dependent. It specifies the week-end days, as an array
|
||||
// of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1
|
||||
// means Monday, etc.
|
||||
Calendar._TT["WEEKEND"] = "0,6";
|
||||
|
||||
Calendar._TT["CLOSE"] = "Close";
|
||||
Calendar._TT["TODAY"] = "Today";
|
||||
Calendar._TT["TIME_PART"] = "(Shift-)Click or drag to change value";
|
||||
|
||||
// date formats
|
||||
Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
|
||||
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
|
||||
|
||||
Calendar._TT["WK"] = "wk";
|
||||
Calendar._TT["TIME"] = "Time:";
|
||||
@@ -1,16 +1,16 @@
|
||||
jsToolBar.strings = {};
|
||||
jsToolBar.strings['Strong'] = 'Получер';
|
||||
jsToolBar.strings['Italic'] = 'Курсив';
|
||||
jsToolBar.strings['Underline'] = 'Подчертан';
|
||||
jsToolBar.strings['Deleted'] = 'Изтрит';
|
||||
jsToolBar.strings['Code'] = 'Вграден код';
|
||||
jsToolBar.strings['Heading 1'] = 'Заглавие 1';
|
||||
jsToolBar.strings['Heading 2'] = 'Заглавие 2';
|
||||
jsToolBar.strings['Heading 3'] = 'Заглавие 3';
|
||||
jsToolBar.strings['Unordered list'] = 'Неподреден списък';
|
||||
jsToolBar.strings['Ordered list'] = 'Подреден списък';
|
||||
jsToolBar.strings['Quote'] = 'Цитат';
|
||||
jsToolBar.strings['Unquote'] = 'Премахване на цитат';
|
||||
jsToolBar.strings['Strong'] = 'Strong';
|
||||
jsToolBar.strings['Italic'] = 'Italic';
|
||||
jsToolBar.strings['Underline'] = 'Underline';
|
||||
jsToolBar.strings['Deleted'] = 'Deleted';
|
||||
jsToolBar.strings['Code'] = 'Inline Code';
|
||||
jsToolBar.strings['Heading 1'] = 'Heading 1';
|
||||
jsToolBar.strings['Heading 2'] = 'Heading 2';
|
||||
jsToolBar.strings['Heading 3'] = 'Heading 3';
|
||||
jsToolBar.strings['Unordered list'] = 'Unordered list';
|
||||
jsToolBar.strings['Ordered list'] = 'Ordered list';
|
||||
jsToolBar.strings['Quote'] = 'Quote';
|
||||
jsToolBar.strings['Unquote'] = 'Remove Quote';
|
||||
jsToolBar.strings['Preformatted text'] = 'Preformatted text';
|
||||
jsToolBar.strings['Wiki link'] = 'Връзка до Wiki страница';
|
||||
jsToolBar.strings['Image'] = 'Изображение';
|
||||
jsToolBar.strings['Wiki link'] = 'Link to a Wiki page';
|
||||
jsToolBar.strings['Image'] = 'Image';
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
jsToolBar.strings = {};
|
||||
jsToolBar.strings['Strong'] = 'Strong';
|
||||
jsToolBar.strings['Italic'] = 'Italic';
|
||||
jsToolBar.strings['Underline'] = 'Underline';
|
||||
jsToolBar.strings['Deleted'] = 'Deleted';
|
||||
jsToolBar.strings['Code'] = 'Inline Code';
|
||||
jsToolBar.strings['Heading 1'] = 'Heading 1';
|
||||
jsToolBar.strings['Heading 2'] = 'Heading 2';
|
||||
jsToolBar.strings['Heading 3'] = 'Heading 3';
|
||||
jsToolBar.strings['Unordered list'] = 'Unordered list';
|
||||
jsToolBar.strings['Ordered list'] = 'Ordered list';
|
||||
jsToolBar.strings['Quote'] = 'Quote';
|
||||
jsToolBar.strings['Unquote'] = 'Remove Quote';
|
||||
jsToolBar.strings['Preformatted text'] = 'Preformatted text';
|
||||
jsToolBar.strings['Wiki link'] = 'Link to a Wiki page';
|
||||
jsToolBar.strings['Image'] = 'Image';
|
||||
1
test/fixtures/custom_fields.yml
vendored
1
test/fixtures/custom_fields.yml
vendored
@@ -21,7 +21,6 @@ custom_fields_002:
|
||||
min_length: 1
|
||||
regexp: ""
|
||||
is_for_all: true
|
||||
is_filter: true
|
||||
type: IssueCustomField
|
||||
max_length: 100
|
||||
possible_values: ""
|
||||
|
||||
@@ -44,7 +44,6 @@ class TimelogControllerTest < ActionController::TestCase
|
||||
# Default activity selected
|
||||
assert_tag :tag => 'option', :attributes => { :selected => 'selected' },
|
||||
:content => 'Development'
|
||||
assert_select 'input[name=project_id][value=1]'
|
||||
end
|
||||
|
||||
def test_get_new_should_only_show_active_time_entry_activities
|
||||
@@ -62,18 +61,6 @@ class TimelogControllerTest < ActionController::TestCase
|
||||
assert_response :success
|
||||
assert_template 'new'
|
||||
assert_tag 'select', :attributes => {:name => 'time_entry[project_id]'}
|
||||
assert_select 'input[name=project_id]', 0
|
||||
end
|
||||
|
||||
def test_new_without_project_should_prefill_the_form
|
||||
@request.session[:user_id] = 3
|
||||
get :new, :time_entry => {:project_id => '1'}
|
||||
assert_response :success
|
||||
assert_template 'new'
|
||||
assert_select 'select[name=?]', 'time_entry[project_id]' do
|
||||
assert_select 'option[value=1][selected=selected]'
|
||||
end
|
||||
assert_select 'input[name=project_id]', 0
|
||||
end
|
||||
|
||||
def test_new_without_project_should_deny_without_permission
|
||||
@@ -157,7 +144,7 @@ class TimelogControllerTest < ActionController::TestCase
|
||||
:spent_on => '2008-03-14',
|
||||
:hours => '7.3'},
|
||||
:continue => '1'
|
||||
assert_redirected_to '/projects/ecookbook/time_entries/new?time_entry%5Bactivity_id%5D=11&time_entry%5Bissue_id%5D='
|
||||
assert_redirected_to '/projects/ecookbook/time_entries/new'
|
||||
end
|
||||
|
||||
def test_create_and_continue_with_issue_id
|
||||
@@ -168,7 +155,7 @@ class TimelogControllerTest < ActionController::TestCase
|
||||
:spent_on => '2008-03-14',
|
||||
:hours => '7.3'},
|
||||
:continue => '1'
|
||||
assert_redirected_to '/projects/ecookbook/issues/1/time_entries/new?time_entry%5Bactivity_id%5D=11&time_entry%5Bissue_id%5D=1'
|
||||
assert_redirected_to '/projects/ecookbook/issues/1/time_entries/new'
|
||||
end
|
||||
|
||||
def test_create_and_continue_without_project
|
||||
@@ -180,7 +167,7 @@ class TimelogControllerTest < ActionController::TestCase
|
||||
:hours => '7.3'},
|
||||
:continue => '1'
|
||||
|
||||
assert_redirected_to '/time_entries/new?time_entry%5Bactivity_id%5D=11&time_entry%5Bissue_id%5D=&time_entry%5Bproject_id%5D=1'
|
||||
assert_redirected_to '/time_entries/new'
|
||||
end
|
||||
|
||||
def test_create_without_log_time_permission_should_be_denied
|
||||
|
||||
@@ -483,11 +483,3 @@ end
|
||||
# Simple module to "namespace" all of the API tests
|
||||
module ApiTest
|
||||
end
|
||||
|
||||
module ActionController
|
||||
class TestUploadedFile
|
||||
def respond_to?(method_name)
|
||||
@tempfile.respond_to?(method_name) || super
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -166,7 +166,6 @@ class MailerTest < ActiveSupport::TestCase
|
||||
assert_not_nil mail
|
||||
assert_equal 'OOF', mail.header_string('X-Auto-Response-Suppress')
|
||||
assert_equal 'auto-generated', mail.header_string('Auto-Submitted')
|
||||
assert_equal '<redmine.example.net>', mail.header_string('List-Id')
|
||||
end
|
||||
|
||||
def test_email_headers_should_include_sender
|
||||
|
||||
@@ -112,15 +112,6 @@ class QueryTest < ActiveSupport::TestCase
|
||||
assert issues.all? {|i| i.start_date.nil?}
|
||||
end
|
||||
|
||||
def test_operator_none_for_string_custom_field
|
||||
query = Query.new(:project => Project.find(1), :name => '_')
|
||||
query.add_filter('cf_2', '!*', [''])
|
||||
assert query.has_filter?('cf_2')
|
||||
issues = find_issues_with_query(query)
|
||||
assert !issues.empty?
|
||||
assert issues.all? {|i| i.custom_field_value(2).blank?}
|
||||
end
|
||||
|
||||
def test_operator_all
|
||||
query = Query.new(:project => Project.find(1), :name => '_')
|
||||
query.add_filter('fixed_version_id', '*', [''])
|
||||
@@ -138,15 +129,6 @@ class QueryTest < ActiveSupport::TestCase
|
||||
assert issues.all? {|i| i.start_date.present?}
|
||||
end
|
||||
|
||||
def test_operator_all_for_string_custom_field
|
||||
query = Query.new(:project => Project.find(1), :name => '_')
|
||||
query.add_filter('cf_2', '*', [''])
|
||||
assert query.has_filter?('cf_2')
|
||||
issues = find_issues_with_query(query)
|
||||
assert !issues.empty?
|
||||
assert issues.all? {|i| i.custom_field_value(2).present?}
|
||||
end
|
||||
|
||||
def test_numeric_filter_should_not_accept_non_numeric_values
|
||||
query = Query.new(:name => '_')
|
||||
query.add_filter('estimated_hours', '=', ['a'])
|
||||
|
||||
@@ -318,13 +318,4 @@ class RepositoryTest < ActiveSupport::TestCase
|
||||
assert_equal "test_value_23",
|
||||
repo.extra_info["test_2"]["test_23"]
|
||||
end
|
||||
|
||||
def test_sort_should_not_raise_an_error_with_nil_identifiers
|
||||
r1 = Repository.new
|
||||
r2 = Repository.new
|
||||
|
||||
assert_nothing_raised do
|
||||
[r1, r2].sort
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -184,7 +184,7 @@ module CollectiveIdea #:nodoc:
|
||||
find(:all, :conditions => ["#{quoted_parent_column_name} = ? #{scope.call(node)}", node], :order => "#{quoted_left_column_name}, #{quoted_right_column_name}, #{acts_as_nested_set_options[:order]}").each{|n| set_left_and_rights.call(n) }
|
||||
# set right
|
||||
node[right_column_name] = indices[scope.call(node)] += 1
|
||||
node.save(false)
|
||||
node.save!
|
||||
end
|
||||
|
||||
# Find root node(s)
|
||||
|
||||
Reference in New Issue
Block a user