Compare commits
61
Commits
1.4-stable
...
1.1.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d21776215b | ||
|
|
11b774d39d | ||
|
|
77c4667dbc | ||
|
|
f05fdd5cfa | ||
|
|
a0bb70ed2d | ||
|
|
1d5c3f7fba | ||
|
|
8b83aa1470 | ||
|
|
3a92721af4 | ||
|
|
b3218ba4d4 | ||
|
|
975ee2b522 | ||
|
|
27a319e66d | ||
|
|
7be5bf6e4d | ||
|
|
c73d4042d1 | ||
|
|
8270ad1e64 | ||
|
|
26016fbf43 | ||
|
|
307e4ceaa2 | ||
|
|
03085e85f9 | ||
|
|
1f4e0dc10c | ||
|
|
f69c95306d | ||
|
|
634ede3e8b | ||
|
|
c2a2979189 | ||
|
|
9800469943 | ||
|
|
e47f1d5595 | ||
|
|
135fe04d02 | ||
|
|
794d7c0959 | ||
|
|
b8f365f2a1 | ||
|
|
6188b9eddb | ||
|
|
96c4dc3f1e | ||
|
|
b877215261 | ||
|
|
788b143596 | ||
|
|
6a261eb5a0 | ||
|
|
007fbc00cf | ||
|
|
9b8b4b3bfc | ||
|
|
6734f91a72 | ||
|
|
5266346315 | ||
|
|
d426e4452b | ||
|
|
f8af1bebd7 | ||
|
|
6e695a4d1a | ||
|
|
e5b7c94cb4 | ||
|
|
9028e664c4 | ||
|
|
6318affd31 | ||
|
|
8794cd3344 | ||
|
|
2fcd4e5271 | ||
|
|
ea60705ca7 | ||
|
|
90bce4e366 | ||
|
|
9f7cc355ad | ||
|
|
6ee4c0bac7 | ||
|
|
b0f0bd1848 | ||
|
|
fe563a8802 | ||
|
|
8ebab00767 | ||
|
|
d97297e45d | ||
|
|
f06500dcce | ||
|
|
b098e2b63f | ||
|
|
151a49b319 | ||
|
|
ded234794e | ||
|
|
119732c3ee | ||
|
|
730fcef844 | ||
|
|
1cb33f3a95 | ||
|
|
69edd3c53f | ||
|
|
ad784e2146 | ||
|
|
c783ae4b3d |
No files matched your search
@@ -0,0 +1,22 @@
|
|||||||
|
syntax: glob
|
||||||
|
|
||||||
|
config/additional_environment.rb
|
||||||
|
config/database.yml
|
||||||
|
config/email.yml
|
||||||
|
config/initializers/session_store.rb
|
||||||
|
coverage
|
||||||
|
db/*.db
|
||||||
|
db/*.sqlite3
|
||||||
|
db/schema.rb
|
||||||
|
files/*
|
||||||
|
log/*.log*
|
||||||
|
log/mongrel_debug
|
||||||
|
public/dispatch.*
|
||||||
|
public/plugin_assets
|
||||||
|
tmp/*
|
||||||
|
tmp/cache/*
|
||||||
|
tmp/sessions/*
|
||||||
|
tmp/sockets/*
|
||||||
|
tmp/test/*
|
||||||
|
vendor/rails
|
||||||
|
*.rbc
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>1.1-stable</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.rubypeople.rdt.core.rubybuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>com.aptana.ide.core.unifiedBuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>com.aptana.ide.project.nature.web</nature>
|
||||||
|
<nature>org.rubypeople.rdt.core.rubynature</nature>
|
||||||
|
<nature>org.radrails.rails.core.railsnature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
||||||
@@ -28,6 +28,7 @@ class IssueRelationsController < ApplicationController
|
|||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html { redirect_to :controller => 'issues', :action => 'show', :id => @issue }
|
format.html { redirect_to :controller => 'issues', :action => 'show', :id => @issue }
|
||||||
format.js do
|
format.js do
|
||||||
|
@relations = @issue.relations.select {|r| r.other_issue(@issue) && r.other_issue(@issue).visible? }
|
||||||
render :update do |page|
|
render :update do |page|
|
||||||
page.replace_html "relations", :partial => 'issues/relations'
|
page.replace_html "relations", :partial => 'issues/relations'
|
||||||
if @relation.errors.empty?
|
if @relation.errors.empty?
|
||||||
@@ -47,7 +48,10 @@ class IssueRelationsController < ApplicationController
|
|||||||
end
|
end
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html { redirect_to :controller => 'issues', :action => 'show', :id => @issue }
|
format.html { redirect_to :controller => 'issues', :action => 'show', :id => @issue }
|
||||||
format.js { render(:update) {|page| page.replace_html "relations", :partial => 'issues/relations'} }
|
format.js {
|
||||||
|
@relations = @issue.relations.select {|r| r.other_issue(@issue) && r.other_issue(@issue).visible? }
|
||||||
|
render(:update) {|page| page.replace_html "relations", :partial => 'issues/relations'}
|
||||||
|
}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,8 @@ class IssuesController < ApplicationController
|
|||||||
include AttachmentsHelper
|
include AttachmentsHelper
|
||||||
helper :queries
|
helper :queries
|
||||||
include QueriesHelper
|
include QueriesHelper
|
||||||
|
helper :repositories
|
||||||
|
include RepositoriesHelper
|
||||||
helper :sort
|
helper :sort
|
||||||
include SortHelper
|
include SortHelper
|
||||||
include IssuesHelper
|
include IssuesHelper
|
||||||
@@ -106,6 +108,7 @@ class IssuesController < ApplicationController
|
|||||||
@journals.reverse! if User.current.wants_comments_in_reverse_order?
|
@journals.reverse! if User.current.wants_comments_in_reverse_order?
|
||||||
@changesets = @issue.changesets.visible.all
|
@changesets = @issue.changesets.visible.all
|
||||||
@changesets.reverse! if User.current.wants_comments_in_reverse_order?
|
@changesets.reverse! if User.current.wants_comments_in_reverse_order?
|
||||||
|
@relations = @issue.relations.select {|r| r.other_issue(@issue) && r.other_issue(@issue).visible? }
|
||||||
@allowed_statuses = @issue.new_statuses_allowed_to(User.current)
|
@allowed_statuses = @issue.new_statuses_allowed_to(User.current)
|
||||||
@edit_allowed = User.current.allowed_to?(:edit_issues, @project)
|
@edit_allowed = User.current.allowed_to?(:edit_issues, @project)
|
||||||
@priorities = IssuePriority.all
|
@priorities = IssuePriority.all
|
||||||
|
|||||||
@@ -32,9 +32,6 @@ class ProjectsController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO: convert to PUT only
|
|
||||||
verify :method => [:post, :put], :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
|
|
||||||
|
|
||||||
helper :sort
|
helper :sort
|
||||||
include SortHelper
|
include SortHelper
|
||||||
helper :custom_fields
|
helper :custom_fields
|
||||||
@@ -71,13 +68,13 @@ class ProjectsController < ApplicationController
|
|||||||
@project = Project.new(params[:project])
|
@project = Project.new(params[:project])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
verify :method => :post, :only => :create, :render => {:nothing => true, :status => :method_not_allowed }
|
||||||
def create
|
def create
|
||||||
@issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position")
|
@issue_custom_fields = IssueCustomField.find(:all, :order => "#{CustomField.table_name}.position")
|
||||||
@trackers = Tracker.all
|
@trackers = Tracker.all
|
||||||
@project = Project.new
|
@project = Project.new
|
||||||
@project.safe_attributes = params[:project]
|
@project.safe_attributes = params[:project]
|
||||||
|
|
||||||
@project.enabled_module_names = params[:enabled_modules] if params[:enabled_modules]
|
|
||||||
if validate_parent_id && @project.save
|
if validate_parent_id && @project.save
|
||||||
@project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
|
@project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
|
||||||
# Add current user as a project member if he is not admin
|
# Add current user as a project member if he is not admin
|
||||||
@@ -124,13 +121,13 @@ class ProjectsController < ApplicationController
|
|||||||
if validate_parent_id && @project.copy(@source_project, :only => params[:only])
|
if validate_parent_id && @project.copy(@source_project, :only => params[:only])
|
||||||
@project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
|
@project.set_allowed_parent!(params[:project]['parent_id']) if params[:project].has_key?('parent_id')
|
||||||
flash[:notice] = l(:notice_successful_create)
|
flash[:notice] = l(:notice_successful_create)
|
||||||
redirect_to :controller => 'projects', :action => 'settings'
|
redirect_to :controller => 'projects', :action => 'settings', :id => @project
|
||||||
elsif !@project.new_record?
|
elsif !@project.new_record?
|
||||||
# Project was created
|
# Project was created
|
||||||
# But some objects were not copied due to validation failures
|
# But some objects were not copied due to validation failures
|
||||||
# (eg. issues from disabled trackers)
|
# (eg. issues from disabled trackers)
|
||||||
# TODO: inform about that
|
# TODO: inform about that
|
||||||
redirect_to :controller => 'projects', :action => 'settings'
|
redirect_to :controller => 'projects', :action => 'settings', :id => @project
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -184,6 +181,8 @@ class ProjectsController < ApplicationController
|
|||||||
def edit
|
def edit
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# TODO: convert to PUT only
|
||||||
|
verify :method => [:post, :put], :only => :update, :render => {:nothing => true, :status => :method_not_allowed }
|
||||||
def update
|
def update
|
||||||
@project.safe_attributes = params[:project]
|
@project.safe_attributes = params[:project]
|
||||||
if validate_parent_id && @project.save
|
if validate_parent_id && @project.save
|
||||||
@@ -206,8 +205,9 @@ class ProjectsController < ApplicationController
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
verify :method => :post, :only => :modules, :render => {:nothing => true, :status => :method_not_allowed }
|
||||||
def modules
|
def modules
|
||||||
@project.enabled_module_names = params[:enabled_modules]
|
@project.enabled_module_names = params[:enabled_module_names]
|
||||||
flash[:notice] = l(:notice_successful_update)
|
flash[:notice] = l(:notice_successful_update)
|
||||||
redirect_to :action => 'settings', :id => @project, :tab => 'modules'
|
redirect_to :action => 'settings', :id => @project, :tab => 'modules'
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -139,6 +139,7 @@ class RepositoriesController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def revision
|
def revision
|
||||||
|
raise ChangesetNotFound if @rev.nil? || @rev.empty?
|
||||||
@changeset = @repository.find_changeset_by_name(@rev)
|
@changeset = @repository.find_changeset_by_name(@rev)
|
||||||
raise ChangesetNotFound unless @changeset
|
raise ChangesetNotFound unless @changeset
|
||||||
|
|
||||||
@@ -174,6 +175,9 @@ class RepositoriesController < ApplicationController
|
|||||||
@diff = @repository.diff(@path, @rev, @rev_to)
|
@diff = @repository.diff(@path, @rev, @rev_to)
|
||||||
show_error_not_found unless @diff
|
show_error_not_found unless @diff
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@changeset = @repository.find_changeset_by_name(@rev)
|
||||||
|
@changeset_to = @rev_to ? @repository.find_changeset_by_name(@rev_to) : nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -221,7 +225,7 @@ class RepositoriesController < ApplicationController
|
|||||||
end
|
end
|
||||||
|
|
||||||
def show_error_not_found
|
def show_error_not_found
|
||||||
render_error l(:error_scm_not_found)
|
render_error :message => l(:error_scm_not_found), :status => 404
|
||||||
end
|
end
|
||||||
|
|
||||||
# Handler for Redmine::Scm::Adapters::CommandFailed exception
|
# Handler for Redmine::Scm::Adapters::CommandFailed exception
|
||||||
|
|||||||
@@ -104,8 +104,10 @@ module ApplicationHelper
|
|||||||
# * :text - Link text (default to the formatted revision)
|
# * :text - Link text (default to the formatted revision)
|
||||||
def link_to_revision(revision, project, options={})
|
def link_to_revision(revision, project, options={})
|
||||||
text = options.delete(:text) || format_revision(revision)
|
text = options.delete(:text) || format_revision(revision)
|
||||||
|
rev = revision.respond_to?(:identifier) ? revision.identifier : revision
|
||||||
|
|
||||||
link_to(text, {:controller => 'repositories', :action => 'revision', :id => project, :rev => revision}, :title => l(:label_revision_id, revision))
|
link_to(text, {:controller => 'repositories', :action => 'revision', :id => project, :rev => rev},
|
||||||
|
:title => l(:label_revision_id, format_revision(revision)))
|
||||||
end
|
end
|
||||||
|
|
||||||
# Generates a link to a project if active
|
# Generates a link to a project if active
|
||||||
|
|||||||
@@ -18,8 +18,12 @@
|
|||||||
require 'iconv'
|
require 'iconv'
|
||||||
|
|
||||||
module RepositoriesHelper
|
module RepositoriesHelper
|
||||||
def format_revision(txt)
|
def format_revision(revision)
|
||||||
txt.to_s[0,8]
|
if revision.respond_to? :format_identifier
|
||||||
|
revision.format_identifier
|
||||||
|
else
|
||||||
|
revision.to_s
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def truncate_at_line_break(text, length = 255)
|
def truncate_at_line_break(text, length = 255)
|
||||||
@@ -87,7 +91,7 @@ module RepositoriesHelper
|
|||||||
:action => 'show',
|
:action => 'show',
|
||||||
:id => @project,
|
:id => @project,
|
||||||
:path => path_param,
|
:path => path_param,
|
||||||
:rev => @changeset.revision)
|
:rev => @changeset.identifier)
|
||||||
output << "<li class='#{style}'>#{text}</li>"
|
output << "<li class='#{style}'>#{text}</li>"
|
||||||
output << render_changes_tree(s)
|
output << render_changes_tree(s)
|
||||||
elsif c = tree[file][:c]
|
elsif c = tree[file][:c]
|
||||||
@@ -97,13 +101,13 @@ module RepositoriesHelper
|
|||||||
:action => 'entry',
|
:action => 'entry',
|
||||||
:id => @project,
|
:id => @project,
|
||||||
:path => path_param,
|
:path => path_param,
|
||||||
:rev => @changeset.revision) unless c.action == 'D'
|
:rev => @changeset.identifier) unless c.action == 'D'
|
||||||
text << " - #{c.revision}" unless c.revision.blank?
|
text << " - #{c.revision}" unless c.revision.blank?
|
||||||
text << ' (' + link_to('diff', :controller => 'repositories',
|
text << ' (' + link_to('diff', :controller => 'repositories',
|
||||||
:action => 'diff',
|
:action => 'diff',
|
||||||
:id => @project,
|
:id => @project,
|
||||||
:path => path_param,
|
:path => path_param,
|
||||||
:rev => @changeset.revision) + ') ' if c.action == 'M'
|
:rev => @changeset.identifier) + ') ' if c.action == 'M'
|
||||||
text << ' ' + content_tag('span', c.from_path, :class => 'copied-from') unless c.from_path.blank?
|
text << ' ' + content_tag('span', c.from_path, :class => 'copied-from') unless c.from_path.blank?
|
||||||
output << "<li class='#{style}'>#{text}</li>"
|
output << "<li class='#{style}'>#{text}</li>"
|
||||||
end
|
end
|
||||||
|
|||||||
+20
-2
@@ -23,10 +23,10 @@ class Changeset < ActiveRecord::Base
|
|||||||
has_many :changes, :dependent => :delete_all
|
has_many :changes, :dependent => :delete_all
|
||||||
has_and_belongs_to_many :issues
|
has_and_belongs_to_many :issues
|
||||||
|
|
||||||
acts_as_event :title => Proc.new {|o| "#{l(:label_revision)} #{o.revision}" + (o.short_comments.blank? ? '' : (': ' + o.short_comments))},
|
acts_as_event :title => Proc.new {|o| "#{l(:label_revision)} #{o.format_identifier}" + (o.short_comments.blank? ? '' : (': ' + o.short_comments))},
|
||||||
:description => :long_comments,
|
:description => :long_comments,
|
||||||
:datetime => :committed_on,
|
:datetime => :committed_on,
|
||||||
:url => Proc.new {|o| {:controller => 'repositories', :action => 'revision', :id => o.repository.project, :rev => o.revision}}
|
:url => Proc.new {|o| {:controller => 'repositories', :action => 'revision', :id => o.repository.project, :rev => o.identifier}}
|
||||||
|
|
||||||
acts_as_searchable :columns => 'comments',
|
acts_as_searchable :columns => 'comments',
|
||||||
:include => {:repository => :project},
|
:include => {:repository => :project},
|
||||||
@@ -48,6 +48,15 @@ class Changeset < ActiveRecord::Base
|
|||||||
write_attribute :revision, (r.nil? ? nil : r.to_s)
|
write_attribute :revision, (r.nil? ? nil : r.to_s)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Returns the identifier of this changeset; depending on repository backends
|
||||||
|
def identifier
|
||||||
|
if repository.class.respond_to? :changeset_identifier
|
||||||
|
repository.class.changeset_identifier self
|
||||||
|
else
|
||||||
|
revision.to_s
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def comments=(comment)
|
def comments=(comment)
|
||||||
write_attribute(:comments, Changeset.normalize_comments(comment))
|
write_attribute(:comments, Changeset.normalize_comments(comment))
|
||||||
end
|
end
|
||||||
@@ -57,6 +66,15 @@ class Changeset < ActiveRecord::Base
|
|||||||
super
|
super
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Returns the readable identifier
|
||||||
|
def format_identifier
|
||||||
|
if repository.class.respond_to? :format_changeset_identifier
|
||||||
|
repository.class.format_changeset_identifier self
|
||||||
|
else
|
||||||
|
identifier
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def committer=(arg)
|
def committer=(arg)
|
||||||
write_attribute(:committer, self.class.to_utf8(arg.to_s))
|
write_attribute(:committer, self.class.to_utf8(arg.to_s))
|
||||||
end
|
end
|
||||||
|
|||||||
+10
-2
@@ -66,7 +66,7 @@ class Project < ActiveRecord::Base
|
|||||||
:url => Proc.new {|o| {:controller => 'projects', :action => 'show', :id => o}},
|
:url => Proc.new {|o| {:controller => 'projects', :action => 'show', :id => o}},
|
||||||
:author => nil
|
:author => nil
|
||||||
|
|
||||||
attr_protected :status, :enabled_module_names
|
attr_protected :status
|
||||||
|
|
||||||
validates_presence_of :name, :identifier
|
validates_presence_of :name, :identifier
|
||||||
validates_uniqueness_of :identifier
|
validates_uniqueness_of :identifier
|
||||||
@@ -533,6 +533,9 @@ class Project < ActiveRecord::Base
|
|||||||
'tracker_ids',
|
'tracker_ids',
|
||||||
'issue_custom_field_ids'
|
'issue_custom_field_ids'
|
||||||
|
|
||||||
|
safe_attributes 'enabled_module_names',
|
||||||
|
:if => lambda {|project, user| project.new_record? || user.allowed_to?(:select_project_modules, project) }
|
||||||
|
|
||||||
# Returns an array of projects that are in this project's hierarchy
|
# Returns an array of projects that are in this project's hierarchy
|
||||||
#
|
#
|
||||||
# Example: parents, children, siblings
|
# Example: parents, children, siblings
|
||||||
@@ -740,7 +743,12 @@ class Project < ActiveRecord::Base
|
|||||||
|
|
||||||
# Copies members from +project+
|
# Copies members from +project+
|
||||||
def copy_members(project)
|
def copy_members(project)
|
||||||
project.memberships.each do |member|
|
# Copy users first, then groups to handle members with inherited and given roles
|
||||||
|
members_to_copy = []
|
||||||
|
members_to_copy += project.memberships.select {|m| m.principal.is_a?(User)}
|
||||||
|
members_to_copy += project.memberships.select {|m| !m.principal.is_a?(User)}
|
||||||
|
|
||||||
|
members_to_copy.each do |member|
|
||||||
new_member = Member.new
|
new_member = Member.new
|
||||||
new_member.attributes = member.attributes.dup.except("id", "project_id", "created_on")
|
new_member.attributes = member.attributes.dup.except("id", "project_id", "created_on")
|
||||||
# only copy non inherited roles
|
# only copy non inherited roles
|
||||||
|
|||||||
@@ -94,6 +94,7 @@ class Repository < ActiveRecord::Base
|
|||||||
|
|
||||||
# Finds and returns a revision with a number or the beginning of a hash
|
# Finds and returns a revision with a number or the beginning of a hash
|
||||||
def find_changeset_by_name(name)
|
def find_changeset_by_name(name)
|
||||||
|
return nil if name.blank?
|
||||||
changesets.find(:first, :conditions => (name.match(/^\d*$/) ? ["revision = ?", name.to_s] : ["revision LIKE ?", name + '%']))
|
changesets.find(:first, :conditions => (name.match(/^\d*$/) ? ["revision = ?", name.to_s] : ["revision LIKE ?", name + '%']))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,16 @@ class Repository::Git < Repository
|
|||||||
'Git'
|
'Git'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Returns the identifier for the given git changeset
|
||||||
|
def self.changeset_identifier(changeset)
|
||||||
|
changeset.scmid
|
||||||
|
end
|
||||||
|
|
||||||
|
# Returns the readable identifier for the given git changeset
|
||||||
|
def self.format_changeset_identifier(changeset)
|
||||||
|
changeset.revision[0, 8]
|
||||||
|
end
|
||||||
|
|
||||||
def branches
|
def branches
|
||||||
scm.branches
|
scm.branches
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -18,6 +18,9 @@
|
|||||||
require 'redmine/scm/adapters/mercurial_adapter'
|
require 'redmine/scm/adapters/mercurial_adapter'
|
||||||
|
|
||||||
class Repository::Mercurial < Repository
|
class Repository::Mercurial < Repository
|
||||||
|
# sort changesets by revision number
|
||||||
|
has_many :changesets, :order => "#{Changeset.table_name}.id DESC", :foreign_key => 'repository_id'
|
||||||
|
|
||||||
attr_protected :root_url
|
attr_protected :root_url
|
||||||
validates_presence_of :url
|
validates_presence_of :url
|
||||||
|
|
||||||
@@ -52,6 +55,18 @@ class Repository::Mercurial < Repository
|
|||||||
entries
|
entries
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Returns the latest changesets for +path+; sorted by revision number
|
||||||
|
def latest_changesets(path, rev, limit=10)
|
||||||
|
if path.blank?
|
||||||
|
changesets.find(:all, :include => :user, :limit => limit)
|
||||||
|
else
|
||||||
|
changes.find(:all, :include => {:changeset => :user},
|
||||||
|
:conditions => ["path = ?", path.with_leading_slash],
|
||||||
|
:order => "#{Changeset.table_name}.id DESC",
|
||||||
|
:limit => limit).collect(&:changeset)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def fetch_changesets
|
def fetch_changesets
|
||||||
scm_info = scm.info
|
scm_info = scm.info
|
||||||
if scm_info
|
if scm_info
|
||||||
|
|||||||
@@ -66,6 +66,9 @@ class TimeEntry < ActiveRecord::Base
|
|||||||
# these attributes make time aggregations easier
|
# these attributes make time aggregations easier
|
||||||
def spent_on=(date)
|
def spent_on=(date)
|
||||||
super
|
super
|
||||||
|
if spent_on.is_a?(Time)
|
||||||
|
self.spent_on = spent_on.to_date
|
||||||
|
end
|
||||||
self.tyear = spent_on ? spent_on.year : nil
|
self.tyear = spent_on ? spent_on.year : nil
|
||||||
self.tmonth = spent_on ? spent_on.month : nil
|
self.tmonth = spent_on ? spent_on.month : nil
|
||||||
self.tweek = spent_on ? Date.civil(spent_on.year, spent_on.month, spent_on.day).cweek : nil
|
self.tweek = spent_on ? Date.civil(spent_on.year, spent_on.month, spent_on.day).cweek : nil
|
||||||
|
|||||||
+13
-4
@@ -261,12 +261,16 @@ class User < Principal
|
|||||||
notified_projects_ids
|
notified_projects_ids
|
||||||
end
|
end
|
||||||
|
|
||||||
# Only users that belong to more than 1 project can select projects for which they are notified
|
|
||||||
def valid_notification_options
|
def valid_notification_options
|
||||||
|
self.class.valid_notification_options(self)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Only users that belong to more than 1 project can select projects for which they are notified
|
||||||
|
def self.valid_notification_options(user=nil)
|
||||||
# Note that @user.membership.size would fail since AR ignores
|
# Note that @user.membership.size would fail since AR ignores
|
||||||
# :include association option when doing a count
|
# :include association option when doing a count
|
||||||
if memberships.length < 1
|
if user.nil? || user.memberships.length < 1
|
||||||
MAIL_NOTIFICATION_OPTIONS.delete_if {|option| option.first == 'selected'}
|
MAIL_NOTIFICATION_OPTIONS.reject {|option| option.first == 'selected'}
|
||||||
else
|
else
|
||||||
MAIL_NOTIFICATION_OPTIONS
|
MAIL_NOTIFICATION_OPTIONS
|
||||||
end
|
end
|
||||||
@@ -419,7 +423,12 @@ class User < Principal
|
|||||||
when 'all'
|
when 'all'
|
||||||
true
|
true
|
||||||
when 'selected'
|
when 'selected'
|
||||||
# Handled by the Project
|
# user receives notifications for created/assigned issues on unselected projects
|
||||||
|
if object.is_a?(Issue) && (object.author == self || object.assigned_to == self)
|
||||||
|
true
|
||||||
|
else
|
||||||
|
false
|
||||||
|
end
|
||||||
when 'none'
|
when 'none'
|
||||||
false
|
false
|
||||||
when 'only_my_events'
|
when 'only_my_events'
|
||||||
|
|||||||
+3
-3
@@ -45,11 +45,11 @@ class Wiki < ActiveRecord::Base
|
|||||||
# find the page with the given title
|
# find the page with the given title
|
||||||
def find_page(title, options = {})
|
def find_page(title, options = {})
|
||||||
title = start_page if title.blank?
|
title = start_page if title.blank?
|
||||||
title = Wiki.titleize(title).downcase
|
title = Wiki.titleize(title)
|
||||||
page = pages.first(:conditions => ["LOWER(title) LIKE ?", title])
|
page = pages.first(:conditions => ["LOWER(title) LIKE LOWER(?)", title])
|
||||||
if !page && !(options[:with_redirect] == false)
|
if !page && !(options[:with_redirect] == false)
|
||||||
# search for a redirect
|
# search for a redirect
|
||||||
redirect = redirects.first(:conditions => ["LOWER(title) LIKE ?", title])
|
redirect = redirects.first(:conditions => ["LOWER(title) LIKE LOWER(?)", title])
|
||||||
page = find_page(redirect.redirects_to, :with_redirect => false) if redirect
|
page = find_page(redirect.redirects_to, :with_redirect => false) if redirect
|
||||||
end
|
end
|
||||||
page
|
page
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<% changesets.each do |changeset| %>
|
<% changesets.each do |changeset| %>
|
||||||
<div class="changeset <%= cycle('odd', 'even') %>">
|
<div class="changeset <%= cycle('odd', 'even') %>">
|
||||||
<p><%= link_to("#{l(:label_revision)} #{changeset.revision}",
|
<p><%= link_to_revision(changeset, changeset.project,
|
||||||
:controller => 'repositories', :action => 'revision', :id => changeset.project, :rev => changeset.revision) %><br />
|
:text => "#{l(:label_revision)} #{changeset.format_identifier}") %><br />
|
||||||
<span class="author"><%= authoring(changeset.committed_on, changeset.author) %></span></p>
|
<span class="author"><%= authoring(changeset.committed_on, changeset.author) %></span></p>
|
||||||
<div class="changeset-changes">
|
<div class="changeset-changes">
|
||||||
<%= textilizable(changeset, :comments) %>
|
<%= textilizable(changeset, :comments) %>
|
||||||
|
|||||||
@@ -6,9 +6,9 @@
|
|||||||
|
|
||||||
<p><strong><%=l(:label_related_issues)%></strong></p>
|
<p><strong><%=l(:label_related_issues)%></strong></p>
|
||||||
|
|
||||||
<% if @issue.relations.any? %>
|
<% if @relations.present? %>
|
||||||
<table style="width:100%">
|
<table style="width:100%">
|
||||||
<% @issue.relations.select {|r| r.other_issue(@issue).visible? }.each do |relation| %>
|
<% @relations.each do |relation| %>
|
||||||
<tr>
|
<tr>
|
||||||
<td><%= l(relation.label_for(@issue)) %> <%= "(#{l('datetime.distance_in_words.x_days', :count => relation.delay)})" if relation.delay && relation.delay != 0 %>
|
<td><%= l(relation.label_for(@issue)) %> <%= "(#{l('datetime.distance_in_words.x_days', :count => relation.delay)})" if relation.delay && relation.delay != 0 %>
|
||||||
<%= h(relation.other_issue(@issue).project) + ' - ' if Setting.cross_project_issue_relations? %>
|
<%= h(relation.other_issue(@issue).project) + ' - ' if Setting.cross_project_issue_relations? %>
|
||||||
|
|||||||
@@ -26,10 +26,10 @@ api.issue do
|
|||||||
render_api_issue_children(@issue, api) if include_in_api_response?('children')
|
render_api_issue_children(@issue, api) if include_in_api_response?('children')
|
||||||
|
|
||||||
api.array :relations do
|
api.array :relations do
|
||||||
@issue.relations.select {|r| r.other_issue(@issue).visible? }.each do |relation|
|
@relations.each do |relation|
|
||||||
api.relation(:id => relation.id, :issue_id => relation.other_issue(@issue).id, :relation_type => relation.relation_type_for(@issue), :delay => relation.delay)
|
api.relation(:id => relation.id, :issue_id => relation.other_issue(@issue).id, :relation_type => relation.relation_type_for(@issue), :delay => relation.delay)
|
||||||
end
|
end
|
||||||
end if include_in_api_response?('relations')
|
end if include_in_api_response?('relations') && @relations.present?
|
||||||
|
|
||||||
api.array :changesets do
|
api.array :changesets do
|
||||||
@issue.changesets.each do |changeset|
|
@issue.changesets.each do |changeset|
|
||||||
|
|||||||
@@ -69,7 +69,7 @@
|
|||||||
|
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<div class="bgl"><div class="bgr">
|
<div class="bgl"><div class="bgr">
|
||||||
Powered by <%= link_to Redmine::Info.app_name, Redmine::Info.url %> © 2006-2010 Jean-Philippe Lang
|
Powered by <%= link_to Redmine::Info.app_name, Redmine::Info.url %> © 2006-2011 Jean-Philippe Lang
|
||||||
</div></div>
|
</div></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -23,8 +23,22 @@
|
|||||||
<%= call_hook(:view_projects_form, :project => @project, :form => f) %>
|
<%= call_hook(:view_projects_form, :project => @project, :form => f) %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<% if @project.new_record? %>
|
||||||
|
<fieldset class="box"><legend><%= l(:label_module_plural) %></legend>
|
||||||
|
<% Redmine::AccessControl.available_project_modules.each do |m| %>
|
||||||
|
<label class="floating">
|
||||||
|
<%= check_box_tag 'project[enabled_module_names][]', m, @project.module_enabled?(m), :id => "project_enabled_module_names_#{m}" %>
|
||||||
|
<%= l_or_humanize(m, :prefix => "project_module_") %>
|
||||||
|
</label>
|
||||||
|
<% end %>
|
||||||
|
<%= hidden_field_tag 'project[enabled_module_names][]', '' %>
|
||||||
|
<%= javascript_tag 'observeProjectModules()' %>
|
||||||
|
</fieldset>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<% if @project.new_record? || @project.module_enabled?('issue_tracking') %>
|
||||||
<% unless @trackers.empty? %>
|
<% unless @trackers.empty? %>
|
||||||
<fieldset class="box"><legend><%=l(:label_tracker_plural)%></legend>
|
<fieldset class="box" id="project_trackers"><legend><%=l(:label_tracker_plural)%></legend>
|
||||||
<% @trackers.each do |tracker| %>
|
<% @trackers.each do |tracker| %>
|
||||||
<label class="floating">
|
<label class="floating">
|
||||||
<%= check_box_tag 'project[tracker_ids][]', tracker.id, @project.trackers.include?(tracker) %>
|
<%= check_box_tag 'project[tracker_ids][]', tracker.id, @project.trackers.include?(tracker) %>
|
||||||
@@ -36,7 +50,7 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% unless @issue_custom_fields.empty? %>
|
<% unless @issue_custom_fields.empty? %>
|
||||||
<fieldset class="box"><legend><%=l(:label_custom_field_plural)%></legend>
|
<fieldset class="box" id="project_issue_custom_fields"><legend><%=l(:label_custom_field_plural)%></legend>
|
||||||
<% @issue_custom_fields.each do |custom_field| %>
|
<% @issue_custom_fields.each do |custom_field| %>
|
||||||
<label class="floating">
|
<label class="floating">
|
||||||
<%= check_box_tag 'project[issue_custom_field_ids][]', custom_field.id, (@project.all_issue_custom_fields.include? custom_field), (custom_field.is_for_all? ? {:disabled => "disabled"} : {}) %>
|
<%= check_box_tag 'project[issue_custom_field_ids][]', custom_field.id, (@project.all_issue_custom_fields.include? custom_field), (custom_field.is_for_all? ? {:disabled => "disabled"} : {}) %>
|
||||||
@@ -46,4 +60,5 @@
|
|||||||
<%= hidden_field_tag 'project[issue_custom_field_ids][]', '' %>
|
<%= hidden_field_tag 'project[issue_custom_field_ids][]', '' %>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
<% end %>
|
||||||
<!--[eoform:project]-->
|
<!--[eoform:project]-->
|
||||||
@@ -2,18 +2,6 @@
|
|||||||
|
|
||||||
<% labelled_tabular_form_for :project, @project, :url => { :action => "create" } do |f| %>
|
<% labelled_tabular_form_for :project, @project, :url => { :action => "create" } do |f| %>
|
||||||
<%= render :partial => 'form', :locals => { :f => f } %>
|
<%= render :partial => 'form', :locals => { :f => f } %>
|
||||||
|
|
||||||
<fieldset class="box"><legend><%= l(:label_module_plural) %></legend>
|
|
||||||
<% Redmine::AccessControl.available_project_modules.each do |m| %>
|
|
||||||
<label class="floating">
|
|
||||||
<%= check_box_tag 'enabled_modules[]', m, @project.module_enabled?(m) %>
|
|
||||||
<%= l_or_humanize(m, :prefix => "project_module_") %>
|
|
||||||
</label>
|
|
||||||
<% end %>
|
|
||||||
<%= hidden_field_tag 'enabled_modules[]', '' %>
|
|
||||||
|
|
||||||
</fieldset>
|
|
||||||
|
|
||||||
<%= submit_tag l(:button_save) %>
|
<%= submit_tag l(:button_save) %>
|
||||||
<%= javascript_tag "Form.Element.focus('project_name');" %>
|
<%= javascript_tag "Form.Element.focus('project_name');" %>
|
||||||
<% end %>
|
<% end %>
|
||||||
@@ -56,8 +56,8 @@
|
|||||||
<div class="splitcontentright">
|
<div class="splitcontentright">
|
||||||
<% if roles.any? && principals.any? %>
|
<% if roles.any? && principals.any? %>
|
||||||
<% remote_form_for(:member, @member, :url => {:controller => 'members', :action => 'new', :id => @project}, :method => :post,
|
<% remote_form_for(:member, @member, :url => {:controller => 'members', :action => 'new', :id => @project}, :method => :post,
|
||||||
:loading => "$('member-add-submit').disable()",
|
:loading => '$(\'member-add-submit\').disable();',
|
||||||
:complete => "$('member-add-submit').enable()") do |f| %>
|
:complete => 'if($(\'member-add-submit\')) $(\'member-add-submit\').enable();') do |f| %>
|
||||||
<fieldset><legend><%=l(:label_member_new)%></legend>
|
<fieldset><legend><%=l(:label_member_new)%></legend>
|
||||||
|
|
||||||
<p><%= label_tag "principal_search", l(:label_principal_search) %><%= text_field_tag 'principal_search', nil %></p>
|
<p><%= label_tag "principal_search", l(:label_principal_search) %><%= text_field_tag 'principal_search', nil %></p>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
<legend><%= l(:text_select_project_modules) %></legend>
|
<legend><%= l(:text_select_project_modules) %></legend>
|
||||||
|
|
||||||
<% Redmine::AccessControl.available_project_modules.each do |m| %>
|
<% Redmine::AccessControl.available_project_modules.each do |m| %>
|
||||||
<p><label><%= check_box_tag 'enabled_modules[]', m, @project.module_enabled?(m) -%>
|
<p><label><%= check_box_tag 'enabled_module_names[]', m, @project.module_enabled?(m) -%>
|
||||||
<%= l_or_humanize(m, :prefix => "project_module_") %></label></p>
|
<%= l_or_humanize(m, :prefix => "project_module_") %></label></p>
|
||||||
<% end %>
|
<% end %>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
</td>
|
</td>
|
||||||
<td class="size"><%= (entry.size ? number_to_human_size(entry.size) : "?") unless entry.is_dir? %></td>
|
<td class="size"><%= (entry.size ? number_to_human_size(entry.size) : "?") unless entry.is_dir? %></td>
|
||||||
<% changeset = @project.repository.changesets.find_by_revision(entry.lastrev.identifier) if entry.lastrev && entry.lastrev.identifier %>
|
<% changeset = @project.repository.changesets.find_by_revision(entry.lastrev.identifier) if entry.lastrev && entry.lastrev.identifier %>
|
||||||
<td class="revision"><%= link_to_revision(changeset.revision, @project) if changeset %></td>
|
<td class="revision"><%= link_to_revision(changeset, @project) if changeset %></td>
|
||||||
<td class="age"><%= distance_of_time_in_words(entry.lastrev.time, Time.now) if entry.lastrev && entry.lastrev.time %></td>
|
<td class="age"><%= distance_of_time_in_words(entry.lastrev.time, Time.now) if entry.lastrev && entry.lastrev.time %></td>
|
||||||
<td class="author"><%= changeset.nil? ? h(entry.lastrev.author.to_s.split('<').first) : changeset.author if entry.lastrev %></td>
|
<td class="author"><%= changeset.nil? ? h(entry.lastrev.author.to_s.split('<').first) : changeset.author if entry.lastrev %></td>
|
||||||
<td class="comments"><%=h truncate(changeset.comments, :length => 50) unless changeset.nil? %></td>
|
<td class="comments"><%=h truncate(changeset.comments, :length => 50) unless changeset.nil? %></td>
|
||||||
|
|||||||
@@ -13,9 +13,9 @@
|
|||||||
<% line_num = 1 %>
|
<% line_num = 1 %>
|
||||||
<% revisions.each do |changeset| %>
|
<% revisions.each do |changeset| %>
|
||||||
<tr class="changeset <%= cycle 'odd', 'even' %>">
|
<tr class="changeset <%= cycle 'odd', 'even' %>">
|
||||||
<td class="id"><%= link_to_revision(changeset.revision, project) %></td>
|
<td class="id"><%= link_to_revision(changeset, project) %></td>
|
||||||
<td class="checkbox"><%= radio_button_tag('rev', changeset.revision, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('cbto-#{line_num+1}').checked=true;") if show_diff && (line_num < revisions.size) %></td>
|
<td class="checkbox"><%= radio_button_tag('rev', changeset.identifier, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('cbto-#{line_num+1}').checked=true;") if show_diff && (line_num < revisions.size) %></td>
|
||||||
<td class="checkbox"><%= radio_button_tag('rev_to', changeset.revision, (line_num==2), :id => "cbto-#{line_num}", :onclick => "if ($('cb-#{line_num}').checked==true) {$('cb-#{line_num-1}').checked=true;}") if show_diff && (line_num > 1) %></td>
|
<td class="checkbox"><%= radio_button_tag('rev_to', changeset.identifier, (line_num==2), :id => "cbto-#{line_num}", :onclick => "if ($('cb-#{line_num}').checked==true) {$('cb-#{line_num-1}').checked=true;}") if show_diff && (line_num > 1) %></td>
|
||||||
<td class="committed_on"><%= format_time(changeset.committed_on) %></td>
|
<td class="committed_on"><%= format_time(changeset.committed_on) %></td>
|
||||||
<td class="author"><%=h changeset.author %></td>
|
<td class="author"><%=h changeset.author %></td>
|
||||||
<td class="comments"><%= textilizable(truncate_at_line_break(changeset.comments)) %></td>
|
<td class="comments"><%= textilizable(truncate_at_line_break(changeset.comments)) %></td>
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
<tr class="bloc-<%= revision.nil? ? 0 : colors[revision.identifier || revision.revision] %>">
|
<tr class="bloc-<%= revision.nil? ? 0 : colors[revision.identifier || revision.revision] %>">
|
||||||
<th class="line-num" id="L<%= line_num %>"><a href="#L<%= line_num %>"><%= line_num %></a></th>
|
<th class="line-num" id="L<%= line_num %>"><a href="#L<%= line_num %>"><%= line_num %></a></th>
|
||||||
<td class="revision">
|
<td class="revision">
|
||||||
<%= (revision.identifier ? link_to(format_revision(revision.identifier), :action => 'revision', :id => @project, :rev => revision.identifier) : format_revision(revision.revision)) if revision %></td>
|
<%= (revision.identifier ? link_to_revision(revision, @project) : format_revision(revision)) if revision %></td>
|
||||||
<td class="author"><%= h(revision.author.to_s.split('<').first) if revision %></td>
|
<td class="author"><%= h(revision.author.to_s.split('<').first) if revision %></td>
|
||||||
<td class="line-code"><pre><%= line %></pre></td>
|
<td class="line-code"><pre><%= line %></pre></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<h2><%= l(:label_revision) %> <%= format_revision(@rev_to) + ':' if @rev_to %><%= format_revision(@rev) %> <%=h @path %></h2>
|
<h2><%= l(:label_revision) %> <%= format_revision(@changeset_to) + ':' if @changeset_to %><%= format_revision(@changeset) %> <%=h @path %></h2>
|
||||||
|
|
||||||
<!-- Choose view type -->
|
<!-- Choose view type -->
|
||||||
<% form_tag({:path => to_path_param(@path)}, :method => 'get') do %>
|
<% form_tag({:path => to_path_param(@path)}, :method => 'get') do %>
|
||||||
|
|||||||
@@ -1,25 +1,25 @@
|
|||||||
<div class="contextual">
|
<div class="contextual">
|
||||||
«
|
«
|
||||||
<% unless @changeset.previous.nil? -%>
|
<% unless @changeset.previous.nil? -%>
|
||||||
<%= link_to_revision(@changeset.previous.revision, @project, :text => l(:label_previous)) %>
|
<%= link_to_revision(@changeset.previous, @project, :text => l(:label_previous)) %>
|
||||||
<% else -%>
|
<% else -%>
|
||||||
<%= l(:label_previous) %>
|
<%= l(:label_previous) %>
|
||||||
<% end -%>
|
<% end -%>
|
||||||
|
|
|
|
||||||
<% unless @changeset.next.nil? -%>
|
<% unless @changeset.next.nil? -%>
|
||||||
<%= link_to_revision(@changeset.next.revision, @project, :text => l(:label_next)) %>
|
<%= link_to_revision(@changeset.next, @project, :text => l(:label_next)) %>
|
||||||
<% else -%>
|
<% else -%>
|
||||||
<%= l(:label_next) %>
|
<%= l(:label_next) %>
|
||||||
<% end -%>
|
<% end -%>
|
||||||
»
|
»
|
||||||
|
|
||||||
<% form_tag({:controller => 'repositories', :action => 'revision', :id => @project, :rev => nil}, :method => :get) do %>
|
<% form_tag({:controller => 'repositories', :action => 'revision', :id => @project, :rev => nil}, :method => :get) do %>
|
||||||
<%= text_field_tag 'rev', @rev[0,8], :size => 8 %>
|
<%= text_field_tag 'rev', @rev, :size => 8 %>
|
||||||
<%= submit_tag 'OK', :name => nil %>
|
<%= submit_tag 'OK', :name => nil %>
|
||||||
<% end %>
|
<% end %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h2><%= l(:label_revision) %> <%= format_revision(@changeset.revision) %></h2>
|
<h2><%= l(:label_revision) %> <%= format_revision(@changeset) %></h2>
|
||||||
|
|
||||||
<p><% if @changeset.scmid %>ID: <%= @changeset.scmid %><br /><% end %>
|
<p><% if @changeset.scmid %>ID: <%= @changeset.scmid %><br /><% end %>
|
||||||
<span class="author"><%= authoring(@changeset.committed_on, @changeset.author) %></span></p>
|
<span class="author"><%= authoring(@changeset.committed_on, @changeset.author) %></span></p>
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
<li class="change change-D"><%= l(:label_deleted) %></li>
|
<li class="change change-D"><%= l(:label_deleted) %></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<p><%= link_to(l(:label_view_diff), :action => 'diff', :id => @project, :path => "", :rev => @changeset.revision) if @changeset.changes.any? %></p>
|
<p><%= link_to(l(:label_view_diff), :action => 'diff', :id => @project, :path => "", :rev => @changeset.identifier) if @changeset.changes.any? %></p>
|
||||||
|
|
||||||
<div class="changeset-changes">
|
<div class="changeset-changes">
|
||||||
<%= render_changeset_changes %>
|
<%= render_changeset_changes %>
|
||||||
@@ -56,4 +56,4 @@
|
|||||||
<%= stylesheet_link_tag "scm" %>
|
<%= stylesheet_link_tag "scm" %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<% html_title("#{l(:label_revision)} #{@changeset.revision}") -%>
|
<% html_title("#{l(:label_revision)} #{format_revision(@changeset)}") -%>
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
<p><%= setting_check_box :plain_text_mail %></p>
|
<p><%= setting_check_box :plain_text_mail %></p>
|
||||||
|
|
||||||
<p><%= setting_select(:default_notification_option, User::MAIL_NOTIFICATION_OPTIONS.collect {|o| [l(o.last), o.first.to_s]}) %></p>
|
<p><%= setting_select(:default_notification_option, User.valid_notification_options.collect {|o| [l(o.last), o.first.to_s]}) %></p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
<% form_tag({:action => "diff"}, :method => :get) do %>
|
<% form_tag({:action => "diff"}, :method => :get) do %>
|
||||||
<%= hidden_field_tag('project_id', h(@project.to_param)) %>
|
<%= hidden_field_tag('project_id', h(@project.to_param)) %>
|
||||||
<table class="list">
|
<table class="list wiki-page-versions">
|
||||||
<thead><tr>
|
<thead><tr>
|
||||||
<th>#</th>
|
<th>#</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
@@ -18,14 +18,14 @@
|
|||||||
<% show_diff = @versions.size > 1 %>
|
<% show_diff = @versions.size > 1 %>
|
||||||
<% line_num = 1 %>
|
<% line_num = 1 %>
|
||||||
<% @versions.each do |ver| %>
|
<% @versions.each do |ver| %>
|
||||||
<tr class="<%= cycle("odd", "even") %>">
|
<tr class="wiki-page-version <%= cycle("odd", "even") %>">
|
||||||
<td class="id"><%= link_to ver.version, :action => 'show', :id => @page.title, :project_id => @page.project, :version => ver.version %></td>
|
<td class="id"><%= link_to ver.version, :action => 'show', :id => @page.title, :project_id => @page.project, :version => ver.version %></td>
|
||||||
<td class="checkbox"><%= radio_button_tag('version', ver.version, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('cbto-#{line_num+1}').checked=true;") if show_diff && (line_num < @versions.size) %></td>
|
<td class="checkbox"><%= radio_button_tag('version', ver.version, (line_num==1), :id => "cb-#{line_num}", :onclick => "$('cbto-#{line_num+1}').checked=true;") if show_diff && (line_num < @versions.size) %></td>
|
||||||
<td class="checkbox"><%= radio_button_tag('version_from', ver.version, (line_num==2), :id => "cbto-#{line_num}") if show_diff && (line_num > 1) %></td>
|
<td class="checkbox"><%= radio_button_tag('version_from', ver.version, (line_num==2), :id => "cbto-#{line_num}") if show_diff && (line_num > 1) %></td>
|
||||||
<td align="center"><%= format_time(ver.updated_on) %></td>
|
<td class="updated_on"><%= format_time(ver.updated_on) %></td>
|
||||||
<td><%= link_to_user ver.author %></td>
|
<td class="author"><%= link_to_user ver.author %></td>
|
||||||
<td><%=h ver.comments %></td>
|
<td class="comments"><%=h ver.comments %></td>
|
||||||
<td align="center"><%= link_to l(:button_annotate), :action => 'annotate', :id => @page.title, :version => ver.version %></td>
|
<td class="buttons"><%= link_to l(:button_annotate), :action => 'annotate', :id => @page.title, :version => ver.version %></td>
|
||||||
</tr>
|
</tr>
|
||||||
<% line_num += 1 %>
|
<% line_num += 1 %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ Rails::Initializer.run do |config|
|
|||||||
config.action_mailer.perform_deliveries = false
|
config.action_mailer.perform_deliveries = false
|
||||||
|
|
||||||
config.gem 'rubytree', :lib => 'tree'
|
config.gem 'rubytree', :lib => 'tree'
|
||||||
|
config.gem 'coderay', :version => '~>0.9.7'
|
||||||
|
|
||||||
# Load any local configuration that is kept out of source control
|
# Load any local configuration that is kept out of source control
|
||||||
# (e.g. gems, patches).
|
# (e.g. gems, patches).
|
||||||
|
|||||||
+337
-333
@@ -1,11 +1,12 @@
|
|||||||
bg:
|
bg:
|
||||||
|
# Text direction: Left-to-Right (ltr) or Right-to-Left (rtl)
|
||||||
direction: ltr
|
direction: ltr
|
||||||
date:
|
date:
|
||||||
formats:
|
formats:
|
||||||
# Use the strftime parameters for formats.
|
# Use the strftime parameters for formats.
|
||||||
# When no format has been given, it uses default.
|
# When no format has been given, it uses default.
|
||||||
# You can provide other formats here if you like!
|
# You can provide other formats here if you like!
|
||||||
default: "%Y-%m-%d"
|
default: "%d-%m-%Y"
|
||||||
short: "%b %d"
|
short: "%b %d"
|
||||||
long: "%B %d, %Y"
|
long: "%B %d, %Y"
|
||||||
|
|
||||||
@@ -65,6 +66,7 @@ bg:
|
|||||||
other: "почти %{count} години"
|
other: "почти %{count} години"
|
||||||
|
|
||||||
number:
|
number:
|
||||||
|
# Default format for numbers
|
||||||
format:
|
format:
|
||||||
separator: "."
|
separator: "."
|
||||||
delimiter: ""
|
delimiter: ""
|
||||||
@@ -84,6 +86,7 @@ bg:
|
|||||||
gb: "GB"
|
gb: "GB"
|
||||||
tb: "TB"
|
tb: "TB"
|
||||||
|
|
||||||
|
|
||||||
# Used in array.to_sentence.
|
# Used in array.to_sentence.
|
||||||
support:
|
support:
|
||||||
array:
|
array:
|
||||||
@@ -94,8 +97,8 @@ bg:
|
|||||||
errors:
|
errors:
|
||||||
template:
|
template:
|
||||||
header:
|
header:
|
||||||
one: "1 error prohibited this %{model} from being saved"
|
one: "1 грешка попречи този %{model} да бъде записан"
|
||||||
other: "%{count} errors prohibited this %{model} from being saved"
|
other: "%{count} грешки попречиха този %{model} да бъде записан"
|
||||||
messages:
|
messages:
|
||||||
inclusion: "не съществува в списъка"
|
inclusion: "не съществува в списъка"
|
||||||
exclusion: "е запазено"
|
exclusion: "е запазено"
|
||||||
@@ -120,6 +123,7 @@ bg:
|
|||||||
greater_than_start_date: "трябва да е след началната дата"
|
greater_than_start_date: "трябва да е след началната дата"
|
||||||
not_same_project: "не е от същия проект"
|
not_same_project: "не е от същия проект"
|
||||||
circular_dependency: "Тази релация ще доведе до безкрайна зависимост"
|
circular_dependency: "Тази релация ще доведе до безкрайна зависимост"
|
||||||
|
cant_link_an_issue_with_a_descendant: "Една задача не може да бъде свързвана към своя подзадача"
|
||||||
|
|
||||||
actionview_instancetag_blank_option: Изберете
|
actionview_instancetag_blank_option: Изберете
|
||||||
|
|
||||||
@@ -127,7 +131,7 @@ bg:
|
|||||||
general_text_Yes: 'Да'
|
general_text_Yes: 'Да'
|
||||||
general_text_no: 'не'
|
general_text_no: 'не'
|
||||||
general_text_yes: 'да'
|
general_text_yes: 'да'
|
||||||
general_lang_name: 'Bulgarian'
|
general_lang_name: 'Bulgarian (Български)'
|
||||||
general_csv_separator: ','
|
general_csv_separator: ','
|
||||||
general_csv_decimal_separator: '.'
|
general_csv_decimal_separator: '.'
|
||||||
general_csv_encoding: UTF-8
|
general_csv_encoding: UTF-8
|
||||||
@@ -150,24 +154,61 @@ bg:
|
|||||||
notice_file_not_found: Несъществуваща или преместена страница.
|
notice_file_not_found: Несъществуваща или преместена страница.
|
||||||
notice_locking_conflict: Друг потребител променя тези данни в момента.
|
notice_locking_conflict: Друг потребител променя тези данни в момента.
|
||||||
notice_not_authorized: Нямате право на достъп до тази страница.
|
notice_not_authorized: Нямате право на достъп до тази страница.
|
||||||
|
notice_not_authorized_archived_project: Проектът, който се опитвате да видите е архивиран.
|
||||||
notice_email_sent: "Изпратен e-mail на %{value}"
|
notice_email_sent: "Изпратен e-mail на %{value}"
|
||||||
notice_email_error: "Грешка при изпращане на e-mail (%{value})"
|
notice_email_error: "Грешка при изпращане на e-mail (%{value})"
|
||||||
notice_feeds_access_key_reseted: Вашия ключ за RSS достъп беше променен.
|
notice_feeds_access_key_reseted: Вашия ключ за RSS достъп беше променен.
|
||||||
|
notice_api_access_key_reseted: Вашият API ключ за достъп беше изчистен.
|
||||||
|
notice_failed_to_save_issues: "Неуспешен запис на %{count} задачи от %{total} избрани: %{ids}."
|
||||||
|
notice_failed_to_save_members: "Невъзможност за запис на член(ове): %{errors}."
|
||||||
|
notice_no_issue_selected: "Няма избрани задачи."
|
||||||
|
notice_account_pending: "Профилът Ви е създаден и очаква одобрение от администратор."
|
||||||
|
notice_default_data_loaded: Примерната информация е заредена успешно.
|
||||||
|
notice_unable_delete_version: Невъзможност за изтриване на версия
|
||||||
|
notice_unable_delete_time_entry: Невъзможност за изтриване на запис на time log.
|
||||||
|
notice_issue_done_ratios_updated: Обновен процент на завършените задачи.
|
||||||
|
notice_gantt_chart_truncated: Мрежовият график е съкратен, понеже броят на обектите, които могат да бъдат показани е твърде голям (%{max})
|
||||||
|
|
||||||
|
error_can_t_load_default_data: "Грешка при зареждане на примерната информация: %{value}"
|
||||||
error_scm_not_found: Несъществуващ обект в хранилището.
|
error_scm_not_found: Несъществуващ обект в хранилището.
|
||||||
error_scm_command_failed: "Грешка при опит за комуникация с хранилище: %{value}"
|
error_scm_command_failed: "Грешка при опит за комуникация с хранилище: %{value}"
|
||||||
|
error_scm_annotate: "Обектът не съществува или не може да бъде анотиран."
|
||||||
|
error_issue_not_found_in_project: 'Задачата не е намерена или не принадлежи на този проект'
|
||||||
|
error_no_tracker_in_project: Няма асоциирани тракери с този проект. Проверете настройките на проекта.
|
||||||
|
error_no_default_issue_status: Няма установено подразбиращо се състояние за задачите. Моля проверете вашата конфигурация (Вижте "Администрация -> Състояния на задачи").
|
||||||
|
error_can_not_delete_custom_field: Невъзможност за изтриване на потребителско поле
|
||||||
|
error_can_not_delete_tracker: Този тракер съдържа задачи и не може да бъде изтрит.
|
||||||
|
error_can_not_remove_role: Тази роля се използва и не може да бъде изтрита.
|
||||||
|
error_can_not_reopen_issue_on_closed_version: Задача, асоциирана със затворена версия не може да бъде отворена отново
|
||||||
|
error_can_not_archive_project: Този проект не може да бъде архивиран
|
||||||
|
error_issue_done_ratios_not_updated: Процентът на завършените задачи не е обновен.
|
||||||
|
error_workflow_copy_source: Моля изберете source тракер или роля
|
||||||
|
error_workflow_copy_target: Моля изберете тракер(и) и роля (роли).
|
||||||
|
error_unable_delete_issue_status: Невъзможност за изтриване на състояние на задача
|
||||||
|
error_unable_to_connect: Невъзможност за свързване с (%{value})
|
||||||
|
warning_attachments_not_saved: "%{count} файла не бяха записани."
|
||||||
|
|
||||||
mail_subject_lost_password: "Вашата парола (%{value})"
|
mail_subject_lost_password: "Вашата парола (%{value})"
|
||||||
mail_body_lost_password: 'За да смените паролата си, използвайте следния линк:'
|
mail_body_lost_password: 'За да смените паролата си, използвайте следния линк:'
|
||||||
mail_subject_register: "Активация на профил (%{value})"
|
mail_subject_register: "Активация на профил (%{value})"
|
||||||
mail_body_register: 'За да активирате профила си използвайте следния линк:'
|
mail_body_register: 'За да активирате профила си използвайте следния линк:'
|
||||||
|
mail_body_account_information_external: "Можете да използвате вашия %{value} профил за вход."
|
||||||
|
mail_body_account_information: Информацията за профила ви
|
||||||
|
mail_subject_account_activation_request: "Заявка за активиране на профил в %{value}"
|
||||||
|
mail_body_account_activation_request: "Има новорегистриран потребител (%{value}), очакващ вашето одобрение:"
|
||||||
|
mail_subject_reminder: "%{count} задачи с краен срок с следващите %{days} дни"
|
||||||
|
mail_body_reminder: "%{count} задачи, назначени на вас са с краен срок в следващите %{days} дни:"
|
||||||
|
mail_subject_wiki_content_added: "Wiki страницата '%{id}' беше добавена"
|
||||||
|
mail_body_wiki_content_added: Wiki страницата '%{id}' беше добавена от %{author}.
|
||||||
|
mail_subject_wiki_content_updated: "Wiki страницата '%{id}' не беше обновена"
|
||||||
|
mail_body_wiki_content_updated: Wiki страницата '%{id}' беше обновена от %{author}.
|
||||||
|
|
||||||
gui_validation_error: 1 грешка
|
gui_validation_error: 1 грешка
|
||||||
gui_validation_error_plural: "%{count} грешки"
|
gui_validation_error_plural: "%{count} грешки"
|
||||||
|
|
||||||
field_name: Име
|
field_name: Име
|
||||||
field_description: Описание
|
field_description: Описание
|
||||||
field_summary: Групиран изглед
|
field_summary: Анотация
|
||||||
field_is_required: Задължително
|
field_is_required: Задължително
|
||||||
field_firstname: Име
|
field_firstname: Име
|
||||||
field_lastname: Фамилия
|
field_lastname: Фамилия
|
||||||
@@ -200,6 +241,7 @@ bg:
|
|||||||
field_priority: Приоритет
|
field_priority: Приоритет
|
||||||
field_fixed_version: Планувана версия
|
field_fixed_version: Планувана версия
|
||||||
field_user: Потребител
|
field_user: Потребител
|
||||||
|
field_principal: Principal
|
||||||
field_role: Роля
|
field_role: Роля
|
||||||
field_homepage: Начална страница
|
field_homepage: Начална страница
|
||||||
field_is_public: Публичен
|
field_is_public: Публичен
|
||||||
@@ -243,7 +285,24 @@ bg:
|
|||||||
field_assignable: Възможно е възлагане на задачи за тази роля
|
field_assignable: Възможно е възлагане на задачи за тази роля
|
||||||
field_redirect_existing_links: Пренасочване на съществуващи линкове
|
field_redirect_existing_links: Пренасочване на съществуващи линкове
|
||||||
field_estimated_hours: Изчислено време
|
field_estimated_hours: Изчислено време
|
||||||
|
field_column_names: Колони
|
||||||
|
field_time_entries: Log time
|
||||||
|
field_time_zone: Часова зона
|
||||||
|
field_searchable: С възможност за търсене
|
||||||
field_default_value: Стойност по подразбиране
|
field_default_value: Стойност по подразбиране
|
||||||
|
field_comments_sorting: Сортиране на коментарите
|
||||||
|
field_parent_title: Родителска страница
|
||||||
|
field_editable: Editable
|
||||||
|
field_watcher: Наблюдател
|
||||||
|
field_identity_url: OpenID URL
|
||||||
|
field_content: Съдържание
|
||||||
|
field_group_by: Групиране на резултатите по
|
||||||
|
field_sharing: Sharing
|
||||||
|
field_parent_issue: Родителска задача
|
||||||
|
field_member_of_group: Член на група
|
||||||
|
field_assigned_to_role: Assignee's role
|
||||||
|
field_text: Текстово поле
|
||||||
|
field_visible: Видим
|
||||||
|
|
||||||
setting_app_title: Заглавие
|
setting_app_title: Заглавие
|
||||||
setting_app_subtitle: Описание
|
setting_app_subtitle: Описание
|
||||||
@@ -254,26 +313,132 @@ bg:
|
|||||||
setting_attachment_max_size: Максимална големина на прикачен файл
|
setting_attachment_max_size: Максимална големина на прикачен файл
|
||||||
setting_issues_export_limit: Максимален брой задачи за експорт
|
setting_issues_export_limit: Максимален брой задачи за експорт
|
||||||
setting_mail_from: E-mail адрес за емисии
|
setting_mail_from: E-mail адрес за емисии
|
||||||
|
setting_bcc_recipients: Получатели на скрито копие (bcc)
|
||||||
|
setting_plain_text_mail: само чист текст (без HTML)
|
||||||
setting_host_name: Хост
|
setting_host_name: Хост
|
||||||
setting_text_formatting: Форматиране на текста
|
setting_text_formatting: Форматиране на текста
|
||||||
setting_wiki_compression: Wiki компресиране на историята
|
setting_wiki_compression: Wiki компресиране на историята
|
||||||
setting_feeds_limit: Максимален брой за емисии
|
setting_feeds_limit: Максимален брой за емисии
|
||||||
|
setting_default_projects_public: Новите проекти са публични по подразбиране
|
||||||
setting_autofetch_changesets: Автоматично обработване на ревизиите
|
setting_autofetch_changesets: Автоматично обработване на ревизиите
|
||||||
setting_sys_api_enabled: Разрешаване на WS за управление
|
setting_sys_api_enabled: Разрешаване на WS за управление
|
||||||
setting_commit_ref_keywords: Отбелязващи ключови думи
|
setting_commit_ref_keywords: Отбелязващи ключови думи
|
||||||
setting_commit_fix_keywords: Приключващи ключови думи
|
setting_commit_fix_keywords: Приключващи ключови думи
|
||||||
setting_autologin: Автоматичен вход
|
setting_autologin: Автоматичен вход
|
||||||
setting_date_format: Формат на датата
|
setting_date_format: Формат на датата
|
||||||
|
setting_time_format: Формат на часа
|
||||||
setting_cross_project_issue_relations: Релации на задачи между проекти
|
setting_cross_project_issue_relations: Релации на задачи между проекти
|
||||||
|
setting_issue_list_default_columns: Показвани колони по подразбиране
|
||||||
|
setting_repositories_encodings: Кодови таблици
|
||||||
|
setting_commit_logs_encoding: Кодова таблица на съобщенията при поверяване
|
||||||
|
setting_emails_header: Emails header
|
||||||
|
setting_emails_footer: Подтекст за e-mail
|
||||||
|
setting_protocol: Протокол
|
||||||
|
setting_per_page_options: Опции за страниране
|
||||||
|
setting_user_format: Потребителски формат
|
||||||
|
setting_activity_days_default: Брой дни показвани на таб Дейност
|
||||||
|
setting_display_subprojects_issues: Показване на подпроектите в проектите по подразбиране
|
||||||
|
setting_enabled_scm: Разрешена SCM
|
||||||
|
setting_mail_handler_body_delimiters: Отрязване на e-mail-ите след един от тези редове
|
||||||
|
setting_mail_handler_api_enabled: Разрешаване на WS за входящи e-mail-и
|
||||||
|
setting_mail_handler_api_key: API ключ
|
||||||
|
setting_sequential_project_identifiers: Генериране на последователни проектни идентификатори
|
||||||
|
setting_gravatar_enabled: Използване на портребителски икони от Gravatar
|
||||||
|
setting_gravatar_default: Подразбиращо се изображение от Gravatar
|
||||||
|
setting_diff_max_lines_displayed: Максимален брой показани diff редове
|
||||||
|
setting_file_max_size_displayed: Максимален размер на текстовите файлове, показвани inline
|
||||||
|
setting_repository_log_display_limit: Максимален брой на показванете ревизии в лог файла
|
||||||
|
setting_openid: Рарешаване на OpenID вход и регистрация
|
||||||
|
setting_password_min_length: Минимална дължина на парола
|
||||||
|
setting_new_project_user_role_id: Роля, давана на потребител, създаващ проекти, който не е администратор
|
||||||
|
setting_default_projects_modules: Активирани модули по подразбиране за нов проект
|
||||||
|
setting_issue_done_ratio: Изчисление на процента на готови задачи с
|
||||||
|
setting_issue_done_ratio_issue_field: Използване на поле '% Прогрес'
|
||||||
|
setting_issue_done_ratio_issue_status: Използване на състоянието на задачите
|
||||||
|
setting_start_of_week: Първи ден на седмицата
|
||||||
|
setting_rest_api_enabled: Разрешаване на REST web сървис
|
||||||
|
setting_cache_formatted_text: Cache formatted text
|
||||||
|
setting_default_notification_option: Подразбиращ се начин за известяване
|
||||||
|
setting_commit_logtime_enabled: Разрешаване на отчитането на работното време
|
||||||
|
setting_commit_logtime_activity_id: Дейност при отчитане на работното време
|
||||||
|
setting_gantt_items_limit: Максимален брой обекти, които да се показват в мрежов график
|
||||||
|
|
||||||
|
permission_add_project: Създаване на проект
|
||||||
|
permission_add_subprojects: Създаване на подпроекти
|
||||||
|
permission_edit_project: Редактиране на проект
|
||||||
|
permission_select_project_modules: Избор на проектни модули
|
||||||
|
permission_manage_members: Управление на членовете (на екип)
|
||||||
|
permission_manage_project_activities: Управление на дейностите на проекта
|
||||||
|
permission_manage_versions: Управление на версиите
|
||||||
|
permission_manage_categories: Управление на категориите
|
||||||
|
permission_view_issues: Разглеждане на задачите
|
||||||
|
permission_add_issues: Добавяне на задачи
|
||||||
|
permission_edit_issues: Редактиране на задачи
|
||||||
|
permission_manage_issue_relations: Управление на връзките между задачите
|
||||||
|
permission_add_issue_notes: Добаване на бележки
|
||||||
|
permission_edit_issue_notes: Редактиране на бележки
|
||||||
|
permission_edit_own_issue_notes: Редактиране на собствени бележки
|
||||||
|
permission_move_issues: Преместване на задачи
|
||||||
|
permission_delete_issues: Изтриване на задачи
|
||||||
|
permission_manage_public_queries: Управление на публичните заявки
|
||||||
|
permission_save_queries: Запис на запитвания (queries)
|
||||||
|
permission_view_gantt: Разглеждане на мрежов график
|
||||||
|
permission_view_calendar: Разглеждане на календари
|
||||||
|
permission_view_issue_watchers: Разглеждане на списък с наблюдатели
|
||||||
|
permission_add_issue_watchers: Добавяне на наблюдатели
|
||||||
|
permission_delete_issue_watchers: Изтриване на наблюдатели
|
||||||
|
permission_log_time: Log spent time
|
||||||
|
permission_view_time_entries: Разглеждане на изразходваното време
|
||||||
|
permission_edit_time_entries: Редактиране на time logs
|
||||||
|
permission_edit_own_time_entries: Редактиране на собствените time logs
|
||||||
|
permission_manage_news: Управление на новини
|
||||||
|
permission_comment_news: Коментиране на новини
|
||||||
|
permission_manage_documents: Управление на документи
|
||||||
|
permission_view_documents: Разглеждане на документи
|
||||||
|
permission_manage_files: Управление на файлове
|
||||||
|
permission_view_files: Разглеждане на файлове
|
||||||
|
permission_manage_wiki: Управление на wiki
|
||||||
|
permission_rename_wiki_pages: Преименуване на wiki страници
|
||||||
|
permission_delete_wiki_pages: Изтриване на wiki страници
|
||||||
|
permission_view_wiki_pages: Разглеждане на wiki
|
||||||
|
permission_view_wiki_edits: Разглеждане на wiki история
|
||||||
|
permission_edit_wiki_pages: Редактиране на wiki страници
|
||||||
|
permission_delete_wiki_pages_attachments: Изтриване на прикачени файлове към wiki страници
|
||||||
|
permission_protect_wiki_pages: Заключване на wiki страници
|
||||||
|
permission_manage_repository: Управление на хранилища
|
||||||
|
permission_browse_repository: Разглеждане на хранилища
|
||||||
|
permission_view_changesets: Разглеждане на changesets
|
||||||
|
permission_commit_access: Поверяване
|
||||||
|
permission_manage_boards: Управление на boards
|
||||||
|
permission_view_messages: Разглеждане на съобщения
|
||||||
|
permission_add_messages: Публикуване на съобщения
|
||||||
|
permission_edit_messages: Редактиране на съобщения
|
||||||
|
permission_edit_own_messages: Редактиране на собствени съобщения
|
||||||
|
permission_delete_messages: Изтриване на съобщения
|
||||||
|
permission_delete_own_messages: Изтриване на собствени съобщения
|
||||||
|
permission_export_wiki_pages: Експорт на wiki страници
|
||||||
|
permission_manage_subtasks: Управление на подзадачите
|
||||||
|
|
||||||
|
project_module_issue_tracking: Тракинг
|
||||||
|
project_module_time_tracking: Отделяне на време
|
||||||
|
project_module_news: Новини
|
||||||
|
project_module_documents: Документи
|
||||||
|
project_module_files: Файлове
|
||||||
|
project_module_wiki: Wiki
|
||||||
|
project_module_repository: Хранилище
|
||||||
|
project_module_boards: Форуми
|
||||||
|
project_module_calendar: Календар
|
||||||
|
project_module_gantt: Мрежов график
|
||||||
|
|
||||||
label_user: Потребител
|
label_user: Потребител
|
||||||
label_user_plural: Потребители
|
label_user_plural: Потребители
|
||||||
label_user_new: Нов потребител
|
label_user_new: Нов потребител
|
||||||
|
label_user_anonymous: Анонимен
|
||||||
label_project: Проект
|
label_project: Проект
|
||||||
label_project_new: Нов проект
|
label_project_new: Нов проект
|
||||||
label_project_plural: Проекти
|
label_project_plural: Проекти
|
||||||
label_x_projects:
|
label_x_projects:
|
||||||
zero: 0 проекти
|
zero: 0 проекта
|
||||||
one: 1 проект
|
one: 1 проект
|
||||||
other: "%{count} проекта"
|
other: "%{count} проекта"
|
||||||
label_project_all: Всички проекти
|
label_project_all: Всички проекти
|
||||||
@@ -282,9 +447,13 @@ bg:
|
|||||||
label_issue_new: Нова задача
|
label_issue_new: Нова задача
|
||||||
label_issue_plural: Задачи
|
label_issue_plural: Задачи
|
||||||
label_issue_view_all: Всички задачи
|
label_issue_view_all: Всички задачи
|
||||||
|
label_issues_by: "Задачи по %{value}"
|
||||||
|
label_issue_added: Добавена задача
|
||||||
|
label_issue_updated: Обновена задача
|
||||||
label_document: Документ
|
label_document: Документ
|
||||||
label_document_new: Нов документ
|
label_document_new: Нов документ
|
||||||
label_document_plural: Документи
|
label_document_plural: Документи
|
||||||
|
label_document_added: Добавен документ
|
||||||
label_role: Роля
|
label_role: Роля
|
||||||
label_role_plural: Роли
|
label_role_plural: Роли
|
||||||
label_role_new: Нова роля
|
label_role_new: Нова роля
|
||||||
@@ -311,11 +480,13 @@ bg:
|
|||||||
label_information_plural: Информация
|
label_information_plural: Информация
|
||||||
label_please_login: Вход
|
label_please_login: Вход
|
||||||
label_register: Регистрация
|
label_register: Регистрация
|
||||||
|
label_login_with_open_id_option: или вход чрез OpenID
|
||||||
label_password_lost: Забравена парола
|
label_password_lost: Забравена парола
|
||||||
label_home: Начало
|
label_home: Начало
|
||||||
label_my_page: Лична страница
|
label_my_page: Лична страница
|
||||||
label_my_account: Профил
|
label_my_account: Профил
|
||||||
label_my_projects: Проекти, в които участвам
|
label_my_projects: Проекти, в които участвам
|
||||||
|
label_my_page_block: Блокове в личната страница
|
||||||
label_administration: Администрация
|
label_administration: Администрация
|
||||||
label_login: Вход
|
label_login: Вход
|
||||||
label_logout: Изход
|
label_logout: Изход
|
||||||
@@ -325,6 +496,8 @@ bg:
|
|||||||
label_last_login: Последно свързване
|
label_last_login: Последно свързване
|
||||||
label_registered_on: Регистрация
|
label_registered_on: Регистрация
|
||||||
label_activity: Дейност
|
label_activity: Дейност
|
||||||
|
label_overall_activity: Цялостна дейност
|
||||||
|
label_user_activity: "Активност на %{value}"
|
||||||
label_new: Нов
|
label_new: Нов
|
||||||
label_logged_as: Здравейте,
|
label_logged_as: Здравейте,
|
||||||
label_environment: Среда
|
label_environment: Среда
|
||||||
@@ -333,10 +506,13 @@ bg:
|
|||||||
label_auth_source_new: Нов начин на оторизация
|
label_auth_source_new: Нов начин на оторизация
|
||||||
label_auth_source_plural: Начини на оторизация
|
label_auth_source_plural: Начини на оторизация
|
||||||
label_subproject_plural: Подпроекти
|
label_subproject_plural: Подпроекти
|
||||||
|
label_subproject_new: Нов подпроект
|
||||||
|
label_and_its_subprojects: "%{value} и неговите подпроекти"
|
||||||
label_min_max_length: Минимална - максимална дължина
|
label_min_max_length: Минимална - максимална дължина
|
||||||
label_list: Списък
|
label_list: Списък
|
||||||
label_date: Дата
|
label_date: Дата
|
||||||
label_integer: Целочислен
|
label_integer: Целочислен
|
||||||
|
label_float: Дробно
|
||||||
label_boolean: Чекбокс
|
label_boolean: Чекбокс
|
||||||
label_string: Текст
|
label_string: Текст
|
||||||
label_text: Дълъг текст
|
label_text: Дълъг текст
|
||||||
@@ -351,6 +527,7 @@ bg:
|
|||||||
label_attachment_new: Нов файл
|
label_attachment_new: Нов файл
|
||||||
label_attachment_delete: Изтриване
|
label_attachment_delete: Изтриване
|
||||||
label_attachment_plural: Файлове
|
label_attachment_plural: Файлове
|
||||||
|
label_file_added: Добавен файл
|
||||||
label_report: Справка
|
label_report: Справка
|
||||||
label_report_plural: Справки
|
label_report_plural: Справки
|
||||||
label_news: Новини
|
label_news: Новини
|
||||||
@@ -358,11 +535,13 @@ bg:
|
|||||||
label_news_plural: Новини
|
label_news_plural: Новини
|
||||||
label_news_latest: Последни новини
|
label_news_latest: Последни новини
|
||||||
label_news_view_all: Виж всички
|
label_news_view_all: Виж всички
|
||||||
|
label_news_added: Добавена новина
|
||||||
label_settings: Настройки
|
label_settings: Настройки
|
||||||
label_overview: Общ изглед
|
label_overview: Общ изглед
|
||||||
label_version: Версия
|
label_version: Версия
|
||||||
label_version_new: Нова версия
|
label_version_new: Нова версия
|
||||||
label_version_plural: Версии
|
label_version_plural: Версии
|
||||||
|
label_close_versions: Затваряне на завършените версии
|
||||||
label_confirmation: Одобрение
|
label_confirmation: Одобрение
|
||||||
label_export_to: Експорт към
|
label_export_to: Експорт към
|
||||||
label_read: Read...
|
label_read: Read...
|
||||||
@@ -389,6 +568,7 @@ bg:
|
|||||||
label_new_statuses_allowed: Позволени състояния
|
label_new_statuses_allowed: Позволени състояния
|
||||||
label_all: всички
|
label_all: всички
|
||||||
label_none: никакви
|
label_none: никакви
|
||||||
|
label_nobody: никой
|
||||||
label_next: Следващ
|
label_next: Следващ
|
||||||
label_previous: Предишен
|
label_previous: Предишен
|
||||||
label_used_by: Използва се от
|
label_used_by: Използва се от
|
||||||
@@ -420,9 +600,19 @@ bg:
|
|||||||
label_not_equals: не е
|
label_not_equals: не е
|
||||||
label_in_less_than: след по-малко от
|
label_in_less_than: след по-малко от
|
||||||
label_in_more_than: след повече от
|
label_in_more_than: след повече от
|
||||||
|
label_greater_or_equal: ">="
|
||||||
|
label_less_or_equal: <=
|
||||||
label_in: в следващите
|
label_in: в следващите
|
||||||
label_today: днес
|
label_today: днес
|
||||||
|
label_all_time: всички
|
||||||
|
label_yesterday: вчера
|
||||||
label_this_week: тази седмица
|
label_this_week: тази седмица
|
||||||
|
label_last_week: последната седмица
|
||||||
|
label_last_n_days: "последните %{count} дни"
|
||||||
|
label_this_month: текущия месец
|
||||||
|
label_last_month: последния месец
|
||||||
|
label_this_year: текущата година
|
||||||
|
label_date_range: Период
|
||||||
label_less_than_ago: преди по-малко от
|
label_less_than_ago: преди по-малко от
|
||||||
label_more_than_ago: преди повече от
|
label_more_than_ago: преди повече от
|
||||||
label_ago: преди
|
label_ago: преди
|
||||||
@@ -430,17 +620,25 @@ bg:
|
|||||||
label_not_contains: не съдържа
|
label_not_contains: не съдържа
|
||||||
label_day_plural: дни
|
label_day_plural: дни
|
||||||
label_repository: Хранилище
|
label_repository: Хранилище
|
||||||
|
label_repository_plural: Хранилища
|
||||||
label_browse: Разглеждане
|
label_browse: Разглеждане
|
||||||
label_modification: "%{count} промяна"
|
label_modification: "%{count} промяна"
|
||||||
label_modification_plural: "%{count} промени"
|
label_modification_plural: "%{count} промени"
|
||||||
|
label_branch: работен вариант
|
||||||
|
label_tag: Версия
|
||||||
label_revision: Ревизия
|
label_revision: Ревизия
|
||||||
label_revision_plural: Ревизии
|
label_revision_plural: Ревизии
|
||||||
|
label_revision_id: Ревизия %{value}
|
||||||
|
label_associated_revisions: Асоциирани ревизии
|
||||||
label_added: добавено
|
label_added: добавено
|
||||||
label_modified: променено
|
label_modified: променено
|
||||||
|
label_copied: копирано
|
||||||
|
label_renamed: преименувано
|
||||||
label_deleted: изтрито
|
label_deleted: изтрито
|
||||||
label_latest_revision: Последна ревизия
|
label_latest_revision: Последна ревизия
|
||||||
label_latest_revision_plural: Последни ревизии
|
label_latest_revision_plural: Последни ревизии
|
||||||
label_view_revisions: Виж ревизиите
|
label_view_revisions: Виж ревизиите
|
||||||
|
label_view_all_revisions: Разглеждане на всички ревизии
|
||||||
label_max_size: Максимална големина
|
label_max_size: Максимална големина
|
||||||
label_sort_highest: Премести най-горе
|
label_sort_highest: Премести най-горе
|
||||||
label_sort_higher: Премести по-горе
|
label_sort_higher: Премести по-горе
|
||||||
@@ -466,6 +664,7 @@ bg:
|
|||||||
label_changes_details: Подробни промени
|
label_changes_details: Подробни промени
|
||||||
label_issue_tracking: Тракинг
|
label_issue_tracking: Тракинг
|
||||||
label_spent_time: Отделено време
|
label_spent_time: Отделено време
|
||||||
|
label_overall_spent_time: Общо употребено време
|
||||||
label_f_hour: "%{value} час"
|
label_f_hour: "%{value} час"
|
||||||
label_f_hour_plural: "%{value} часа"
|
label_f_hour_plural: "%{value} часа"
|
||||||
label_time_tracking: Отделяне на време
|
label_time_tracking: Отделяне на време
|
||||||
@@ -487,6 +686,7 @@ bg:
|
|||||||
label_relation_delete: Изтриване на релация
|
label_relation_delete: Изтриване на релация
|
||||||
label_relates_to: свързана със
|
label_relates_to: свързана със
|
||||||
label_duplicates: дублира
|
label_duplicates: дублира
|
||||||
|
label_duplicated_by: дублирана от
|
||||||
label_blocks: блокира
|
label_blocks: блокира
|
||||||
label_blocked_by: блокирана от
|
label_blocked_by: блокирана от
|
||||||
label_precedes: предшества
|
label_precedes: предшества
|
||||||
@@ -502,10 +702,13 @@ bg:
|
|||||||
label_board: Форум
|
label_board: Форум
|
||||||
label_board_new: Нов форум
|
label_board_new: Нов форум
|
||||||
label_board_plural: Форуми
|
label_board_plural: Форуми
|
||||||
|
label_board_locked: Заключена
|
||||||
|
label_board_sticky: Sticky
|
||||||
label_topic_plural: Теми
|
label_topic_plural: Теми
|
||||||
label_message_plural: Съобщения
|
label_message_plural: Съобщения
|
||||||
label_message_last: Последно съобщение
|
label_message_last: Последно съобщение
|
||||||
label_message_new: Нова тема
|
label_message_new: Нова тема
|
||||||
|
label_message_posted: Добавено съобщение
|
||||||
label_reply_plural: Отговори
|
label_reply_plural: Отговори
|
||||||
label_send_information: Изпращане на информацията до потребителя
|
label_send_information: Изпращане на информацията до потребителя
|
||||||
label_year: Година
|
label_year: Година
|
||||||
@@ -516,11 +719,80 @@ bg:
|
|||||||
label_language_based: В зависимост от езика
|
label_language_based: В зависимост от езика
|
||||||
label_sort_by: "Сортиране по %{value}"
|
label_sort_by: "Сортиране по %{value}"
|
||||||
label_send_test_email: Изпращане на тестов e-mail
|
label_send_test_email: Изпращане на тестов e-mail
|
||||||
|
label_feeds_access_key: RSS access ключ
|
||||||
|
label_missing_feeds_access_key: Липсващ RSS ключ за достъп
|
||||||
label_feeds_access_key_created_on: "%{value} от създаването на RSS ключа"
|
label_feeds_access_key_created_on: "%{value} от създаването на RSS ключа"
|
||||||
label_module_plural: Модули
|
label_module_plural: Модули
|
||||||
label_added_time_by: "Публикувана от %{author} преди %{age}"
|
label_added_time_by: "Публикувана от %{author} преди %{age}"
|
||||||
|
label_updated_time_by: "Обновена от %{author} преди %{age}"
|
||||||
label_updated_time: "Обновена преди %{value}"
|
label_updated_time: "Обновена преди %{value}"
|
||||||
label_jump_to_a_project: Проект...
|
label_jump_to_a_project: Проект...
|
||||||
|
label_file_plural: Файлове
|
||||||
|
label_changeset_plural: Ревизии
|
||||||
|
label_default_columns: По подразбиране
|
||||||
|
label_no_change_option: (Без промяна)
|
||||||
|
label_bulk_edit_selected_issues: Редактиране на задачи
|
||||||
|
label_theme: Тема
|
||||||
|
label_default: По подразбиране
|
||||||
|
label_search_titles_only: Само в заглавията
|
||||||
|
label_user_mail_option_all: "За всяко събитие в проектите, в които участвам"
|
||||||
|
label_user_mail_option_selected: "За всички събития само в избраните проекти..."
|
||||||
|
label_user_mail_option_none: "Само за наблюдавани или в които участвам (автор или назначени на мен)"
|
||||||
|
label_user_mail_option_only_my_events: Само за неща, в които съм включен/а
|
||||||
|
label_user_mail_option_only_assigned: Само за неща, назначени на мен
|
||||||
|
label_user_mail_option_only_owner: Само за неща, на които аз съм собственик
|
||||||
|
label_user_mail_no_self_notified: "Не искам известия за извършени от мен промени"
|
||||||
|
label_registration_activation_by_email: активиране на профила по email
|
||||||
|
label_registration_manual_activation: ръчно активиране
|
||||||
|
label_registration_automatic_activation: автоматично активиране
|
||||||
|
label_display_per_page: "На страница по: %{value}"
|
||||||
|
label_age: Възраст
|
||||||
|
label_change_properties: Промяна на настройки
|
||||||
|
label_general: Основни
|
||||||
|
label_more: Още
|
||||||
|
label_scm: SCM (Система за контрол на версиите)
|
||||||
|
label_plugins: Плъгини
|
||||||
|
label_ldap_authentication: LDAP оторизация
|
||||||
|
label_downloads_abbr: D/L
|
||||||
|
label_optional_description: Незадължително описание
|
||||||
|
label_add_another_file: Добавяне на друг файл
|
||||||
|
label_preferences: Предпочитания
|
||||||
|
label_chronological_order: Хронологичен ред
|
||||||
|
label_reverse_chronological_order: Обратен хронологичен ред
|
||||||
|
label_planning: Планиране
|
||||||
|
label_incoming_emails: Входящи e-mail-и
|
||||||
|
label_generate_key: Генериране на ключ
|
||||||
|
label_issue_watchers: Наблюдатели
|
||||||
|
label_example: Пример
|
||||||
|
label_display: Display
|
||||||
|
label_sort: Сортиране
|
||||||
|
label_ascending: Нарастващ
|
||||||
|
label_descending: Намаляващ
|
||||||
|
label_date_from_to: От %{start} до %{end}
|
||||||
|
label_wiki_content_added: Wiki страница беше добавена
|
||||||
|
label_wiki_content_updated: Wiki страница беше обновена
|
||||||
|
label_group: Група
|
||||||
|
label_group_plural: Групи
|
||||||
|
label_group_new: Нова група
|
||||||
|
label_time_entry_plural: Използвано време
|
||||||
|
label_version_sharing_none: Не споделен
|
||||||
|
label_version_sharing_descendants: С подпроекти
|
||||||
|
label_version_sharing_hierarchy: С проектна йерархия
|
||||||
|
label_version_sharing_tree: С дърво на проектите
|
||||||
|
label_version_sharing_system: С всички проекти
|
||||||
|
label_update_issue_done_ratios: Обновяване на процента на завършените задачи
|
||||||
|
label_copy_source: Източник
|
||||||
|
label_copy_target: Цел
|
||||||
|
label_copy_same_as_target: Също като целта
|
||||||
|
label_display_used_statuses_only: Показване само на състоянията, използвани от този тракер
|
||||||
|
label_api_access_key: API ключ за достъп
|
||||||
|
label_missing_api_access_key: Липсващ API ключ
|
||||||
|
label_api_access_key_created_on: API ключ за достъп е създаден преди %{value}
|
||||||
|
label_profile: Профил
|
||||||
|
label_subtask_plural: Подзадачи
|
||||||
|
label_project_copy_notifications: Изпращане на Send e-mail известия по време на копирането на проекта
|
||||||
|
label_principal_search: "Търсене на потребител или група:"
|
||||||
|
label_user_search: "Търсене на потребител:"
|
||||||
|
|
||||||
button_login: Вход
|
button_login: Вход
|
||||||
button_submit: Прикачване
|
button_submit: Прикачване
|
||||||
@@ -529,8 +801,10 @@ bg:
|
|||||||
button_uncheck_all: Изчистване на всички
|
button_uncheck_all: Изчистване на всички
|
||||||
button_delete: Изтриване
|
button_delete: Изтриване
|
||||||
button_create: Създаване
|
button_create: Създаване
|
||||||
|
button_create_and_continue: Създаване и продължаване
|
||||||
button_test: Тест
|
button_test: Тест
|
||||||
button_edit: Редакция
|
button_edit: Редакция
|
||||||
|
button_edit_associated_wikipage: "Редактиране на асоциираната Wiki страница: %{page_title}"
|
||||||
button_add: Добавяне
|
button_add: Добавяне
|
||||||
button_change: Промяна
|
button_change: Промяна
|
||||||
button_apply: Приложи
|
button_apply: Приложи
|
||||||
@@ -541,6 +815,7 @@ bg:
|
|||||||
button_list: Списък
|
button_list: Списък
|
||||||
button_view: Преглед
|
button_view: Преглед
|
||||||
button_move: Преместване
|
button_move: Преместване
|
||||||
|
button_move_and_follow: Преместване и продължаване
|
||||||
button_back: Назад
|
button_back: Назад
|
||||||
button_cancel: Отказ
|
button_cancel: Отказ
|
||||||
button_activate: Активация
|
button_activate: Активация
|
||||||
@@ -554,26 +829,49 @@ bg:
|
|||||||
button_unarchive: Разархивиране
|
button_unarchive: Разархивиране
|
||||||
button_reset: Генериране наново
|
button_reset: Генериране наново
|
||||||
button_rename: Преименуване
|
button_rename: Преименуване
|
||||||
|
button_change_password: Промяна на парола
|
||||||
|
button_copy: Копиране
|
||||||
|
button_copy_and_follow: Копиране и продължаване
|
||||||
|
button_annotate: Анотация
|
||||||
|
button_update: Обновяване
|
||||||
|
button_configure: Конфигуриране
|
||||||
|
button_quote: Цитат
|
||||||
|
button_duplicate: Дублиране
|
||||||
|
button_show: Показване
|
||||||
|
|
||||||
status_active: активен
|
status_active: активен
|
||||||
status_registered: регистриран
|
status_registered: регистриран
|
||||||
status_locked: заключен
|
status_locked: заключен
|
||||||
|
|
||||||
|
version_status_open: отворена
|
||||||
|
version_status_locked: заключена
|
||||||
|
version_status_closed: затворена
|
||||||
|
|
||||||
|
field_active: Активен
|
||||||
|
|
||||||
text_select_mail_notifications: Изберете събития за изпращане на e-mail.
|
text_select_mail_notifications: Изберете събития за изпращане на e-mail.
|
||||||
text_regexp_info: пр. ^[A-Z0-9]+$
|
text_regexp_info: пр. ^[A-Z0-9]+$
|
||||||
text_min_max_length_info: 0 - без ограничения
|
text_min_max_length_info: 0 - без ограничения
|
||||||
text_project_destroy_confirmation: Сигурни ли сте, че искате да изтриете проекта и данните в него?
|
text_project_destroy_confirmation: Сигурни ли сте, че искате да изтриете проекта и данните в него?
|
||||||
|
text_subprojects_destroy_warning: "Неговите подпроекти: %{value} също ще бъдат изтрити."
|
||||||
text_workflow_edit: Изберете роля и тракер за да редактирате работния процес
|
text_workflow_edit: Изберете роля и тракер за да редактирате работния процес
|
||||||
text_are_you_sure: Сигурни ли сте?
|
text_are_you_sure: Сигурни ли сте?
|
||||||
text_tip_task_begin_day: задача започваща този ден
|
text_are_you_sure_with_children: Изтриване на задачата и нейните подзадачи?
|
||||||
text_tip_task_end_day: задача завършваща този ден
|
text_journal_changed: "%{label} променен от %{old} на %{new}"
|
||||||
text_tip_task_begin_end_day: задача започваща и завършваща този ден
|
text_journal_set_to: "%{label} установен на %{value}"
|
||||||
|
text_journal_deleted: "%{label} изтрит (%{old})"
|
||||||
|
text_journal_added: "Добавено %{label} %{value}"
|
||||||
|
text_tip_issue_begin_day: задача, започваща този ден
|
||||||
|
text_tip_issue_end_day: задача, завършваща този ден
|
||||||
|
text_tip_issue_begin_end_day: задача, започваща и завършваща този ден
|
||||||
text_project_identifier_info: 'Позволени са малки букви (a-z), цифри и тирета.<br />Невъзможна промяна след запис.'
|
text_project_identifier_info: 'Позволени са малки букви (a-z), цифри и тирета.<br />Невъзможна промяна след запис.'
|
||||||
text_caracters_maximum: "До %{count} символа."
|
text_caracters_maximum: "До %{count} символа."
|
||||||
|
text_caracters_minimum: "Минимум %{count} символа."
|
||||||
text_length_between: "От %{min} до %{max} символа."
|
text_length_between: "От %{min} до %{max} символа."
|
||||||
text_tracker_no_workflow: Няма дефиниран работен процес за този тракер
|
text_tracker_no_workflow: Няма дефиниран работен процес за този тракер
|
||||||
text_unallowed_characters: Непозволени символи
|
text_unallowed_characters: Непозволени символи
|
||||||
text_comma_separated: Позволено е изброяване (с разделител запетая).
|
text_comma_separated: Позволено е изброяване (с разделител запетая).
|
||||||
|
text_line_separated: Позволени са много стойности (по едно на ред).
|
||||||
text_issues_ref_in_commit_messages: Отбелязване и приключване на задачи от ревизии
|
text_issues_ref_in_commit_messages: Отбелязване и приключване на задачи от ревизии
|
||||||
text_issue_added: "Публикувана е нова задача с номер %{id} (от %{author})."
|
text_issue_added: "Публикувана е нова задача с номер %{id} (от %{author})."
|
||||||
text_issue_updated: "Задача %{id} е обновена (от %{author})."
|
text_issue_updated: "Задача %{id} е обновена (от %{author})."
|
||||||
@@ -581,6 +879,35 @@ bg:
|
|||||||
text_issue_category_destroy_question: "Има задачи (%{count}) обвързани с тази категория. Какво ще изберете?"
|
text_issue_category_destroy_question: "Има задачи (%{count}) обвързани с тази категория. Какво ще изберете?"
|
||||||
text_issue_category_destroy_assignments: Премахване на връзките с категорията
|
text_issue_category_destroy_assignments: Премахване на връзките с категорията
|
||||||
text_issue_category_reassign_to: Преобвързване с категория
|
text_issue_category_reassign_to: Преобвързване с категория
|
||||||
|
text_user_mail_option: "За неизбраните проекти, ще получавате известия само за наблюдавани дейности или в които участвате (т.е. автор или назначени на мен)."
|
||||||
|
text_no_configuration_data: "Все още не са конфигурирани Роли, тракери, състояния на задачи и работен процес.\nСтрого се препоръчва зареждането на примерната информация. Веднъж заредена ще имате възможност да я редактирате."
|
||||||
|
text_load_default_configuration: Зареждане на примерна информация
|
||||||
|
text_status_changed_by_changeset: "Приложено с ревизия %{value}."
|
||||||
|
text_time_logged_by_changeset: Приложено в ревизия %{value}.
|
||||||
|
text_issues_destroy_confirmation: 'Сигурни ли сте, че искате да изтриете избраните задачи?'
|
||||||
|
text_select_project_modules: 'Изберете активните модули за този проект:'
|
||||||
|
text_default_administrator_account_changed: Сменен фабричния администраторски профил
|
||||||
|
text_file_repository_writable: Възможност за писане в хранилището с файлове
|
||||||
|
text_plugin_assets_writable: Папката на приставките е разрешена за запис
|
||||||
|
text_rmagick_available: Наличен RMagick (по избор)
|
||||||
|
text_destroy_time_entries_question: "%{hours} часа са отделени на задачите, които искате да изтриете. Какво избирате?"
|
||||||
|
text_destroy_time_entries: Изтриване на отделеното време
|
||||||
|
text_assign_time_entries_to_project: Прехвърляне на отделеното време към проект
|
||||||
|
text_reassign_time_entries: 'Прехвърляне на отделеното време към задача:'
|
||||||
|
text_user_wrote: "%{value} написа:"
|
||||||
|
text_enumeration_destroy_question: "%{count} обекта са свързани с тази стойност."
|
||||||
|
text_enumeration_category_reassign_to: 'Пресвържете ги към тази стойност:'
|
||||||
|
text_email_delivery_not_configured: "Изпращането на e-mail-и не е конфигурирано и известията не са разрешени.\nКонфигурирайте вашия SMTP сървър в config/configuration.yml и рестартирайте Redmine, за да ги разрешите."
|
||||||
|
text_repository_usernames_mapping: "Изберете или променете потребителите в Redmine, съответстващи на потребителите в дневника на хранилището (repository).\nПотребителите с еднакви имена в Redmine и хранилищата се съвместяват автоматично."
|
||||||
|
text_diff_truncated: '... Този diff не е пълен, понеже е надхвърля максималния размер, който може да бъде показан.'
|
||||||
|
text_custom_field_possible_values_info: 'Една стойност на ред'
|
||||||
|
text_wiki_page_destroy_question: Тази страница има %{descendants} страници деца и descendant(s). Какво желаете да правите?
|
||||||
|
text_wiki_page_nullify_children: Запазване на тези страници като коренни страници
|
||||||
|
text_wiki_page_destroy_children: Изтриване на страниците деца и всички техни descendants
|
||||||
|
text_wiki_page_reassign_children: Преназначаване на страниците деца на тази родителска страница
|
||||||
|
text_own_membership_delete_confirmation: "Вие сте на път да премахнете някои или всички ваши разрешения и е възможно след това да не можете да редактирате този проект.\nСигурен ли сте, че искате да продължите?"
|
||||||
|
text_zoom_in: Увеличаване
|
||||||
|
text_zoom_out: Намаляване
|
||||||
|
|
||||||
default_role_manager: Мениджър
|
default_role_manager: Мениджър
|
||||||
default_role_developer: Разработчик
|
default_role_developer: Разработчик
|
||||||
@@ -607,328 +934,5 @@ bg:
|
|||||||
enumeration_issue_priorities: Приоритети на задачи
|
enumeration_issue_priorities: Приоритети на задачи
|
||||||
enumeration_doc_categories: Категории документи
|
enumeration_doc_categories: Категории документи
|
||||||
enumeration_activities: Дейности (time tracking)
|
enumeration_activities: Дейности (time tracking)
|
||||||
label_file_plural: Файлове
|
|
||||||
label_changeset_plural: Ревизии
|
|
||||||
field_column_names: Колони
|
|
||||||
label_default_columns: По подразбиране
|
|
||||||
setting_issue_list_default_columns: Показвани колони по подразбиране
|
|
||||||
setting_repositories_encodings: Кодови таблици
|
|
||||||
notice_no_issue_selected: "Няма избрани задачи."
|
|
||||||
label_bulk_edit_selected_issues: Редактиране на задачи
|
|
||||||
label_no_change_option: (Без промяна)
|
|
||||||
notice_failed_to_save_issues: "Неуспешен запис на %{count} задачи от %{total} избрани: %{ids}."
|
|
||||||
label_theme: Тема
|
|
||||||
label_default: По подразбиране
|
|
||||||
label_search_titles_only: Само в заглавията
|
|
||||||
label_nobody: никой
|
|
||||||
button_change_password: Промяна на парола
|
|
||||||
text_user_mail_option: "За неизбраните проекти, ще получавате известия само за наблюдавани дейности или в които участвате (т.е. автор или назначени на мен)."
|
|
||||||
label_user_mail_option_selected: "За всички събития само в избраните проекти..."
|
|
||||||
label_user_mail_option_all: "За всяко събитие в проектите, в които участвам"
|
|
||||||
label_user_mail_option_none: "Само за наблюдавани или в които участвам (автор или назначени на мен)"
|
|
||||||
setting_emails_footer: Подтекст за e-mail
|
|
||||||
label_float: Дробно
|
|
||||||
button_copy: Копиране
|
|
||||||
mail_body_account_information_external: "Можете да използвате вашия %{value} профил за вход."
|
|
||||||
mail_body_account_information: Информацията за профила ви
|
|
||||||
setting_protocol: Протокол
|
|
||||||
label_user_mail_no_self_notified: "Не искам известия за извършени от мен промени"
|
|
||||||
setting_time_format: Формат на часа
|
|
||||||
label_registration_activation_by_email: активиране на профила по email
|
|
||||||
mail_subject_account_activation_request: "Заявка за активиране на профил в %{value}"
|
|
||||||
mail_body_account_activation_request: "Има новорегистриран потребител (%{value}), очакващ вашето одобрение:"
|
|
||||||
label_registration_automatic_activation: автоматично активиране
|
|
||||||
label_registration_manual_activation: ръчно активиране
|
|
||||||
notice_account_pending: "Профилът Ви е създаден и очаква одобрение от администратор."
|
|
||||||
field_time_zone: Часова зона
|
|
||||||
text_caracters_minimum: "Минимум %{count} символа."
|
|
||||||
setting_bcc_recipients: Получатели на скрито копие (bcc)
|
|
||||||
button_annotate: Анотация
|
|
||||||
label_issues_by: "Задачи по %{value}"
|
|
||||||
field_searchable: С възможност за търсене
|
|
||||||
label_display_per_page: "На страница по: %{value}"
|
|
||||||
setting_per_page_options: Опции за страниране
|
|
||||||
label_age: Възраст
|
|
||||||
notice_default_data_loaded: Примерната информацията е успешно заредена.
|
|
||||||
text_load_default_configuration: Зареждане на примерна информация
|
|
||||||
text_no_configuration_data: "Все още не са конфигурирани Роли, тракери, състояния на задачи и работен процес.\nСтрого се препоръчва зареждането на примерната информация. Веднъж заредена ще имате възможност да я редактирате."
|
|
||||||
error_can_t_load_default_data: "Грешка при зареждане на примерната информация: %{value}"
|
|
||||||
button_update: Обновяване
|
|
||||||
label_change_properties: Промяна на настройки
|
|
||||||
label_general: Основни
|
|
||||||
label_repository_plural: Хранилища
|
|
||||||
label_associated_revisions: Асоциирани ревизии
|
|
||||||
setting_user_format: Потребителски формат
|
|
||||||
text_status_changed_by_changeset: "Приложено с ревизия %{value}."
|
|
||||||
label_more: Още
|
|
||||||
text_issues_destroy_confirmation: 'Сигурни ли сте, че искате да изтриете избраните задачи?'
|
|
||||||
label_scm: SCM (Система за контрол на кода)
|
|
||||||
text_select_project_modules: 'Изберете активните модули за този проект:'
|
|
||||||
label_issue_added: Добавена задача
|
|
||||||
label_issue_updated: Обновена задача
|
|
||||||
label_document_added: Добавен документ
|
|
||||||
label_message_posted: Добавено съобщение
|
|
||||||
label_file_added: Добавен файл
|
|
||||||
label_news_added: Добавена новина
|
|
||||||
project_module_boards: Форуми
|
|
||||||
project_module_issue_tracking: Тракинг
|
|
||||||
project_module_wiki: Wiki
|
|
||||||
project_module_files: Файлове
|
|
||||||
project_module_documents: Документи
|
|
||||||
project_module_repository: Хранилище
|
|
||||||
project_module_news: Новини
|
|
||||||
project_module_time_tracking: Отделяне на време
|
|
||||||
text_file_repository_writable: Възможност за писане в хранилището с файлове
|
|
||||||
text_default_administrator_account_changed: Сменен фабричния администраторски профил
|
|
||||||
text_rmagick_available: Наличен RMagick (по избор)
|
|
||||||
button_configure: Конфигуриране
|
|
||||||
label_plugins: Плъгини
|
|
||||||
label_ldap_authentication: LDAP оторизация
|
|
||||||
label_downloads_abbr: D/L
|
|
||||||
label_this_month: текущия месец
|
|
||||||
label_last_n_days: "последните %{count} дни"
|
|
||||||
label_all_time: всички
|
|
||||||
label_this_year: текущата година
|
|
||||||
label_date_range: Период
|
|
||||||
label_last_week: последната седмица
|
|
||||||
label_yesterday: вчера
|
|
||||||
label_last_month: последния месец
|
|
||||||
label_add_another_file: Добавяне на друг файл
|
|
||||||
label_optional_description: Незадължително описание
|
|
||||||
text_destroy_time_entries_question: "%{hours} часа са отделени на задачите, които искате да изтриете. Какво избирате?"
|
|
||||||
error_issue_not_found_in_project: 'Задачата не е намерена или не принадлежи на този проект'
|
|
||||||
text_assign_time_entries_to_project: Прехвърляне на отделеното време към проект
|
|
||||||
text_destroy_time_entries: Изтриване на отделеното време
|
|
||||||
text_reassign_time_entries: 'Прехвърляне на отделеното време към задача:'
|
|
||||||
setting_activity_days_default: Брой дни показвани на таб Дейност
|
|
||||||
label_chronological_order: Хронологичен ред
|
|
||||||
field_comments_sorting: Сортиране на коментарите
|
|
||||||
label_reverse_chronological_order: Обратен хронологичен ред
|
|
||||||
label_preferences: Предпочитания
|
|
||||||
setting_display_subprojects_issues: Показване на подпроектите в проектите по подразбиране
|
|
||||||
label_overall_activity: Цялостна дейност
|
|
||||||
setting_default_projects_public: Новите проекти са публични по подразбиране
|
|
||||||
error_scm_annotate: "Обектът не съществува или не може да бъде анотиран."
|
|
||||||
label_planning: Планиране
|
|
||||||
text_subprojects_destroy_warning: "Неговите подпроекти: %{value} също ще бъдат изтрити."
|
|
||||||
label_and_its_subprojects: "%{value} и неговите подпроекти"
|
|
||||||
mail_body_reminder: "%{count} задачи, назначени на вас са с краен срок в следващите %{days} дни:"
|
|
||||||
mail_subject_reminder: "%{count} задачи с краен срок с следващите %{days} дни"
|
|
||||||
text_user_wrote: "%{value} написа:"
|
|
||||||
label_duplicated_by: дублирана от
|
|
||||||
setting_enabled_scm: Разрешена SCM
|
|
||||||
text_enumeration_category_reassign_to: 'Пресвържете ги към тази стойност:'
|
|
||||||
text_enumeration_destroy_question: "%{count} обекта са свързани с тази стойност."
|
|
||||||
label_incoming_emails: Входящи e-mail-и
|
|
||||||
label_generate_key: Генериране на ключ
|
|
||||||
setting_mail_handler_api_enabled: Разрешаване на WS за входящи e-mail-и
|
|
||||||
setting_mail_handler_api_key: API ключ
|
|
||||||
text_email_delivery_not_configured: "Изпращането на e-mail-и не е конфигурирано и известията не са разрешени.\nКонфигурирайте вашия SMTP сървър в config/email.yml и рестартирайте Redmine, за да ги разрешите."
|
|
||||||
field_parent_title: Родителска страница
|
|
||||||
label_issue_watchers: Наблюдатели
|
|
||||||
setting_commit_logs_encoding: Кодова таблица на съобщенията при поверяване
|
|
||||||
button_quote: Цитат
|
|
||||||
setting_sequential_project_identifiers: Генериране на последователни проектни идентификатори
|
|
||||||
notice_unable_delete_version: Невъзможност за изтриване на версия
|
|
||||||
label_renamed: преименуван
|
|
||||||
label_copied: копиран
|
|
||||||
setting_plain_text_mail: само чист текст (без HTML)
|
|
||||||
permission_view_files: Разглеждане на файлове
|
|
||||||
permission_edit_issues: Редактиране на задачи
|
|
||||||
permission_edit_own_time_entries: Редактиране на собствените time logs
|
|
||||||
permission_manage_public_queries: Управление на публичните заявки
|
|
||||||
permission_add_issues: Добавяне на задачи
|
|
||||||
permission_log_time: Log spent time
|
|
||||||
permission_view_changesets: Разглеждане на changesets
|
|
||||||
permission_view_time_entries: Разглеждане на изразходваното време
|
|
||||||
permission_manage_versions: Управление на версиите
|
|
||||||
permission_manage_wiki: Управление на wiki
|
|
||||||
permission_manage_categories: Управление на категориите задачи
|
|
||||||
permission_protect_wiki_pages: Заключване на wiki страници
|
|
||||||
permission_comment_news: Коментиране на новини
|
|
||||||
permission_delete_messages: Изтриване на съобщения
|
|
||||||
permission_select_project_modules: Избор на проектни модули
|
|
||||||
permission_manage_documents: Управление на документи
|
|
||||||
permission_edit_wiki_pages: Редактиране на wiki страници
|
|
||||||
permission_add_issue_watchers: Добавяне на наблюдатели
|
|
||||||
permission_view_gantt: Разглеждане на мрежов график
|
|
||||||
permission_move_issues: Преместване на задачи
|
|
||||||
permission_manage_issue_relations: Управление на връзките между задачите
|
|
||||||
permission_delete_wiki_pages: Изтриване на wiki страници
|
|
||||||
permission_manage_boards: Управление на boards
|
|
||||||
permission_delete_wiki_pages_attachments: Изтриване на прикачени файлове
|
|
||||||
permission_view_wiki_edits: Разглеждане на wiki история
|
|
||||||
permission_add_messages: Публикуване на съобщения
|
|
||||||
permission_view_messages: Разглеждане на съобщения
|
|
||||||
permission_manage_files: Управление на файлове
|
|
||||||
permission_edit_issue_notes: Редактиране на бележки
|
|
||||||
permission_manage_news: Управление на новини
|
|
||||||
permission_view_calendar: Разглеждане на календари
|
|
||||||
permission_manage_members: Управление на членовете (на екип)
|
|
||||||
permission_edit_messages: Редактиране на съобщения
|
|
||||||
permission_delete_issues: Изтриване на задачи
|
|
||||||
permission_view_issue_watchers: Разглеждане на списък с наблюдатели
|
|
||||||
permission_manage_repository: Управление на хранилища
|
|
||||||
permission_commit_access: Поверяване
|
|
||||||
permission_browse_repository: Разглеждане на хранилища
|
|
||||||
permission_view_documents: Разглеждане на документи
|
|
||||||
permission_edit_project: Редактиране на проект
|
|
||||||
permission_add_issue_notes: Добаване на бележки
|
|
||||||
permission_save_queries: Запис на запитвания (queries)
|
|
||||||
permission_view_wiki_pages: Разглеждане на wiki
|
|
||||||
permission_rename_wiki_pages: Преименуване на wiki страници
|
|
||||||
permission_edit_time_entries: Редактиране на time logs
|
|
||||||
permission_edit_own_issue_notes: Редактиране на собствени бележки
|
|
||||||
setting_gravatar_enabled: Използване на портребителски икони от Gravatar
|
|
||||||
label_example: Пример
|
|
||||||
text_repository_usernames_mapping: "Select ou update the Redmine user mapped to each username found in the repository log.\nUsers with the same Redmine and repository username or email are automatically mapped."
|
|
||||||
permission_edit_own_messages: Редактиране на собствени съобщения
|
|
||||||
permission_delete_own_messages: Изтриване на собствени съобщения
|
|
||||||
label_user_activity: "Активност на %{value}"
|
|
||||||
label_updated_time_by: "Обновена от %{author} преди %{age}"
|
|
||||||
text_diff_truncated: '... Този diff не е пълен, понеже е надхвърля максималния размер, който може да бъде показан.'
|
|
||||||
setting_diff_max_lines_displayed: Максимален брой показани diff редове
|
|
||||||
text_plugin_assets_writable: Папката на приставките е разрешена за запис
|
|
||||||
warning_attachments_not_saved: "%{count} файла не бяха записани."
|
|
||||||
button_create_and_continue: Създаване и продължаване
|
|
||||||
text_custom_field_possible_values_info: 'Една стойност на ред'
|
|
||||||
label_display: Display
|
|
||||||
field_editable: Editable
|
|
||||||
setting_repository_log_display_limit: Максимален брой на показванете ревизии в лог файла
|
|
||||||
setting_file_max_size_displayed: Максимален размер на текстовите файлове, показвани inline
|
|
||||||
field_watcher: Наблюдател
|
|
||||||
setting_openid: Рарешаване на OpenID вход и регистрация
|
|
||||||
field_identity_url: OpenID URL
|
|
||||||
label_login_with_open_id_option: или вход чрез OpenID
|
|
||||||
field_content: Съдържание
|
|
||||||
label_descending: Намаляващ
|
|
||||||
label_sort: Сортиране
|
|
||||||
label_ascending: Нарастващ
|
|
||||||
label_date_from_to: От %{start} до %{end}
|
|
||||||
label_greater_or_equal: ">="
|
|
||||||
label_less_or_equal: <=
|
|
||||||
text_wiki_page_destroy_question: Тази страница има %{descendants} страници деца и descendant(s). Какво желаете да правите?
|
|
||||||
text_wiki_page_reassign_children: Преназначаване на страниците деца на тази родителска страница
|
|
||||||
text_wiki_page_nullify_children: Запазване на тези страници като коренни страници
|
|
||||||
text_wiki_page_destroy_children: Изтриване на страниците деца и всички техни descendants
|
|
||||||
setting_password_min_length: Минимална дължина на парола
|
|
||||||
field_group_by: Групиране на резултатите по
|
|
||||||
mail_subject_wiki_content_updated: "Wiki страницата '%{id}' не беше обновена"
|
|
||||||
label_wiki_content_added: Wiki страница беше добавена
|
|
||||||
mail_subject_wiki_content_added: "Wiki страницата '%{id}' беше добавена"
|
|
||||||
mail_body_wiki_content_added: Wiki страницата '%{id}' беше добавена от %{author}.
|
|
||||||
label_wiki_content_updated: Wiki страница беше обновена
|
|
||||||
mail_body_wiki_content_updated: Wiki страницата '%{id}' беше обновена от %{author}.
|
|
||||||
permission_add_project: Създаване на проект
|
|
||||||
setting_new_project_user_role_id: Роля, давана на потребител, създаващ проекти, който не е администратор
|
|
||||||
label_view_all_revisions: Разглеждане на всички ревизии
|
|
||||||
label_tag: Версия
|
|
||||||
label_branch: работен вариант
|
|
||||||
error_no_tracker_in_project: Няма асоциирани тракери с този проект. Проверете настройките на проекта.
|
|
||||||
error_no_default_issue_status: Няма установено подразбиращо се състояние за задачите. Моля проверете вашата конфигурация (Вижте "Администрация -> Състояния на задачи").
|
|
||||||
text_journal_changed: "%{label} променен от %{old} на %{new}"
|
|
||||||
text_journal_set_to: "%{label} установен на %{value}"
|
|
||||||
text_journal_deleted: "%{label} изтрит (%{old})"
|
|
||||||
label_group_plural: Групи
|
|
||||||
label_group: Група
|
|
||||||
label_group_new: Нова група
|
|
||||||
label_time_entry_plural: Използвано време
|
|
||||||
text_journal_added: "Добавено %{label} %{value}"
|
|
||||||
field_active: Активен
|
|
||||||
enumeration_system_activity: Системна активност
|
enumeration_system_activity: Системна активност
|
||||||
permission_delete_issue_watchers: Изтриване на наблюдатели
|
|
||||||
version_status_closed: затворена
|
|
||||||
version_status_locked: заключена
|
|
||||||
version_status_open: отворена
|
|
||||||
error_can_not_reopen_issue_on_closed_version: Задача, асоциирана със затворена версия не може да бъде отворена отново
|
|
||||||
label_user_anonymous: Анонимен
|
|
||||||
button_move_and_follow: Преместване и продължаване
|
|
||||||
setting_default_projects_modules: Активирани модули по подразбиране за нов проект
|
|
||||||
setting_gravatar_default: Подразбиращо се изображение от Gravatar
|
|
||||||
field_sharing: Sharing
|
|
||||||
label_version_sharing_hierarchy: С проектна йерархия
|
|
||||||
label_version_sharing_system: С всички проекти
|
|
||||||
label_version_sharing_descendants: С подпроекти
|
|
||||||
label_version_sharing_tree: С дърво на проектите
|
|
||||||
label_version_sharing_none: Не споделен
|
|
||||||
error_can_not_archive_project: Този проект не може да бъде архивиран
|
|
||||||
button_duplicate: Дублиране
|
|
||||||
button_copy_and_follow: Копиране и продължаване
|
|
||||||
label_copy_source: Източник
|
|
||||||
setting_issue_done_ratio: Изчисление на процента на готови задачи с
|
|
||||||
setting_issue_done_ratio_issue_status: Използване на състоянието на задачите
|
|
||||||
error_issue_done_ratios_not_updated: Процентът на завършените задачи не е обновен.
|
|
||||||
error_workflow_copy_target: Моля изберете тракер(и) и роля (роли).
|
|
||||||
setting_issue_done_ratio_issue_field: Използване на поле 'задача'
|
|
||||||
label_copy_same_as_target: Също като целта
|
|
||||||
label_copy_target: Цел
|
|
||||||
notice_issue_done_ratios_updated: Обновен процент на завършените задачи.
|
|
||||||
error_workflow_copy_source: Моля изберете source тракер или роля
|
|
||||||
label_update_issue_done_ratios: Обновяване на процента на завършените задачи
|
|
||||||
setting_start_of_week: Първи ден на седмицата
|
|
||||||
permission_view_issues: Разглеждане на задачите
|
|
||||||
label_display_used_statuses_only: Показване само на състоянията, използвани от този тракер
|
|
||||||
label_revision_id: Ревизия %{value}
|
|
||||||
label_api_access_key: API ключ за достъп
|
|
||||||
label_api_access_key_created_on: API ключ за достъп е създаден преди %{value}
|
|
||||||
label_feeds_access_key: RSS access ключ
|
|
||||||
notice_api_access_key_reseted: Вашият API ключ за достъп беше изчистен.
|
|
||||||
setting_rest_api_enabled: Разрешаване на REST web сървис
|
|
||||||
label_missing_api_access_key: Липсващ API ключ
|
|
||||||
label_missing_feeds_access_key: Липсващ RSS ключ за достъп
|
|
||||||
button_show: Показване
|
|
||||||
text_line_separated: Позволени са много стойности (по едно на ред).
|
|
||||||
setting_mail_handler_body_delimiters: Отрязване на e-mail-ите след един от тези редове
|
|
||||||
permission_add_subprojects: Създаване на подпроекти
|
|
||||||
label_subproject_new: Нов подпроект
|
|
||||||
text_own_membership_delete_confirmation: |-
|
|
||||||
Вие сте на път да премахнете някои или всички ваши разрешения и е възможно след това на да не можете да редатирате този проект.
|
|
||||||
Сигурен ли сте, че искате да продължите?
|
|
||||||
label_close_versions: Затваряне на завършените версии
|
|
||||||
label_board_sticky: Sticky
|
|
||||||
label_board_locked: Заключена
|
|
||||||
permission_export_wiki_pages: Експорт на wiki страници
|
|
||||||
setting_cache_formatted_text: Cache formatted text
|
|
||||||
permission_manage_project_activities: Управление на дейностите на проекта
|
|
||||||
error_unable_delete_issue_status: Невъзможност за изтриване на състояние на задача
|
|
||||||
label_profile: Профил
|
|
||||||
permission_manage_subtasks: Управление на подзадачите
|
|
||||||
field_parent_issue: Родителска задача
|
|
||||||
label_subtask_plural: Подзадачи
|
|
||||||
label_project_copy_notifications: Изпращане на Send e-mail известия по време на копирането на проекта
|
|
||||||
error_can_not_delete_custom_field: Невъзможност за изтриване на потребителско поле
|
|
||||||
error_unable_to_connect: Невъзможност за свързване с (%{value})
|
|
||||||
error_can_not_remove_role: Тази роля се използва и не може да бъде изтрита.
|
|
||||||
error_can_not_delete_tracker: Този тракер съдържа задачи и не може да бъде изтрит.
|
|
||||||
field_principal: Principal
|
|
||||||
label_my_page_block: Блокове в личната страница
|
|
||||||
notice_failed_to_save_members: "Невъзможност за запис на член(ове): %{errors}."
|
|
||||||
text_zoom_out: Намаляване
|
|
||||||
text_zoom_in: Увеличаване
|
|
||||||
notice_unable_delete_time_entry: Невъзможност за изтриване на запис на time log.
|
|
||||||
label_overall_spent_time: Общо употребено време
|
|
||||||
field_time_entries: Log time
|
|
||||||
notice_not_authorized_archived_project: Проектът, който се опитвате да видите е архивиран.
|
|
||||||
text_tip_issue_end_day: задача, завършваща този ден
|
|
||||||
field_text: Текстово поле
|
|
||||||
label_user_mail_option_only_owner: Само за неща, на които аз съм собственик
|
|
||||||
field_member_of_group: Член на група
|
|
||||||
project_module_gantt: Мрежов график
|
|
||||||
text_are_you_sure_with_children: Изтриване на задачата и нейните подзадачи?
|
|
||||||
text_tip_issue_begin_end_day: задача, започваща и завършваща този ден
|
|
||||||
setting_default_notification_option: Подразбиращ се начин за известяване
|
|
||||||
project_module_calendar: Календар
|
|
||||||
label_user_mail_option_only_my_events: Само за неща, в които съм включен/а
|
|
||||||
text_tip_issue_begin_day: задача, започваща този ден
|
|
||||||
label_user_mail_option_only_assigned: Само за неща, назначени на мен
|
|
||||||
button_edit_associated_wikipage: "Редактиране на асоциираната Wiki страница: %{page_title}"
|
|
||||||
field_assigned_to_role: Assignee's role
|
|
||||||
label_principal_search: "Търсене на потребител или група:"
|
|
||||||
label_user_search: "Търсене на потребител:"
|
|
||||||
field_visible: Видим
|
|
||||||
setting_emails_header: Emails header
|
|
||||||
setting_commit_logtime_activity_id: Activity for logged time
|
|
||||||
text_time_logged_by_changeset: Applied in changeset %{value}.
|
|
||||||
setting_commit_logtime_enabled: Enable time logging
|
|
||||||
notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
|
|
||||||
setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
|
|
||||||
@@ -546,7 +546,7 @@ cs:
|
|||||||
label_relation_delete: Odstranit souvislost
|
label_relation_delete: Odstranit souvislost
|
||||||
label_relates_to: související s
|
label_relates_to: související s
|
||||||
label_duplicates: duplicity
|
label_duplicates: duplicity
|
||||||
label_blocks: bloků
|
label_blocks: blokuje
|
||||||
label_blocked_by: zablokován
|
label_blocked_by: zablokován
|
||||||
label_precedes: předchází
|
label_precedes: předchází
|
||||||
label_follows: následuje
|
label_follows: následuje
|
||||||
|
|||||||
+17
-17
@@ -858,6 +858,7 @@ de:
|
|||||||
text_subprojects_destroy_warning: "Dessen Unterprojekte (%{value}) werden ebenfalls gelöscht."
|
text_subprojects_destroy_warning: "Dessen Unterprojekte (%{value}) werden ebenfalls gelöscht."
|
||||||
text_workflow_edit: Workflow zum Bearbeiten auswählen
|
text_workflow_edit: Workflow zum Bearbeiten auswählen
|
||||||
text_are_you_sure: Sind Sie sicher?
|
text_are_you_sure: Sind Sie sicher?
|
||||||
|
text_are_you_sure_with_children: "Lösche Aufgabe und alle Unteraufgaben?"
|
||||||
text_journal_changed: "%{label} wurde von %{old} zu %{new} geändert"
|
text_journal_changed: "%{label} wurde von %{old} zu %{new} geändert"
|
||||||
text_journal_set_to: "%{label} wurde auf %{value} gesetzt"
|
text_journal_set_to: "%{label} wurde auf %{value} gesetzt"
|
||||||
text_journal_deleted: "%{label} %{old} wurde gelöscht"
|
text_journal_deleted: "%{label} %{old} wurde gelöscht"
|
||||||
@@ -936,20 +937,19 @@ de:
|
|||||||
enumeration_activities: Aktivitäten (Zeiterfassung)
|
enumeration_activities: Aktivitäten (Zeiterfassung)
|
||||||
enumeration_system_activity: System-Aktivität
|
enumeration_system_activity: System-Aktivität
|
||||||
|
|
||||||
text_are_you_sure_with_children: Delete issue and all child issues?
|
field_text: Textfeld
|
||||||
field_text: Text field
|
label_user_mail_option_only_owner: Nur für Aufgaben die ich angelegt habe
|
||||||
label_user_mail_option_only_owner: Only for things I am the owner of
|
setting_default_notification_option: Standard Benachrichtigungsoptionen
|
||||||
setting_default_notification_option: Default notification option
|
label_user_mail_option_only_my_events: Nur für Aufgaben die ich beobachte oder an welchen ich mitarbeite
|
||||||
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
|
label_user_mail_option_only_assigned: Nur für Aufgaben für die ich zuständig bin.
|
||||||
label_user_mail_option_only_assigned: Only for things I am assigned to
|
notice_not_authorized_archived_project: Das Projekt wurde archiviert und ist daher nicht nicht verfügbar.
|
||||||
notice_not_authorized_archived_project: The project you're trying to access has been archived.
|
label_user_mail_option_none: keine Ereignisse
|
||||||
label_user_mail_option_none: No events
|
field_member_of_group: Zuständigkeitsgruppe
|
||||||
field_member_of_group: Assignee's group
|
field_assigned_to_role: Zuständigkeitsrolle
|
||||||
field_assigned_to_role: Assignee's role
|
field_visible: Sichtbar
|
||||||
field_visible: Visible
|
setting_emails_header: Emailkopf
|
||||||
setting_emails_header: Emails header
|
setting_commit_logtime_activity_id: Aktivität für die Zeiterfassung
|
||||||
setting_commit_logtime_activity_id: Activity for logged time
|
text_time_logged_by_changeset: Angewendet in Changeset %{value}.
|
||||||
text_time_logged_by_changeset: Applied in changeset %{value}.
|
setting_commit_logtime_enabled: Aktiviere Zeitlogging
|
||||||
setting_commit_logtime_enabled: Enable time logging
|
notice_gantt_chart_truncated: Die Grafik ist unvollständig, da das Maximum der anzeigbaren Aufgaben überschritten wurde (%{max})
|
||||||
notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
|
setting_gantt_items_limit: Maximale Anzahl von Aufgaben die im Gantt-Chart angezeigt werden.
|
||||||
setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
|
|
||||||
@@ -166,7 +166,7 @@ fr:
|
|||||||
notice_successful_create: Création effectuée avec succès.
|
notice_successful_create: Création effectuée avec succès.
|
||||||
notice_successful_update: Mise à jour effectuée avec succès.
|
notice_successful_update: Mise à jour effectuée avec succès.
|
||||||
notice_successful_delete: Suppression effectuée avec succès.
|
notice_successful_delete: Suppression effectuée avec succès.
|
||||||
notice_successful_connection: Connection réussie.
|
notice_successful_connection: Connexion réussie.
|
||||||
notice_file_not_found: "La page à laquelle vous souhaitez accéder n'existe pas ou a été supprimée."
|
notice_file_not_found: "La page à laquelle vous souhaitez accéder n'existe pas ou a été supprimée."
|
||||||
notice_locking_conflict: Les données ont été mises à jour par un autre utilisateur. Mise à jour impossible.
|
notice_locking_conflict: Les données ont été mises à jour par un autre utilisateur. Mise à jour impossible.
|
||||||
notice_not_authorized: "Vous n'êtes pas autorisés à accéder à cette page."
|
notice_not_authorized: "Vous n'êtes pas autorisés à accéder à cette page."
|
||||||
@@ -449,6 +449,9 @@ fr:
|
|||||||
label_issue_view_all: Voir toutes les demandes
|
label_issue_view_all: Voir toutes les demandes
|
||||||
label_issue_added: Demande ajoutée
|
label_issue_added: Demande ajoutée
|
||||||
label_issue_updated: Demande mise à jour
|
label_issue_updated: Demande mise à jour
|
||||||
|
label_issue_note_added: Note ajoutée
|
||||||
|
label_issue_status_updated: Statut changé
|
||||||
|
label_issue_priority_updated: Priorité changée
|
||||||
label_issues_by: "Demandes par %{value}"
|
label_issues_by: "Demandes par %{value}"
|
||||||
label_document: Document
|
label_document: Document
|
||||||
label_document_new: Nouveau document
|
label_document_new: Nouveau document
|
||||||
@@ -486,7 +489,7 @@ fr:
|
|||||||
label_my_page: Ma page
|
label_my_page: Ma page
|
||||||
label_my_account: Mon compte
|
label_my_account: Mon compte
|
||||||
label_my_projects: Mes projets
|
label_my_projects: Mes projets
|
||||||
label_my_page_block: Ma page bloque
|
label_my_page_block: Blocs disponibles
|
||||||
label_administration: Administration
|
label_administration: Administration
|
||||||
label_login: Connexion
|
label_login: Connexion
|
||||||
label_logout: Déconnexion
|
label_logout: Déconnexion
|
||||||
|
|||||||
+27
-26
@@ -1,6 +1,7 @@
|
|||||||
# Italian translations for Ruby on Rails
|
# Italian translations for Ruby on Rails
|
||||||
# by Claudio Poli (masterkain@gmail.com)
|
# by Claudio Poli (masterkain@gmail.com)
|
||||||
# by Diego Pierotto (ita.translations@tiscali.it)
|
# by Diego Pierotto (ita.translations@tiscali.it)
|
||||||
|
# by Emidio Stani (emidiostani@gmail.com)
|
||||||
|
|
||||||
it:
|
it:
|
||||||
direction: ltr
|
direction: ltr
|
||||||
@@ -126,7 +127,7 @@ it:
|
|||||||
greater_than_start_date: "deve essere maggiore della data di partenza"
|
greater_than_start_date: "deve essere maggiore della data di partenza"
|
||||||
not_same_project: "non appartiene allo stesso progetto"
|
not_same_project: "non appartiene allo stesso progetto"
|
||||||
circular_dependency: "Questa relazione creerebbe una dipendenza circolare"
|
circular_dependency: "Questa relazione creerebbe una dipendenza circolare"
|
||||||
cant_link_an_issue_with_a_descendant: "An issue can not be linked to one of its subtasks"
|
cant_link_an_issue_with_a_descendant: "Una segnalazione non può essere collegata a una delle sue discendenti"
|
||||||
|
|
||||||
actionview_instancetag_blank_option: Scegli
|
actionview_instancetag_blank_option: Scegli
|
||||||
|
|
||||||
@@ -141,11 +142,11 @@ it:
|
|||||||
general_pdf_encoding: ISO-8859-1
|
general_pdf_encoding: ISO-8859-1
|
||||||
general_first_day_of_week: '1'
|
general_first_day_of_week: '1'
|
||||||
|
|
||||||
notice_account_updated: L'utente è stata aggiornato.
|
notice_account_updated: L'utente è stato aggiornato.
|
||||||
notice_account_invalid_creditentials: Nome utente o password non validi.
|
notice_account_invalid_creditentials: Nome utente o password non validi.
|
||||||
notice_account_password_updated: La password è stata aggiornata.
|
notice_account_password_updated: La password è stata aggiornata.
|
||||||
notice_account_wrong_password: Password errata
|
notice_account_wrong_password: Password errata
|
||||||
notice_account_register_done: L'utente è stata creato.
|
notice_account_register_done: L'utente è stato creato.
|
||||||
notice_account_unknown_email: Utente sconosciuto.
|
notice_account_unknown_email: Utente sconosciuto.
|
||||||
notice_can_t_change_password: Questo utente utilizza un metodo di autenticazione esterno. Impossibile cambiare la password.
|
notice_can_t_change_password: Questo utente utilizza un metodo di autenticazione esterno. Impossibile cambiare la password.
|
||||||
notice_account_lost_email_sent: Ti è stata spedita una email con le istruzioni per cambiare la password.
|
notice_account_lost_email_sent: Ti è stata spedita una email con le istruzioni per cambiare la password.
|
||||||
@@ -462,7 +463,7 @@ it:
|
|||||||
label_all_words: Tutte le parole
|
label_all_words: Tutte le parole
|
||||||
label_wiki: Wiki
|
label_wiki: Wiki
|
||||||
label_wiki_edit: Modifica wiki
|
label_wiki_edit: Modifica wiki
|
||||||
label_wiki_edit_plural: Modfiche wiki
|
label_wiki_edit_plural: Modifiche wiki
|
||||||
label_wiki_page: Pagina Wiki
|
label_wiki_page: Pagina Wiki
|
||||||
label_wiki_page_plural: Pagine wiki
|
label_wiki_page_plural: Pagine wiki
|
||||||
label_index_by_title: Ordina per titolo
|
label_index_by_title: Ordina per titolo
|
||||||
@@ -913,26 +914,26 @@ it:
|
|||||||
text_zoom_in: Aumenta ingrandimento
|
text_zoom_in: Aumenta ingrandimento
|
||||||
notice_unable_delete_time_entry: Impossibile eliminare il valore time log.
|
notice_unable_delete_time_entry: Impossibile eliminare il valore time log.
|
||||||
label_overall_spent_time: Totale tempo impiegato
|
label_overall_spent_time: Totale tempo impiegato
|
||||||
field_time_entries: Log time
|
field_time_entries: Tempo di collegamento
|
||||||
project_module_gantt: Gantt
|
project_module_gantt: Gantt
|
||||||
project_module_calendar: Calendar
|
project_module_calendar: Calendario
|
||||||
button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
|
button_edit_associated_wikipage: "Modifica la pagina wiki associata: %{page_title}"
|
||||||
text_are_you_sure_with_children: Delete issue and all child issues?
|
text_are_you_sure_with_children: Eliminare la segnalazione e tutte le discendenti?
|
||||||
field_text: Text field
|
field_text: Campo di testo
|
||||||
label_user_mail_option_only_owner: Only for things I am the owner of
|
label_user_mail_option_only_owner: Solo se io sono il proprietario
|
||||||
setting_default_notification_option: Default notification option
|
setting_default_notification_option: Opzione di notifica predefinita
|
||||||
label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
|
label_user_mail_option_only_my_events: Solo se sono un osservatore o sono coinvolto
|
||||||
label_user_mail_option_only_assigned: Only for things I am assigned to
|
label_user_mail_option_only_assigned: Solo quando mi assegnano attività
|
||||||
label_user_mail_option_none: No events
|
label_user_mail_option_none: Nessun evento
|
||||||
field_member_of_group: Assignee's group
|
field_member_of_group: Gruppo dell'assegnatario
|
||||||
field_assigned_to_role: Assignee's role
|
field_assigned_to_role: Ruolo dell'assegnatario
|
||||||
notice_not_authorized_archived_project: The project you're trying to access has been archived.
|
notice_not_authorized_archived_project: Il progetto a cui stai accedendo è stato archiviato.
|
||||||
label_principal_search: "Search for user or group:"
|
label_principal_search: "Cerca utente o gruppo:"
|
||||||
label_user_search: "Search for user:"
|
label_user_search: "Cerca utente:"
|
||||||
field_visible: Visible
|
field_visible: Visibile
|
||||||
setting_emails_header: Emails header
|
setting_emails_header: Intestazione email
|
||||||
setting_commit_logtime_activity_id: Activity for logged time
|
setting_commit_logtime_activity_id: Attività per il tempo di collegamento
|
||||||
text_time_logged_by_changeset: Applied in changeset %{value}.
|
text_time_logged_by_changeset: Usato nel changeset %{value}.
|
||||||
setting_commit_logtime_enabled: Enable time logging
|
setting_commit_logtime_enabled: Abilita registrazione del tempo di collegamento
|
||||||
notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
|
notice_gantt_chart_truncated: Il grafico è stato troncato perchè eccede il numero di oggetti (%{max}) da visualizzare
|
||||||
setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
|
setting_gantt_items_limit: Massimo numero di oggetti da visualizzare sul diagramma di gantt
|
||||||
@@ -188,6 +188,7 @@ ja:
|
|||||||
notice_unable_delete_version: バージョンを削除できません
|
notice_unable_delete_version: バージョンを削除できません
|
||||||
notice_unable_delete_time_entry: 作業時間を削除できません
|
notice_unable_delete_time_entry: 作業時間を削除できません
|
||||||
notice_issue_done_ratios_updated: チケットの進捗が更新されました。
|
notice_issue_done_ratios_updated: チケットの進捗が更新されました。
|
||||||
|
notice_gantt_chart_truncated: ガントチャートは、最大表示項目数(%{max})を超えたたため切り捨てられました。
|
||||||
|
|
||||||
error_can_t_load_default_data: "デフォルト設定がロードできませんでした: %{value}"
|
error_can_t_load_default_data: "デフォルト設定がロードできませんでした: %{value}"
|
||||||
error_scm_not_found: リポジトリに、エントリ/リビジョンが存在しません。
|
error_scm_not_found: リポジトリに、エントリ/リビジョンが存在しません。
|
||||||
@@ -380,6 +381,9 @@ ja:
|
|||||||
setting_start_of_week: 週の開始曜日
|
setting_start_of_week: 週の開始曜日
|
||||||
setting_rest_api_enabled: RESTによるWebサービスを有効にする
|
setting_rest_api_enabled: RESTによるWebサービスを有効にする
|
||||||
setting_default_notification_option: デフォルトのメール通知オプション
|
setting_default_notification_option: デフォルトのメール通知オプション
|
||||||
|
setting_commit_logtime_enabled: コミット時に作業時間を記録する
|
||||||
|
setting_commit_logtime_activity_id: 作業時間の作業分類
|
||||||
|
setting_gantt_items_limit: ガントチャート最大表示項目数
|
||||||
|
|
||||||
permission_add_project: プロジェクトの追加
|
permission_add_project: プロジェクトの追加
|
||||||
permission_add_subprojects: サブプロジェクトの追加
|
permission_add_subprojects: サブプロジェクトの追加
|
||||||
@@ -901,6 +905,7 @@ ja:
|
|||||||
text_no_configuration_data: "ロール、トラッカー、チケットのステータス、ワークフローがまだ設定されていません。\nデフォルト設定のロードを強くお勧めします。ロードした後、それを修正することができます。"
|
text_no_configuration_data: "ロール、トラッカー、チケットのステータス、ワークフローがまだ設定されていません。\nデフォルト設定のロードを強くお勧めします。ロードした後、それを修正することができます。"
|
||||||
text_load_default_configuration: デフォルト設定をロード
|
text_load_default_configuration: デフォルト設定をロード
|
||||||
text_status_changed_by_changeset: "更新履歴 %{value} で適用されました。"
|
text_status_changed_by_changeset: "更新履歴 %{value} で適用されました。"
|
||||||
|
text_time_logged_by_changeset: "更新履歴 %{value} で適用されました。"
|
||||||
text_issues_destroy_confirmation: '本当に選択したチケットを削除しますか?'
|
text_issues_destroy_confirmation: '本当に選択したチケットを削除しますか?'
|
||||||
text_select_project_modules: 'このプロジェクトで使用するモジュールを選択してください:'
|
text_select_project_modules: 'このプロジェクトで使用するモジュールを選択してください:'
|
||||||
text_default_administrator_account_changed: デフォルト管理アカウントが変更済
|
text_default_administrator_account_changed: デフォルト管理アカウントが変更済
|
||||||
@@ -952,8 +957,3 @@ ja:
|
|||||||
enumeration_doc_categories: 文書カテゴリ
|
enumeration_doc_categories: 文書カテゴリ
|
||||||
enumeration_activities: 作業分類 (時間トラッキング)
|
enumeration_activities: 作業分類 (時間トラッキング)
|
||||||
enumeration_system_activity: システム作業分類
|
enumeration_system_activity: システム作業分類
|
||||||
setting_commit_logtime_activity_id: Activity for logged time
|
|
||||||
text_time_logged_by_changeset: Applied in changeset %{value}.
|
|
||||||
setting_commit_logtime_enabled: Enable time logging
|
|
||||||
notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
|
|
||||||
setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
|
|
||||||
@@ -275,9 +275,9 @@ nl:
|
|||||||
field_user: Gebruiker
|
field_user: Gebruiker
|
||||||
field_value: Waarde
|
field_value: Waarde
|
||||||
field_version: Versie
|
field_version: Versie
|
||||||
general_csv_decimal_separator: '.'
|
general_csv_decimal_separator: ','
|
||||||
general_csv_encoding: ISO-8859-1
|
general_csv_encoding: ISO-8859-1
|
||||||
general_csv_separator: ','
|
general_csv_separator: ';'
|
||||||
general_first_day_of_week: '7'
|
general_first_day_of_week: '7'
|
||||||
general_lang_name: 'Nederlands'
|
general_lang_name: 'Nederlands'
|
||||||
general_pdf_encoding: ISO-8859-1
|
general_pdf_encoding: ISO-8859-1
|
||||||
|
|||||||
@@ -334,7 +334,7 @@ pl:
|
|||||||
label_auth_source_plural: Tryby identyfikacji
|
label_auth_source_plural: Tryby identyfikacji
|
||||||
label_authentication: Identyfikacja
|
label_authentication: Identyfikacja
|
||||||
label_blocked_by: zablokowane przez
|
label_blocked_by: zablokowane przez
|
||||||
label_blocks: blokady
|
label_blocks: blokuje
|
||||||
label_board: Forum
|
label_board: Forum
|
||||||
label_board_new: Nowe forum
|
label_board_new: Nowe forum
|
||||||
label_board_plural: Fora
|
label_board_plural: Fora
|
||||||
@@ -410,7 +410,7 @@ pl:
|
|||||||
label_download_plural: "%{count} Pobrania"
|
label_download_plural: "%{count} Pobrania"
|
||||||
label_downloads_abbr: Pobieranie
|
label_downloads_abbr: Pobieranie
|
||||||
label_duplicated_by: zduplikowane przez
|
label_duplicated_by: zduplikowane przez
|
||||||
label_duplicates: duplikaty
|
label_duplicates: duplikuje
|
||||||
label_end_to_end: koniec do końca
|
label_end_to_end: koniec do końca
|
||||||
label_end_to_start: koniec do początku
|
label_end_to_start: koniec do początku
|
||||||
label_enumeration_new: Nowa wartość
|
label_enumeration_new: Nowa wartość
|
||||||
|
|||||||
+23
-23
@@ -208,6 +208,7 @@ sv:
|
|||||||
notice_unable_delete_version: Denna version var inte möjlig att ta bort.
|
notice_unable_delete_version: Denna version var inte möjlig att ta bort.
|
||||||
notice_unable_delete_time_entry: Tidloggning kunde inte tas bort.
|
notice_unable_delete_time_entry: Tidloggning kunde inte tas bort.
|
||||||
notice_issue_done_ratios_updated: % klart uppdaterade.
|
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})"
|
||||||
|
|
||||||
error_can_t_load_default_data: "Standardkonfiguration gick inte att läsa in: %{value}"
|
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_not_found: "Inlägg och/eller revision finns inte i detta versionsarkiv."
|
||||||
@@ -217,7 +218,7 @@ sv:
|
|||||||
error_no_tracker_in_project: 'Ingen ärendetyp är associerad med projektet. Vänligen kontrollera projektinställningarna.'
|
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").'
|
error_no_default_issue_status: 'Ingen status är definierad som standard för nya ärenden. Vänligen kontrollera din konfiguration (Gå till "Administration -> Ärendestatus").'
|
||||||
error_can_not_delete_custom_field: Kan inte ta bort användardefinerat fält
|
error_can_not_delete_custom_field: Kan inte ta bort användardefinerat fält
|
||||||
error_can_not_delete_tracker: Det finns ärenden av denna typ och den är därför inte möjlig att ta bort.
|
error_can_not_delete_tracker: "Det finns ärenden av denna typ och den är därför inte möjlig att ta bort."
|
||||||
error_can_not_remove_role: "Denna roll används och den är därför inte möjlig att ta bort."
|
error_can_not_remove_role: "Denna roll används och den är därför inte möjlig att ta bort."
|
||||||
error_can_not_reopen_issue_on_closed_version: 'Ett ärende tilldelat en stängd version kan inte öppnas på nytt'
|
error_can_not_reopen_issue_on_closed_version: 'Ett ärende tilldelat en stängd version kan inte öppnas på nytt'
|
||||||
error_can_not_archive_project: Detta projekt kan inte arkiveras
|
error_can_not_archive_project: Detta projekt kan inte arkiveras
|
||||||
@@ -225,7 +226,7 @@ sv:
|
|||||||
error_workflow_copy_source: 'Vänligen välj källans ärendetyp eller roll'
|
error_workflow_copy_source: 'Vänligen välj källans ärendetyp eller roll'
|
||||||
error_workflow_copy_target: 'Vänligen välj ärendetyp(er) och roll(er) för mål'
|
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_delete_issue_status: 'Ärendestatus kunde inte tas bort'
|
||||||
error_unable_to_connect: Kan inte ansluta (%{value})
|
error_unable_to_connect: "Kan inte ansluta (%{value})"
|
||||||
|
|
||||||
warning_attachments_not_saved: "%{count} fil(er) kunde inte sparas."
|
warning_attachments_not_saved: "%{count} fil(er) kunde inte sparas."
|
||||||
|
|
||||||
@@ -240,9 +241,9 @@ sv:
|
|||||||
mail_subject_reminder: "%{count} ärende(n) har deadline under de kommande %{days} dagarna"
|
mail_subject_reminder: "%{count} ärende(n) har deadline under de kommande %{days} dagarna"
|
||||||
mail_body_reminder: "%{count} ärende(n) som är tilldelat dig har deadline under de %{days} dagarna:"
|
mail_body_reminder: "%{count} ärende(n) som är tilldelat dig har deadline under de %{days} dagarna:"
|
||||||
mail_subject_wiki_content_added: "'%{id}' wikisida has lagts till"
|
mail_subject_wiki_content_added: "'%{id}' wikisida has lagts till"
|
||||||
mail_body_wiki_content_added: The '%{id}' wikisida has lagts till av %{author}.
|
mail_body_wiki_content_added: "The '%{id}' wikisida has lagts till av %{author}."
|
||||||
mail_subject_wiki_content_updated: "'%{id}' wikisida har uppdaterats"
|
mail_subject_wiki_content_updated: "'%{id}' wikisida har uppdaterats"
|
||||||
mail_body_wiki_content_updated: The '%{id}' wikisida har uppdaterats av %{author}.
|
mail_body_wiki_content_updated: "The '%{id}' wikisida har uppdaterats av %{author}."
|
||||||
|
|
||||||
gui_validation_error: 1 fel
|
gui_validation_error: 1 fel
|
||||||
gui_validation_error_plural: "%{count} fel"
|
gui_validation_error_plural: "%{count} fel"
|
||||||
@@ -340,8 +341,8 @@ sv:
|
|||||||
field_group_by: Gruppera resultat efter
|
field_group_by: Gruppera resultat efter
|
||||||
field_sharing: Delning
|
field_sharing: Delning
|
||||||
field_parent_issue: Förälderaktivitet
|
field_parent_issue: Förälderaktivitet
|
||||||
field_member_of_group: Tilldelad användares grupp
|
field_member_of_group: "Tilldelad användares grupp"
|
||||||
field_assigned_to_role: Tilldelad användares roll
|
field_assigned_to_role: "Tilldelad användares roll"
|
||||||
field_text: Textfält
|
field_text: Textfält
|
||||||
field_visible: Synlig
|
field_visible: Synlig
|
||||||
|
|
||||||
@@ -380,7 +381,7 @@ sv:
|
|||||||
setting_activity_days_default: Dagar som visas på projektaktivitet
|
setting_activity_days_default: Dagar som visas på projektaktivitet
|
||||||
setting_display_subprojects_issues: Visa ärenden från underprojekt i huvudprojekt
|
setting_display_subprojects_issues: Visa ärenden från underprojekt i huvudprojekt
|
||||||
setting_enabled_scm: Aktivera SCM
|
setting_enabled_scm: Aktivera SCM
|
||||||
setting_mail_handler_body_delimiters: Trunkera mail efter en av följande rader
|
setting_mail_handler_body_delimiters: "Trunkera mail efter en av följande rader"
|
||||||
setting_mail_handler_api_enabled: Aktivera WS för inkommande mail
|
setting_mail_handler_api_enabled: Aktivera WS för inkommande mail
|
||||||
setting_mail_handler_api_key: API-nyckel
|
setting_mail_handler_api_key: API-nyckel
|
||||||
setting_sequential_project_identifiers: Generera projektidentifierare sekventiellt
|
setting_sequential_project_identifiers: Generera projektidentifierare sekventiellt
|
||||||
@@ -400,6 +401,9 @@ sv:
|
|||||||
setting_rest_api_enabled: Aktivera REST webbtjänst
|
setting_rest_api_enabled: Aktivera REST webbtjänst
|
||||||
setting_cache_formatted_text: Cacha formaterad text
|
setting_cache_formatted_text: Cacha formaterad text
|
||||||
setting_default_notification_option: Standard notifieringsalternativ
|
setting_default_notification_option: Standard notifieringsalternativ
|
||||||
|
setting_commit_logtime_enabled: Aktivera tidloggning
|
||||||
|
setting_commit_logtime_activity_id: Aktivitet för loggad tid
|
||||||
|
setting_gantt_items_limit: Maximalt antal aktiviteter som visas i gantt-schemat
|
||||||
|
|
||||||
permission_add_project: Skapa projekt
|
permission_add_project: Skapa projekt
|
||||||
permission_add_subprojects: Skapa underprojekt
|
permission_add_subprojects: Skapa underprojekt
|
||||||
@@ -581,7 +585,7 @@ sv:
|
|||||||
label_version_plural: Versioner
|
label_version_plural: Versioner
|
||||||
label_close_versions: Stäng klara versioner
|
label_close_versions: Stäng klara versioner
|
||||||
label_confirmation: Bekräftelse
|
label_confirmation: Bekräftelse
|
||||||
label_export_to: Exportera till
|
label_export_to: 'Finns även som:'
|
||||||
label_read: Läs...
|
label_read: Läs...
|
||||||
label_public_projects: Publika projekt
|
label_public_projects: Publika projekt
|
||||||
label_open_issues: öppen
|
label_open_issues: öppen
|
||||||
@@ -666,7 +670,7 @@ sv:
|
|||||||
label_tag: Tag
|
label_tag: Tag
|
||||||
label_revision: Revision
|
label_revision: Revision
|
||||||
label_revision_plural: Revisioner
|
label_revision_plural: Revisioner
|
||||||
label_revision_id: Revision %{value}
|
label_revision_id: "Revision %{value}"
|
||||||
label_associated_revisions: Associerade revisioner
|
label_associated_revisions: Associerade revisioner
|
||||||
label_added: tillagd
|
label_added: tillagd
|
||||||
label_modified: modifierad
|
label_modified: modifierad
|
||||||
@@ -775,10 +779,10 @@ sv:
|
|||||||
label_search_titles_only: Sök endast i titlar
|
label_search_titles_only: Sök endast i titlar
|
||||||
label_user_mail_option_all: "För alla händelser i mina projekt"
|
label_user_mail_option_all: "För alla händelser i mina projekt"
|
||||||
label_user_mail_option_selected: "För alla händelser i markerade projekt..."
|
label_user_mail_option_selected: "För alla händelser i markerade projekt..."
|
||||||
label_user_mail_option_none: Inga händelser
|
label_user_mail_option_none: "Inga händelser"
|
||||||
label_user_mail_option_only_my_events: Endast för saker jag bevakar eller är inblandad i
|
label_user_mail_option_only_my_events: "Endast för saker jag bevakar eller är inblandad i"
|
||||||
label_user_mail_option_only_assigned: Endast för saker jag är tilldelad
|
label_user_mail_option_only_assigned: "Endast för saker jag är tilldelad"
|
||||||
label_user_mail_option_only_owner: Endast för saker jag äger
|
label_user_mail_option_only_owner: "Endast för saker jag äger"
|
||||||
label_user_mail_no_self_notified: "Jag vill inte bli underrättad om ändringar som jag har gjort"
|
label_user_mail_no_self_notified: "Jag vill inte bli underrättad om ändringar som jag har gjort"
|
||||||
label_registration_activation_by_email: kontoaktivering med mail
|
label_registration_activation_by_email: kontoaktivering med mail
|
||||||
label_registration_manual_activation: manuell kontoaktivering
|
label_registration_manual_activation: manuell kontoaktivering
|
||||||
@@ -825,7 +829,7 @@ sv:
|
|||||||
label_display_used_statuses_only: Visa endast status som används av denna ärendetyp
|
label_display_used_statuses_only: Visa endast status som används av denna ärendetyp
|
||||||
label_api_access_key: API-nyckel
|
label_api_access_key: API-nyckel
|
||||||
label_missing_api_access_key: Saknar en API-nyckel
|
label_missing_api_access_key: Saknar en API-nyckel
|
||||||
label_api_access_key_created_on: API-nyckel skapad för %{value} sedan
|
label_api_access_key_created_on: "API-nyckel skapad för %{value} sedan"
|
||||||
label_profile: Profil
|
label_profile: Profil
|
||||||
label_subtask_plural: Underaktiviteter
|
label_subtask_plural: Underaktiviteter
|
||||||
label_project_copy_notifications: Skicka mailnotifieringar när projektet kopieras
|
label_project_copy_notifications: Skicka mailnotifieringar när projektet kopieras
|
||||||
@@ -921,6 +925,7 @@ sv:
|
|||||||
text_no_configuration_data: "Roller, ärendetyper, ärendestatus och arbetsflöden har inte konfigurerats ännu.\nDet rekommenderas att läsa in standardkonfigurationen. Du kommer att kunna göra ändringar efter att den blivit inläst."
|
text_no_configuration_data: "Roller, ärendetyper, ärendestatus och arbetsflöden har inte konfigurerats ännu.\nDet rekommenderas att läsa in standardkonfigurationen. Du kommer att kunna göra ändringar efter att den blivit inläst."
|
||||||
text_load_default_configuration: Läs in standardkonfiguration
|
text_load_default_configuration: Läs in standardkonfiguration
|
||||||
text_status_changed_by_changeset: "Tilldelad i changeset %{value}."
|
text_status_changed_by_changeset: "Tilldelad i changeset %{value}."
|
||||||
|
text_time_logged_by_changeset: "Tilldelad i changeset %{value}."
|
||||||
text_issues_destroy_confirmation: 'Är du säker på att du vill radera markerade ärende(n) ?'
|
text_issues_destroy_confirmation: 'Är du säker på att du vill radera markerade ärende(n) ?'
|
||||||
text_select_project_modules: 'Välj vilka moduler som ska vara aktiva för projektet:'
|
text_select_project_modules: 'Välj vilka moduler som ska vara aktiva för projektet:'
|
||||||
text_default_administrator_account_changed: Standardadministratörens konto ändrat
|
text_default_administrator_account_changed: Standardadministratörens konto ändrat
|
||||||
@@ -938,10 +943,10 @@ sv:
|
|||||||
text_repository_usernames_mapping: "Välj eller uppdatera den Redmine-användare som är mappad till varje användarnamn i versionarkivloggen.\nAnvändare med samma användarnamn eller mailadress i både Redmine och versionsarkivet mappas automatiskt."
|
text_repository_usernames_mapping: "Välj eller uppdatera den Redmine-användare som är mappad till varje användarnamn i versionarkivloggen.\nAnvändare med samma användarnamn eller mailadress i både Redmine och versionsarkivet mappas automatiskt."
|
||||||
text_diff_truncated: '... Denna diff har förminskats eftersom den överskrider den maximala storlek som kan visas.'
|
text_diff_truncated: '... Denna diff har förminskats eftersom den överskrider den maximala storlek som kan visas.'
|
||||||
text_custom_field_possible_values_info: 'Ett värde per rad'
|
text_custom_field_possible_values_info: 'Ett värde per rad'
|
||||||
text_wiki_page_destroy_question: Denna sida har %{descendants} underliggande sidor. Vad vill du göra?
|
text_wiki_page_destroy_question: "Denna sida har %{descendants} underliggande sidor. Vad vill du göra?"
|
||||||
text_wiki_page_nullify_children: Behåll undersidor som rotsidor
|
text_wiki_page_nullify_children: "Behåll undersidor som rotsidor"
|
||||||
text_wiki_page_destroy_children: Ta bort alla underliggande sidor
|
text_wiki_page_destroy_children: "Ta bort alla underliggande sidor"
|
||||||
text_wiki_page_reassign_children: Flytta undersidor till denna föräldersida
|
text_wiki_page_reassign_children: "Flytta undersidor till denna föräldersida"
|
||||||
text_own_membership_delete_confirmation: "Några av, eller alla, dina behörigheter kommer att tas bort och du kanske inte längre kommer kunna göra ändringar i det här projektet.\nVill du verkligen fortsätta?"
|
text_own_membership_delete_confirmation: "Några av, eller alla, dina behörigheter kommer att tas bort och du kanske inte längre kommer kunna göra ändringar i det här projektet.\nVill du verkligen fortsätta?"
|
||||||
text_zoom_out: Zooma ut
|
text_zoom_out: Zooma ut
|
||||||
text_zoom_in: Zooma in
|
text_zoom_in: Zooma in
|
||||||
@@ -972,8 +977,3 @@ sv:
|
|||||||
enumeration_doc_categories: Dokumentkategorier
|
enumeration_doc_categories: Dokumentkategorier
|
||||||
enumeration_activities: Aktiviteter (tidsuppföljning)
|
enumeration_activities: Aktiviteter (tidsuppföljning)
|
||||||
enumeration_system_activity: Systemaktivitet
|
enumeration_system_activity: Systemaktivitet
|
||||||
setting_commit_logtime_activity_id: Activity for logged time
|
|
||||||
text_time_logged_by_changeset: Applied in changeset %{value}.
|
|
||||||
setting_commit_logtime_enabled: Enable time logging
|
|
||||||
notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
|
|
||||||
setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
|
|
||||||
@@ -248,6 +248,7 @@
|
|||||||
notice_unable_delete_version: 無法刪除版本。
|
notice_unable_delete_version: 無法刪除版本。
|
||||||
notice_unable_delete_time_entry: 無法刪除工時記錄項目。
|
notice_unable_delete_time_entry: 無法刪除工時記錄項目。
|
||||||
notice_issue_done_ratios_updated: 項目完成百分比已更新。
|
notice_issue_done_ratios_updated: 項目完成百分比已更新。
|
||||||
|
notice_gantt_chart_truncated: "由於項目數量超過可顯示數量的最大值 (%{max}),故此甘特圖尾部已被截斷"
|
||||||
|
|
||||||
error_can_t_load_default_data: "無法載入預設組態: %{value}"
|
error_can_t_load_default_data: "無法載入預設組態: %{value}"
|
||||||
error_scm_not_found: "在 SCM 儲存庫中找不到這個項目或版次。"
|
error_scm_not_found: "在 SCM 儲存庫中找不到這個項目或版次。"
|
||||||
@@ -442,6 +443,7 @@
|
|||||||
setting_default_notification_option: 預設通知選項
|
setting_default_notification_option: 預設通知選項
|
||||||
setting_commit_logtime_enabled: 啟用送交中的時間記錄
|
setting_commit_logtime_enabled: 啟用送交中的時間記錄
|
||||||
setting_commit_logtime_activity_id: 時間記錄對應的活動
|
setting_commit_logtime_activity_id: 時間記錄對應的活動
|
||||||
|
setting_gantt_items_limit: 甘特圖中項目顯示數量的最大值
|
||||||
|
|
||||||
permission_add_project: 建立專案
|
permission_add_project: 建立專案
|
||||||
permission_add_subprojects: 建立子專案
|
permission_add_subprojects: 建立子專案
|
||||||
@@ -1015,6 +1017,3 @@
|
|||||||
enumeration_doc_categories: 文件分類
|
enumeration_doc_categories: 文件分類
|
||||||
enumeration_activities: 活動 (時間追蹤)
|
enumeration_activities: 活動 (時間追蹤)
|
||||||
enumeration_system_activity: 系統活動
|
enumeration_system_activity: 系統活動
|
||||||
|
|
||||||
notice_gantt_chart_truncated: The chart was truncated because it exceeds the maximum number of items that can be displayed (%{max})
|
|
||||||
setting_gantt_items_limit: Maximum number of items displayed on the gantt chart
|
|
||||||
@@ -17,5 +17,6 @@ class AddUniqueIndexOnMembers < ActiveRecord::Migration
|
|||||||
end
|
end
|
||||||
|
|
||||||
def self.down
|
def self.down
|
||||||
|
remove_index :members, [:user_id, :project_id]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
+95
-1
@@ -1,9 +1,103 @@
|
|||||||
== Redmine changelog
|
== Redmine changelog
|
||||||
|
|
||||||
Redmine - project management software
|
Redmine - project management software
|
||||||
Copyright (C) 2006-2010 Jean-Philippe Lang
|
Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||||
http://www.redmine.org/
|
http://www.redmine.org/
|
||||||
|
|
||||||
|
== 2011-01-30 v1.1.1
|
||||||
|
|
||||||
|
* Defect #4899: Redmine fails to list files for darcs repository
|
||||||
|
* Defect #7245: Wiki fails to find pages with cyrillic characters using postgresql
|
||||||
|
* Defect #7256: redmine/public/.htaccess must be moved for non-fastcgi installs/upgrades
|
||||||
|
* Defect #7258: Automatic spent time logging does not work properly with SQLite3
|
||||||
|
* Defect #7259: Released 1.1.0 uses "devel" label inside admin information
|
||||||
|
* Defect #7265: "Loading..." icon does not disappear after add project member
|
||||||
|
* Defect #7266: Test test_due_date_distance_in_words fail due to undefined locale
|
||||||
|
* Defect #7274: CSV value separator in dutch locale
|
||||||
|
* Defect #7277: Enabling gravatas causes usernames to overlap first name field in user list
|
||||||
|
* Defect #7294: "Notifiy for only project I select" is not available anymore in 1.1.0
|
||||||
|
* Defect #7307: HTTP 500 error on query for empty revision
|
||||||
|
* Defect #7313: Label not translated in french in Settings/Email Notification tab
|
||||||
|
* Defect #7329: <code class="javascript"> with long strings may hang server
|
||||||
|
* Defect #7337: My page french translation
|
||||||
|
* Defect #7348: French Translation of "Connection"
|
||||||
|
* Defect #7385: Error when viewing an issue which was related to a deleted subtask
|
||||||
|
* Defect #7386: NoMethodError on pdf export
|
||||||
|
* Defect #7415: Darcs adapter recognizes new files as modified files above Darcs 2.4
|
||||||
|
* Defect #7421: no email sent with 'Notifiy for any event on the selected projects only'
|
||||||
|
* Feature #5344: Update to latest CodeRay 0.9.x
|
||||||
|
|
||||||
|
== 2011-01-09 v1.1.0
|
||||||
|
|
||||||
|
* Defect #2038: Italics in wiki headers show-up wrong in the toc
|
||||||
|
* Defect #3449: Redmine Takes Too Long On Large Mercurial Repository
|
||||||
|
* Defect #3567: Sorting for changesets might go wrong on Mercurial repos
|
||||||
|
* Defect #3707: {{toc}} doesn't work with {{include}}
|
||||||
|
* Defect #5096: Redmine hangs up while browsing Git repository
|
||||||
|
* Defect #6000: Safe Attributes prevents plugin extension of Issue model...
|
||||||
|
* Defect #6064: Modules not assigned to projects created via API
|
||||||
|
* Defect #6110: MailHandler should allow updating Issue Priority and Custom fields
|
||||||
|
* Defect #6136: JSON API holds less information than XML API
|
||||||
|
* Defect #6345: xml used by rest API is invalid
|
||||||
|
* Defect #6348: Gantt chart PDF rendering errors
|
||||||
|
* Defect #6403: Updating an issue with custom fields fails
|
||||||
|
* Defect #6467: "Member of role", "Member of group" filter not work correctly
|
||||||
|
* Defect #6473: New gantt broken after clearing issue filters
|
||||||
|
* Defect #6541: Email notifications send to everybody
|
||||||
|
* Defect #6549: Notification settings not migrated properly
|
||||||
|
* Defect #6591: Acronyms must have a minimum of three characters
|
||||||
|
* Defect #6674: Delete time log broken after changes to REST
|
||||||
|
* Defect #6681: Mercurial, Bazaar and Darcs auto close issue text should be commit id instead of revision number
|
||||||
|
* Defect #6724: Wiki uploads does not work anymore (SVN 4266)
|
||||||
|
* Defect #6746: Wiki links are broken on Activity page
|
||||||
|
* Defect #6747: Wiki diff does not work since r4265
|
||||||
|
* Defect #6763: New gantt charts: subject displayed twice on issues
|
||||||
|
* Defect #6826: Clicking "Add" twice creates duplicate member record
|
||||||
|
* Defect #6844: Unchecking status filter on the issue list has no effect
|
||||||
|
* Defect #6895: Wrong Polish translation of "blocks"
|
||||||
|
* Defect #6943: Migration from boolean to varchar fails on PostgreSQL 8.1
|
||||||
|
* Defect #7064: Mercurial adapter does not recognize non alphabetic nor numeric in UTF-8 copied files
|
||||||
|
* Defect #7128: New gantt chart does not render subtasks under parent task
|
||||||
|
* Defect #7135: paging mechanism returns the same last page forever
|
||||||
|
* Defect #7188: Activity page not refreshed when changing language
|
||||||
|
* Defect #7195: Apply CLI-supplied defaults for incoming mail only to new issues not replies
|
||||||
|
* Defect #7197: Tracker reset to default when replying to an issue email
|
||||||
|
* Defect #7213: Copy project does not copy all roles and permissions
|
||||||
|
* Defect #7225: Project settings: Trackers & Custom fields only relevant if module Issue tracking is active
|
||||||
|
* Feature #630: Allow non-unique names for projects
|
||||||
|
* Feature #1738: Add a "Visible" flag to project/user custom fields
|
||||||
|
* Feature #2803: Support for Javascript in Themes
|
||||||
|
* Feature #2852: Clean Incoming Email of quoted text "----- Reply above this line ------"
|
||||||
|
* Feature #2995: Improve error message when trying to access an archived project
|
||||||
|
* Feature #3170: Autocomplete issue relations on subject
|
||||||
|
* Feature #3503: Administrator Be Able To Modify Email settings Of Users
|
||||||
|
* Feature #4155: Automatic spent time logging from commit messages
|
||||||
|
* Feature #5136: Parent select on Wiki rename page
|
||||||
|
* Feature #5338: Descendants (subtasks) should be available via REST API
|
||||||
|
* Feature #5494: Wiki TOC should display heading from level 4
|
||||||
|
* Feature #5594: Improve MailHandler's keyword handling
|
||||||
|
* Feature #5622: Allow version to be set via incoming email
|
||||||
|
* Feature #5712: Reload themes
|
||||||
|
* Feature #5869: Issue filters by Group and Role
|
||||||
|
* Feature #6092: Truncate Git revision labels in Activity page/feed and allow configurable length
|
||||||
|
* Feature #6112: Accept localized keywords when receiving emails
|
||||||
|
* Feature #6140: REST issues response with issue count limit and offset
|
||||||
|
* Feature #6260: REST API for Users
|
||||||
|
* Feature #6276: Gantt Chart rewrite
|
||||||
|
* Feature #6446: Remove length limits on project identifier and name
|
||||||
|
* Feature #6628: Improvements in truncate email
|
||||||
|
* Feature #6779: Project JSON API
|
||||||
|
* Feature #6823: REST API for time tracker.
|
||||||
|
* Feature #7072: REST API for news
|
||||||
|
* Feature #7111: Expose more detail on journal entries
|
||||||
|
* Feature #7141: REST API: get information about current user
|
||||||
|
* Patch #4807: Allow to set the done_ratio field with the incoming mail system
|
||||||
|
* Patch #5441: Initialize TimeEntry attributes with params[:time_entry]
|
||||||
|
* Patch #6762: Use GET instead of POST to retrieve context_menu
|
||||||
|
* Patch #7160: French translation ofr "not_a_date" is missing
|
||||||
|
* Patch #7212: Missing remove_index in AddUniqueIndexOnMembers down migration
|
||||||
|
|
||||||
|
|
||||||
== 2010-12-23 v1.0.5
|
== 2010-12-23 v1.0.5
|
||||||
|
|
||||||
* #6656: Mercurial adapter loses seconds of commit times
|
* #6656: Mercurial adapter loses seconds of commit times
|
||||||
|
|||||||
@@ -255,7 +255,7 @@ module Redmine
|
|||||||
pdf.SetFontStyle('B',9)
|
pdf.SetFontStyle('B',9)
|
||||||
pdf.Cell(35,5, l(:field_description) + ":")
|
pdf.Cell(35,5, l(:field_description) + ":")
|
||||||
pdf.SetFontStyle('',9)
|
pdf.SetFontStyle('',9)
|
||||||
pdf.MultiCell(155,5, issue.description,"BR")
|
pdf.MultiCell(155,5, issue.description.to_s,"BR")
|
||||||
|
|
||||||
pdf.Line(pdf.GetX, y0, pdf.GetX, pdf.GetY)
|
pdf.Line(pdf.GetX, y0, pdf.GetX, pdf.GetY)
|
||||||
pdf.Line(pdf.GetX, pdf.GetY, 170, pdf.GetY)
|
pdf.Line(pdf.GetX, pdf.GetY, 170, pdf.GetY)
|
||||||
@@ -271,7 +271,7 @@ module Redmine
|
|||||||
pdf.Ln
|
pdf.Ln
|
||||||
unless changeset.comments.blank?
|
unless changeset.comments.blank?
|
||||||
pdf.SetFontStyle('',8)
|
pdf.SetFontStyle('',8)
|
||||||
pdf.MultiCell(190,5, changeset.comments)
|
pdf.MultiCell(190,5, changeset.comments.to_s)
|
||||||
end
|
end
|
||||||
pdf.Ln
|
pdf.Ln
|
||||||
end
|
end
|
||||||
@@ -291,7 +291,7 @@ module Redmine
|
|||||||
end
|
end
|
||||||
if journal.notes?
|
if journal.notes?
|
||||||
pdf.SetFontStyle('',8)
|
pdf.SetFontStyle('',8)
|
||||||
pdf.MultiCell(190,5, journal.notes)
|
pdf.MultiCell(190,5, journal.notes.to_s)
|
||||||
end
|
end
|
||||||
pdf.Ln
|
pdf.Ln
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -271,7 +271,8 @@ module Redmine
|
|||||||
end
|
end
|
||||||
|
|
||||||
class Revision
|
class Revision
|
||||||
attr_accessor :identifier, :scmid, :name, :author, :time, :message, :paths, :revision, :branch
|
attr_accessor :scmid, :name, :author, :time, :message, :paths, :revision, :branch
|
||||||
|
attr_writer :identifier
|
||||||
|
|
||||||
def initialize(attributes={})
|
def initialize(attributes={})
|
||||||
self.identifier = attributes[:identifier]
|
self.identifier = attributes[:identifier]
|
||||||
@@ -285,6 +286,16 @@ module Redmine
|
|||||||
self.branch = attributes[:branch]
|
self.branch = attributes[:branch]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Returns the identifier of this revision; see also Changeset model
|
||||||
|
def identifier
|
||||||
|
(@identifier || revision).to_s
|
||||||
|
end
|
||||||
|
|
||||||
|
# Returns the readable identifier.
|
||||||
|
def format_identifier
|
||||||
|
identifier
|
||||||
|
end
|
||||||
|
|
||||||
def save(repo)
|
def save(repo)
|
||||||
Changeset.transaction do
|
Changeset.transaction do
|
||||||
changeset = Changeset.new(
|
changeset = Changeset.new(
|
||||||
|
|||||||
@@ -31,16 +31,14 @@ module Redmine
|
|||||||
end
|
end
|
||||||
|
|
||||||
def darcs_binary_version
|
def darcs_binary_version
|
||||||
cmd = "#{DARCS_BIN} --version"
|
darcsversion = darcs_binary_version_from_command_line
|
||||||
version = nil
|
if m = darcsversion.match(%r{\A(.*?)((\d+\.)+\d+)})
|
||||||
shellout(cmd) do |io|
|
m[2].scan(%r{\d+}).collect(&:to_i)
|
||||||
# Read darcs version in first returned line
|
|
||||||
if m = io.gets.match(%r{((\d+\.)+\d+)})
|
|
||||||
version = m[0].scan(%r{\d+}).collect(&:to_i)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return nil if $? && $?.exitstatus != 0
|
|
||||||
version
|
def darcs_binary_version_from_command_line
|
||||||
|
shellout("#{DARCS_BIN} --version") { |io| io.read }.to_s
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -64,7 +62,9 @@ module Redmine
|
|||||||
# or nil if the given path doesn't exist in the repository
|
# or nil if the given path doesn't exist in the repository
|
||||||
def entries(path=nil, identifier=nil)
|
def entries(path=nil, identifier=nil)
|
||||||
path_prefix = (path.blank? ? '' : "#{path}/")
|
path_prefix = (path.blank? ? '' : "#{path}/")
|
||||||
path = '.' if path.blank?
|
if path.blank?
|
||||||
|
path = ( self.class.client_version_above?([2, 2, 0]) ? @url : '.' )
|
||||||
|
end
|
||||||
entries = Entries.new
|
entries = Entries.new
|
||||||
cmd = "#{DARCS_BIN} annotate --repodir #{shell_quote @url} --xml-output"
|
cmd = "#{DARCS_BIN} annotate --repodir #{shell_quote @url} --xml-output"
|
||||||
cmd << " --match #{shell_quote("hash #{identifier}")}" if identifier
|
cmd << " --match #{shell_quote("hash #{identifier}")}" if identifier
|
||||||
@@ -168,8 +168,37 @@ module Redmine
|
|||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
# Retrieve changed paths for a single patch
|
|
||||||
def get_paths_for_patch(hash)
|
def get_paths_for_patch(hash)
|
||||||
|
paths = get_paths_for_patch_raw(hash)
|
||||||
|
if self.class.client_version_above?([2, 4])
|
||||||
|
orig_paths = paths
|
||||||
|
paths = []
|
||||||
|
add_paths = []
|
||||||
|
add_paths_name = []
|
||||||
|
mod_paths = []
|
||||||
|
other_paths = []
|
||||||
|
orig_paths.each do |path|
|
||||||
|
if path[:action] == 'A'
|
||||||
|
add_paths << path
|
||||||
|
add_paths_name << path[:path]
|
||||||
|
elsif path[:action] == 'M'
|
||||||
|
mod_paths << path
|
||||||
|
else
|
||||||
|
other_paths << path
|
||||||
|
end
|
||||||
|
end
|
||||||
|
add_paths_name.each do |add_path|
|
||||||
|
mod_paths.delete_if { |m| m[:path] == add_path }
|
||||||
|
end
|
||||||
|
paths.concat add_paths
|
||||||
|
paths.concat mod_paths
|
||||||
|
paths.concat other_paths
|
||||||
|
end
|
||||||
|
paths
|
||||||
|
end
|
||||||
|
|
||||||
|
# Retrieve changed paths for a single patch
|
||||||
|
def get_paths_for_patch_raw(hash)
|
||||||
cmd = "#{DARCS_BIN} annotate --repodir #{shell_quote @url} --summary --xml-output"
|
cmd = "#{DARCS_BIN} annotate --repodir #{shell_quote @url} --summary --xml-output"
|
||||||
cmd << " --match #{shell_quote("hash #{hash}")} "
|
cmd << " --match #{shell_quote("hash #{hash}")} "
|
||||||
paths = []
|
paths = []
|
||||||
|
|||||||
@@ -89,12 +89,13 @@ module Redmine
|
|||||||
cmd = "#{GIT_BIN} --git-dir #{target('')} log --no-color --date=iso --pretty=fuller --no-merges -n 1 "
|
cmd = "#{GIT_BIN} --git-dir #{target('')} log --no-color --date=iso --pretty=fuller --no-merges -n 1 "
|
||||||
cmd << " #{shell_quote rev} " if rev
|
cmd << " #{shell_quote rev} " if rev
|
||||||
cmd << "-- #{shell_quote path} " unless path.empty?
|
cmd << "-- #{shell_quote path} " unless path.empty?
|
||||||
shellout(cmd) do |io|
|
lines = []
|
||||||
|
shellout(cmd) { |io| lines = io.readlines }
|
||||||
|
return nil if $? && $?.exitstatus != 0
|
||||||
begin
|
begin
|
||||||
id = io.gets.split[1]
|
id = lines[0].split[1]
|
||||||
author = io.gets.match('Author:\s+(.*)$')[1]
|
author = lines[1].match('Author:\s+(.*)$')[1]
|
||||||
2.times { io.gets }
|
time = Time.parse(lines[4].match('CommitDate:\s+(.*)$')[1]).localtime
|
||||||
time = Time.parse(io.gets.match('CommitDate:\s+(.*)$')[1]).localtime
|
|
||||||
|
|
||||||
Revision.new({
|
Revision.new({
|
||||||
:identifier => id,
|
:identifier => id,
|
||||||
@@ -109,7 +110,6 @@ module Redmine
|
|||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
def revisions(path, identifier_from, identifier_to, options={})
|
def revisions(path, identifier_from, identifier_to, options={})
|
||||||
revisions = Revisions.new
|
revisions = Revisions.new
|
||||||
@@ -264,6 +264,13 @@ module Redmine
|
|||||||
return nil if $? && $?.exitstatus != 0
|
return nil if $? && $?.exitstatus != 0
|
||||||
cat
|
cat
|
||||||
end
|
end
|
||||||
|
|
||||||
|
class Revision < Redmine::Scm::Adapters::Revision
|
||||||
|
# Returns the readable identifier
|
||||||
|
def format_identifier
|
||||||
|
identifier[0,8]
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ changeset_quiet = 'This template must be used with --debug option\n'
|
|||||||
changeset_verbose = 'This template must be used with --debug option\n'
|
changeset_verbose = 'This template must be used with --debug option\n'
|
||||||
changeset_debug = '<logentry revision="{rev}" node="{node|short}">\n<author>{author|escape}</author>\n<date>{date|isodate}</date>\n<paths>\n{files}{file_adds}{file_dels}{file_copies}</paths>\n<msg>{desc|escape}</msg>\n{tags}</logentry>\n\n'
|
changeset_debug = '<logentry revision="{rev}" node="{node|short}">\n<author>{author|escape}</author>\n<date>{date|isodate}</date>\n<paths>\n{files}{file_adds}{file_dels}{file_copies}</paths>\n<msg>{desc|escape}</msg>\n{tags}</logentry>\n\n'
|
||||||
|
|
||||||
file = '<path action="M">{file|escape}</path>\n'
|
file = '<path action="M">{file|urlescape}</path>\n'
|
||||||
file_add = '<path action="A">{file_add|escape}</path>\n'
|
file_add = '<path action="A">{file_add|urlescape}</path>\n'
|
||||||
file_del = '<path action="D">{file_del|escape}</path>\n'
|
file_del = '<path action="D">{file_del|urlescape}</path>\n'
|
||||||
file_copy = '<path-copied copyfrom-path="{source|escape}">{name|urlescape}</path-copied>\n'
|
file_copy = '<path-copied copyfrom-path="{source|urlescape}">{name|urlescape}</path-copied>\n'
|
||||||
tag = '<tag>{tag|escape}</tag>\n'
|
tag = '<tag>{tag|escape}</tag>\n'
|
||||||
header='<?xml version="1.0" encoding="UTF-8" ?>\n<log>\n\n'
|
header='<?xml version="1.0" encoding="UTF-8" ?>\n<log>\n\n'
|
||||||
# footer="</log>"
|
# footer="</log>"
|
||||||
@@ -3,10 +3,10 @@ changeset_quiet = 'This template must be used with --debug option\n'
|
|||||||
changeset_verbose = 'This template must be used with --debug option\n'
|
changeset_verbose = 'This template must be used with --debug option\n'
|
||||||
changeset_debug = '<logentry revision="{rev}" node="{node|short}">\n<author>{author|escape}</author>\n<date>{date|isodatesec}</date>\n<paths>\n{file_mods}{file_adds}{file_dels}{file_copies}</paths>\n<msg>{desc|escape}</msg>\n{tags}</logentry>\n\n'
|
changeset_debug = '<logentry revision="{rev}" node="{node|short}">\n<author>{author|escape}</author>\n<date>{date|isodatesec}</date>\n<paths>\n{file_mods}{file_adds}{file_dels}{file_copies}</paths>\n<msg>{desc|escape}</msg>\n{tags}</logentry>\n\n'
|
||||||
|
|
||||||
file_mod = '<path action="M">{file_mod|escape}</path>\n'
|
file_mod = '<path action="M">{file_mod|urlescape}</path>\n'
|
||||||
file_add = '<path action="A">{file_add|escape}</path>\n'
|
file_add = '<path action="A">{file_add|urlescape}</path>\n'
|
||||||
file_del = '<path action="D">{file_del|escape}</path>\n'
|
file_del = '<path action="D">{file_del|urlescape}</path>\n'
|
||||||
file_copy = '<path-copied copyfrom-path="{source|escape}">{name|urlescape}</path-copied>\n'
|
file_copy = '<path-copied copyfrom-path="{source|urlescape}">{name|urlescape}</path-copied>\n'
|
||||||
tag = '<tag>{tag|escape}</tag>\n'
|
tag = '<tag>{tag|escape}</tag>\n'
|
||||||
header='<?xml version="1.0" encoding="UTF-8" ?>\n<log>\n\n'
|
header='<?xml version="1.0" encoding="UTF-8" ?>\n<log>\n\n'
|
||||||
# footer="</log>"
|
# footer="</log>"
|
||||||
@@ -16,6 +16,7 @@
|
|||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
require 'redmine/scm/adapters/abstract_adapter'
|
require 'redmine/scm/adapters/abstract_adapter'
|
||||||
|
require 'cgi'
|
||||||
|
|
||||||
module Redmine
|
module Redmine
|
||||||
module Scm
|
module Scm
|
||||||
@@ -127,8 +128,8 @@ module Redmine
|
|||||||
from_rev = logentry.attributes['revision']
|
from_rev = logentry.attributes['revision']
|
||||||
end
|
end
|
||||||
paths << {:action => path.attributes['action'],
|
paths << {:action => path.attributes['action'],
|
||||||
:path => "/#{path.text}",
|
:path => "/#{CGI.unescape(path.text)}",
|
||||||
:from_path => from_path ? "/#{from_path}" : nil,
|
:from_path => from_path ? "/#{CGI.unescape(from_path)}" : nil,
|
||||||
:from_revision => from_rev ? from_rev : nil
|
:from_revision => from_rev ? from_rev : nil
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -3,14 +3,14 @@ require 'rexml/document'
|
|||||||
module Redmine
|
module Redmine
|
||||||
module VERSION #:nodoc:
|
module VERSION #:nodoc:
|
||||||
MAJOR = 1
|
MAJOR = 1
|
||||||
MINOR = 0
|
MINOR = 1
|
||||||
TINY = 5
|
TINY = 1
|
||||||
|
|
||||||
# Branch values:
|
# Branch values:
|
||||||
# * official release: nil
|
# * official release: nil
|
||||||
# * stable branch: stable
|
# * stable branch: stable
|
||||||
# * trunk: devel
|
# * trunk: devel
|
||||||
BRANCH = 'devel'
|
BRANCH = 'stable'
|
||||||
|
|
||||||
def self.revision
|
def self.revision
|
||||||
revision = nil
|
revision = nil
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ namespace :ci do
|
|||||||
Rake::Task["db:create"].invoke
|
Rake::Task["db:create"].invoke
|
||||||
Rake::Task["db:migrate"].invoke
|
Rake::Task["db:migrate"].invoke
|
||||||
Rake::Task["db:schema:dump"].invoke
|
Rake::Task["db:schema:dump"].invoke
|
||||||
|
Rake::Task["test:scm:update"].invoke
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "Build Redmine"
|
desc "Build Redmine"
|
||||||
|
|||||||
@@ -289,7 +289,7 @@ task :migrate_from_mantis => :environment do
|
|||||||
project.versions.each do |version|
|
project.versions.each do |version|
|
||||||
v = Version.new :name => encode(version.version),
|
v = Version.new :name => encode(version.version),
|
||||||
:description => encode(version.description),
|
:description => encode(version.description),
|
||||||
:effective_date => version.date_order.to_date
|
:effective_date => (version.date_order ? version.date_order.to_date : nil)
|
||||||
v.project = p
|
v.project = p
|
||||||
v.save
|
v.save
|
||||||
versions_map[version.id] = v.id
|
versions_map[version.id] = v.id
|
||||||
|
|||||||
+23
-1
@@ -40,7 +40,15 @@ namespace :test do
|
|||||||
system "gunzip < test/fixtures/repositories/subversion_repository.dump.gz | svnadmin load #{repo_path}"
|
system "gunzip < test/fixtures/repositories/subversion_repository.dump.gz | svnadmin load #{repo_path}"
|
||||||
end
|
end
|
||||||
|
|
||||||
(supported_scms - [:subversion]).each do |scm|
|
desc "Creates a test mercurial repository"
|
||||||
|
task :mercurial => :create_dir do
|
||||||
|
repo_path = "tmp/test/mercurial_repository"
|
||||||
|
bundle_path = "test/fixtures/repositories/mercurial_repository.hg"
|
||||||
|
system "hg init #{repo_path}"
|
||||||
|
system "hg -R #{repo_path} pull #{bundle_path}"
|
||||||
|
end
|
||||||
|
|
||||||
|
(supported_scms - [:subversion, :mercurial]).each do |scm|
|
||||||
desc "Creates a test #{scm} repository"
|
desc "Creates a test #{scm} repository"
|
||||||
task scm => :create_dir do
|
task scm => :create_dir do
|
||||||
system "gunzip < test/fixtures/repositories/#{scm}_repository.tar.gz | tar -xv -C tmp/test"
|
system "gunzip < test/fixtures/repositories/#{scm}_repository.tar.gz | tar -xv -C tmp/test"
|
||||||
@@ -51,6 +59,20 @@ namespace :test do
|
|||||||
task :all => supported_scms
|
task :all => supported_scms
|
||||||
end
|
end
|
||||||
|
|
||||||
|
desc "Updates installed test repositories"
|
||||||
|
task :update do
|
||||||
|
require 'fileutils'
|
||||||
|
Dir.glob("tmp/test/*_repository").each do |dir|
|
||||||
|
next unless File.basename(dir) =~ %r{^(.+)_repository$} && File.directory?(dir)
|
||||||
|
scm = $1
|
||||||
|
next unless fixture = Dir.glob("test/fixtures/repositories/#{scm}_repository.*").first
|
||||||
|
next if File.stat(dir).ctime > File.stat(fixture).mtime
|
||||||
|
|
||||||
|
FileUtils.rm_rf dir
|
||||||
|
Rake::Task["test:scm:setup:#{scm}"].execute
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
Rake::TestTask.new(:units => "db:test:prepare") do |t|
|
Rake::TestTask.new(:units => "db:test:prepare") do |t|
|
||||||
t.libs << "test"
|
t.libs << "test"
|
||||||
t.verbose = true
|
t.verbose = true
|
||||||
|
|||||||
File renamed without changes.
@@ -232,6 +232,24 @@ function observeRelatedIssueField(url) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setVisible(id, visible) {
|
||||||
|
var el = $(id);
|
||||||
|
if (el) {if (visible) {el.show();} else {el.hide();}}
|
||||||
|
}
|
||||||
|
|
||||||
|
function observeProjectModules() {
|
||||||
|
var f = function() {
|
||||||
|
/* Hides trackers and issues custom fields on the new project form when issue_tracking module is disabled */
|
||||||
|
var c = ($('project_enabled_module_names_issue_tracking').checked == true);
|
||||||
|
setVisible('project_trackers', c);
|
||||||
|
setVisible('project_issue_custom_fields', c);
|
||||||
|
};
|
||||||
|
|
||||||
|
Event.observe(window, 'load', f);
|
||||||
|
Event.observe('project_enabled_module_names_issue_tracking', 'change', f);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* shows and hides ajax indicator */
|
/* shows and hides ajax indicator */
|
||||||
Ajax.Responders.register({
|
Ajax.Responders.register({
|
||||||
onCreate: function(){
|
onCreate: function(){
|
||||||
|
|||||||
@@ -179,6 +179,8 @@ tr.user td { white-space: nowrap; }
|
|||||||
tr.user.locked, tr.user.registered { color: #aaa; }
|
tr.user.locked, tr.user.registered { color: #aaa; }
|
||||||
tr.user.locked a, tr.user.registered a { color: #aaa; }
|
tr.user.locked a, tr.user.registered a { color: #aaa; }
|
||||||
|
|
||||||
|
tr.wiki-page-version td.updated_on, tr.wiki-page-version td.author {text-align:center;}
|
||||||
|
|
||||||
tr.time-entry { text-align: center; white-space: nowrap; }
|
tr.time-entry { text-align: center; white-space: nowrap; }
|
||||||
tr.time-entry td.subject, tr.time-entry td.comments { text-align: left; white-space: normal; }
|
tr.time-entry td.subject, tr.time-entry td.comments { text-align: left; white-space: normal; }
|
||||||
td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
|
td.hours { text-align: right; font-weight: bold; padding-right: 0.5em; }
|
||||||
@@ -912,8 +914,8 @@ h4 img.gravatar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
td.username img.gravatar {
|
td.username img.gravatar {
|
||||||
float: left;
|
margin: 0 0.5em 0 0;
|
||||||
margin: 0 1em 0 0;
|
vertical-align: top;
|
||||||
}
|
}
|
||||||
|
|
||||||
#activity dt img.gravatar {
|
#activity dt img.gravatar {
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Vendored
+1
@@ -7,6 +7,7 @@ roles_001:
|
|||||||
---
|
---
|
||||||
- :add_project
|
- :add_project
|
||||||
- :edit_project
|
- :edit_project
|
||||||
|
- :select_project_modules
|
||||||
- :manage_members
|
- :manage_members
|
||||||
- :manage_versions
|
- :manage_versions
|
||||||
- :manage_categories
|
- :manage_categories
|
||||||
|
|||||||
Vendored
+8
@@ -95,4 +95,12 @@ wiki_contents_009:
|
|||||||
version: 1
|
version: 1
|
||||||
author_id: 1
|
author_id: 1
|
||||||
comments:
|
comments:
|
||||||
|
wiki_contents_010:
|
||||||
|
text: Page with cyrillic title
|
||||||
|
updated_on: 2007-03-08 00:18:07 +01:00
|
||||||
|
page_id: 10
|
||||||
|
id: 10
|
||||||
|
version: 1
|
||||||
|
author_id: 1
|
||||||
|
comments:
|
||||||
|
|
||||||
Vendored
+7
-1
@@ -62,4 +62,10 @@ wiki_pages_009:
|
|||||||
wiki_id: 2
|
wiki_id: 2
|
||||||
protected: false
|
protected: false
|
||||||
parent_id: 8
|
parent_id: 8
|
||||||
|
wiki_pages_010:
|
||||||
|
created_on: 2007-03-08 00:18:07 +01:00
|
||||||
|
title: Этика_менеджмента
|
||||||
|
id: 10
|
||||||
|
wiki_id: 1
|
||||||
|
protected: false
|
||||||
|
parent_id:
|
||||||
@@ -33,6 +33,19 @@ class IssueRelationsControllerTest < ActionController::TestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_new_xhr
|
||||||
|
assert_difference 'IssueRelation.count' do
|
||||||
|
@request.session[:user_id] = 3
|
||||||
|
xhr :post, :new,
|
||||||
|
:issue_id => 3,
|
||||||
|
:relation => {:issue_to_id => '1', :relation_type => 'relates', :delay => ''}
|
||||||
|
assert_select_rjs 'relations' do
|
||||||
|
assert_select 'table', 1
|
||||||
|
assert_select 'tr', 2 # relations
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_new_should_accept_id_with_hash
|
def test_new_should_accept_id_with_hash
|
||||||
assert_difference 'IssueRelation.count' do
|
assert_difference 'IssueRelation.count' do
|
||||||
@request.session[:user_id] = 3
|
@request.session[:user_id] = 3
|
||||||
@@ -68,4 +81,20 @@ class IssueRelationsControllerTest < ActionController::TestCase
|
|||||||
post :destroy, :id => '2', :issue_id => '3'
|
post :destroy, :id => '2', :issue_id => '3'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_destroy_xhr
|
||||||
|
IssueRelation.create!(:relation_type => IssueRelation::TYPE_RELATES) do |r|
|
||||||
|
r.issue_from_id = 3
|
||||||
|
r.issue_to_id = 1
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_difference 'IssueRelation.count', -1 do
|
||||||
|
@request.session[:user_id] = 3
|
||||||
|
xhr :post, :destroy, :id => '2', :issue_id => '3'
|
||||||
|
assert_select_rjs 'relations' do
|
||||||
|
assert_select 'table', 1
|
||||||
|
assert_select 'tr', 1 # relation left
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
@@ -154,7 +154,8 @@ class ProjectsControllerTest < ActionController::TestCase
|
|||||||
:custom_field_values => { '3' => 'Beta' },
|
:custom_field_values => { '3' => 'Beta' },
|
||||||
:tracker_ids => ['1', '3'],
|
:tracker_ids => ['1', '3'],
|
||||||
# an issue custom field that is not for all project
|
# an issue custom field that is not for all project
|
||||||
:issue_custom_field_ids => ['9']
|
:issue_custom_field_ids => ['9'],
|
||||||
|
:enabled_module_names => ['issue_tracking', 'news', 'repository']
|
||||||
}
|
}
|
||||||
assert_redirected_to '/projects/blog/settings'
|
assert_redirected_to '/projects/blog/settings'
|
||||||
|
|
||||||
@@ -167,6 +168,7 @@ class ProjectsControllerTest < ActionController::TestCase
|
|||||||
assert_nil project.parent
|
assert_nil project.parent
|
||||||
assert_equal 'Beta', project.custom_value_for(3).value
|
assert_equal 'Beta', project.custom_value_for(3).value
|
||||||
assert_equal [1, 3], project.trackers.map(&:id).sort
|
assert_equal [1, 3], project.trackers.map(&:id).sort
|
||||||
|
assert_equal ['issue_tracking', 'news', 'repository'], project.enabled_module_names.sort
|
||||||
assert project.issue_custom_fields.include?(IssueCustomField.find(9))
|
assert project.issue_custom_fields.include?(IssueCustomField.find(9))
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -197,7 +199,9 @@ class ProjectsControllerTest < ActionController::TestCase
|
|||||||
:description => "weblog",
|
:description => "weblog",
|
||||||
:identifier => "blog",
|
:identifier => "blog",
|
||||||
:is_public => 1,
|
:is_public => 1,
|
||||||
:custom_field_values => { '3' => 'Beta' }
|
:custom_field_values => { '3' => 'Beta' },
|
||||||
|
:tracker_ids => ['1', '3'],
|
||||||
|
:enabled_module_names => ['issue_tracking', 'news', 'repository']
|
||||||
}
|
}
|
||||||
|
|
||||||
assert_redirected_to '/projects/blog/settings'
|
assert_redirected_to '/projects/blog/settings'
|
||||||
@@ -206,6 +210,8 @@ class ProjectsControllerTest < ActionController::TestCase
|
|||||||
assert_kind_of Project, project
|
assert_kind_of Project, project
|
||||||
assert_equal 'weblog', project.description
|
assert_equal 'weblog', project.description
|
||||||
assert_equal true, project.is_public?
|
assert_equal true, project.is_public?
|
||||||
|
assert_equal [1, 3], project.trackers.map(&:id).sort
|
||||||
|
assert_equal ['issue_tracking', 'news', 'repository'], project.enabled_module_names.sort
|
||||||
|
|
||||||
# User should be added as a project member
|
# User should be added as a project member
|
||||||
assert User.find(9).member_of?(project)
|
assert User.find(9).member_of?(project)
|
||||||
@@ -282,6 +288,12 @@ class ProjectsControllerTest < ActionController::TestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_create_should_not_accept_get
|
||||||
|
@request.session[:user_id] = 1
|
||||||
|
get :create
|
||||||
|
assert_response :method_not_allowed
|
||||||
|
end
|
||||||
|
|
||||||
def test_show_by_id
|
def test_show_by_id
|
||||||
get :show, :id => 1
|
get :show, :id => 1
|
||||||
assert_response :success
|
assert_response :success
|
||||||
@@ -360,6 +372,21 @@ class ProjectsControllerTest < ActionController::TestCase
|
|||||||
assert_equal 'Test changed name', project.name
|
assert_equal 'Test changed name', project.name
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_modules
|
||||||
|
@request.session[:user_id] = 2
|
||||||
|
Project.find(1).enabled_module_names = ['issue_tracking', 'news']
|
||||||
|
|
||||||
|
post :modules, :id => 1, :enabled_module_names => ['issue_tracking', 'repository', 'documents']
|
||||||
|
assert_redirected_to '/projects/ecookbook/settings/modules'
|
||||||
|
assert_equal ['documents', 'issue_tracking', 'repository'], Project.find(1).enabled_module_names.sort
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_modules_should_not_allow_get
|
||||||
|
@request.session[:user_id] = 1
|
||||||
|
get :modules, :id => 1
|
||||||
|
assert_response :method_not_allowed
|
||||||
|
end
|
||||||
|
|
||||||
def test_get_destroy
|
def test_get_destroy
|
||||||
@request.session[:user_id] = 1 # admin
|
@request.session[:user_id] = 1 # admin
|
||||||
get :destroy, :id => 1
|
get :destroy, :id => 1
|
||||||
@@ -429,7 +456,7 @@ class ProjectsControllerTest < ActionController::TestCase
|
|||||||
@request.session[:user_id] = 1 # admin
|
@request.session[:user_id] = 1 # admin
|
||||||
post :copy, :id => 1, :project => {:name => 'Copy', :identifier => 'unique-copy'}
|
post :copy, :id => 1, :project => {:name => 'Copy', :identifier => 'unique-copy'}
|
||||||
assert_response :redirect
|
assert_response :redirect
|
||||||
assert_redirected_to :controller => 'projects', :action => 'settings'
|
assert_redirected_to :controller => 'projects', :action => 'settings', :id => 'unique-copy'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,8 @@ class RepositoriesGitControllerTest < ActionController::TestCase
|
|||||||
@request = ActionController::TestRequest.new
|
@request = ActionController::TestRequest.new
|
||||||
@response = ActionController::TestResponse.new
|
@response = ActionController::TestResponse.new
|
||||||
User.current = nil
|
User.current = nil
|
||||||
Repository::Git.create(:project => Project.find(3), :url => REPOSITORY_PATH)
|
@repository = Repository::Git.create(:project => Project.find(3), :url => REPOSITORY_PATH)
|
||||||
|
assert @repository
|
||||||
end
|
end
|
||||||
|
|
||||||
if File.directory?(REPOSITORY_PATH)
|
if File.directory?(REPOSITORY_PATH)
|
||||||
@@ -128,6 +129,9 @@ class RepositoriesGitControllerTest < ActionController::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_diff
|
def test_diff
|
||||||
|
@repository.fetch_changesets
|
||||||
|
@repository.reload
|
||||||
|
|
||||||
# Full diff of changeset 2f9c0091
|
# Full diff of changeset 2f9c0091
|
||||||
get :diff, :id => 3, :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
|
get :diff, :id => 3, :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
|
||||||
assert_response :success
|
assert_response :success
|
||||||
@@ -138,6 +142,21 @@ class RepositoriesGitControllerTest < ActionController::TestCase
|
|||||||
:sibling => { :tag => 'td',
|
:sibling => { :tag => 'td',
|
||||||
:attributes => { :class => /diff_out/ },
|
:attributes => { :class => /diff_out/ },
|
||||||
:content => /def remove/ }
|
:content => /def remove/ }
|
||||||
|
assert_tag :tag => 'h2', :content => /2f9c0091/
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_diff_two_revs
|
||||||
|
@repository.fetch_changesets
|
||||||
|
@repository.reload
|
||||||
|
|
||||||
|
get :diff, :id => 3, :rev => '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
|
||||||
|
:rev_to => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
|
||||||
|
assert_response :success
|
||||||
|
assert_template 'diff'
|
||||||
|
|
||||||
|
diff = assigns(:diff)
|
||||||
|
assert_not_nil diff
|
||||||
|
assert_tag :tag => 'h2', :content => /2f9c0091:61b685fb/
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_annotate
|
def test_annotate
|
||||||
@@ -157,6 +176,26 @@ class RepositoriesGitControllerTest < ActionController::TestCase
|
|||||||
assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
|
assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
|
||||||
:content => /can not be annotated/
|
:content => /can not be annotated/
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_revision
|
||||||
|
@repository.fetch_changesets
|
||||||
|
@repository.reload
|
||||||
|
['61b685fbe55ab05b5ac68402d5720c1a6ac973d1', '61b685f'].each do |r|
|
||||||
|
get :revision, :id => 3, :rev => r
|
||||||
|
assert_response :success
|
||||||
|
assert_template 'revision'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_empty_revision
|
||||||
|
@repository.fetch_changesets
|
||||||
|
@repository.reload
|
||||||
|
['', ' ', nil].each do |r|
|
||||||
|
get :revision, :id => 3, :rev => r
|
||||||
|
assert_response 404
|
||||||
|
assert_error_tag :content => /was not found/
|
||||||
|
end
|
||||||
|
end
|
||||||
else
|
else
|
||||||
puts "Git test repository NOT FOUND. Skipping functional tests !!!"
|
puts "Git test repository NOT FOUND. Skipping functional tests !!!"
|
||||||
def test_fake; assert true end
|
def test_fake; assert true end
|
||||||
|
|||||||
@@ -32,7 +32,8 @@ class RepositoriesMercurialControllerTest < ActionController::TestCase
|
|||||||
@request = ActionController::TestRequest.new
|
@request = ActionController::TestRequest.new
|
||||||
@response = ActionController::TestResponse.new
|
@response = ActionController::TestResponse.new
|
||||||
User.current = nil
|
User.current = nil
|
||||||
Repository::Mercurial.create(:project => Project.find(3), :url => REPOSITORY_PATH)
|
@repository = Repository::Mercurial.create(:project => Project.find(3), :url => REPOSITORY_PATH)
|
||||||
|
assert @repository
|
||||||
end
|
end
|
||||||
|
|
||||||
if File.directory?(REPOSITORY_PATH)
|
if File.directory?(REPOSITORY_PATH)
|
||||||
@@ -49,7 +50,7 @@ class RepositoriesMercurialControllerTest < ActionController::TestCase
|
|||||||
assert_response :success
|
assert_response :success
|
||||||
assert_template 'show'
|
assert_template 'show'
|
||||||
assert_not_nil assigns(:entries)
|
assert_not_nil assigns(:entries)
|
||||||
assert_equal 3, assigns(:entries).size
|
assert_equal 4, assigns(:entries).size
|
||||||
assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
|
assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
|
||||||
assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
|
assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
|
||||||
assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
|
assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
|
||||||
@@ -75,6 +76,20 @@ class RepositoriesMercurialControllerTest < ActionController::TestCase
|
|||||||
assert_equal ['delete.png'], assigns(:entries).collect(&:name)
|
assert_equal ['delete.png'], assigns(:entries).collect(&:name)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_show_directory_sql_escape_percent
|
||||||
|
get :show, :id => 3, :path => ['sql_escape', 'percent%dir'], :rev => 13
|
||||||
|
assert_response :success
|
||||||
|
assert_template 'show'
|
||||||
|
|
||||||
|
assert_not_nil assigns(:entries)
|
||||||
|
assert_equal ['percent%file1.txt', 'percentfile1.txt'], assigns(:entries).collect(&:name)
|
||||||
|
changesets = assigns(:changesets)
|
||||||
|
|
||||||
|
## This is not yet implemented.
|
||||||
|
# assert_not_nil changesets
|
||||||
|
# assert_equal %w(13 11 10 9), changesets.collect(&:revision)
|
||||||
|
end
|
||||||
|
|
||||||
def test_changes
|
def test_changes
|
||||||
get :changes, :id => 3, :path => ['images', 'edit.png']
|
get :changes, :id => 3, :path => ['images', 'edit.png']
|
||||||
assert_response :success
|
assert_response :success
|
||||||
@@ -86,10 +101,10 @@ class RepositoriesMercurialControllerTest < ActionController::TestCase
|
|||||||
get :entry, :id => 3, :path => ['sources', 'watchers_controller.rb']
|
get :entry, :id => 3, :path => ['sources', 'watchers_controller.rb']
|
||||||
assert_response :success
|
assert_response :success
|
||||||
assert_template 'entry'
|
assert_template 'entry'
|
||||||
# Line 19
|
# Line 10
|
||||||
assert_tag :tag => 'th',
|
assert_tag :tag => 'th',
|
||||||
:content => /10/,
|
:content => '10',
|
||||||
:attributes => { :class => /line-num/ },
|
:attributes => { :class => 'line-num' },
|
||||||
:sibling => { :tag => 'td', :content => /WITHOUT ANY WARRANTY/ }
|
:sibling => { :tag => 'td', :content => /WITHOUT ANY WARRANTY/ }
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -115,7 +130,7 @@ class RepositoriesMercurialControllerTest < ActionController::TestCase
|
|||||||
assert_template 'diff'
|
assert_template 'diff'
|
||||||
# Line 22 removed
|
# Line 22 removed
|
||||||
assert_tag :tag => 'th',
|
assert_tag :tag => 'th',
|
||||||
:content => /22/,
|
:content => '22',
|
||||||
:sibling => { :tag => 'td',
|
:sibling => { :tag => 'td',
|
||||||
:attributes => { :class => /diff_out/ },
|
:attributes => { :class => /diff_out/ },
|
||||||
:content => /def remove/ }
|
:content => /def remove/ }
|
||||||
@@ -125,12 +140,41 @@ class RepositoriesMercurialControllerTest < ActionController::TestCase
|
|||||||
get :annotate, :id => 3, :path => ['sources', 'watchers_controller.rb']
|
get :annotate, :id => 3, :path => ['sources', 'watchers_controller.rb']
|
||||||
assert_response :success
|
assert_response :success
|
||||||
assert_template 'annotate'
|
assert_template 'annotate'
|
||||||
# Line 23, revision 4
|
# Line 23, revision 4:def6d2f1254a
|
||||||
assert_tag :tag => 'th', :content => /23/,
|
assert_tag :tag => 'th',
|
||||||
:sibling => { :tag => 'td', :child => { :tag => 'a', :content => /4/ } },
|
:content => '23',
|
||||||
:sibling => { :tag => 'td', :content => /jsmith/ },
|
:attributes => { :class => 'line-num' },
|
||||||
|
:sibling =>
|
||||||
|
{
|
||||||
|
:tag => 'td',
|
||||||
|
:attributes => { :class => 'revision' },
|
||||||
|
:child => { :tag => 'a', :content => '4' }
|
||||||
|
# :child => { :tag => 'a', :content => /4:def6d2f1/ }
|
||||||
|
}
|
||||||
|
assert_tag :tag => 'th',
|
||||||
|
:content => '23',
|
||||||
|
:attributes => { :class => 'line-num' },
|
||||||
|
:sibling =>
|
||||||
|
{
|
||||||
|
:tag => 'td' ,
|
||||||
|
:content => 'jsmith' ,
|
||||||
|
:attributes => { :class => 'author' },
|
||||||
|
}
|
||||||
|
assert_tag :tag => 'th',
|
||||||
|
:content => '23',
|
||||||
|
:attributes => { :class => 'line-num' },
|
||||||
:sibling => { :tag => 'td', :content => /watcher =/ }
|
:sibling => { :tag => 'td', :content => /watcher =/ }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_empty_revision
|
||||||
|
@repository.fetch_changesets
|
||||||
|
@repository.reload
|
||||||
|
['', ' ', nil].each do |r|
|
||||||
|
get :revision, :id => 3, :rev => r
|
||||||
|
assert_response 404
|
||||||
|
assert_error_tag :content => /was not found/
|
||||||
|
end
|
||||||
|
end
|
||||||
else
|
else
|
||||||
puts "Mercurial test repository NOT FOUND. Skipping functional tests !!!"
|
puts "Mercurial test repository NOT FOUND. Skipping functional tests !!!"
|
||||||
def test_fake; assert true end
|
def test_fake; assert true end
|
||||||
|
|||||||
@@ -168,10 +168,18 @@ class RepositoriesSubversionControllerTest < ActionController::TestCase
|
|||||||
|
|
||||||
def test_invalid_revision
|
def test_invalid_revision
|
||||||
get :revision, :id => 1, :rev => 'something_weird'
|
get :revision, :id => 1, :rev => 'something_weird'
|
||||||
assert_response 500
|
assert_response 404
|
||||||
assert_error_tag :content => /was not found/
|
assert_error_tag :content => /was not found/
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_empty_revision
|
||||||
|
['', ' ', nil].each do |r|
|
||||||
|
get :revision, :id => 1, :rev => r
|
||||||
|
assert_response 404
|
||||||
|
assert_error_tag :content => /was not found/
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_revision_with_repository_pointing_to_a_subdirectory
|
def test_revision_with_repository_pointing_to_a_subdirectory
|
||||||
r = Project.find(1).repository
|
r = Project.find(1).repository
|
||||||
# Changes repository url to a subdirectory
|
# Changes repository url to a subdirectory
|
||||||
@@ -198,6 +206,8 @@ class RepositoriesSubversionControllerTest < ActionController::TestCase
|
|||||||
get :diff, :id => 1, :rev => 3
|
get :diff, :id => 1, :rev => 3
|
||||||
assert_response :success
|
assert_response :success
|
||||||
assert_template 'diff'
|
assert_template 'diff'
|
||||||
|
|
||||||
|
assert_tag :tag => 'h2', :content => /3/
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_directory_diff
|
def test_directory_diff
|
||||||
@@ -209,6 +219,8 @@ class RepositoriesSubversionControllerTest < ActionController::TestCase
|
|||||||
assert_not_nil diff
|
assert_not_nil diff
|
||||||
# 2 files modified
|
# 2 files modified
|
||||||
assert_equal 2, Redmine::UnifiedDiff.new(diff).size
|
assert_equal 2, Redmine::UnifiedDiff.new(diff).size
|
||||||
|
|
||||||
|
assert_tag :tag => 'h2', :content => /2:6/
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_annotate
|
def test_annotate
|
||||||
|
|||||||
@@ -122,12 +122,35 @@ class ApiTest::ProjectsTest < ActionController::IntegrationTest
|
|||||||
project = Project.first(:order => 'id DESC')
|
project = Project.first(:order => 'id DESC')
|
||||||
assert_equal 'API test', project.name
|
assert_equal 'API test', project.name
|
||||||
assert_equal 'api-test', project.identifier
|
assert_equal 'api-test', project.identifier
|
||||||
assert_equal ['issue_tracking', 'repository'], project.enabled_module_names
|
assert_equal ['issue_tracking', 'repository'], project.enabled_module_names.sort
|
||||||
|
assert_equal Tracker.all.size, project.trackers.size
|
||||||
|
|
||||||
assert_response :created
|
assert_response :created
|
||||||
assert_equal 'application/xml', @response.content_type
|
assert_equal 'application/xml', @response.content_type
|
||||||
assert_tag 'project', :child => {:tag => 'id', :content => project.id.to_s}
|
assert_tag 'project', :child => {:tag => 'id', :content => project.id.to_s}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
should "accept enabled_module_names attribute" do
|
||||||
|
@parameters[:project].merge!({:enabled_module_names => ['issue_tracking', 'news', 'time_tracking']})
|
||||||
|
|
||||||
|
assert_difference('Project.count') do
|
||||||
|
post '/projects.xml', @parameters, :authorization => credentials('admin')
|
||||||
|
end
|
||||||
|
|
||||||
|
project = Project.first(:order => 'id DESC')
|
||||||
|
assert_equal ['issue_tracking', 'news', 'time_tracking'], project.enabled_module_names.sort
|
||||||
|
end
|
||||||
|
|
||||||
|
should "accept tracker_ids attribute" do
|
||||||
|
@parameters[:project].merge!({:tracker_ids => [1, 3]})
|
||||||
|
|
||||||
|
assert_difference('Project.count') do
|
||||||
|
post '/projects.xml', @parameters, :authorization => credentials('admin')
|
||||||
|
end
|
||||||
|
|
||||||
|
project = Project.first(:order => 'id DESC')
|
||||||
|
assert_equal [1, 3], project.trackers.map(&:id).sort
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -171,6 +194,28 @@ class ApiTest::ProjectsTest < ActionController::IntegrationTest
|
|||||||
project = Project.find(2)
|
project = Project.find(2)
|
||||||
assert_equal 'API update', project.name
|
assert_equal 'API update', project.name
|
||||||
end
|
end
|
||||||
|
|
||||||
|
should "accept enabled_module_names attribute" do
|
||||||
|
@parameters[:project].merge!({:enabled_module_names => ['issue_tracking', 'news', 'time_tracking']})
|
||||||
|
|
||||||
|
assert_no_difference 'Project.count' do
|
||||||
|
put '/projects/2.xml', @parameters, :authorization => credentials('admin')
|
||||||
|
end
|
||||||
|
assert_response :ok
|
||||||
|
project = Project.find(2)
|
||||||
|
assert_equal ['issue_tracking', 'news', 'time_tracking'], project.enabled_module_names.sort
|
||||||
|
end
|
||||||
|
|
||||||
|
should "accept tracker_ids attribute" do
|
||||||
|
@parameters[:project].merge!({:tracker_ids => [1, 3]})
|
||||||
|
|
||||||
|
assert_no_difference 'Project.count' do
|
||||||
|
put '/projects/2.xml', @parameters, :authorization => credentials('admin')
|
||||||
|
end
|
||||||
|
assert_response :ok
|
||||||
|
project = Project.find(2)
|
||||||
|
assert_equal [1, 3], project.trackers.map(&:id).sort
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -218,4 +218,9 @@ class ChangesetTest < ActiveSupport::TestCase
|
|||||||
c.comments = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
|
c.comments = File.read("#{RAILS_ROOT}/test/fixtures/encoding/iso-8859-1.txt")
|
||||||
assert_equal "Texte encod en ISO-8859-1.", c.comments
|
assert_equal "Texte encod en ISO-8859-1.", c.comments
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_identifier
|
||||||
|
c = Changeset.find_by_revision('1')
|
||||||
|
assert_equal c.revision, c.identifier
|
||||||
|
end
|
||||||
end
|
end
|
||||||
@@ -610,6 +610,7 @@ EXPECTED
|
|||||||
Date.today - 100 => 'about 3 months late',
|
Date.today - 100 => 'about 3 months late',
|
||||||
Date.today - 20000 => 'over 54 years late',
|
Date.today - 20000 => 'over 54 years late',
|
||||||
}
|
}
|
||||||
|
::I18n.locale = :en
|
||||||
to_test.each do |date, expected|
|
to_test.each do |date, expected|
|
||||||
assert_equal expected, due_date_distance_in_words(date)
|
assert_equal expected, due_date_distance_in_words(date)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
require File.expand_path('../../../../../../test_helper', __FILE__)
|
||||||
|
begin
|
||||||
|
require 'mocha'
|
||||||
|
|
||||||
|
class DarcsAdapterTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
|
REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/darcs_repository'
|
||||||
|
|
||||||
|
if File.directory?(REPOSITORY_PATH)
|
||||||
|
def setup
|
||||||
|
@adapter = Redmine::Scm::Adapters::DarcsAdapter.new(REPOSITORY_PATH)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_darcsversion
|
||||||
|
to_test = { "1.0.9 (release)\n" => [1,0,9] ,
|
||||||
|
"2.2.0 (release)\n" => [2,2,0] }
|
||||||
|
to_test.each do |s, v|
|
||||||
|
test_darcsversion_for(s, v)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_revisions
|
||||||
|
id1 = '20080308225258-98289-761f654d669045eabee90b91b53a21ce5593cadf.gz'
|
||||||
|
revs = @adapter.revisions('', nil, nil, {:with_path => true})
|
||||||
|
assert_equal 6, revs.size
|
||||||
|
assert_equal id1, revs[5].scmid
|
||||||
|
paths = revs[5].paths
|
||||||
|
assert_equal 5, paths.size
|
||||||
|
assert_equal 'A', paths[0][:action]
|
||||||
|
assert_equal '/README', paths[0][:path]
|
||||||
|
assert_equal 'A', paths[1][:action]
|
||||||
|
assert_equal '/images', paths[1][:path]
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def test_darcsversion_for(darcsversion, version)
|
||||||
|
@adapter.class.expects(:darcs_binary_version_from_command_line).returns(darcsversion)
|
||||||
|
assert_equal version, @adapter.class.darcs_binary_version
|
||||||
|
end
|
||||||
|
|
||||||
|
else
|
||||||
|
puts "Darcs test repository NOT FOUND. Skipping unit tests !!!"
|
||||||
|
def test_fake; assert true end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
rescue LoadError
|
||||||
|
class DarcsMochaFake < ActiveSupport::TestCase
|
||||||
|
def test_fake; assert(false, "Requires mocha to run those tests") end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@@ -10,6 +10,11 @@ begin
|
|||||||
|
|
||||||
REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/mercurial_repository'
|
REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/mercurial_repository'
|
||||||
|
|
||||||
|
if File.directory?(REPOSITORY_PATH)
|
||||||
|
def setup
|
||||||
|
@adapter = Redmine::Scm::Adapters::MercurialAdapter.new(REPOSITORY_PATH)
|
||||||
|
end
|
||||||
|
|
||||||
def test_hgversion
|
def test_hgversion
|
||||||
to_test = { "Mercurial Distributed SCM (version 0.9.5)\n" => [0,9,5],
|
to_test = { "Mercurial Distributed SCM (version 0.9.5)\n" => [0,9,5],
|
||||||
"Mercurial Distributed SCM (1.0)\n" => [1,0],
|
"Mercurial Distributed SCM (1.0)\n" => [1,0],
|
||||||
@@ -31,24 +36,32 @@ begin
|
|||||||
[] => "1.0",
|
[] => "1.0",
|
||||||
[1,0,1] => "1.0",
|
[1,0,1] => "1.0",
|
||||||
[1,7] => "1.0",
|
[1,7] => "1.0",
|
||||||
[1,7,1] => "1.0"}
|
[1,7,1] => "1.0" }
|
||||||
to_test.each do |v, template|
|
to_test.each do |v, template|
|
||||||
test_template_path_for(v, template)
|
test_template_path_for(v, template)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_cat
|
||||||
|
assert @adapter.cat("sources/welcome_controller.rb", 2)
|
||||||
|
assert_nil @adapter.cat("sources/welcome_controller.rb")
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def test_hgversion_for(hgversion, version)
|
def test_hgversion_for(hgversion, version)
|
||||||
Redmine::Scm::Adapters::MercurialAdapter.expects(:hgversion_from_command_line).returns(hgversion)
|
@adapter.class.expects(:hgversion_from_command_line).returns(hgversion)
|
||||||
adapter = Redmine::Scm::Adapters::MercurialAdapter
|
assert_equal version, @adapter.class.hgversion
|
||||||
assert_equal version, adapter.hgversion
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_template_path_for(version, template)
|
def test_template_path_for(version, template)
|
||||||
adapter = Redmine::Scm::Adapters::MercurialAdapter
|
assert_equal "#{TEMPLATES_DIR}/#{TEMPLATE_NAME}-#{template}.#{TEMPLATE_EXTENSION}",
|
||||||
assert_equal "#{TEMPLATES_DIR}/#{TEMPLATE_NAME}-#{template}.#{TEMPLATE_EXTENSION}", adapter.template_path_for(version)
|
@adapter.class.template_path_for(version)
|
||||||
assert File.exist?(adapter.template_path_for(version))
|
assert File.exist?(@adapter.class.template_path_for(version))
|
||||||
|
end
|
||||||
|
else
|
||||||
|
puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
|
||||||
|
def test_fake; assert true end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -19,40 +19,100 @@ require File.expand_path('../../test_helper', __FILE__)
|
|||||||
|
|
||||||
class ProjectNestedSetTest < ActiveSupport::TestCase
|
class ProjectNestedSetTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
def setup
|
context "nested set" do
|
||||||
|
setup do
|
||||||
Project.delete_all
|
Project.delete_all
|
||||||
|
|
||||||
|
@a = Project.create!(:name => 'Project A', :identifier => 'projecta')
|
||||||
|
@a1 = Project.create!(:name => 'Project A1', :identifier => 'projecta1')
|
||||||
|
@a1.set_parent!(@a)
|
||||||
|
@a2 = Project.create!(:name => 'Project A2', :identifier => 'projecta2')
|
||||||
|
@a2.set_parent!(@a)
|
||||||
|
|
||||||
|
@b = Project.create!(:name => 'Project B', :identifier => 'projectb')
|
||||||
|
@b1 = Project.create!(:name => 'Project B1', :identifier => 'projectb1')
|
||||||
|
@b1.set_parent!(@b)
|
||||||
|
@b11 = Project.create!(:name => 'Project B11', :identifier => 'projectb11')
|
||||||
|
@b11.set_parent!(@b1)
|
||||||
|
@b2 = Project.create!(:name => 'Project B2', :identifier => 'projectb2')
|
||||||
|
@b2.set_parent!(@b)
|
||||||
|
|
||||||
|
@c = Project.create!(:name => 'Project C', :identifier => 'projectc')
|
||||||
|
@c1 = Project.create!(:name => 'Project C1', :identifier => 'projectc1')
|
||||||
|
@c1.set_parent!(@c)
|
||||||
|
|
||||||
|
[@a, @a1, @a2, @b, @b1, @b11, @b2, @c, @c1].each(&:reload)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_destroy_root_and_chldren_should_not_mess_up_the_tree
|
context "#create" do
|
||||||
a = Project.create!(:name => 'Project A', :identifier => 'projecta')
|
should "build valid tree" do
|
||||||
a1 = Project.create!(:name => 'Project A1', :identifier => 'projecta1')
|
assert_nested_set_values({
|
||||||
a2 = Project.create!(:name => 'Project A2', :identifier => 'projecta2')
|
@a => [nil, 1, 6],
|
||||||
a1.set_parent!(a)
|
@a1 => [@a.id, 2, 3],
|
||||||
a2.set_parent!(a)
|
@a2 => [@a.id, 4, 5],
|
||||||
b = Project.create!(:name => 'Project B', :identifier => 'projectb')
|
@b => [nil, 7, 14],
|
||||||
b1 = Project.create!(:name => 'Project B1', :identifier => 'projectb1')
|
@b1 => [@b.id, 8, 11],
|
||||||
b1.set_parent!(b)
|
@b11 => [@b1.id,9, 10],
|
||||||
|
@b2 => [@b.id,12, 13],
|
||||||
a.reload
|
@c => [nil, 15, 18],
|
||||||
a1.reload
|
@c1 => [@c.id,16, 17]
|
||||||
a2.reload
|
})
|
||||||
b.reload
|
end
|
||||||
b1.reload
|
|
||||||
|
|
||||||
assert_equal [nil, 1, 6], [a.parent_id, a.lft, a.rgt]
|
|
||||||
assert_equal [a.id, 2, 3], [a1.parent_id, a1.lft, a1.rgt]
|
|
||||||
assert_equal [a.id, 4, 5], [a2.parent_id, a2.lft, a2.rgt]
|
|
||||||
assert_equal [nil, 7, 10], [b.parent_id, b.lft, b.rgt]
|
|
||||||
assert_equal [b.id, 8, 9], [b1.parent_id, b1.lft, b1.rgt]
|
|
||||||
|
|
||||||
assert_difference 'Project.count', -3 do
|
|
||||||
a.destroy
|
|
||||||
end
|
end
|
||||||
|
|
||||||
b.reload
|
context "#set_parent!" do
|
||||||
b1.reload
|
should "keep valid tree" do
|
||||||
|
assert_no_difference 'Project.count' do
|
||||||
|
Project.find_by_name('Project B1').set_parent!(Project.find_by_name('Project A2'))
|
||||||
|
end
|
||||||
|
assert_nested_set_values({
|
||||||
|
@a => [nil, 1, 10],
|
||||||
|
@a2 => [@a.id, 4, 9],
|
||||||
|
@b1 => [@a2.id,5, 8],
|
||||||
|
@b11 => [@b1.id,6, 7],
|
||||||
|
@b => [nil, 11, 14],
|
||||||
|
@c => [nil, 15, 18]
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
assert_equal [nil, 1, 4], [b.parent_id, b.lft, b.rgt]
|
context "#destroy" do
|
||||||
assert_equal [b.id, 2, 3], [b1.parent_id, b1.lft, b1.rgt]
|
context "a root with children" do
|
||||||
|
should "not mess up the tree" do
|
||||||
|
assert_difference 'Project.count', -4 do
|
||||||
|
Project.find_by_name('Project B').destroy
|
||||||
|
end
|
||||||
|
assert_nested_set_values({
|
||||||
|
@a => [nil, 1, 6],
|
||||||
|
@a1 => [@a.id, 2, 3],
|
||||||
|
@a2 => [@a.id, 4, 5],
|
||||||
|
@c => [nil, 7, 10],
|
||||||
|
@c1 => [@c.id, 8, 9]
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "a child with children" do
|
||||||
|
should "not mess up the tree" do
|
||||||
|
assert_difference 'Project.count', -2 do
|
||||||
|
Project.find_by_name('Project B1').destroy
|
||||||
|
end
|
||||||
|
assert_nested_set_values({
|
||||||
|
@a => [nil, 1, 6],
|
||||||
|
@b => [nil, 7, 10],
|
||||||
|
@b2 => [@b.id, 8, 9],
|
||||||
|
@c => [nil, 11, 14]
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def assert_nested_set_values(h)
|
||||||
|
assert Project.valid?
|
||||||
|
h.each do |project, expected|
|
||||||
|
project.reload
|
||||||
|
assert_equal expected, [project.parent_id, project.lft, project.rgt], "Unexpected nested set values for #{project.name}"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -771,6 +771,22 @@ class ProjectTest < ActiveSupport::TestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
should "copy memberships with groups and additional roles" do
|
||||||
|
group = Group.create!(:lastname => "Copy group")
|
||||||
|
user = User.find(7)
|
||||||
|
group.users << user
|
||||||
|
# group role
|
||||||
|
Member.create!(:project_id => @source_project.id, :principal => group, :role_ids => [2])
|
||||||
|
member = Member.find_by_user_id_and_project_id(user.id, @source_project.id)
|
||||||
|
# additional role
|
||||||
|
member.role_ids = [1]
|
||||||
|
|
||||||
|
assert @project.copy(@source_project)
|
||||||
|
member = Member.find_by_user_id_and_project_id(user.id, @project.id)
|
||||||
|
assert_not_nil member
|
||||||
|
assert_equal [1, 2], member.role_ids.sort
|
||||||
|
end
|
||||||
|
|
||||||
should "copy project specific queries" do
|
should "copy project specific queries" do
|
||||||
assert @project.valid?
|
assert @project.valid?
|
||||||
assert @project.queries.empty?
|
assert @project.queries.empty?
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ class RepositoryBazaarTest < ActiveSupport::TestCase
|
|||||||
def test_annotate
|
def test_annotate
|
||||||
annotate = @repository.scm.annotate('doc-mkdir.txt')
|
annotate = @repository.scm.annotate('doc-mkdir.txt')
|
||||||
assert_equal 17, annotate.lines.size
|
assert_equal 17, annotate.lines.size
|
||||||
assert_equal 1, annotate.revisions[0].identifier
|
assert_equal '1', annotate.revisions[0].identifier
|
||||||
assert_equal 'jsmith@', annotate.revisions[0].author
|
assert_equal 'jsmith@', annotate.revisions[0].author
|
||||||
assert_equal 'mkdir', annotate.lines[0]
|
assert_equal 'mkdir', annotate.lines[0]
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -56,11 +56,13 @@ class RepositoryDarcsTest < ActiveSupport::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_cat
|
def test_cat
|
||||||
|
if @repository.scm.supports_cat?
|
||||||
@repository.fetch_changesets
|
@repository.fetch_changesets
|
||||||
cat = @repository.cat("sources/welcome_controller.rb", 2)
|
cat = @repository.cat("sources/welcome_controller.rb", 2)
|
||||||
assert_not_nil cat
|
assert_not_nil cat
|
||||||
assert cat.include?('class WelcomeController < ApplicationController')
|
assert cat.include?('class WelcomeController < ApplicationController')
|
||||||
end
|
end
|
||||||
|
end
|
||||||
else
|
else
|
||||||
puts "Darcs test repository NOT FOUND. Skipping unit tests !!!"
|
puts "Darcs test repository NOT FOUND. Skipping unit tests !!!"
|
||||||
def test_fake; assert true end
|
def test_fake; assert true end
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
require File.expand_path('../../test_helper', __FILE__)
|
require File.expand_path('../../test_helper', __FILE__)
|
||||||
|
|
||||||
class RepositoryGitTest < ActiveSupport::TestCase
|
class RepositoryGitTest < ActiveSupport::TestCase
|
||||||
fixtures :projects
|
fixtures :projects, :repositories, :enabled_modules, :users, :roles
|
||||||
|
|
||||||
# No '..' in the repository path
|
# No '..' in the repository path
|
||||||
REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
|
REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
|
||||||
@@ -62,6 +62,47 @@ class RepositoryGitTest < ActiveSupport::TestCase
|
|||||||
@repository.fetch_changesets
|
@repository.fetch_changesets
|
||||||
assert_equal 15, @repository.changesets.count
|
assert_equal 15, @repository.changesets.count
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_find_changeset_by_name
|
||||||
|
@repository.fetch_changesets
|
||||||
|
@repository.reload
|
||||||
|
['7234cb2750b63f47bff735edc50a1c0a433c2518', '7234cb2750b'].each do |r|
|
||||||
|
assert_equal '7234cb2750b63f47bff735edc50a1c0a433c2518',
|
||||||
|
@repository.find_changeset_by_name(r).revision
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_find_changeset_by_empty_name
|
||||||
|
@repository.fetch_changesets
|
||||||
|
@repository.reload
|
||||||
|
['', ' ', nil].each do |r|
|
||||||
|
assert_nil @repository.find_changeset_by_name(r)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_identifier
|
||||||
|
@repository.fetch_changesets
|
||||||
|
@repository.reload
|
||||||
|
c = @repository.changesets.find_by_revision('7234cb2750b63f47bff735edc50a1c0a433c2518')
|
||||||
|
assert_equal c.scmid, c.identifier
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_format_identifier
|
||||||
|
@repository.fetch_changesets
|
||||||
|
@repository.reload
|
||||||
|
c = @repository.changesets.find_by_revision('7234cb2750b63f47bff735edc50a1c0a433c2518')
|
||||||
|
assert_equal '7234cb27', c.format_identifier
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_activities
|
||||||
|
c = Changeset.new(:repository => @repository,
|
||||||
|
:committed_on => Time.now,
|
||||||
|
:revision => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
|
||||||
|
:scmid => 'abc7234cb2750b63f47bff735edc50a1c0a433c2',
|
||||||
|
:comments => 'test')
|
||||||
|
assert c.event_title.include?('abc7234c:')
|
||||||
|
assert_equal 'abc7234cb2750b63f47bff735edc50a1c0a433c2', c.event_url[:rev]
|
||||||
|
end
|
||||||
else
|
else
|
||||||
puts "Git test repository NOT FOUND. Skipping unit tests !!!"
|
puts "Git test repository NOT FOUND. Skipping unit tests !!!"
|
||||||
def test_fake; assert true end
|
def test_fake; assert true end
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ class RepositoryMercurialTest < ActiveSupport::TestCase
|
|||||||
@repository.fetch_changesets
|
@repository.fetch_changesets
|
||||||
@repository.reload
|
@repository.reload
|
||||||
|
|
||||||
assert_equal 6, @repository.changesets.count
|
assert_equal 17, @repository.changesets.count
|
||||||
assert_equal 11, @repository.changes.count
|
assert_equal 25, @repository.changes.count
|
||||||
assert_equal "Initial import.\nThe repository contains 3 files.", @repository.changesets.find_by_revision('0').comments
|
assert_equal "Initial import.\nThe repository contains 3 files.", @repository.changesets.find_by_revision('0').comments
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -46,7 +46,7 @@ class RepositoryMercurialTest < ActiveSupport::TestCase
|
|||||||
assert_equal 3, @repository.changesets.count
|
assert_equal 3, @repository.changesets.count
|
||||||
|
|
||||||
@repository.fetch_changesets
|
@repository.fetch_changesets
|
||||||
assert_equal 6, @repository.changesets.count
|
assert_equal 17, @repository.changesets.count
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_entries
|
def test_entries
|
||||||
@@ -55,18 +55,11 @@ class RepositoryMercurialTest < ActiveSupport::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_locate_on_outdated_repository
|
def test_locate_on_outdated_repository
|
||||||
# Change the working dir state
|
|
||||||
%x{hg -R #{REPOSITORY_PATH} up -r 0}
|
|
||||||
assert_equal 1, @repository.entries("images", 0).size
|
assert_equal 1, @repository.entries("images", 0).size
|
||||||
assert_equal 2, @repository.entries("images").size
|
assert_equal 2, @repository.entries("images").size
|
||||||
assert_equal 2, @repository.entries("images", 2).size
|
assert_equal 2, @repository.entries("images", 2).size
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_cat
|
|
||||||
assert @repository.scm.cat("sources/welcome_controller.rb", 2)
|
|
||||||
assert_nil @repository.scm.cat("sources/welcome_controller.rb")
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_isodatesec
|
def test_isodatesec
|
||||||
# Template keyword 'isodatesec' supported in Mercurial 1.0 and higher
|
# Template keyword 'isodatesec' supported in Mercurial 1.0 and higher
|
||||||
if @repository.scm.class.client_version_above?([1, 0])
|
if @repository.scm.class.client_version_above?([1, 0])
|
||||||
@@ -76,6 +69,59 @@ class RepositoryMercurialTest < ActiveSupport::TestCase
|
|||||||
assert_equal @repository.changesets.find_by_revision('0').committed_on, rev0_committed_on
|
assert_equal @repository.changesets.find_by_revision('0').committed_on, rev0_committed_on
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_changeset_order_by_revision
|
||||||
|
@repository.fetch_changesets
|
||||||
|
@repository.reload
|
||||||
|
|
||||||
|
c0 = @repository.latest_changeset
|
||||||
|
c1 = @repository.changesets.find_by_revision('0')
|
||||||
|
# sorted by revision (id), not by date
|
||||||
|
assert c0.revision.to_i > c1.revision.to_i
|
||||||
|
assert c0.committed_on < c1.committed_on
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_latest_changesets
|
||||||
|
@repository.fetch_changesets
|
||||||
|
@repository.reload
|
||||||
|
|
||||||
|
# with_limit
|
||||||
|
changesets = @repository.latest_changesets('', nil, 2)
|
||||||
|
assert_equal @repository.latest_changesets('', nil)[0, 2], changesets
|
||||||
|
|
||||||
|
# with_filepath
|
||||||
|
changesets = @repository.latest_changesets('/sql_escape/percent%dir/percent%file1.txt', nil)
|
||||||
|
assert_equal %w|11 10 9|, changesets.collect(&:revision)
|
||||||
|
|
||||||
|
changesets = @repository.latest_changesets('/sql_escape/underscore_dir/understrike_file.txt', nil)
|
||||||
|
assert_equal %w|12 9|, changesets.collect(&:revision)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_copied_files
|
||||||
|
@repository.fetch_changesets
|
||||||
|
@repository.reload
|
||||||
|
|
||||||
|
cs1 = @repository.changesets.find_by_revision('13')
|
||||||
|
assert_not_nil cs1
|
||||||
|
c1 = cs1.changes.sort_by(&:path)
|
||||||
|
assert_equal 2, c1.size
|
||||||
|
|
||||||
|
assert_equal 'A', c1[0].action
|
||||||
|
assert_equal '/sql_escape/percent%dir/percentfile1.txt', c1[0].path
|
||||||
|
assert_equal '/sql_escape/percent%dir/percent%file1.txt', c1[0].from_path
|
||||||
|
|
||||||
|
assert_equal 'A', c1[1].action
|
||||||
|
assert_equal '/sql_escape/underscore_dir/understrike-file.txt', c1[1].path
|
||||||
|
assert_equal '/sql_escape/underscore_dir/understrike_file.txt', c1[1].from_path
|
||||||
|
|
||||||
|
cs2 = @repository.changesets.find_by_revision('15')
|
||||||
|
c2 = cs2.changes
|
||||||
|
assert_equal 1, c2.size
|
||||||
|
|
||||||
|
assert_equal 'A', c2[0].action
|
||||||
|
assert_equal '/README (1)[2]&,%.-3_4', c2[0].path
|
||||||
|
assert_equal '/README', c2[0].from_path
|
||||||
|
end
|
||||||
else
|
else
|
||||||
puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
|
puts "Mercurial test repository NOT FOUND. Skipping unit tests !!!"
|
||||||
def test_fake; assert true end
|
def test_fake; assert true end
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
require File.expand_path('../../test_helper', __FILE__)
|
require File.expand_path('../../test_helper', __FILE__)
|
||||||
|
|
||||||
class RepositorySubversionTest < ActiveSupport::TestCase
|
class RepositorySubversionTest < ActiveSupport::TestCase
|
||||||
fixtures :projects, :repositories
|
fixtures :projects, :repositories, :enabled_modules, :users, :roles
|
||||||
|
|
||||||
def setup
|
def setup
|
||||||
@project = Project.find(1)
|
@project = Project.find(1)
|
||||||
@@ -88,6 +88,54 @@ class RepositorySubversionTest < ActiveSupport::TestCase
|
|||||||
assert_equal 1, entries.size, 'Expect a single entry'
|
assert_equal 1, entries.size, 'Expect a single entry'
|
||||||
assert_equal 'README.txt', entries.first.name
|
assert_equal 'README.txt', entries.first.name
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_identifier
|
||||||
|
@repository.fetch_changesets
|
||||||
|
@repository.reload
|
||||||
|
c = @repository.changesets.find_by_revision('1')
|
||||||
|
assert_equal c.revision, c.identifier
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_find_changeset_by_empty_name
|
||||||
|
@repository.fetch_changesets
|
||||||
|
@repository.reload
|
||||||
|
['', ' ', nil].each do |r|
|
||||||
|
assert_nil @repository.find_changeset_by_name(r)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_identifier_nine_digit
|
||||||
|
c = Changeset.new(:repository => @repository, :committed_on => Time.now,
|
||||||
|
:revision => '123456789', :comments => 'test')
|
||||||
|
assert_equal c.identifier, c.revision
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_format_identifier
|
||||||
|
@repository.fetch_changesets
|
||||||
|
@repository.reload
|
||||||
|
c = @repository.changesets.find_by_revision('1')
|
||||||
|
assert_equal c.format_identifier, c.revision
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_format_identifier_nine_digit
|
||||||
|
c = Changeset.new(:repository => @repository, :committed_on => Time.now,
|
||||||
|
:revision => '123456789', :comments => 'test')
|
||||||
|
assert_equal c.format_identifier, c.revision
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_activities
|
||||||
|
c = Changeset.new(:repository => @repository, :committed_on => Time.now,
|
||||||
|
:revision => '1', :comments => 'test')
|
||||||
|
assert c.event_title.include?('1:')
|
||||||
|
assert_equal '1', c.event_url[:rev]
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_activities_nine_digit
|
||||||
|
c = Changeset.new(:repository => @repository, :committed_on => Time.now,
|
||||||
|
:revision => '123456789', :comments => 'test')
|
||||||
|
assert c.event_title.include?('123456789:')
|
||||||
|
assert_equal '123456789', c.event_url[:rev]
|
||||||
|
end
|
||||||
else
|
else
|
||||||
puts "Subversion test repository NOT FOUND. Skipping unit tests !!!"
|
puts "Subversion test repository NOT FOUND. Skipping unit tests !!!"
|
||||||
def test_fake; assert true end
|
def test_fake; assert true end
|
||||||
|
|||||||
@@ -49,6 +49,42 @@ class TimeEntryTest < ActiveSupport::TestCase
|
|||||||
assert_nil TimeEntry.new.hours
|
assert_nil TimeEntry.new.hours
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_spent_on_with_blank
|
||||||
|
c = TimeEntry.new
|
||||||
|
c.spent_on = ''
|
||||||
|
assert_nil c.spent_on
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_spent_on_with_nil
|
||||||
|
c = TimeEntry.new
|
||||||
|
c.spent_on = nil
|
||||||
|
assert_nil c.spent_on
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_spent_on_with_string
|
||||||
|
c = TimeEntry.new
|
||||||
|
c.spent_on = "2011-01-14"
|
||||||
|
assert_equal Date.parse("2011-01-14"), c.spent_on
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_spent_on_with_invalid_string
|
||||||
|
c = TimeEntry.new
|
||||||
|
c.spent_on = "foo"
|
||||||
|
assert_nil c.spent_on
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_spent_on_with_date
|
||||||
|
c = TimeEntry.new
|
||||||
|
c.spent_on = Date.today
|
||||||
|
assert_equal Date.today, c.spent_on
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_spent_on_with_time
|
||||||
|
c = TimeEntry.new
|
||||||
|
c.spent_on = Time.now
|
||||||
|
assert_equal Date.today, c.spent_on
|
||||||
|
end
|
||||||
|
|
||||||
context "#earilest_date_for_project" do
|
context "#earilest_date_for_project" do
|
||||||
setup do
|
setup do
|
||||||
User.current = nil
|
User.current = nil
|
||||||
|
|||||||
+32
-2
@@ -1,5 +1,5 @@
|
|||||||
# redMine - project management software
|
# Redmine - project management software
|
||||||
# Copyright (C) 2006 Jean-Philippe Lang
|
# Copyright (C) 2006-2011 Jean-Philippe Lang
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or
|
# This program is free software; you can redistribute it and/or
|
||||||
# modify it under the terms of the GNU General Public License
|
# modify it under the terms of the GNU General Public License
|
||||||
@@ -303,6 +303,19 @@ class UserTest < ActiveSupport::TestCase
|
|||||||
assert_nil @dlopper.roles_for_project(Project.find(2)).detect {|role| role.member?}
|
assert_nil @dlopper.roles_for_project(Project.find(2)).detect {|role| role.member?}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_valid_notification_options
|
||||||
|
# without memberships
|
||||||
|
assert_equal 5, User.find(7).valid_notification_options.size
|
||||||
|
# with memberships
|
||||||
|
assert_equal 6, User.find(2).valid_notification_options.size
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_valid_notification_options_class_method
|
||||||
|
assert_equal 5, User.valid_notification_options.size
|
||||||
|
assert_equal 5, User.valid_notification_options(User.find(7)).size
|
||||||
|
assert_equal 6, User.valid_notification_options(User.find(2)).size
|
||||||
|
end
|
||||||
|
|
||||||
def test_mail_notification_all
|
def test_mail_notification_all
|
||||||
@jsmith.mail_notification = 'all'
|
@jsmith.mail_notification = 'all'
|
||||||
@jsmith.notified_project_ids = []
|
@jsmith.notified_project_ids = []
|
||||||
@@ -455,6 +468,7 @@ class UserTest < ActiveSupport::TestCase
|
|||||||
|
|
||||||
should "be false for a user with :only_my_events and isn't an author, creator, or assignee" do
|
should "be false for a user with :only_my_events and isn't an author, creator, or assignee" do
|
||||||
@user = User.generate_with_protected!(:mail_notification => 'only_my_events')
|
@user = User.generate_with_protected!(:mail_notification => 'only_my_events')
|
||||||
|
Member.create!(:user => @user, :project => @project, :role_ids => [1])
|
||||||
assert ! @user.notify_about?(@issue)
|
assert ! @user.notify_about?(@issue)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -487,6 +501,22 @@ class UserTest < ActiveSupport::TestCase
|
|||||||
@assignee.update_attribute(:mail_notification, 'only_owner')
|
@assignee.update_attribute(:mail_notification, 'only_owner')
|
||||||
assert ! @assignee.notify_about?(@issue)
|
assert ! @assignee.notify_about?(@issue)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
should "be true for a user with :selected and is the author" do
|
||||||
|
@author.update_attribute(:mail_notification, 'selected')
|
||||||
|
assert @author.notify_about?(@issue)
|
||||||
|
end
|
||||||
|
|
||||||
|
should "be true for a user with :selected and is the assignee" do
|
||||||
|
@assignee.update_attribute(:mail_notification, 'selected')
|
||||||
|
assert @assignee.notify_about?(@issue)
|
||||||
|
end
|
||||||
|
|
||||||
|
should "be false for a user with :selected and is not the author or assignee" do
|
||||||
|
@user = User.generate_with_protected!(:mail_notification => 'selected')
|
||||||
|
Member.create!(:user => @user, :project => @project, :role_ids => [1])
|
||||||
|
assert ! @user.notify_about?(@issue)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "other events" do
|
context "other events" do
|
||||||
|
|||||||
@@ -46,6 +46,9 @@ class WikiTest < ActiveSupport::TestCase
|
|||||||
assert_equal page, wiki.find_page('Another_page')
|
assert_equal page, wiki.find_page('Another_page')
|
||||||
assert_equal page, wiki.find_page('Another page')
|
assert_equal page, wiki.find_page('Another page')
|
||||||
assert_equal page, wiki.find_page('ANOTHER page')
|
assert_equal page, wiki.find_page('ANOTHER page')
|
||||||
|
|
||||||
|
page = WikiPage.find(10)
|
||||||
|
assert_equal page, wiki.find_page('Этика_менеджмента')
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_titleize
|
def test_titleize
|
||||||
|
|||||||
+155
@@ -0,0 +1,155 @@
|
|||||||
|
--- !ruby/object:Gem::Specification
|
||||||
|
name: coderay
|
||||||
|
version: !ruby/object:Gem::Version
|
||||||
|
hash: 53
|
||||||
|
prerelease: false
|
||||||
|
segments:
|
||||||
|
- 0
|
||||||
|
- 9
|
||||||
|
- 7
|
||||||
|
version: 0.9.7
|
||||||
|
platform: ruby
|
||||||
|
authors:
|
||||||
|
- murphy
|
||||||
|
autorequire:
|
||||||
|
bindir: bin
|
||||||
|
cert_chain: []
|
||||||
|
|
||||||
|
date: 2011-01-15 00:00:00 +01:00
|
||||||
|
default_executable:
|
||||||
|
dependencies: []
|
||||||
|
|
||||||
|
description: |
|
||||||
|
Fast and easy syntax highlighting for selected languages, written in Ruby.
|
||||||
|
Comes with RedCloth integration and LOC counter.
|
||||||
|
|
||||||
|
email: murphy@rubychan.de
|
||||||
|
executables:
|
||||||
|
- coderay
|
||||||
|
- coderay_stylesheet
|
||||||
|
extensions: []
|
||||||
|
|
||||||
|
extra_rdoc_files:
|
||||||
|
- lib/README
|
||||||
|
- FOLDERS
|
||||||
|
files:
|
||||||
|
- ./lib/coderay/duo.rb
|
||||||
|
- ./lib/coderay/encoder.rb
|
||||||
|
- ./lib/coderay/encoders/_map.rb
|
||||||
|
- ./lib/coderay/encoders/comment_filter.rb
|
||||||
|
- ./lib/coderay/encoders/count.rb
|
||||||
|
- ./lib/coderay/encoders/debug.rb
|
||||||
|
- ./lib/coderay/encoders/div.rb
|
||||||
|
- ./lib/coderay/encoders/filter.rb
|
||||||
|
- ./lib/coderay/encoders/html/css.rb
|
||||||
|
- ./lib/coderay/encoders/html/numerization.rb
|
||||||
|
- ./lib/coderay/encoders/html/output.rb
|
||||||
|
- ./lib/coderay/encoders/html.rb
|
||||||
|
- ./lib/coderay/encoders/json.rb
|
||||||
|
- ./lib/coderay/encoders/lines_of_code.rb
|
||||||
|
- ./lib/coderay/encoders/null.rb
|
||||||
|
- ./lib/coderay/encoders/page.rb
|
||||||
|
- ./lib/coderay/encoders/span.rb
|
||||||
|
- ./lib/coderay/encoders/statistic.rb
|
||||||
|
- ./lib/coderay/encoders/term.rb
|
||||||
|
- ./lib/coderay/encoders/text.rb
|
||||||
|
- ./lib/coderay/encoders/token_class_filter.rb
|
||||||
|
- ./lib/coderay/encoders/xml.rb
|
||||||
|
- ./lib/coderay/encoders/yaml.rb
|
||||||
|
- ./lib/coderay/for_redcloth.rb
|
||||||
|
- ./lib/coderay/helpers/file_type.rb
|
||||||
|
- ./lib/coderay/helpers/gzip_simple.rb
|
||||||
|
- ./lib/coderay/helpers/plugin.rb
|
||||||
|
- ./lib/coderay/helpers/word_list.rb
|
||||||
|
- ./lib/coderay/scanner.rb
|
||||||
|
- ./lib/coderay/scanners/_map.rb
|
||||||
|
- ./lib/coderay/scanners/c.rb
|
||||||
|
- ./lib/coderay/scanners/cpp.rb
|
||||||
|
- ./lib/coderay/scanners/css.rb
|
||||||
|
- ./lib/coderay/scanners/debug.rb
|
||||||
|
- ./lib/coderay/scanners/delphi.rb
|
||||||
|
- ./lib/coderay/scanners/diff.rb
|
||||||
|
- ./lib/coderay/scanners/groovy.rb
|
||||||
|
- ./lib/coderay/scanners/html.rb
|
||||||
|
- ./lib/coderay/scanners/java/builtin_types.rb
|
||||||
|
- ./lib/coderay/scanners/java.rb
|
||||||
|
- ./lib/coderay/scanners/java_script-0.9.6.rb
|
||||||
|
- ./lib/coderay/scanners/java_script.rb
|
||||||
|
- ./lib/coderay/scanners/json.rb
|
||||||
|
- ./lib/coderay/scanners/nitro_xhtml.rb
|
||||||
|
- ./lib/coderay/scanners/php.rb
|
||||||
|
- ./lib/coderay/scanners/plaintext.rb
|
||||||
|
- ./lib/coderay/scanners/python.rb
|
||||||
|
- ./lib/coderay/scanners/rhtml.rb
|
||||||
|
- ./lib/coderay/scanners/ruby/patterns.rb
|
||||||
|
- ./lib/coderay/scanners/ruby.rb
|
||||||
|
- ./lib/coderay/scanners/scheme.rb
|
||||||
|
- ./lib/coderay/scanners/sql.rb
|
||||||
|
- ./lib/coderay/scanners/xml.rb
|
||||||
|
- ./lib/coderay/scanners/yaml.rb
|
||||||
|
- ./lib/coderay/style.rb
|
||||||
|
- ./lib/coderay/styles/_map.rb
|
||||||
|
- ./lib/coderay/styles/cycnus.rb
|
||||||
|
- ./lib/coderay/styles/murphy.rb
|
||||||
|
- ./lib/coderay/token_classes.rb
|
||||||
|
- ./lib/coderay/tokens.rb
|
||||||
|
- ./lib/coderay.rb
|
||||||
|
- ./Rakefile
|
||||||
|
- ./test/functional/basic.rb
|
||||||
|
- ./test/functional/basic.rbc
|
||||||
|
- ./test/functional/for_redcloth.rb
|
||||||
|
- ./test/functional/for_redcloth.rbc
|
||||||
|
- ./test/functional/load_plugin_scanner.rb
|
||||||
|
- ./test/functional/load_plugin_scanner.rbc
|
||||||
|
- ./test/functional/suite.rb
|
||||||
|
- ./test/functional/suite.rbc
|
||||||
|
- ./test/functional/vhdl.rb
|
||||||
|
- ./test/functional/vhdl.rbc
|
||||||
|
- ./test/functional/word_list.rb
|
||||||
|
- ./test/functional/word_list.rbc
|
||||||
|
- ./lib/README
|
||||||
|
- ./LICENSE
|
||||||
|
- lib/README
|
||||||
|
- FOLDERS
|
||||||
|
- bin/coderay
|
||||||
|
- bin/coderay_stylesheet
|
||||||
|
has_rdoc: true
|
||||||
|
homepage: http://coderay.rubychan.de
|
||||||
|
licenses: []
|
||||||
|
|
||||||
|
post_install_message:
|
||||||
|
rdoc_options:
|
||||||
|
- -SNw2
|
||||||
|
- -mlib/README
|
||||||
|
- -t CodeRay Documentation
|
||||||
|
require_paths:
|
||||||
|
- lib
|
||||||
|
required_ruby_version: !ruby/object:Gem::Requirement
|
||||||
|
none: false
|
||||||
|
requirements:
|
||||||
|
- - ">="
|
||||||
|
- !ruby/object:Gem::Version
|
||||||
|
hash: 51
|
||||||
|
segments:
|
||||||
|
- 1
|
||||||
|
- 8
|
||||||
|
- 2
|
||||||
|
version: 1.8.2
|
||||||
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
||||||
|
none: false
|
||||||
|
requirements:
|
||||||
|
- - ">="
|
||||||
|
- !ruby/object:Gem::Version
|
||||||
|
hash: 3
|
||||||
|
segments:
|
||||||
|
- 0
|
||||||
|
version: "0"
|
||||||
|
requirements: []
|
||||||
|
|
||||||
|
rubyforge_project: coderay
|
||||||
|
rubygems_version: 1.3.7
|
||||||
|
signing_key:
|
||||||
|
specification_version: 3
|
||||||
|
summary: Fast syntax highlighting for selected languages.
|
||||||
|
test_files:
|
||||||
|
- ./test/functional/suite.rb
|
||||||
Vendored
+53
@@ -0,0 +1,53 @@
|
|||||||
|
= CodeRay - Trunk folder structure
|
||||||
|
|
||||||
|
== bench - Benchmarking system
|
||||||
|
|
||||||
|
All benchmarking stuff goes here.
|
||||||
|
|
||||||
|
Test inputs are stored in files named <code>example.<lang></code>.
|
||||||
|
Test outputs go to <code>bench/test.<encoder-default-file-extension></code>.
|
||||||
|
|
||||||
|
Run <code>bench/bench.rb</code> to get a usage description.
|
||||||
|
|
||||||
|
Run <code>rake bench</code> to perform an example benchmark.
|
||||||
|
|
||||||
|
|
||||||
|
== bin - Scripts
|
||||||
|
|
||||||
|
Executional files for CodeRay.
|
||||||
|
|
||||||
|
|
||||||
|
== demo - Demos and functional tests
|
||||||
|
|
||||||
|
Demonstrational scripts to show of CodeRay's features.
|
||||||
|
|
||||||
|
Run them as functional tests with <code>rake test:demos</code>.
|
||||||
|
|
||||||
|
|
||||||
|
== etc - Lots of stuff
|
||||||
|
|
||||||
|
Some addidtional files for CodeRay, mainly graphics and Vim scripts.
|
||||||
|
|
||||||
|
|
||||||
|
== gem_server - Gem output folder
|
||||||
|
|
||||||
|
For <code>rake gem</code>.
|
||||||
|
|
||||||
|
|
||||||
|
== lib - CodeRay library code
|
||||||
|
|
||||||
|
This is the base directory for the CodeRay library.
|
||||||
|
|
||||||
|
|
||||||
|
== rake_helpers - Rake helper libraries
|
||||||
|
|
||||||
|
Some files to enhance Rake, including the Autumnal Rdoc template and some scripts.
|
||||||
|
|
||||||
|
|
||||||
|
== test - Tests
|
||||||
|
|
||||||
|
Tests for the scanners.
|
||||||
|
|
||||||
|
Each language has its own subfolder and sub-suite.
|
||||||
|
|
||||||
|
Run with <code>rake test</code>.
|
||||||
File renamed without changes.
Vendored
+35
@@ -0,0 +1,35 @@
|
|||||||
|
require 'rake/rdoctask'
|
||||||
|
|
||||||
|
ROOT = '.'
|
||||||
|
LIB_ROOT = File.join ROOT, 'lib'
|
||||||
|
EXTRA_RDOC_FILES = %w(lib/README FOLDERS)
|
||||||
|
|
||||||
|
task :default => :test
|
||||||
|
|
||||||
|
if File.directory? 'rake_tasks'
|
||||||
|
|
||||||
|
# load rake tasks from subfolder
|
||||||
|
for task_file in Dir['rake_tasks/*.rake'].sort
|
||||||
|
load task_file
|
||||||
|
end
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
# fallback tasks when rake_tasks folder is not present
|
||||||
|
desc 'Run CodeRay tests (basic)'
|
||||||
|
task :test do
|
||||||
|
ruby './test/functional/suite.rb'
|
||||||
|
ruby './test/functional/for_redcloth.rb'
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'Generate documentation for CodeRay'
|
||||||
|
Rake::RDocTask.new :doc do |rd|
|
||||||
|
rd.title = 'CodeRay Documentation'
|
||||||
|
rd.main = 'lib/README'
|
||||||
|
rd.rdoc_files.add Dir['lib']
|
||||||
|
rd.rdoc_files.add 'lib/README'
|
||||||
|
rd.rdoc_files.add 'FOLDERS'
|
||||||
|
rd.rdoc_dir = 'doc'
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
+86
@@ -0,0 +1,86 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
# CodeRay Executable
|
||||||
|
#
|
||||||
|
# Version: 0.2
|
||||||
|
# Author: murphy
|
||||||
|
|
||||||
|
require 'coderay'
|
||||||
|
|
||||||
|
if ARGV.empty?
|
||||||
|
$stderr.puts <<-USAGE
|
||||||
|
CodeRay #{CodeRay::VERSION} (http://coderay.rubychan.de)
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
coderay file [-<format>]
|
||||||
|
coderay -<lang> [-<format>] [< file] [> output]
|
||||||
|
|
||||||
|
Defaults:
|
||||||
|
lang: based on file extension
|
||||||
|
format: ANSI colorized output for terminal, HTML page for files
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
coderay foo.rb # colorized output to terminal, based on file extension
|
||||||
|
coderay foo.rb -loc # print LOC count, based on file extension and format
|
||||||
|
coderay foo.rb > foo.html # HTML page output to file, based on extension
|
||||||
|
coderay -ruby < foo.rb # colorized output to terminal, based on lang
|
||||||
|
coderay -ruby -loc < foo.rb # print LOC count, based on lang
|
||||||
|
coderay -ruby -page foo.rb # HTML page output to terminal, based on lang and format
|
||||||
|
coderay -ruby -page foo.rb > foo.html # HTML page output to file, based on lang and format
|
||||||
|
USAGE
|
||||||
|
end
|
||||||
|
|
||||||
|
first, second = ARGV
|
||||||
|
|
||||||
|
def read
|
||||||
|
file = ARGV.grep(/^(?!-)/).last
|
||||||
|
if file
|
||||||
|
if File.exist?(file)
|
||||||
|
File.read file
|
||||||
|
else
|
||||||
|
$stderr.puts "No such file: #{file}"
|
||||||
|
end
|
||||||
|
else
|
||||||
|
$stdin.read
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if first
|
||||||
|
if first[/-(\w+)/] == first
|
||||||
|
lang = $1
|
||||||
|
input = read
|
||||||
|
tokens = :scan
|
||||||
|
else
|
||||||
|
file = first
|
||||||
|
unless File.exist? file
|
||||||
|
$stderr.puts "No such file: #{file}"
|
||||||
|
exit 2
|
||||||
|
end
|
||||||
|
tokens = CodeRay.scan_file file
|
||||||
|
end
|
||||||
|
else
|
||||||
|
$stderr.puts 'No lang/file given.'
|
||||||
|
exit 1
|
||||||
|
end
|
||||||
|
|
||||||
|
if second
|
||||||
|
if second[/-(\w+)/] == second
|
||||||
|
format = $1.to_sym
|
||||||
|
else
|
||||||
|
raise 'invalid format (must be -xxx)'
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if $stdout.tty?
|
||||||
|
format = :term
|
||||||
|
else
|
||||||
|
$stderr.puts 'No format given; setting to default (HTML Page).'
|
||||||
|
format = :page
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if tokens == :scan
|
||||||
|
output = CodeRay::Duo[lang => format].highlight input
|
||||||
|
else
|
||||||
|
output = tokens.encode format
|
||||||
|
end
|
||||||
|
out = $stdout
|
||||||
|
out.puts output
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
require 'coderay'
|
||||||
|
|
||||||
|
puts CodeRay::Encoders[:html]::CSS.new.stylesheet
|
||||||
+2
-1
@@ -18,7 +18,7 @@ And with line numbers.
|
|||||||
* is what everybody should have on their website
|
* is what everybody should have on their website
|
||||||
* solves all your problems and makes the girls run after you
|
* solves all your problems and makes the girls run after you
|
||||||
|
|
||||||
Version: 0.9.2
|
Version: 0.9.7
|
||||||
Author:: murphy (Kornelius Kalnbach)
|
Author:: murphy (Kornelius Kalnbach)
|
||||||
Contact:: murphy rubychan de
|
Contact:: murphy rubychan de
|
||||||
Website:: coderay.rubychan.de[http://coderay.rubychan.de]
|
Website:: coderay.rubychan.de[http://coderay.rubychan.de]
|
||||||
@@ -94,6 +94,7 @@ Please report errors in this documentation to <murphy rubychan de>.
|
|||||||
* Rob Aldred for the terminal encoder
|
* Rob Aldred for the terminal encoder
|
||||||
* Trans for pointing out $DEBUG dependencies
|
* Trans for pointing out $DEBUG dependencies
|
||||||
* Flameeyes for finding that Term::ANSIColor was obsolete
|
* Flameeyes for finding that Term::ANSIColor was obsolete
|
||||||
|
* Etienne Massip for reporting a serious bug in JavaScript scanner
|
||||||
* matz and all Ruby gods and gurus
|
* matz and all Ruby gods and gurus
|
||||||
* The inventors of: the computer, the internet, the true color display, HTML &
|
* The inventors of: the computer, the internet, the true color display, HTML &
|
||||||
CSS, VIM, Ruby, pizza, microwaves, guitars, scouting, programming, anime,
|
CSS, VIM, Ruby, pizza, microwaves, guitars, scouting, programming, anime,
|
||||||
+1
-1
@@ -134,7 +134,7 @@ module CodeRay
|
|||||||
# Minor: feature milestone
|
# Minor: feature milestone
|
||||||
# Teeny: development state, 0 for pre-release
|
# Teeny: development state, 0 for pre-release
|
||||||
# Revision: Subversion Revision number (generated on rake gem:make)
|
# Revision: Subversion Revision number (generated on rake gem:make)
|
||||||
VERSION = '0.9.2'
|
VERSION = '0.9.7'
|
||||||
|
|
||||||
require 'coderay/tokens'
|
require 'coderay/tokens'
|
||||||
require 'coderay/token_classes'
|
require 'coderay/token_classes'
|
||||||
Vendored
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+7
-3
@@ -276,9 +276,13 @@ module Encoders
|
|||||||
when :begin_line
|
when :begin_line
|
||||||
@opened[0] = type
|
@opened[0] = type
|
||||||
if style = @css_style[@opened]
|
if style = @css_style[@opened]
|
||||||
@out << style.sub('<span', '<div')
|
if style['class="']
|
||||||
|
@out << style.sub('class="', 'class="line ')
|
||||||
else
|
else
|
||||||
@out << '<div>'
|
@out << style.sub('>', ' class="line">')
|
||||||
|
end
|
||||||
|
else
|
||||||
|
@out << '<span class="line">'
|
||||||
end
|
end
|
||||||
@opened << type
|
@opened << type
|
||||||
when :end_line
|
when :end_line
|
||||||
@@ -289,7 +293,7 @@ module Encoders
|
|||||||
raise 'Malformed token stream: Trying to close a line (%p) \
|
raise 'Malformed token stream: Trying to close a line (%p) \
|
||||||
that is not open. Open are: %p.' % [type, @opened[1..-1]]
|
that is not open. Open are: %p.' % [type, @opened[1..-1]]
|
||||||
end
|
end
|
||||||
@out << '</div>'
|
@out << '</span>'
|
||||||
@opened.pop
|
@opened.pop
|
||||||
end
|
end
|
||||||
|
|
||||||
Loaded 100 of 163 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user