[DRE-commits] [SCM] redmine.git branch, master, updated. debian/1.2.1+dfsg2-3-25-g8b3b4f6

Jérémy Lal kapouer at melix.org
Sun Nov 13 08:21:09 UTC 2011


The following commit has been merged in the master branch:
commit 14c5d4b98cb6a902ffdfb551a7e8283324f61390
Author: Jérémy Lal <kapouer at melix.org>
Date:   Sun Nov 13 09:16:52 2011 +0100

    Imported Upstream version 1.2.2+dfsg1

diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index f6b1b2b..606c739 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -550,15 +550,20 @@ module ApplicationHelper
           if page =~ /^(.+?)\#(.+)$/
             page, anchor = $1, $2
           end
+          anchor = sanitize_anchor_name(anchor) if anchor.present?
           # check if page exists
           wiki_page = link_project.wiki.find_page(page)
-          url = case options[:wiki_links]
-            when :local; "#{title}.html"
+          url = if anchor.present? && wiki_page.present? && (obj.is_a?(WikiContent) || obj.is_a?(WikiContent::Version)) && obj.page == wiki_page
+            "##{anchor}"
+          else
+            case options[:wiki_links]
+            when :local; "#{page.present? ? Wiki.titleize(page) : ''}.html" + (anchor.present? ? "##{anchor}" : '')
             when :anchor; "##{title}"   # used for single-file wiki export
             else
               wiki_page_id = page.present? ? Wiki.titleize(page) : nil
               url_for(:only_path => only_path, :controller => 'wiki', :action => 'show', :project_id => link_project, :id => wiki_page_id, :anchor => anchor)
             end
+          end
           link_to((title || page), url, :class => ('wiki-page' + (wiki_page ? '' : ' new')))
         else
           # project or wiki doesn't exist
@@ -703,7 +708,7 @@ module ApplicationHelper
     text.gsub!(HEADING_RE) do
       level, attrs, content = $1.to_i, $2, $3
       item = strip_tags(content).strip
-      anchor = item.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-')
+      anchor = sanitize_anchor_name(item)
       @parsed_headings << [level, anchor, item]
       "<a name=\"#{anchor}\"></a>\n<h#{level} #{attrs}>#{content}<a href=\"##{anchor}\" class=\"wiki-anchor\">¶</a></h#{level}>"
     end
@@ -889,6 +894,10 @@ module ApplicationHelper
     end
   end
 
+  def sanitize_anchor_name(anchor)
+    anchor.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-')
+  end
+
   # Returns the javascript tags that are included in the html layout head
   def javascript_heads
     tags = javascript_include_tag(:defaults)
diff --git a/app/models/changeset.rb b/app/models/changeset.rb
index 60ab878..2bf58e7 100644
--- a/app/models/changeset.rb
+++ b/app/models/changeset.rb
@@ -193,7 +193,7 @@ class Changeset < ActiveRecord::Base
   def fix_issue(issue)
     status = IssueStatus.find_by_id(Setting.commit_fix_status_id.to_i)
     if status.nil?
-      logger.warn("No status macthes commit_fix_status_id setting (#{Setting.commit_fix_status_id})") if logger
+      logger.warn("No status matches commit_fix_status_id setting (#{Setting.commit_fix_status_id})") if logger
       return issue
     end
 
diff --git a/app/models/custom_field.rb b/app/models/custom_field.rb
index 0e8151e..9a6ec1c 100644
--- a/app/models/custom_field.rb
+++ b/app/models/custom_field.rb
@@ -42,6 +42,14 @@ class CustomField < ActiveRecord::Base
       errors.add(:possible_values, :invalid) unless self.possible_values.is_a? Array
     end
     
+    if regexp.present?
+      begin
+        Regexp.new(regexp)
+      rescue
+        errors.add(:regexp, :invalid)
+      end
+    end
+    
     # validate default value
     v = CustomValue.new(:custom_field => self.clone, :value => default_value, :customized => nil)
     v.custom_field.is_required = false
@@ -56,7 +64,7 @@ class CustomField < ActiveRecord::Base
         when 'user'
           obj.project.users.sort.collect {|u| [u.to_s, u.id.to_s]}
         when 'version'
-          obj.project.versions.sort.collect {|u| [u.to_s, u.id.to_s]}
+          obj.project.shared_versions.sort.collect {|u| [u.to_s, u.id.to_s]}
         end
       elsif obj.is_a?(Array)
         obj.collect {|o| possible_values_options(o)}.inject {|memo, v| memo & v}
diff --git a/app/models/issue.rb b/app/models/issue.rb
index 79c4915..d24adc1 100644
--- a/app/models/issue.rb
+++ b/app/models/issue.rb
@@ -449,6 +449,7 @@ class Issue < ActiveRecord::Base
   def assignable_users
     users = project.assignable_users
     users << author if author
+    users << assigned_to if assigned_to
     users.uniq.sort
   end
 
diff --git a/app/models/issue_status.rb b/app/models/issue_status.rb
index f2db4b5..e0860be 100644
--- a/app/models/issue_status.rb
+++ b/app/models/issue_status.rb
@@ -58,8 +58,7 @@ class IssueStatus < ActiveRecord::Base
       transitions = workflows.select do |w|
         role_ids.include?(w.role_id) &&
         w.tracker_id == tracker.id && 
-        (author || !w.author) &&
-        (assignee || !w.assignee)
+        ((!w.author && !w.assignee) || (author && w.author) || (assignee && w.assignee))
       end
       transitions.collect{|w| w.new_status}.compact.sort
     else
@@ -70,14 +69,17 @@ class IssueStatus < ActiveRecord::Base
   # Same thing as above but uses a database query
   # More efficient than the previous method if called just once
   def find_new_statuses_allowed_to(roles, tracker, author=false, assignee=false)
-    if roles && tracker
-      conditions = {:role_id => roles.collect(&:id), :tracker_id => tracker.id}
-      conditions[:author] = false unless author
-      conditions[:assignee] = false unless assignee
+    if roles.present? && tracker
+      conditions = "(author = :false AND assignee = :false)"
+      conditions << " OR author = :true" if author
+      conditions << " OR assignee = :true" if assignee
       
       workflows.find(:all,
-                     :include => :new_status,
-                     :conditions => conditions).collect{|w| w.new_status}.compact.sort
+        :include => :new_status,
+        :conditions => ["role_id IN (:role_ids) AND tracker_id = :tracker_id AND (#{conditions})", 
+          {:role_ids => roles.collect(&:id), :tracker_id => tracker.id, :true => true, :false => false}
+          ]
+        ).collect{|w| w.new_status}.compact.sort
     else
       []
     end
diff --git a/app/models/mail_handler.rb b/app/models/mail_handler.rb
index dbbd4f5..377d664 100644
--- a/app/models/mail_handler.rb
+++ b/app/models/mail_handler.rb
@@ -198,7 +198,7 @@ class MailHandler < ActionMailer::Base
   end
 
   def add_attachments(obj)
-    if email.has_attachments?
+    if email.attachments && email.attachments.any?
       email.attachments.each do |attachment|
         Attachment.create(:container => obj,
                           :file => attachment,
diff --git a/app/models/query.rb b/app/models/query.rb
index 786751c..1e18ae7 100644
--- a/app/models/query.rb
+++ b/app/models/query.rb
@@ -333,14 +333,17 @@ class Query < ActiveRecord::Base
   end
 
   def columns
-    if has_default_columns?
-      available_columns.select do |c|
-        # Adds the project column by default for cross-project lists
-        Setting.issue_list_default_columns.include?(c.name.to_s) || (c.name == :project && project.nil?)
-      end
-    else
-      # preserve the column_names order
-      column_names.collect {|name| available_columns.find {|col| col.name == name}}.compact
+    # preserve the column_names order
+    (has_default_columns? ? default_columns_names : column_names).collect do |name|
+       available_columns.find { |col| col.name == name }
+    end.compact
+  end
+
+  def default_columns_names
+    @default_columns_names ||= begin
+      default_columns = Setting.issue_list_default_columns.map(&:to_sym)
+
+      project.present? ? default_columns : [:project] | default_columns
     end
   end
 
@@ -349,7 +352,7 @@ class Query < ActiveRecord::Base
       names = names.select {|n| n.is_a?(Symbol) || !n.blank? }
       names = names.collect {|n| n.is_a?(Symbol) ? n : n.to_sym }
       # Set column_names to nil if default columns
-      if names.map(&:to_s) == Setting.issue_list_default_columns
+      if names == default_columns_names
         names = nil
       end
     end
@@ -518,7 +521,7 @@ class Query < ActiveRecord::Base
 
   # Returns the issue count
   def issue_count
-    Issue.count(:include => [:status, :project], :conditions => statement)
+    Issue.visible.count(:include => [:status, :project], :conditions => statement)
   rescue ::ActiveRecord::StatementInvalid => e
     raise StatementInvalid.new(e.message)
   end
diff --git a/app/models/repository/git.rb b/app/models/repository/git.rb
index 7d96d00..f4d4337 100644
--- a/app/models/repository/git.rb
+++ b/app/models/repository/git.rb
@@ -92,6 +92,17 @@ class Repository::Git < Repository
                 options = {:report_last_commit => extra_report_last_commit})
   end
 
+  # With SCMs that have a sequential commit numbering,
+  # such as Subversion and Mercurial,
+  # Redmine is able to be clever and only fetch changesets
+  # going forward from the most recent one it knows about.
+  # 
+  # However, Git does not have a sequential commit numbering.
+  #
+  # In order to fetch only new adding revisions,
+  # Redmine needs to parse revisions per branch.
+  # Branch "last_scmid" is for this requirement.
+  #
   # In Git and Mercurial, revisions are not in date order.
   # Redmine Mercurial fixed issues.
   #    * Redmine Takes Too Long On Large Mercurial Repository
diff --git a/app/models/wiki_page.rb b/app/models/wiki_page.rb
index 99a88cf..7e43e2f 100644
--- a/app/models/wiki_page.rb
+++ b/app/models/wiki_page.rb
@@ -30,7 +30,7 @@ class WikiPage < ActiveRecord::Base
                 :datetime => :created_on,
                 :url => Proc.new {|o| {:controller => 'wiki', :action => 'show', :project_id => o.wiki.project, :id => o.title}}
 
-  acts_as_searchable :columns => ['title', 'text'],
+  acts_as_searchable :columns => ['title', "#{WikiContent.table_name}.text"],
                      :include => [{:wiki => :project}, :content],
                      :permission => :view_wiki_pages,
                      :project_key => "#{Wiki.table_name}.project_id"
diff --git a/config/configuration.yml.example b/config/configuration.yml.example
index a729c60..63c02d2 100644
--- a/config/configuration.yml.example
+++ b/config/configuration.yml.example
@@ -89,7 +89,7 @@ default:
       authentication: :login
       user_name: "redmine at example.net"
       password: "redmine"
-  
+
   # Absolute path to the directory where attachments are stored.
   # The default is the 'files' directory in your Redmine instance.
   # Your Redmine instance needs to have write permission on this
@@ -98,7 +98,7 @@ default:
   # attachments_storage_path: /var/redmine/files
   # attachments_storage_path: D:/redmine/files
   attachments_storage_path:
-  
+
   # Configuration of the autologin cookie.
   # autologin_cookie_name: the name of the cookie (default: autologin)
   # autologin_cookie_path: the cookie path (default: /)
@@ -106,10 +106,17 @@ default:
   autologin_cookie_name:
   autologin_cookie_path:
   autologin_cookie_secure:
-  
+
   # Configuration of SCM executable command.
+  #
   # Absolute path (e.g. /usr/local/bin/hg) or command name (e.g. hg.exe, bzr.exe)
-  # On Windows, *.cmd, *.bat (e.g. hg.cmd, bzr.bat) does not work.
+  # On Windows + CRuby, *.cmd, *.bat (e.g. hg.cmd, bzr.bat) does not work.
+  #
+  # On Windows + JRuby 1.6.2, path which contains spaces does not work.
+  # For example, "C:\Program Files\TortoiseHg\hg.exe".
+  # If you want to this feature, you need to install to the path which does not contains spaces.
+  # For example, "C:\TortoiseHg\hg.exe".
+  #
   # Examples:
   # scm_subversion_command: svn                                       # (default: svn)
   # scm_mercurial_command:  C:\Program Files\TortoiseHg\hg.exe        # (default: hg)
@@ -117,13 +124,14 @@ default:
   # scm_cvs_command:        cvs                                       # (default: cvs)
   # scm_bazaar_command:     bzr.exe                                   # (default: bzr)
   # scm_darcs_command:      darcs-1.0.9-i386-linux                    # (default: darcs)
+  #
   scm_subversion_command:
   scm_mercurial_command:
   scm_git_command:
   scm_cvs_command:
   scm_bazaar_command:
   scm_darcs_command:
-  
+
   # Key used to encrypt sensitive data in the database (SCM and LDAP passwords).
   # If you don't want to enable data encryption, just leave it blank.
   # WARNING: losing/changing this key will make encrypted data unreadable.
@@ -136,8 +144,8 @@ default:
   # * decrypt data using 'rake db:decrypt RAILS_ENV=production' first
   # * change the cipher key here in your configuration file
   # * encrypt data using 'rake db:encrypt RAILS_ENV=production'
-  database_cipher_key: 
-  
+  database_cipher_key:
+
 # specific configuration options for production environment
 # that overrides the default ones
 production:
diff --git a/config/locales/es.yml b/config/locales/es.yml
index e1d3031..fd6b5d8 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -132,7 +132,7 @@ es:
         greater_than_start_date: "debe ser posterior a la fecha de comienzo"
         not_same_project: "no pertenece al mismo proyecto"
         circular_dependency: "Esta relación podría crear una dependencia circular"
-        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: "Esta petición no puede ser ligada a una de estas tareas"
 
         # Append your own errors here or at the model/attributes scope.
 
diff --git a/config/locales/hu.yml b/config/locales/hu.yml
index fd79d85..0e75382 100644
--- a/config/locales/hu.yml
+++ b/config/locales/hu.yml
@@ -34,40 +34,40 @@
     distance_in_words:
       half_a_minute: 'fél perc'
       less_than_x_seconds:
-#        zero: 'kevesebb, mint 1 másodperc'
-        one: 'kevesebb, mint 1 másodperc'
-        other: 'kevesebb, mint %{count} másodperc'
+#        zero: 'kevesebb, mint 1 másodperce'
+        one: 'kevesebb, mint 1 másodperce'
+        other: 'kevesebb, mint %{count} másodperce'
       x_seconds:
-        one: '1 másodperc'
-        other: '%{count} másodperc'
+        one: '1 másodperce'
+        other: '%{count} másodperce'
       less_than_x_minutes:
-#        zero: 'kevesebb, mint 1 perc'
-        one: 'kevesebb, mint 1 perc'
-        other: 'kevesebb, mint %{count} perc'
+#        zero: 'kevesebb, mint 1 perce'
+        one: 'kevesebb, mint 1 perce'
+        other: 'kevesebb, mint %{count} perce'
       x_minutes:
-        one: '1 perc'
-        other: '%{count} perc'
+        one: '1 perce'
+        other: '%{count} perce'
       about_x_hours:
-        one: 'majdnem 1 óra'
-        other: 'majdnem %{count} óra'
+        one: 'csaknem 1 órája'
+        other: 'csaknem %{count} órája'
       x_days:
-        one: '1 nap'
-        other: '%{count} nap'
+        one: '1 napja'
+        other: '%{count} napja'
       about_x_months:
-        one: 'majdnem 1 hónap'
-        other: 'majdnem %{count} hónap'
+        one: 'csaknem 1 hónapja'
+        other: 'csaknem %{count} hónapja'
       x_months:
-        one: '1 hónap'
-        other: '%{count} hónap'
+        one: '1 hónapja'
+        other: '%{count} hónapja'
       about_x_years:
-        one: 'majdnem 1 év'
-        other: 'majdnem %{count} év'
+        one: 'csaknem 1 éve'
+        other: 'csaknem %{count} éve'
       over_x_years:
-        one: 'több, mint 1 év'
-        other: 'több, mint %{count} év'
+        one: 'több, mint 1 éve'
+        other: 'több, mint %{count} éve'
       almost_x_years:
-        one:   "közel 1 év"
-        other: "közel %{count} év"
+        one:   "csaknem 1 éve"
+        other: "csaknem %{count} éve"
     prompts:
       year:   "Év"
       month:  "Hónap"
@@ -264,7 +264,7 @@
   field_attr_mail: E-mail
   field_onthefly: On-the-fly felhasználó létrehozás
   field_start_date: Kezdés dátuma
-  field_done_ratio: Elkészült (%)
+  field_done_ratio: Készültség (%)
   field_auth_source: Azonosítási mód
   field_hide_mail: Rejtse el az e-mail címem
   field_comments: Megjegyzés
@@ -280,7 +280,7 @@
   field_delay: Késés
   field_assignable: Feladat rendelhető ehhez a szerepkörhöz
   field_redirect_existing_links: Létező linkek átirányítása
-  field_estimated_hours: Becsült idő
+  field_estimated_hours: Becsült időigény
   field_column_names: Oszlopok
   field_time_zone: Időzóna
   field_searchable: Kereshető
@@ -326,7 +326,7 @@
   project_module_documents: Dokumentumok
   project_module_files: Fájlok
   project_module_wiki: Wiki
-  project_module_repository: Tároló
+  project_module_repository: Forráskód
   project_module_boards: Fórumok
   
   label_user: Felhasználó
@@ -391,7 +391,7 @@
   label_assigned_to_me_issues: A nekem kiosztott feladatok
   label_last_login: Utolsó bejelentkezés
   label_registered_on: Regisztrált
-  label_activity: Tevékenységek
+  label_activity: Történések
   label_overall_activity: Teljes aktivitás
   label_new: Új
   label_logged_as: Bejelentkezve, mint
@@ -510,8 +510,8 @@
   label_contains: tartalmazza
   label_not_contains: nem tartalmazza
   label_day_plural: nap
-  label_repository: Tároló
-  label_repository_plural: Tárolók
+  label_repository: Forráskód
+  label_repository_plural: Forráskódok
   label_browse: Tallóz
   label_modification: "%{count} változás"
   label_modification_plural: "%{count} változás"
@@ -600,10 +600,10 @@
   label_language_based: A felhasználó nyelve alapján
   label_sort_by: "%{value} szerint rendezve"
   label_send_test_email: Teszt e-mail küldése
-  label_feeds_access_key_created_on: "RSS hozzáférési kulcs létrehozva ennyivel ezelőtt: %{value}"
+  label_feeds_access_key_created_on: "RSS hozzáférési kulcs létrehozva %{value}"
   label_module_plural: Modulok
-  label_added_time_by: "%{author} adta hozzá ennyivel ezelőtt: %{age}"
-  label_updated_time: "Utolsó módosítás ennyivel ezelőtt: %{value}"
+  label_added_time_by: "%{author} adta hozzá %{age}"
+  label_updated_time: "Utolsó módosítás %{value}"
   label_jump_to_a_project: Ugrás projekthez...
   label_file_plural: Fájlok
   label_changeset_plural: Changesets
@@ -695,11 +695,11 @@
   text_unallowed_characters: Tiltott karakterek
   text_comma_separated: Több érték megengedett (vesszővel elválasztva)
   text_issues_ref_in_commit_messages: Hivatkozás feladatokra, feladatok javítása a commit üzenetekben
-  text_issue_added: "A feladatot %{id} bejelentette: %{author}."
-  text_issue_updated: "A feladatot %{id} módosította: %{author}."
+  text_issue_added: "%{author} új feladatot hozott létre %{id} sorszámmal."
+  text_issue_updated: "%{author} módosította a %{id} sorszámú feladatot."
   text_wiki_destroy_confirmation: Biztosan törölni szeretné ezt a wiki-t minden tartalmával együtt ?
-  text_issue_category_destroy_question: "Néhány feladat (%{count}) hozzá van rendelve ehhez a kategóriához. Mit szeretne tenni ?"
-  text_issue_category_destroy_assignments: Kategória hozzárendelés megszűntetése
+  text_issue_category_destroy_question: "Néhány feladat (%{count}) hozzá van rendelve ehhez a kategóriához. Mit szeretne tenni?"
+  text_issue_category_destroy_assignments: Kategória hozzárendelés megszüntetése
   text_issue_category_reassign_to: Feladatok újra hozzárendelése másik kategóriához
   text_user_mail_option: "A nem kiválasztott projektekről csak akkor kap értesítést, ha figyelést kér rá, vagy részt vesz benne (pl. Ön a létrehozó, vagy a hozzárendelő)"
   text_no_configuration_data: "Szerepkörök, feladat típusok, feladat státuszok, és workflow adatok még nincsenek konfigurálva.\nErősen ajánlott, az alapértelmezett konfiguráció betöltése, és utána módosíthatja azt."
@@ -709,8 +709,8 @@
   text_select_project_modules: 'Válassza ki az engedélyezett modulokat ehhez a projekthez:'
   text_default_administrator_account_changed: Alapértelmezett adminisztrátor fiók megváltoztatva
   text_file_repository_writable: Fájl tároló írható
-  text_rmagick_available: RMagick elérhető (opcionális)
-  text_destroy_time_entries_question: "%{hours} órányi munka van rögzítve a feladatokon, amiket törölni szeretne. Mit szeretne tenni ?"
+  text_rmagick_available: RMagick elérhető (nem kötelező)
+  text_destroy_time_entries_question: "%{hours} órányi munka van rögzítve a feladatokon, amiket törölni szeretne. Mit szeretne tenni?"
   text_destroy_time_entries: A rögzített órák törlése
   text_assign_time_entries_to_project: A rögzített órák hozzárendelése a projekthez
   text_reassign_time_entries: 'A rögzített órák újra hozzárendelése másik feladathoz:'
@@ -720,7 +720,7 @@
   default_role_reporter: Bejelentő
   default_tracker_bug: Hiba
   default_tracker_feature: Fejlesztés
-  default_tracker_support: Support
+  default_tracker_support: Támogatás
   default_issue_status_new: Új
   default_issue_status_in_progress: Folyamatban
   default_issue_status_resolved: Megoldva
@@ -741,7 +741,7 @@
   enumeration_doc_categories: Dokumentum kategóriák
   enumeration_activities: Tevékenységek (idő rögzítés)
   mail_body_reminder: "%{count} neked kiosztott feladat határidős az elkövetkező %{days} napban:"
-  mail_subject_reminder: "%{count} feladat határidős az elkövetkező %{days} napokban"
+  mail_subject_reminder: "%{count} feladat határidős az elkövetkező %{days} napban"
   text_user_wrote: "%{value} írta:"
   label_duplicated_by: duplikálta
   setting_enabled_scm: Forráskódkezelő (SCM) engedélyezése
@@ -812,14 +812,14 @@
   permission_edit_own_messages: Saját üzenetek szerkesztése
   permission_delete_own_messages: Saját üzenetek törlése
   label_user_activity: "%{value} tevékenységei"
-  label_updated_time_by: "Módosította %{author} ennyivel ezelőtt: %{age}"
+  label_updated_time_by: "Módosította %{author} %{age}"
   text_diff_truncated: '... A diff fájl vége nem jelenik meg, mert hosszab, mint a megjeleníthető sorok száma.'
   setting_diff_max_lines_displayed: A megjelenítendő sorok száma (maximum) a diff fájloknál
   text_plugin_assets_writable: Plugin eszközök könyvtár írható
   warning_attachments_not_saved: "%{count} fájl mentése nem sikerült."
   button_create_and_continue: Létrehozás és folytatás
   text_custom_field_possible_values_info: 'Értékenként egy sor'
-  label_display: Megjelenés
+  label_display: Megmutat
   field_editable: Szerkeszthető
   setting_repository_log_display_limit: Maximum hány revíziót mutasson meg a log megjelenítésekor
   setting_file_max_size_displayed: Maximum mekkora szövegfájlokat jelenítsen meg soronkénti összehasonlításnál
@@ -835,40 +835,40 @@
   label_greater_or_equal: ">="
   label_less_or_equal: "<="
   text_wiki_page_destroy_question: Ennek az oldalnak %{descendants} gyermek-, és leszármazott oldala van. Mit szeretne tenni?
-  text_wiki_page_reassign_children: Az aloldalak hozzárendelése ehhez a szülő oldalhoz
-  text_wiki_page_nullify_children: Az aloldalak megtartása, mint főoldalak
+  text_wiki_page_reassign_children: Aloldalak hozzárendelése ehhez a szülő oldalhoz
+  text_wiki_page_nullify_children: Aloldalak átalakítása főoldallá
   text_wiki_page_destroy_children: Minden aloldal és leszármazottjának törlése
   setting_password_min_length: Minimum jelszó hosszúság
   field_group_by: Szerint csoportosítva
   mail_subject_wiki_content_updated: "'%{id}' wiki oldal frissítve"
   label_wiki_content_added: Wiki oldal hozzáadva
   mail_subject_wiki_content_added: "Új wiki oldal: '%{id}'"
-  mail_body_wiki_content_added: A '%{id}' wiki oldalt %{author} hozta létre.
+  mail_body_wiki_content_added: %{author} létrehozta a '%{id}' wiki oldalt.
   label_wiki_content_updated: Wiki oldal frissítve
-  mail_body_wiki_content_updated: A '%{id}' wiki oldalt %{author} frissítette.
+  mail_body_wiki_content_updated: %{author} frissítette a '%{id}' wiki oldalt.
   permission_add_project: Projekt létrehozása
   setting_new_project_user_role_id: Projekt létrehozási jog nem adminisztrátor felhasználóknak
-  label_view_all_revisions: Minden revízió megtekintése
+  label_view_all_revisions: Összes verzió
   label_tag: Tag
   label_branch: Branch
   error_no_tracker_in_project: Nincs feladat típus hozzárendelve ehhez a projekthez. Kérem ellenőrizze a projekt beállításait.
   error_no_default_issue_status: Nincs alapértelmezett feladat státusz beállítva. Kérem ellenőrizze a beállításokat (Itt találja "Adminisztráció -> Feladat státuszok").
-  text_journal_changed: "%{label} változott erről: %{old} erre: %{new}"
+  text_journal_changed: "%{label} megváltozott, %{old} helyett %{new} lett"
   text_journal_set_to: "%{label} új értéke: %{value}"
-  text_journal_deleted: "%{label} törölve (%{old})"
+  text_journal_deleted: "%{label} törölve lett (%{old})"
   label_group_plural: Csoportok
   label_group: Csoport
   label_group_new: Új csoport
-  label_time_entry_plural: Rögzített idő
+  label_time_entry_plural: Időráfordítás
   text_journal_added: "%{label} %{value} hozzáadva"
   field_active: Aktív
-  enumeration_system_activity: Rendszer Tevékenység
+  enumeration_system_activity: Rendszertevékenység
   permission_delete_issue_watchers: Megfigyelők törlése
   version_status_closed: lezárt
   version_status_locked: zárolt
   version_status_open: nyitott
   error_can_not_reopen_issue_on_closed_version: Lezárt verzióhoz rendelt feladatot nem lehet újranyitni
-  label_user_anonymous: Anonymous
+  label_user_anonymous: Névtelen
   button_move_and_follow: Mozgatás és követés
   setting_default_projects_modules: Alapértelmezett modulok az új projektekhez
   setting_gravatar_default: Alapértelmezett Gravatar kép
diff --git a/config/locales/it.yml b/config/locales/it.yml
index 48dfd17..46e0521 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -939,41 +939,41 @@ it:
   setting_commit_logtime_enabled: Abilita registrazione del tempo di collegamento
   notice_gantt_chart_truncated: Il grafico è stato troncato perchè eccede il numero di oggetti (%{max}) da visualizzare
   setting_gantt_items_limit: Massimo numero di oggetti da visualizzare sul diagramma di gantt
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
-  label_news_comment_added: Comment added to a news
-  button_expand_all: Expand all
-  button_collapse_all: Collapse all
-  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
-  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
-  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
-  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
-  label_role_anonymous: Anonymous
-  label_role_non_member: Non member
-  label_issue_note_added: Note added
-  label_issue_status_updated: Status updated
-  label_issue_priority_updated: Priority updated
-  label_issues_visibility_own: Issues created by or assigned to the user
-  field_issues_visibility: Issues visibility
-  label_issues_visibility_all: All issues
-  permission_set_own_issues_private: Set own issues public or private
-  field_is_private: Private
-  permission_set_issues_private: Set issues public or private
-  label_issues_visibility_public: All non private issues
-  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  field_warn_on_leaving_unsaved: Avvisami quando lascio una pagina con testo non salvato
+  text_warn_on_leaving_unsaved: La pagina corrente contiene del testo non salvato che verrà perso se lasci questa pagina.
+  label_my_queries: Le mie queries personalizzate
+  text_journal_changed_no_detail: "%{label} aggiornato"
+  label_news_comment_added: Commento aggiunto a una notizia
+  button_expand_all: Espandi tutto
+  button_collapse_all: Comprimi tutto
+  label_additional_workflow_transitions_for_assignee: Transizioni supplementari consentite quando l'utente è l'assegnatario
+  label_additional_workflow_transitions_for_author: Transizioni supplementari consentite quando l'utente è l'autore
+  label_bulk_edit_selected_time_entries: Modifica massiva delle ore segnalate selezionate
+  text_time_entries_destroy_confirmation: Sei sicuro di voler eliminare l'ora\e selezionata\e?
+  label_role_anonymous: Anonimo
+  label_role_non_member: Non membro
+  label_issue_note_added: Nota aggiunta
+  label_issue_status_updated: Stato aggiornato
+  label_issue_priority_updated: Priorità aggiornata
+  label_issues_visibility_own: Segnalazioni create o assegnate all'utente
+  field_issues_visibility: Visibilità segnalazioni
+  label_issues_visibility_all: Tutte le segnalazioni
+  permission_set_own_issues_private: Imposta le proprie segnalazioni pubbliche o private
+  field_is_private: Privato
+  permission_set_issues_private: Imposta le segnalazioni pubbliche o private
+  label_issues_visibility_public: Tutte le segnalazioni non private
+  text_issues_destroy_descendants_confirmation: Questo eliminerà anche %{count} sottoattività.
   field_commit_logs_encoding: Codifica dei messaggi di commit
-  field_scm_path_encoding: Path encoding
-  text_scm_path_encoding_note: "Default: UTF-8"
-  field_path_to_repository: Path to repository
-  field_root_directory: Root directory
-  field_cvs_module: Module
+  field_scm_path_encoding: Codifica del percorso
+  text_scm_path_encoding_note: "Predefinito: UTF-8"
+  field_path_to_repository: Percorso del repository
+  field_root_directory: Directory radice
+  field_cvs_module: Modulo
   field_cvsroot: CVSROOT
-  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
-  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
-  text_scm_command: Command
-  text_scm_command_version: Version
-  label_git_report_last_commit: Report last commit for files and directories
-  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
-  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
+  text_git_repository_note: Repository centrale e locale (es. /gitrepo, c:\gitrepo)
+  text_mercurial_repository_note: Repository locale (es. /hgrepo, c:\hgrepo)
+  text_scm_command: Comando
+  text_scm_command_version: Versione
+  label_git_report_last_commit: Riporta l'ultimo commit per files e directories
+  text_scm_config: Puoi configurare i comandi scm nel file config/configuration.yml. E' necessario riavviare l'applicazione dopo averlo modificato.
+  text_scm_command_not_available: Il comando scm non è disponibile. Controllare le impostazioni nel pannello di amministrazione.
diff --git a/config/locales/nl.yml b/config/locales/nl.yml
index ab33895..708d8fc 100644
--- a/config/locales/nl.yml
+++ b/config/locales/nl.yml
@@ -123,7 +123,7 @@ nl:
         greater_than_start_date: "moet na de startdatum liggen"
         not_same_project: "hoort niet bij hetzelfde project"
         circular_dependency: "Deze relatie zou een circulaire afhankelijkheid tot gevolg hebben"
-        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: "Een issue kan niet gelinked worden met een subtask"
 
   actionview_instancetag_blank_option: Selecteer
   
@@ -703,7 +703,7 @@ nl:
   setting_bcc_recipients: Blind carbon copy ontvangers (bcc)
   setting_commit_fix_keywords: Gefixeerde trefwoorden
   setting_commit_ref_keywords: Refererende trefwoorden
-  setting_cross_project_issue_relations: Sta crossproject issuerelaties toe
+  setting_cross_project_issue_relations: Sta cross-project issuerelaties toe
   setting_date_format: Datumformaat
   setting_default_language: Standaard taal
   setting_default_projects_public: Nieuwe projecten zijn standaard publiek
@@ -908,8 +908,8 @@ nl:
   label_user_mail_option_only_my_events: Alleen voor dingen die ik volg of bij betrokken ben
   label_user_mail_option_only_assigned: Alleen voor dingen die aan mij zijn toegewezen
   label_user_mail_option_none: Bij geen enkele gebeurtenis
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
+  field_member_of_group: Groep van toegewezene
+  field_assigned_to_role: Rol van toegewezene
   notice_not_authorized_archived_project: Het project dat u wilt bezoeken is gearchiveerd.
   label_principal_search: "Zoek naar gebruiker of groep:"
   label_user_search: "Zoek naar gebruiker:"
@@ -925,10 +925,10 @@ nl:
   label_my_queries: Mijn aangepaste zoekopdrachten
   text_journal_changed_no_detail: "%{label} updated"
   label_news_comment_added: Commentaar toegevoegd aan een nieuwsitem
-  button_expand_all: Expand all
-  button_collapse_all: Collapse all
-  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
-  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
+  button_expand_all: Klap uit
+  button_collapse_all: Klap in
+  label_additional_workflow_transitions_for_assignee: Aanvullende veranderingen toegestaan wanneer de gebruiker de toegewezene is
+  label_additional_workflow_transitions_for_author: Aanvullende veranderingen toegestaan wanneer de gebruiker de auteur is
   label_bulk_edit_selected_time_entries: Bulk edit selected time entries
   text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
   label_role_anonymous: Anonymous
@@ -946,7 +946,7 @@ nl:
   text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
   field_commit_logs_encoding: Encodering van commit berichten
   field_scm_path_encoding: Path encoding
-  text_scm_path_encoding_note: "Default: UTF-8"
+  text_scm_path_encoding_note: "Standaard: UTF-8"
   field_path_to_repository: Path to repository
   field_root_directory: Root directory
   field_cvs_module: Module
diff --git a/config/locales/no.yml b/config/locales/no.yml
index 2bbb77e..e6f4334 100644
--- a/config/locales/no.yml
+++ b/config/locales/no.yml
@@ -114,7 +114,7 @@
         greater_than_start_date: "må være større enn startdato"
         not_same_project: "hører ikke til samme prosjekt"
         circular_dependency: "Denne relasjonen ville lagd en sirkulær avhengighet"
-        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: "En sak kan ikke kobles mot en av sine undersaker"
 
   
   actionview_instancetag_blank_option: Vennligst velg
@@ -212,7 +212,7 @@
   field_role: Rolle
   field_homepage: Hjemmeside
   field_is_public: Offentlig
-  field_parent: Underprosjekt til
+  field_parent: Underprosjekt av
   field_is_in_roadmap: Vises i veikart
   field_login: Brukernavn
   field_mail_notification: E-post-varsling
@@ -236,8 +236,8 @@
   field_onthefly: On-the-fly brukeropprettelse
   field_start_date: Start
   field_done_ratio: "% Ferdig"
-  field_auth_source: Autentifikasjonsmodus
-  field_hide_mail: Skjul min e-post-adresse
+  field_auth_source: Autentiseringskilde
+  field_hide_mail: Skjul min epost-adresse
   field_comments: Kommentarer
   field_url: URL
   field_start_page: Startside
@@ -247,7 +247,7 @@
   field_spent_on: Dato
   field_identifier: Identifikasjon
   field_is_filter: Brukes som filter
-  field_issue_to: Relatert saker
+  field_issue_to: Relaterte saker
   field_delay: Forsinkelse
   field_assignable: Saker kan tildeles denne rollen
   field_redirect_existing_links: Viderekoble eksisterende lenker
@@ -266,24 +266,24 @@
   setting_self_registration: Selvregistrering
   setting_attachment_max_size: Maks. størrelse vedlegg
   setting_issues_export_limit: Eksportgrense for saker
-  setting_mail_from: Avsenders e-post
+  setting_mail_from: Avsenders epost
   setting_bcc_recipients: Blindkopi (bcc) til mottakere
   setting_host_name: Vertsnavn
   setting_text_formatting: Tekstformattering
   setting_wiki_compression: Komprimering av Wiki-historikk
   setting_feeds_limit: Innholdsgrense for Feed
   setting_default_projects_public: Nye prosjekter er offentlige som standard
-  setting_autofetch_changesets: Autohenting av innsendinger
+  setting_autofetch_changesets: Autohenting av endringssett
   setting_sys_api_enabled: Aktiver webservice for depot-administrasjon
   setting_commit_ref_keywords: Nøkkelord for referanse
   setting_commit_fix_keywords: Nøkkelord for retting
   setting_autologin: Autoinnlogging
   setting_date_format: Datoformat
   setting_time_format: Tidsformat
-  setting_cross_project_issue_relations: Tillat saksrelasjoner mellom prosjekter
+  setting_cross_project_issue_relations: Tillat saksrelasjoner på kryss av prosjekter
   setting_issue_list_default_columns: Standardkolonner vist i sakslisten
   setting_repositories_encodings: Depot-tegnsett
-  setting_emails_footer: E-post-signatur
+  setting_emails_footer: Epost-signatur
   setting_protocol: Protokoll
   setting_per_page_options: Alternativer, objekter pr. side
   setting_user_format: Visningsformat, brukere
@@ -291,8 +291,8 @@
   setting_display_subprojects_issues: Vis saker fra underprosjekter på hovedprosjekt som standard
   setting_enabled_scm: Aktiviserte SCM
   
-  project_module_issue_tracking: Sakssporing
-  project_module_time_tracking: Tidssporing
+  project_module_issue_tracking: Sakshåndtering
+  project_module_time_tracking: Tidsregistrering
   project_module_news: Nyheter
   project_module_documents: Dokumenter
   project_module_files: Filer
@@ -326,7 +326,7 @@
   label_role: Rolle
   label_role_plural: Roller
   label_role_new: Ny rolle
-  label_role_and_permissions: Roller og tillatelser
+  label_role_and_permissions: Roller og rettigheter
   label_member: Medlem
   label_member_new: Nytt medlem
   label_member_plural: Medlemmer
@@ -343,7 +343,7 @@
   label_custom_field: Eget felt
   label_custom_field_plural: Egne felt
   label_custom_field_new: Nytt eget felt
-  label_enumerations: Kodelister
+  label_enumerations: Listeverdier
   label_enumeration_new: Ny verdi
   label_information: Informasjon
   label_information_plural: Informasjon
@@ -367,10 +367,10 @@
   label_new: Ny
   label_logged_as: Innlogget som
   label_environment: Miljø
-  label_authentication: Autentifikasjon
-  label_auth_source: Autentifikasjonsmodus
-  label_auth_source_new: Ny autentifikasjonmodus
-  label_auth_source_plural: Autentifikasjonsmoduser
+  label_authentication: Autentisering
+  label_auth_source: Autentiseringskilde
+  label_auth_source_new: Ny autentiseringskilde
+  label_auth_source_plural: Autentiseringskilder
   label_subproject_plural: Underprosjekter
   label_and_its_subprojects: "%{value} og dets underprosjekter"
   label_min_max_length: Min.-maks. lengde
@@ -423,13 +423,13 @@
     one:   1 åpen
     other: "%{count} åpne"
   label_x_closed_issues_abbr:
-    zero:  0 lukka
-    one:   1 lukka
-    other: "%{count} lukka"
+    zero:  0 lukket
+    one:   1 lukket
+    other: "%{count} lukket"
   label_total: Totalt
-  label_permissions: Godkjenninger
+  label_permissions: Rettigheter
   label_current_status: Nåværende status
-  label_new_statuses_allowed: Tillatte nye statuser
+  label_new_statuses_allowed: Tillate nye statuser
   label_all: alle
   label_none: ingen
   label_nobody: ingen
@@ -437,7 +437,7 @@
   label_previous: Forrige
   label_used_by: Brukt av
   label_details: Detaljer
-  label_add_note: Legg til notis
+  label_add_note: Legg til notat
   label_per_page: Pr. side
   label_calendar: Kalender
   label_months_from: måneder fra
@@ -449,7 +449,7 @@
   label_comment: Kommentar
   label_comment_plural: Kommentarer
   label_x_comments:
-    zero: no kommentarer
+    zero: ingen kommentarer
     one: 1 kommentar
     other: "%{count} kommentarer"
   label_comment_add: Legg til kommentar
@@ -518,11 +518,11 @@
   label_preview: Forhåndsvis
   label_feed_plural: Feeder
   label_changes_details: Detaljer om alle endringer
-  label_issue_tracking: Sakssporing
+  label_issue_tracking: Sakshåndtering
   label_spent_time: Brukt tid
   label_f_hour: "%{value} time"
   label_f_hour_plural: "%{value} timer"
-  label_time_tracking: Tidssporing
+  label_time_tracking: Tidsregistrering
   label_change_plural: Endringer
   label_statistics: Statistikk
   label_commits_per_month: Innsendinger pr. måned
@@ -532,7 +532,7 @@
   label_diff_side_by_side: side ved side
   label_options: Alternativer
   label_copy_workflow_from: Kopier arbeidsflyt fra
-  label_permissions_report: Godkjenningsrapport
+  label_permissions_report: Rettighetsrapport
   label_watched_issues: Overvåkede saker
   label_related_issues: Relaterte saker
   label_applied_status: Gitt status
@@ -571,7 +571,7 @@
   label_date_to: Til
   label_language_based: Basert på brukerens språk
   label_sort_by: "Sorter etter %{value}"
-  label_send_test_email: Send en e-post-test
+  label_send_test_email: Send en epost-test
   label_feeds_access_key_created_on: "RSS tilgangsnøkkel opprettet for %{value} siden"
   label_module_plural: Moduler
   label_added_time_by: "Lagt til av %{author} for %{age} siden"
@@ -598,7 +598,7 @@
   label_more: Mer
   label_scm: SCM
   label_plugins: Tillegg
-  label_ldap_authentication: LDAP-autentifikasjon
+  label_ldap_authentication: LDAP-autentisering
   label_downloads_abbr: Nedl.
   label_optional_description: Valgfri beskrivelse
   label_add_another_file: Legg til en fil til
@@ -650,7 +650,7 @@
   status_locked: låst
   
   text_select_mail_notifications: Velg hendelser som skal varsles med e-post.
-  text_regexp_info: eg. ^[A-Z0-9]+$
+  text_regexp_info: f.eks. ^[A-Z0-9]+$
   text_min_max_length_info: 0 betyr ingen begrensning
   text_project_destroy_confirmation: Er du sikker på at du vil slette dette prosjekter og alle relatert data ?
   text_subprojects_destroy_warning: "Underprojekt(ene): %{value} vil også bli slettet."
@@ -667,8 +667,8 @@
   text_unallowed_characters: Ugyldige tegn
   text_comma_separated: Flere verdier tillat (kommaseparert).
   text_issues_ref_in_commit_messages: Referering og retting av saker i innsendingsmelding
-  text_issue_added: "Issue %{id} has been reported by %{author}."
-  text_issue_updated: "Issue %{id} has been updated by %{author}."
+  text_issue_added: "Sak %{id} er innrapportert av %{author}."
+  text_issue_updated: "Sak %{id} er oppdatert av %{author}."
   text_wiki_destroy_confirmation: Er du sikker på at du vil slette denne wikien og alt innholdet ?
   text_issue_category_destroy_question: "Noen saker (%{count}) er lagt til i denne kategorien. Hva vil du gjøre ?"
   text_issue_category_destroy_assignments: Fjern bruk av kategorier
@@ -695,12 +695,12 @@
   default_tracker_feature: Funksjon
   default_tracker_support: Support
   default_issue_status_new: Ny
-  default_issue_status_in_progress: In Progress
+  default_issue_status_in_progress: Pågår
   default_issue_status_resolved: Avklart
   default_issue_status_feedback: Tilbakemelding
   default_issue_status_closed: Lukket
   default_issue_status_rejected: Avvist
-  default_doc_category_user: Bruker-dokumentasjon
+  default_doc_category_user: Brukerdokumentasjon
   default_doc_category_tech: Teknisk dokumentasjon
   default_priority_low: Lav
   default_priority_normal: Normal
@@ -711,16 +711,16 @@
   default_activity_development: Utvikling
   
   enumeration_issue_priorities: Sakssprioriteringer
-  enumeration_doc_categories: Dokument-kategorier
-  enumeration_activities: Aktiviteter (tidssporing)
+  enumeration_doc_categories: Dokumentkategorier
+  enumeration_activities: Aktiviteter (tidsregistrering)
   text_enumeration_category_reassign_to: 'Endre dem til denne verdien:'
   text_enumeration_destroy_question: "%{count} objekter er endret til denne verdien."
   label_incoming_emails: Innkommende e-post
   label_generate_key: Generer en nøkkel
-  setting_mail_handler_api_enabled: Skru på WS for innkommende e-post
+  setting_mail_handler_api_enabled: Skru på WS for innkommende epost
   setting_mail_handler_api_key: API-nøkkel
-  text_email_delivery_not_configured: "Levering av e-post er ikke satt opp, og varsler er skrudd av.\nStill inn din SMTP-tjener i config/configuration.yml og start programmet på nytt for å skru det på."
-  field_parent_title: Foreldreside
+  text_email_delivery_not_configured: "Levering av epost er ikke satt opp, og varsler er skrudd av.\nStill inn din SMTP-tjener i config/configuration.yml og start programmet på nytt for å skru det på."
+  field_parent_title: Overordnet side
   label_issue_watchers: Overvåkere
   button_quote: Sitat
   setting_sequential_project_identifiers: Generer sekvensielle prosjekt-IDer
@@ -731,39 +731,39 @@
   permission_view_files: Vise filer
   permission_edit_issues: Redigere saker
   permission_edit_own_time_entries: Redigere egne timelister
-  permission_manage_public_queries: Behandle delte søk
+  permission_manage_public_queries: Administrere delte søk
   permission_add_issues: Legge inn saker
   permission_log_time: Loggføre timer
   permission_view_changesets: Vise endringssett
   permission_view_time_entries: Vise brukte timer
-  permission_manage_versions: Behandle versjoner
-  permission_manage_wiki: Behandle wiki
-  permission_manage_categories: Behandle kategorier for saker
+  permission_manage_versions: Administrere versjoner
+  permission_manage_wiki: Administrere wiki
+  permission_manage_categories: Administrere kategorier for saker
   permission_protect_wiki_pages: Beskytte wiki-sider
   permission_comment_news: Kommentere nyheter
   permission_delete_messages: Slette meldinger
-  permission_select_project_modules: Velge prosjekt-moduler
-  permission_manage_documents: Behandle dokumenter
+  permission_select_project_modules: Velge prosjektmoduler
+  permission_manage_documents: Administrere dokumenter
   permission_edit_wiki_pages: Redigere wiki-sider
   permission_add_issue_watchers: Legge til overvåkere
   permission_view_gantt: Vise gantt-diagram
   permission_move_issues: Flytte saker
-  permission_manage_issue_relations: Behandle saksrelasjoner
+  permission_manage_issue_relations: Administrere saksrelasjoner
   permission_delete_wiki_pages: Slette wiki-sider
-  permission_manage_boards: Behandle forum
+  permission_manage_boards: Administrere forum
   permission_delete_wiki_pages_attachments: Slette vedlegg
   permission_view_wiki_edits: Vise wiki-historie
   permission_add_messages: Sende meldinger
   permission_view_messages: Vise meldinger
-  permission_manage_files: Behandle filer
+  permission_manage_files: Administrere filer
   permission_edit_issue_notes: Redigere notater
-  permission_manage_news: Behandle nyheter
+  permission_manage_news: Administrere nyheter
   permission_view_calendar: Vise kalender
-  permission_manage_members: Behandle medlemmer
+  permission_manage_members: Administrere medlemmer
   permission_edit_messages: Redigere meldinger
   permission_delete_issues: Slette saker
   permission_view_issue_watchers: Vise liste over overvåkere
-  permission_manage_repository: Behandle depot
+  permission_manage_repository: Administrere depot
   permission_commit_access: Tilgang til innsending
   permission_browse_repository: Bla gjennom depot
   permission_view_documents: Vise dokumenter
@@ -777,189 +777,191 @@
   setting_gravatar_enabled: Bruk Gravatar-brukerikoner
   label_example: Eksempel
   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: Edit own messages
-  permission_delete_own_messages: Delete own messages
-  label_user_activity: "%{value}'s activity"
-  label_updated_time_by: "Updated by %{author} %{age} ago"
+  permission_edit_own_messages: Rediger egne meldinger
+  permission_delete_own_messages: Slett egne meldinger
+  label_user_activity: "%{value}s aktivitet"
+  label_updated_time_by: "Oppdatert av %{author} for %{age} siden"
   text_diff_truncated: '... This diff was truncated because it exceeds the maximum size that can be displayed.'
   setting_diff_max_lines_displayed: Max number of diff lines displayed
   text_plugin_assets_writable: Plugin assets directory writable
-  warning_attachments_not_saved: "%{count} file(s) could not be saved."
-  button_create_and_continue: Create and continue
-  text_custom_field_possible_values_info: 'One line for each value'
-  label_display: Display
-  field_editable: Editable
-  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
+  warning_attachments_not_saved: "%{count} fil(er) kunne ikke lagres."
+  button_create_and_continue: Opprett og fortsett
+  text_custom_field_possible_values_info: 'En linje for hver verdi'
+  label_display: Visning
+  field_editable: Redigerbar
+  setting_repository_log_display_limit: Maks antall revisjoner vist i fil-loggen
   setting_file_max_size_displayed: Max size of text files displayed inline
-  field_watcher: Watcher
-  setting_openid: Allow OpenID login and registration
+  field_watcher: Overvåker
+  setting_openid: Tillat OpenID innlogging og registrering
   field_identity_url: OpenID URL
-  label_login_with_open_id_option: or login with OpenID
-  field_content: Content
-  label_descending: Descending
-  label_sort: Sort
-  label_ascending: Ascending
-  label_date_from_to: From %{start} to %{end}
+  label_login_with_open_id_option: eller logg inn med OpenID
+  field_content: Innhold
+  label_descending: Synkende
+  label_sort: Sorter
+  label_ascending: Stigende
+  label_date_from_to: Fra %{start} til %{end}
   label_greater_or_equal: ">="
   label_less_or_equal: <=
-  text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do?
-  text_wiki_page_reassign_children: Reassign child pages to this parent page
-  text_wiki_page_nullify_children: Keep child pages as root pages
-  text_wiki_page_destroy_children: Delete child pages and all their descendants
-  setting_password_min_length: Minimum password length
-  field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
-  label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
-  mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}.
-  label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}.
-  permission_add_project: Create project
-  setting_new_project_user_role_id: Role given to a non-admin user who creates a project
-  label_view_all_revisions: View all revisions
+  text_wiki_page_destroy_question: Denne siden har %{descendants} underside(r). Hva ønsker du å gjøre?
+  text_wiki_page_reassign_children: Tilknytt undersider til denne overordnede siden
+  text_wiki_page_nullify_children: Behold undersider som rotsider
+  text_wiki_page_destroy_children: Slett undersider og alle deres underliggende sider
+  setting_password_min_length: Minimum passordlengde
+  field_group_by: Grupper resultater etter
+  mail_subject_wiki_content_updated: "Wiki-side '%{id}' er oppdatert"
+  label_wiki_content_added: Wiki-side opprettet
+  mail_subject_wiki_content_added: "Wiki-side '%{id}' er opprettet"
+  mail_body_wiki_content_added: Wiki-siden '%{id}' ble opprettet av %{author}.
+  label_wiki_content_updated: Wiki-side oppdatert
+  mail_body_wiki_content_updated: Wiki-siden '%{id}' ble oppdatert av %{author}.
+  permission_add_project: Opprett prosjekt
+  setting_new_project_user_role_id: Rolle gitt en ikke-administratorbruker som oppretter et prosjekt
+  label_view_all_revisions: Se alle revisjoner
   label_tag: Tag
-  label_branch: Branch
-  error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings.
-  error_no_default_issue_status: No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").
-  text_journal_changed: "%{label} changed from %{old} to %{new}"
-  text_journal_set_to: "%{label} set to %{value}"
-  text_journal_deleted: "%{label} deleted (%{old})"
-  label_group_plural: Groups
-  label_group: Group
-  label_group_new: New group
-  label_time_entry_plural: Spent time
-  text_journal_added: "%{label} %{value} added"
-  field_active: Active
-  enumeration_system_activity: System Activity
-  permission_delete_issue_watchers: Delete watchers
-  version_status_closed: closed
-  version_status_locked: locked
-  version_status_open: open
-  error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened
-  label_user_anonymous: Anonymous
-  button_move_and_follow: Move and follow
-  setting_default_projects_modules: Default enabled modules for new projects
-  setting_gravatar_default: Default Gravatar image
-  field_sharing: Sharing
-  label_version_sharing_hierarchy: With project hierarchy
-  label_version_sharing_system: With all projects
-  label_version_sharing_descendants: With subprojects
-  label_version_sharing_tree: With project tree
-  label_version_sharing_none: Not shared
-  error_can_not_archive_project: This project can not be archived
-  button_duplicate: Duplicate
-  button_copy_and_follow: Copy and follow
-  label_copy_source: Source
-  setting_issue_done_ratio: Calculate the issue done ratio with
-  setting_issue_done_ratio_issue_status: Use the issue status
-  error_issue_done_ratios_not_updated: Issue done ratios not updated.
-  error_workflow_copy_target: Please select target tracker(s) and role(s)
-  setting_issue_done_ratio_issue_field: Use the issue field
-  label_copy_same_as_target: Same as target
-  label_copy_target: Target
-  notice_issue_done_ratios_updated: Issue done ratios updated.
-  error_workflow_copy_source: Please select a source tracker or role
-  label_update_issue_done_ratios: Update issue done ratios
-  setting_start_of_week: Start calendars on
-  permission_view_issues: View Issues
-  label_display_used_statuses_only: Only display statuses that are used by this tracker
+  label_branch: Gren
+  error_no_tracker_in_project: Ingen sakstyper er tilknyttet dette prosjektet. Vennligst kontroller prosjektets innstillinger.
+  error_no_default_issue_status: Ingen standard saksstatus er angitt. Vennligst kontroller konfigurasjonen (Gå til "Administrasjon -> Saksstatuser").
+  text_journal_changed: "%{label} endret fra %{old} til %{new}"
+  text_journal_set_to: "%{label} satt til %{value}"
+  text_journal_deleted: "%{label} slettet (%{old})"
+  label_group_plural: Grupper
+  label_group: Gruppe
+  label_group_new: Ny gruppe
+  label_time_entry_plural: Brukt tid
+  text_journal_added: "%{label} %{value} lagt til"
+  field_active: Aktiv
+  enumeration_system_activity: Systemaktivitet
+  permission_delete_issue_watchers: Slett overvåkere
+  version_status_closed: stengt
+  version_status_locked: låst
+  version_status_open: åpen
+  error_can_not_reopen_issue_on_closed_version: En sak tilknyttet en stengt versjon kan ikke gjenåpnes.
+  label_user_anonymous: Anonym
+  button_move_and_follow: Flytt og følg etter
+  setting_default_projects_modules: Standard aktiverte moduler for nye prosjekter
+  setting_gravatar_default: Standard Gravatar-bilde
+  field_sharing: Deling
+  label_version_sharing_hierarchy: Med prosjekt-hierarki
+  label_version_sharing_system: Med alle prosjekter
+  label_version_sharing_descendants: Med underprosjekter
+  label_version_sharing_tree: Med prosjekt-tre
+  label_version_sharing_none: Ikke delt
+  error_can_not_archive_project: Dette prosjektet kan ikke arkiveres
+  button_duplicate: Duplikat
+  button_copy_and_follow: Kopier og følg etter
+  label_copy_source: Kilde
+  setting_issue_done_ratio: Kalkuler ferdigstillingsprosent ut i fra
+  setting_issue_done_ratio_issue_status: Bruk saksstatuser
+  error_issue_done_ratios_not_updated: Ferdigstillingsprosent oppdateres ikke.
+  error_workflow_copy_target: Vennligst velg sakstype(r) og rolle(r)
+  setting_issue_done_ratio_issue_field: Bruk felt fra saker
+  label_copy_same_as_target: Samme som mål
+  label_copy_target: Mål
+  notice_issue_done_ratios_updated: Ferdigstillingsprosent oppdatert.
+  error_workflow_copy_source: Vennligst velg en kilde-sakstype eller rolle.
+  label_update_issue_done_ratios: Oppdatert ferdigstillingsprosent
+  setting_start_of_week: Start kalender på
+  permission_view_issues: Se på saker
+  label_display_used_statuses_only: Vis kun statuser som brukes av denne sakstypen
   label_revision_id: Revision %{value}
-  label_api_access_key: API access key
-  label_api_access_key_created_on: API access key created %{value} ago
-  label_feeds_access_key: RSS access key
-  notice_api_access_key_reseted: Your API access key was reset.
-  setting_rest_api_enabled: Enable REST web service
-  label_missing_api_access_key: Missing an API access key
-  label_missing_feeds_access_key: Missing a RSS access key
-  button_show: Show
-  text_line_separated: Multiple values allowed (one line for each value).
-  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
-  permission_add_subprojects: Create subprojects
-  label_subproject_new: New subproject
+  label_api_access_key: API tilgangsnøkkel
+  label_api_access_key_created_on: API tilgangsnøkkel opprettet for %{value} siden
+  label_feeds_access_key: RSS tilgangsnøkkel
+  notice_api_access_key_reseted: Din API tilgangsnøkkel ble resatt.
+  setting_rest_api_enabled: Aktiver REST webservice
+  label_missing_api_access_key: Mangler en API tilgangsnøkkel
+  label_missing_feeds_access_key: Mangler en RSS tilgangsnøkkel
+  button_show: Vis
+  text_line_separated: Flere verdier er tillatt (en linje per verdi).
+  setting_mail_handler_body_delimiters: Avkort epost etter en av disse linjene
+  permission_add_subprojects: Opprett underprosjekt
+  label_subproject_new: Nytt underprosjekt
   text_own_membership_delete_confirmation: |-
-    You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
-    Are you sure you want to continue?
-  label_close_versions: Close completed versions
-  label_board_sticky: Sticky
-  label_board_locked: Locked
-  permission_export_wiki_pages: Export wiki pages
-  setting_cache_formatted_text: Cache formatted text
-  permission_manage_project_activities: Manage project activities
-  error_unable_delete_issue_status: Unable to delete issue status
-  label_profile: Profile
-  permission_manage_subtasks: Manage subtasks
-  field_parent_issue: Parent task
-  label_subtask_plural: Subtasks
-  label_project_copy_notifications: Send email notifications during the project copy
-  error_can_not_delete_custom_field: Unable to delete custom field
-  error_unable_to_connect: Unable to connect (%{value})
-  error_can_not_remove_role: This role is in use and can not be deleted.
-  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
+    Du er i ferd med å fjerne noen eller alle rettigheter og vil kanskje ikke være i stand til å redigere dette prosjektet etterpå.
+    Er du sikker på at du vil fortsette?
+  label_close_versions: Steng fullførte versjoner
+  label_board_sticky: Fast
+  label_board_locked: Låst
+  permission_export_wiki_pages: Eksporter wiki-sider
+  setting_cache_formatted_text: Mellomlagre formattert tekst
+  permission_manage_project_activities: Administrere prosjektaktiviteter
+  error_unable_delete_issue_status: Kan ikke slette saksstatus
+  label_profile: Profil
+  permission_manage_subtasks: Administrere undersaker
+  field_parent_issue: Overordnet sak
+  label_subtask_plural: Undersaker
+  label_project_copy_notifications: Send epost-varslinger under prosjektkopiering
+  error_can_not_delete_custom_field: Kan ikke slette eget felt
+  error_unable_to_connect: Kunne ikke koble til (%{value})
+  error_can_not_remove_role: Denne rollen er i bruk og kan ikke slettes.
+  error_can_not_delete_tracker: Denne sakstypen inneholder saker og kan ikke slettes.
   field_principal: Principal
-  label_my_page_block: My page block
-  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
-  text_zoom_out: Zoom out
-  text_zoom_in: Zoom in
-  notice_unable_delete_time_entry: Unable to delete time log entry.
-  label_overall_spent_time: Overall spent time
-  field_time_entries: Log time
+  label_my_page_block: Min side felt
+  notice_failed_to_save_members: "Feil ved lagring av medlem(mer): %{errors}."
+  text_zoom_out: Zoom ut
+  text_zoom_in: Zoom inn
+  notice_unable_delete_time_entry: Kan ikke slette oppføring fra timeliste.
+  label_overall_spent_time: All tidsbruk
+  field_time_entries: Loggfør tid
   project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: 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
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
-  label_news_comment_added: Comment added to a news
-  button_expand_all: Expand all
-  button_collapse_all: Collapse all
-  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
-  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
-  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
-  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
-  label_role_anonymous: Anonymous
-  label_role_non_member: Non member
-  label_issue_note_added: Note added
-  label_issue_status_updated: Status updated
-  label_issue_priority_updated: Priority updated
-  label_issues_visibility_own: Issues created by or assigned to the user
-  field_issues_visibility: Issues visibility
-  label_issues_visibility_all: All issues
-  permission_set_own_issues_private: Set own issues public or private
-  field_is_private: Private
-  permission_set_issues_private: Set issues public or private
-  label_issues_visibility_public: All non private issues
-  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+  project_module_calendar: Kalender
+  button_edit_associated_wikipage: "Rediger tilhørende Wiki-side: %{page_title}"
+  text_are_you_sure_with_children: Slett sak og alle undersaker?
+  field_text: Tekstfelt
+  label_user_mail_option_only_owner: Kun for ting jeg eier
+  setting_default_notification_option: Standardvalg for varslinger
+  label_user_mail_option_only_my_events: Kun for ting jeg overvåker eller er involvert i
+  label_user_mail_option_only_assigned: Kun for ting jeg er tildelt
+  label_user_mail_option_none: Ingen hendelser
+  field_member_of_group: Den tildeltes gruppe
+  field_assigned_to_role: Den tildeltes rolle
+  notice_not_authorized_archived_project: Prosjektet du forsøker å åpne er blitt arkivert.
+  label_principal_search: "Søk etter bruker eller gruppe:"
+  label_user_search: "Søk etter bruker:"
+  field_visible: Synlig
+  setting_emails_header: Eposthode
+  setting_commit_logtime_activity_id: Aktivitet for logget tid.
+  text_time_logged_by_changeset: Lagt til i endringssett %{value}.
+  setting_commit_logtime_enabled: Muliggjør loggføring av tid
+  notice_gantt_chart_truncated: Diagrammet ble avkortet fordi det overstiger det maksimale antall elementer som kan vises (%{max})
+  setting_gantt_items_limit: Maksimalt antall elementer vist på gantt-diagrammet
+  field_warn_on_leaving_unsaved: Vis meg en advarsel når jeg forlater en side med ikke lagret tekst
+  text_warn_on_leaving_unsaved: Den gjeldende siden inneholder tekst som ikke er lagret, som vil bli tapt hvis du forlater denne siden.
+  label_my_queries: Mine egne spørringer
+  text_journal_changed_no_detail: "%{label} oppdatert"
+  label_news_comment_added: Kommentar lagt til en nyhet
+  button_expand_all: Utvid alle
+  button_collapse_all: Kollaps alle
+  label_additional_workflow_transitions_for_assignee: Ytterligere overganger tillatt når brukeren er sakens tildelte
+  label_additional_workflow_transitions_for_author: Ytterligere overganger tillatt når brukeren er den som har opprettet saken
+  label_bulk_edit_selected_time_entries: Masserediger valgte timeliste-oppføringer
+  text_time_entries_destroy_confirmation: Er du sikker på du vil slette de(n) valgte timeliste-oppføringen(e)?
+  label_role_anonymous: Anonym
+  label_role_non_member: Ikke medlem
+  label_issue_note_added: Notat lagt til
+  label_issue_status_updated: Status oppdatert
+  label_issue_priority_updated: Prioritet oppdatert
+  label_issues_visibility_own: Saker opprettet av eller tildelt brukeren
+  field_issues_visibility: Synlighet på saker
+  label_issues_visibility_all: Alle saker
+  permission_set_own_issues_private: Gjør egne saker offentlige eller private
+  field_is_private: Privat
+  permission_set_issues_private: Gjør saker offentlige eller private
+  label_issues_visibility_public: Alle ikke-private saker
+  text_issues_destroy_descendants_confirmation: Dette vil også slette %{count} undersak(er).
   field_commit_logs_encoding: Tegnkoding for innsendingsmeldinger
-  field_scm_path_encoding: Path encoding
-  text_scm_path_encoding_note: "Default: UTF-8"
-  field_path_to_repository: Path to repository
-  field_root_directory: Root directory
-  field_cvs_module: Module
+  field_scm_path_encoding: Koding av sti
+  text_scm_path_encoding_note: "Standard: UTF-8"
+  field_path_to_repository: Sti til depot
+  field_root_directory: Rotkatalog
+  field_cvs_module: Modul
   field_cvsroot: CVSROOT
-  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
-  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
-  text_scm_command: Command
-  text_scm_command_version: Version
-  label_git_report_last_commit: Report last commit for files and directories
-  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
-  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
+  text_mercurial_repository_note: Lokalt depot (f.eks. /hgrepo, c:\hgrepo)
+  text_scm_command: Kommando
+  text_scm_command_version: Versjon
+  label_git_report_last_commit: Rapporter siste innsending for filer og kataloger
+  text_scm_config: Du kan konfigurere scm kommandoer i config/configuration.yml. Vennligst restart applikasjonen etter å ha redigert filen.
+  text_scm_command_not_available: Scm kommando er ikke tilgjengelig. Vennligst kontroller innstillingene i administrasjonspanelet.
+
+  text_git_repository_note: Depot er bart og lokalt (f.eks. /gitrepo, c:\gitrepo)
+
diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml
index 8abc2fe..798a7d4 100644
--- a/config/locales/pt-BR.yml
+++ b/config/locales/pt-BR.yml
@@ -961,7 +961,7 @@ pt-BR:
   setting_commit_logtime_enabled: Habilitar registro de horas
   notice_gantt_chart_truncated: O gráfico foi cortado por exceder o tamanho máximo de linhas que podem ser exibidas (%{max})
   setting_gantt_items_limit: Número máximo de itens exibidos no gráfico gatt
-  field_warn_on_leaving_unsaved: Alertar-me ao sarir de uma página sem salvar o texto
+  field_warn_on_leaving_unsaved: Alertar-me ao sair de uma página sem salvar o texto
   text_warn_on_leaving_unsaved: A página atual contem texto que não foi salvo e será perdido se você sair desta página.
   label_my_queries: Minhas consultas personalizadas
   text_journal_changed_no_detail: "%{label} atualizado(a)"
diff --git a/config/locales/sl.yml b/config/locales/sl.yml
index c59e759..4f2bdef 100644
--- a/config/locales/sl.yml
+++ b/config/locales/sl.yml
@@ -9,12 +9,12 @@ sl:
       short: "%b %d"
       long: "%B %d, %Y"
       
-    day_names: [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday]
-    abbr_day_names: [Sun, Mon, Tue, Wed, Thu, Fri, Sat]
+    day_names: [Nedelja, Ponedeljek, Torek, Sreda, Četrtek, Petek, Sobota]
+    abbr_day_names: [Ned, Pon, To, Sr, Čet, Pet, Sob]
       
     # Don't forget the nil at the beginning; there's no such thing as a 0th month
-    month_names: [~, January, February, March, April, May, June, July, August, September, October, November, December]
-    abbr_month_names: [~, Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
+    month_names: [~, Januar, Februar, Marec, April, Maj, Junij, Julij, Avgust, September, Oktober, November, December]
+    abbr_month_names: [~, Jan, Feb, Mar, Apr, Maj, Jun, Jul, Aug, Sep, Okt, Nov, Dec]
     # Used in date_select and datime_select.
     order:
       - :year
@@ -32,40 +32,40 @@ sl:
       
   datetime:
     distance_in_words:
-      half_a_minute: "half a minute"
+      half_a_minute: "pol minute"
       less_than_x_seconds:
-        one:   "less than 1 second"
-        other: "less than %{count} seconds"
+        one:   "manj kot 1. sekundo"
+        other: "manj kot %{count} sekund"
       x_seconds:
-        one:   "1 second"
-        other: "%{count} seconds"
+        one:   "1. sekunda"
+        other: "%{count} sekund"
       less_than_x_minutes:
-        one:   "less than a minute"
-        other: "less than %{count} minutes"
+        one:   "manj kot minuto"
+        other: "manj kot %{count} minut"
       x_minutes:
-        one:   "1 minute"
-        other: "%{count} minutes"
+        one:   "1 minuta"
+        other: "%{count} minut"
       about_x_hours:
-        one:   "about 1 hour"
-        other: "about %{count} hours"
+        one:   "okrog 1. ure"
+        other: "okrog %{count} ur"
       x_days:
-        one:   "1 day"
-        other: "%{count} days"
+        one:   "1 dan"
+        other: "%{count} dni"
       about_x_months:
-        one:   "about 1 month"
-        other: "about %{count} months"
+        one:   "okrog 1. mesec"
+        other: "okrog %{count} mesecev"
       x_months:
-        one:   "1 month"
-        other: "%{count} months"
+        one:   "1 mesec"
+        other: "%{count} mesecev"
       about_x_years:
-        one:   "about 1 year"
-        other: "about %{count} years"
+        one:   "okrog 1. leto"
+        other: "okrog %{count} let"
       over_x_years:
-        one:   "over 1 year"
-        other: "over %{count} years"
+        one:   "več kot 1. leto"
+        other: "več kot %{count} let"
       almost_x_years:
-        one:   "almost 1 year"
-        other: "almost %{count} years"
+        one:   "skoraj 1. leto"
+        other: "skoraj %{count} let"
 
   number:
     format:
@@ -90,15 +90,15 @@ sl:
 # Used in array.to_sentence.
   support:
     array:
-      sentence_connector: "and"
+      sentence_connector: "in"
       skip_last_comma: false
       
   activerecord:
     errors:
       template:
         header:
-          one:    "1 error prohibited this %{model} from being saved"
-          other:  "%{count} errors prohibited this %{model} from being saved"
+          one:    "1. napaka je preprečila temu %{model} da bi se shranil"
+          other:  "%{count} napak je preprečilo temu %{model} da bi se shranil"
       messages:
         inclusion: "ni vključen na seznamu"
         exclusion: "je rezerviran"
@@ -113,17 +113,17 @@ sl:
         taken: "je že zaseden"
         not_a_number: "ni število"
         not_a_date: "ni veljaven datum"
-        greater_than: "must be greater than %{count}"
-        greater_than_or_equal_to: "must be greater than or equal to %{count}"
-        equal_to: "must be equal to %{count}"
-        less_than: "must be less than %{count}"
-        less_than_or_equal_to: "must be less than or equal to %{count}"
-        odd: "must be odd"
-        even: "must be even"
-        greater_than_start_date: "mora biti kasnejši kot začeten datum"
+        greater_than: "mora biti večji kot %{count}"
+        greater_than_or_equal_to: "mora biti večji ali enak kot %{count}"
+        equal_to: "mora biti enak kot %{count}"
+        less_than: "mora biti manjši kot %{count}"
+        less_than_or_equal_to: "mora biti manjši ali enak kot %{count}"
+        odd: "mora biti sodo"
+        even: "mora biti liho"
+        greater_than_start_date: "mora biti kasnejši kot začetni datum"
         not_same_project: "ne pripada istemu projektu"
         circular_dependency: "Ta odnos bi povzročil krožno odvisnost"
-        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: "Zahtevek ne more biti povezan s svojo podnalogo"
 
   actionview_instancetag_blank_option: Prosimo izberite
   
@@ -372,9 +372,9 @@ sl:
   label_project_new: Nov projekt
   label_project_plural: Projekti
   label_x_projects:
-    zero:  no projects
-    one:   1 project
-    other: "%{count} projects"
+    zero:  ni projektov
+    one:   1 projekt
+    other: "%{count} projektov"
   label_project_all: Vsi projekti
   label_project_latest: Zadnji projekti
   label_issue: Zahtevek
@@ -476,22 +476,22 @@ sl:
   label_export_to: 'Na razpolago tudi v:'
   label_read: Preberi...
   label_public_projects: Javni projekti
-  label_open_issues: odpri zahtevek
-  label_open_issues_plural: odpri zahtevke
-  label_closed_issues: zapri zahtevek
-  label_closed_issues_plural: zapri zahtevke
+  label_open_issues: odprt zahtevek
+  label_open_issues_plural: odprti zahtevki
+  label_closed_issues: zaprt zahtevek
+  label_closed_issues_plural: zaprti zahtevki
   label_x_open_issues_abbr_on_total:
-    zero:  0 open / %{total}
-    one:   1 open / %{total}
-    other: "%{count} open / %{total}"
+    zero:  0 odprtih / %{total}
+    one:   1 odprt / %{total}
+    other: "%{count} odprtih / %{total}"
   label_x_open_issues_abbr:
-    zero:  0 open
-    one:   1 open
-    other: "%{count} open"
+    zero:  0 odprtih
+    one:   1 odprt
+    other: "%{count} odprtih"
   label_x_closed_issues_abbr:
-    zero:  0 closed
-    one:   1 closed
-    other: "%{count} closed"
+    zero:  0 zaprtih
+    one:   1 zaprt
+    other: "%{count} zaprtih"
   label_total: Skupaj
   label_permissions: Dovoljenja
   label_current_status: Trenutno stanje
@@ -507,7 +507,7 @@ sl:
   label_per_page: Na stran
   label_calendar: Koledar
   label_months_from: mesecev od
-  label_gantt: Gantt
+  label_gantt: Gantogram
   label_internal: Notranji
   label_last_changes: "zadnjih %{count} sprememb"
   label_change_view_all: Poglej vse spremembe
@@ -515,9 +515,9 @@ sl:
   label_comment: Komentar
   label_comment_plural: Komentarji
   label_x_comments:
-    zero: no comments
-    one: 1 comment
-    other: "%{count} comments"
+    zero: ni komentarjev
+    one: 1 komentar
+    other: "%{count} komentarjev"
   label_comment_add: Dodaj komentar
   label_comment_added: Komentar dodan
   label_comment_delete: Izbriši komentarje
@@ -774,7 +774,7 @@ sl:
   default_tracker_feature: Funkcija
   default_tracker_support: Podpora
   default_issue_status_new: Nov
-  default_issue_status_in_progress: In Progress
+  default_issue_status_in_progress: V teku
   default_issue_status_resolved: Rešen
   default_issue_status_feedback: Povratna informacija
   default_issue_status_closed: Zaključen
@@ -792,183 +792,185 @@ sl:
   enumeration_issue_priorities: Prioritete zahtevkov
   enumeration_doc_categories: Kategorije dokumentov
   enumeration_activities: Aktivnosti (sledenje časa)
-  warning_attachments_not_saved: "%{count} file(s) could not be saved."
-  field_editable: Editable
-  text_plugin_assets_writable: Plugin assets directory writable
-  label_display: Display
-  button_create_and_continue: Create and continue
-  text_custom_field_possible_values_info: 'One line for each value'
-  setting_repository_log_display_limit: Maximum number of revisions displayed on file log
-  setting_file_max_size_displayed: Max size of text files displayed inline
-  field_watcher: Watcher
-  setting_openid: Allow OpenID login and registration
+  warning_attachments_not_saved: "%{count} datotek(e) ni bilo mogoče shraniti."
+  field_editable: Uredljivo
+  text_plugin_assets_writable: Zapisljiva mapa za vtičnike
+  label_display: Prikaz
+  button_create_and_continue: Ustvari in nadaljuj
+  text_custom_field_possible_values_info: 'Ena vrstica za vsako vrednost'
+  setting_repository_log_display_limit: Največje število prikazanih revizij v log datoteki
+  setting_file_max_size_displayed: Največja velikost besedilnih datotek v vključenem prikazu
+  field_watcher: Opazovalec
+  setting_openid: Dovoli OpenID prijavo in registracijo
   field_identity_url: OpenID URL
-  label_login_with_open_id_option: or login with OpenID
-  field_content: Content
-  label_descending: Descending
-  label_sort: Sort
-  label_ascending: Ascending
-  label_date_from_to: From %{start} to %{end}
+  label_login_with_open_id_option: ali se prijavi z OpenID
+  field_content: Vsebina
+  label_descending: Padajoče
+  label_sort: Razvrsti
+  label_ascending: Naraščajoče
+  label_date_from_to: Od %{start} do %{end}
   label_greater_or_equal: ">="
   label_less_or_equal: <=
-  text_wiki_page_destroy_question: This page has %{descendants} child page(s) and descendant(s). What do you want to do?
-  text_wiki_page_reassign_children: Reassign child pages to this parent page
-  text_wiki_page_nullify_children: Keep child pages as root pages
-  text_wiki_page_destroy_children: Delete child pages and all their descendants
-  setting_password_min_length: Minimum password length
-  field_group_by: Group results by
-  mail_subject_wiki_content_updated: "'%{id}' wiki page has been updated"
-  label_wiki_content_added: Wiki page added
-  mail_subject_wiki_content_added: "'%{id}' wiki page has been added"
-  mail_body_wiki_content_added: The '%{id}' wiki page has been added by %{author}.
-  label_wiki_content_updated: Wiki page updated
-  mail_body_wiki_content_updated: The '%{id}' wiki page has been updated by %{author}.
-  permission_add_project: Create project
-  setting_new_project_user_role_id: Role given to a non-admin user who creates a project
-  label_view_all_revisions: View all revisions
-  label_tag: Tag
-  label_branch: Branch
-  error_no_tracker_in_project: No tracker is associated to this project. Please check the Project settings.
-  error_no_default_issue_status: No default issue status is defined. Please check your configuration (Go to "Administration -> Issue statuses").
-  text_journal_changed: "%{label} changed from %{old} to %{new}"
-  text_journal_set_to: "%{label} set to %{value}"
-  text_journal_deleted: "%{label} deleted (%{old})"
-  label_group_plural: Groups
-  label_group: Group
-  label_group_new: New group
-  label_time_entry_plural: Spent time
-  text_journal_added: "%{label} %{value} added"
-  field_active: Active
-  enumeration_system_activity: System Activity
-  permission_delete_issue_watchers: Delete watchers
-  version_status_closed: closed
-  version_status_locked: locked
-  version_status_open: open
-  error_can_not_reopen_issue_on_closed_version: An issue assigned to a closed version can not be reopened
-  label_user_anonymous: Anonymous
-  button_move_and_follow: Move and follow
-  setting_default_projects_modules: Default enabled modules for new projects
-  setting_gravatar_default: Default Gravatar image
-  field_sharing: Sharing
-  label_version_sharing_hierarchy: With project hierarchy
-  label_version_sharing_system: With all projects
-  label_version_sharing_descendants: With subprojects
-  label_version_sharing_tree: With project tree
-  label_version_sharing_none: Not shared
-  error_can_not_archive_project: This project can not be archived
-  button_duplicate: Duplicate
-  button_copy_and_follow: Copy and follow
-  label_copy_source: Source
-  setting_issue_done_ratio: Calculate the issue done ratio with
-  setting_issue_done_ratio_issue_status: Use the issue status
-  error_issue_done_ratios_not_updated: Issue done ratios not updated.
-  error_workflow_copy_target: Please select target tracker(s) and role(s)
-  setting_issue_done_ratio_issue_field: Use the issue field
-  label_copy_same_as_target: Same as target
-  label_copy_target: Target
-  notice_issue_done_ratios_updated: Issue done ratios updated.
-  error_workflow_copy_source: Please select a source tracker or role
-  label_update_issue_done_ratios: Update issue done ratios
-  setting_start_of_week: Start calendars on
-  permission_view_issues: View Issues
-  label_display_used_statuses_only: Only display statuses that are used by this tracker
-  label_revision_id: Revision %{value}
-  label_api_access_key: API access key
-  label_api_access_key_created_on: API access key created %{value} ago
-  label_feeds_access_key: RSS access key
-  notice_api_access_key_reseted: Your API access key was reset.
-  setting_rest_api_enabled: Enable REST web service
-  label_missing_api_access_key: Missing an API access key
-  label_missing_feeds_access_key: Missing a RSS access key
-  button_show: Show
-  text_line_separated: Multiple values allowed (one line for each value).
-  setting_mail_handler_body_delimiters: Truncate emails after one of these lines
-  permission_add_subprojects: Create subprojects
-  label_subproject_new: New subproject
+  text_wiki_page_destroy_question: Ta stran ima %{descendants} podstran(i) in naslednik(ov). Kaj želite storiti?
+  text_wiki_page_reassign_children: Znova dodeli podstrani tej glavni strani
+  text_wiki_page_nullify_children: Obdrži podstrani kot glavne strani
+  text_wiki_page_destroy_children: Izbriši podstrani in vse njihove naslednike
+  setting_password_min_length: Minimalna dolžina gesla
+  field_group_by: Združi rezultate po
+  mail_subject_wiki_content_updated: "'%{id}' wiki stran je bila posodobljena"
+  label_wiki_content_added: Wiki stran dodana
+  mail_subject_wiki_content_added: "'%{id}' wiki stran je bila dodana"
+  mail_body_wiki_content_added: %{author} je dodal '%{id}' wiki stran
+  label_wiki_content_updated: Wiki stran posodobljena
+  mail_body_wiki_content_updated: %{author} je posodobil '%{id}' wiki stran.
+  permission_add_project: Ustvari projekt
+  setting_new_project_user_role_id: Vloga, dodeljena neadministratorskemu uporabniku, ki je ustvaril projekt
+  label_view_all_revisions: Poglej vse revizije
+  label_tag: Oznaka
+  label_branch: Veja
+  error_no_tracker_in_project: Noben sledilnik ni povezan s tem projektom. Prosimo preverite nastavitve projekta.
+  error_no_default_issue_status: Privzeti zahtevek ni definiran. Prosimo preverite svoje nastavitve (Pojdite na "Administracija -> Stanje zahtevkov").
+  text_journal_changed: "%{label} se je spremenilo iz %{old} v %{new}"
+  text_journal_set_to: "%{label} nastavljeno na %{value}"
+  text_journal_deleted: "%{label} izbrisan (%{old})"
+  label_group_plural: Skupine
+  label_group: Skupina
+  label_group_new: Nova skupina
+  label_time_entry_plural: Porabljen čas
+  text_journal_added: "%{label} %{value} dodan"
+  field_active: Aktiven
+  enumeration_system_activity: Sistemska aktivnost
+  permission_delete_issue_watchers: Izbriši opazovalce
+  version_status_closed: zaprt
+  version_status_locked: zaklenjen
+  version_status_open: odprt
+  error_can_not_reopen_issue_on_closed_version: Zahtevek dodeljen zaprti verziji ne more biti ponovno odprt
+  label_user_anonymous: Anonimni
+  button_move_and_follow: Premakni in sledi
+  setting_default_projects_modules: Privzeti moduli za nove projekte
+  setting_gravatar_default: Privzeta Gravatar slika
+  field_sharing: Deljenje
+  label_version_sharing_hierarchy: S projektno hierarhijo
+  label_version_sharing_system: Z vsemi projekti
+  label_version_sharing_descendants: S podprojekti
+  label_version_sharing_tree: Z drevesom projekta
+  label_version_sharing_none: Ni deljeno
+  error_can_not_archive_project: Ta projekt ne more biti arhiviran
+  button_duplicate: Podvoji
+  button_copy_and_follow: Kopiraj in sledi
+  label_copy_source: Vir
+  setting_issue_done_ratio: Izračunaj razmerje opravljenega zahtevka z
+  setting_issue_done_ratio_issue_status: Uporabi stanje zahtevka
+  error_issue_done_ratios_not_updated: Razmerje opravljenega zahtevka ni bilo posodobljeno.
+  error_workflow_copy_target: Prosimo izberite ciljni(e) sledilnik(e) in vlogo(e)
+  setting_issue_done_ratio_issue_field: Uporabi polje zahtevka
+  label_copy_same_as_target: Enako kot cilj
+  label_copy_target: Cilj
+  notice_issue_done_ratios_updated: Razmerje opravljenega zahtevka posodobljeno.
+  error_workflow_copy_source: Prosimo izberite vir zahtevka ali vlogo
+  label_update_issue_done_ratios: Posodobi razmerje opravljenega zahtevka
+  setting_start_of_week: Začni koledarje z
+  permission_view_issues: Poglej zahtevke
+  label_display_used_statuses_only: Prikaži samo stanja ki uporabljajo ta sledilnik
+  label_revision_id: Revizija %{value}
+  label_api_access_key: API dostopni ključ
+  label_api_access_key_created_on: API dostopni ključ ustvarjen pred %{value}
+  label_feeds_access_key: RSS dostopni ključ
+  notice_api_access_key_reseted: Vaš API dostopni ključ je bil ponastavljen.
+  setting_rest_api_enabled: Omogoči REST spletni servis
+  label_missing_api_access_key: Manjkajoč API dostopni ključ
+  label_missing_feeds_access_key: Manjkajoč RSS dostopni ključ
+  button_show: Prikaži
+  text_line_separated: Dovoljenih več vrednosti (ena vrstica za vsako vrednost).
+  setting_mail_handler_body_delimiters: Odreži e-pošto po eni od teh vrstic
+  permission_add_subprojects: Ustvari podprojekte
+  label_subproject_new: Nov podprojekt
   text_own_membership_delete_confirmation: |-
-    You are about to remove some or all of your permissions and may no longer be able to edit this project after that.
-    Are you sure you want to continue?
-  label_close_versions: Close completed versions
-  label_board_sticky: Sticky
-  label_board_locked: Locked
-  permission_export_wiki_pages: Export wiki pages
-  setting_cache_formatted_text: Cache formatted text
-  permission_manage_project_activities: Manage project activities
-  error_unable_delete_issue_status: Unable to delete issue status
-  label_profile: Profile
-  permission_manage_subtasks: Manage subtasks
-  field_parent_issue: Parent task
-  label_subtask_plural: Subtasks
-  label_project_copy_notifications: Send email notifications during the project copy
-  error_can_not_delete_custom_field: Unable to delete custom field
-  error_unable_to_connect: Unable to connect (%{value})
-  error_can_not_remove_role: This role is in use and can not be deleted.
-  error_can_not_delete_tracker: This tracker contains issues and can't be deleted.
-  field_principal: Principal
-  label_my_page_block: My page block
-  notice_failed_to_save_members: "Failed to save member(s): %{errors}."
-  text_zoom_out: Zoom out
-  text_zoom_in: Zoom in
-  notice_unable_delete_time_entry: Unable to delete time log entry.
-  label_overall_spent_time: Overall spent time
-  field_time_entries: Log time
-  project_module_gantt: Gantt
-  project_module_calendar: Calendar
-  button_edit_associated_wikipage: "Edit associated Wiki page: %{page_title}"
-  text_are_you_sure_with_children: Delete issue and all child issues?
-  field_text: Text field
-  label_user_mail_option_only_owner: Only for things I am the owner of
-  setting_default_notification_option: Default notification option
-  label_user_mail_option_only_my_events: Only for things I watch or I'm involved in
-  label_user_mail_option_only_assigned: Only for things I am assigned to
-  label_user_mail_option_none: No events
-  field_member_of_group: Assignee's group
-  field_assigned_to_role: Assignee's role
-  notice_not_authorized_archived_project: The project you're trying to access has been archived.
-  label_principal_search: "Search for user or group:"
-  label_user_search: "Search for user:"
-  field_visible: 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
-  field_warn_on_leaving_unsaved: Warn me when leaving a page with unsaved text
-  text_warn_on_leaving_unsaved: The current page contains unsaved text that will be lost if you leave this page.
-  label_my_queries: My custom queries
-  text_journal_changed_no_detail: "%{label} updated"
-  label_news_comment_added: Comment added to a news
-  button_expand_all: Expand all
-  button_collapse_all: Collapse all
-  label_additional_workflow_transitions_for_assignee: Additional transitions allowed when the user is the assignee
-  label_additional_workflow_transitions_for_author: Additional transitions allowed when the user is the author
-  label_bulk_edit_selected_time_entries: Bulk edit selected time entries
-  text_time_entries_destroy_confirmation: Are you sure you want to delete the selected time entr(y/ies)?
-  label_role_anonymous: Anonymous
-  label_role_non_member: Non member
-  label_issue_note_added: Note added
-  label_issue_status_updated: Status updated
-  label_issue_priority_updated: Priority updated
-  label_issues_visibility_own: Issues created by or assigned to the user
-  field_issues_visibility: Issues visibility
-  label_issues_visibility_all: All issues
-  permission_set_own_issues_private: Set own issues public or private
-  field_is_private: Private
-  permission_set_issues_private: Set issues public or private
-  label_issues_visibility_public: All non private issues
-  text_issues_destroy_descendants_confirmation: This will also delete %{count} subtask(s).
+    Odstranili boste nekatere ali vse od dovoljenj zaradi česar morda ne boste mogli več urejati tega projekta.
+    Ali ste prepričani, da želite nadaljevati?
+  label_close_versions: Zapri dokončane verzije
+  label_board_sticky: Lepljivo
+  label_board_locked: Zaklenjeno
+  permission_export_wiki_pages: Izvozi wiki strani
+  setting_cache_formatted_text: Predpomni oblikovano besedilo
+  permission_manage_project_activities: Uredi aktivnosti projekta
+  error_unable_delete_issue_status: Stanja zahtevka ni bilo možno spremeniti
+  label_profile: Profil
+  permission_manage_subtasks: Uredi podnaloge
+  field_parent_issue: Nadrejena naloga
+  label_subtask_plural: Podnaloge
+  label_project_copy_notifications: Med kopiranjem projekta pošlji e-poštno sporočilo
+  error_can_not_delete_custom_field: Polja po meri ni mogoče izbrisati
+  error_unable_to_connect: Povezava ni mogoča (%{value})
+  error_can_not_remove_role: Ta vloga je v uporabi in je ni mogoče izbrisati.
+  error_can_not_delete_tracker: Ta sledilnik vsebuje zahtevke in se ga ne more izbrisati.
+  field_principal: Upravnik varnosti
+  label_my_page_block: Moj gradnik strani
+  notice_failed_to_save_members: "Shranjevanje uporabnika(ov) ni uspelo: %{errors}."
+  text_zoom_out: Približaj
+  text_zoom_in: Oddalji
+  notice_unable_delete_time_entry: Brisanje dnevnika porabljenaga časa ni mogoče.
+  label_overall_spent_time: Skupni porabljeni čas
+  field_time_entries: Beleži porabljeni čas
+  project_module_gantt: Gantogram
+  project_module_calendar: Koledear
+  button_edit_associated_wikipage: "Uredi povezano Wiki stran: %{page_title}"
+  text_are_you_sure_with_children: Izbriši zahtevek in vse podazahtevke?
+  field_text: Besedilno polje
+  label_user_mail_option_only_owner: Samo za stvari katerih lastnik sem
+  setting_default_notification_option: Privzeta možnost obveščanja
+  label_user_mail_option_only_my_events: Samo za stvari, ki jih opazujem ali sem v njih vpleten
+  label_user_mail_option_only_assigned: Samo za stvari, ki smo mi dodeljene
+  label_user_mail_option_none: Noben dogodek
+  field_member_of_group: Pooblaščenčeva skupina
+  field_assigned_to_role: Pooblaščenčeva vloga
+  notice_not_authorized_archived_project: Projekt, do katerega poskušate dostopati, je bil arhiviran.
+  label_principal_search: "Poišči uporabnika ali skupino:"
+  label_user_search: "Poišči uporabnikia:"
+  field_visible: Viden
+  setting_emails_header: Glava e-pošte
+  setting_commit_logtime_activity_id: Aktivnost zabeleženega časa
+  text_time_logged_by_changeset: Uporabljeno v spremembi %{value}.
+  setting_commit_logtime_enabled: Omogoči beleženje časa
+  notice_gantt_chart_truncated: Graf je bil odrezan, ker je prekoračil največje dovoljeno število elementov, ki se jih lahko prikaže (%{max})
+  setting_gantt_items_limit: Največje število elementov prikazano na gantogramu
+  field_warn_on_leaving_unsaved: Opozori me, kadar zapuščam stran z neshranjenim besedilom
+  text_warn_on_leaving_unsaved: Trenutna stran vsebuje neshranjeno besedilo ki bo izgubljeno, če zapustite to stran.
+  label_my_queries: Moje poizvedbe po meri
+  text_journal_changed_no_detail: "%{label} posodobljen"
+  label_news_comment_added: Komentar dodan novici
+  button_expand_all: Razširi vse
+  button_collapse_all: Skrči vse
+  label_additional_workflow_transitions_for_assignee: Dovoljeni dodatni prehodi kadar je uporabnik pooblaščenec
+  label_additional_workflow_transitions_for_author: Dovoljeni dodatni prehodi kadar je uporabnik avtor
+  label_bulk_edit_selected_time_entries: Skupinsko urejanje izbranih časovnih zapisov
+  text_time_entries_destroy_confirmation: Ali ste prepričani, da želite izbristai izbran(e) časovn(i/e) zapis(e)?
+  label_role_anonymous: Anonimni
+  label_role_non_member: Nečlan
+  label_issue_note_added: Dodan zaznamek
+  label_issue_status_updated: Status posodobljen
+  label_issue_priority_updated: Prioriteta posodobljena
+  label_issues_visibility_own: Zahtevek ustvarjen s strani uporabnika ali dodeljen uporabniku
+  field_issues_visibility: Vidljivost zahtevkov
+  label_issues_visibility_all: Vsi zahtevki
+  permission_set_own_issues_private: Nastavi lastne zahtevke kot javne ali zasebne
+  field_is_private: Zaseben
+  permission_set_issues_private: Nastavi zahtevke kot javne ali zasebne
+  label_issues_visibility_public: Vsi nezasebni zahtevki
+  text_issues_destroy_descendants_confirmation: To bo izbrisalo tudi  %{count} podnalog(o).
   field_commit_logs_encoding: Kodiranje sporočil ob predaji
-  field_scm_path_encoding: Path encoding
-  text_scm_path_encoding_note: "Default: UTF-8"
-  field_path_to_repository: Path to repository
-  field_root_directory: Root directory
-  field_cvs_module: Module
+  field_scm_path_encoding: Pot do kodiranja
+  text_scm_path_encoding_note: "Privzeto: UTF-8"
+  field_path_to_repository: Pot do shrambe
+  field_root_directory: Korenska mapa
+  field_cvs_module: Modul
   field_cvsroot: CVSROOT
-  text_git_repository_note: Bare and local repository (e.g. /gitrepo, c:\gitrepo)
-  text_mercurial_repository_note: Local repository (e.g. /hgrepo, c:\hgrepo)
-  text_scm_command: Command
-  text_scm_command_version: Version
-  label_git_report_last_commit: Report last commit for files and directories
-  text_scm_config: You can configure your scm commands in config/configuration.yml. Please restart the application after editing it.
-  text_scm_command_not_available: Scm command is not available. Please check settings on the administration panel.
+  text_mercurial_repository_note: Lokalna shramba (npr. /hgrepo, c:\hgrepo)
+  text_scm_command: Ukaz
+  text_scm_command_version: Verzija
+  label_git_report_last_commit: Sporoči zadnje uveljavljanje datotek in map
+  text_scm_config: Svoje SCM ukaze lahko nastavite v datoteki config/configuration.yml. Po urejanju prosimo ponovno zaženite aplikacijo.
+  text_scm_command_not_available: SCM ukaz ni na voljo. Prosimo preverite nastavitve v upravljalskem podoknu.
+
+  text_git_repository_note: Shramba je prazna in lokalna (npr. /gitrepo, c:\gitrepo)
+
diff --git a/doc/CHANGELOG b/doc/CHANGELOG
index d19d64e..7b3d631 100644
--- a/doc/CHANGELOG
+++ b/doc/CHANGELOG
@@ -4,6 +4,25 @@ Redmine - project management software
 Copyright (C) 2006-2011  Jean-Philippe Lang
 http://www.redmine.org/
 
+== 2011-11-11 v1.2.2
+
+* Defect #3276: Incorrect handling of anchors in Wiki to HTML export
+* Defect #7215: Wiki formatting mangles links to internal headers
+* Defect #7613: Generated test instances may share the same attribute value object
+* Defect #8411: Can't remove "Project" column on custom query
+* Defect #8615: Custom 'version' fields don't show shared versions
+* Defect #8633: Pagination counts non visible issues
+* Defect #8651: Email attachments are not added to issues any more in v1.2
+* Defect #8825: JRuby + Windows: SCMs do not work on Redmine 1.2
+* Defect #8836: Additional workflow transitions not available when set to both author and assignee
+* Defect #8865: Custom field regular expression is not validated
+* Defect #8880: Error deleting issue with grandchild
+* Defect #8884: Assignee is cleared when updating issue with locked assignee
+* Defect #8892: Unused fonts in rfpdf plugin folder
+* Defect #9161: pt-BR field_warn_on_leaving_unsaved has a small gramatical error
+* Defect #9308: Search fails when a role haven't "view wiki" permission
+* Defect #9465: Mercurial: can't browse named branch below Mercurial 1.5
+
 == 2011-07-11 v1.2.1
 
 * Defect #5089: i18N error on truncated revision diff view
@@ -417,7 +436,7 @@ http://www.redmine.org/
 * #819: Add a body ID and class to all pages
 * #871: Commit new CSS styles!
 * #3301: Add favicon to base layout
-* #4656: On Issue#show page, clicking on “Add related issue” should focus on the input
+* #4656: On Issue#show page, clicking on “Add related issue� should focus on the input
 * #4896: Project identifier should be a limited field
 * #5084: Filter all isssues by projects
 * #5477: Replace Test::Unit::TestCase with ActiveSupport::TestCase
@@ -1426,7 +1445,7 @@ http://www.redmine.org/
 * Search engines now supports pagination. Results are sorted in reverse chronological order
 * Added "Estimated hours" attribute on issues
 * A category with assigned issue can now be deleted. 2 options are proposed: remove assignments or reassign issues to another category
-* Forum notifications are now also sent to the authors of the thread, even if they don�t watch the board
+* Forum notifications are now also sent to the authors of the thread, even if they don�t watch the board
 * Added an application setting to specify the application protocol (http or https) used to generate urls in emails
 * Gantt chart: now starts at the current month by default
 * Gantt chart: month count and zoom factor are automatically saved as user preferences
@@ -1434,7 +1453,7 @@ http://www.redmine.org/
 * Added wiki index by date
 * Added preview on add/edit issue form
 * Emails footer can now be customized from the admin interface (Admin -> Email notifications)
-* Default encodings for repository files can now be set in application settings (used to convert files content and diff to UTF-8 so that they�re properly displayed)
+* Default encodings for repository files can now be set in application settings (used to convert files content and diff to UTF-8 so that they�re properly displayed)
 * Calendar: first day of week can now be set in lang files
 * Automatic closing of duplicate issues
 * Added a cross-project issue list
@@ -1446,7 +1465,7 @@ http://www.redmine.org/
 * Added some accesskeys
 * Added "Float" as a custom field format
 * Added basic Theme support
-* Added the ability to set the �done ratio� of issues fixed by commit (Nikolay Solakov)
+* Added the ability to set the �done ratio� of issues fixed by commit (Nikolay Solakov)
 * Added custom fields in issue related mail notifications
 * Email notifications are now sent in plain text and html
 * Gantt chart can now be exported to a graphic file (png). This functionality is only available if RMagick is installed.
@@ -1479,7 +1498,7 @@ http://www.redmine.org/
 * Added Korean translation (Choi Jong Yoon)
 * Fixed: the link to delete issue relations is displayed even if the user is not authorized to delete relations
 * Performance improvement on calendar and gantt
-* Fixed: wiki preview doesn�t work on long entries
+* Fixed: wiki preview doesn�t work on long entries
 * Fixed: queries with multiple custom fields return no result
 * Fixed: Can not authenticate user against LDAP if its DN contains non-ascii characters
 * Fixed: URL with ~ broken in wiki formatting
@@ -1490,7 +1509,7 @@ http://www.redmine.org/
 
 * per project forums added
 * added the ability to archive projects
-* added �Watch� functionality on issues. It allows users to receive notifications about issue changes
+* added �Watch� functionality on issues. It allows users to receive notifications about issue changes
 * custom fields for issues can now be used as filters on issue list
 * added per user custom queries
 * commit messages are now scanned for referenced or fixed issue IDs (keywords defined in Admin -> Settings)
@@ -1531,7 +1550,7 @@ http://www.redmine.org/
 * added swedish translation (Thomas Habets)
 * italian translation update (Alessio Spadaro)
 * japanese translation update (Satoru Kurashiki)
-* fixed: error on history atom feed when there�s no notes on an issue change
+* fixed: error on history atom feed when there�s no notes on an issue change
 * fixed: error in journalizing an issue with longtext custom fields (Postgresql)
 * fixed: creation of Oracle schema
 * fixed: last day of the month not included in project activity
diff --git a/doc/RUNNING_TESTS b/doc/RUNNING_TESTS
index bccd3d6..3386e6f 100644
--- a/doc/RUNNING_TESTS
+++ b/doc/RUNNING_TESTS
@@ -9,8 +9,9 @@ Running Tests
 
 Run `rake --tasks test` to see available tests.
 `rake test` will run the entire testsuite.
+You can run `ruby test/unit/issue_test.rb` for an each test.
 
-Before running `rake test` you need to configure both development
+Before running tests, you need to configure both development
 and test databases.
 
 Creating test repositories
diff --git a/extra/svn/Redmine.pm b/extra/svn/Redmine.pm
index c0320f1..8fbd229 100644
--- a/extra/svn/Redmine.pm
+++ b/extra/svn/Redmine.pm
@@ -208,7 +208,7 @@ sub access_handler {
   my $project_id = get_project_identifier($r);
 
   $r->set_handlers(PerlAuthenHandler => [\&OK])
-      if is_public_project($project_id, $r);
+      if is_public_project($project_id, $r) && anonymous_role_allows_browse_repository($r);
 
   return OK
 }
@@ -280,6 +280,29 @@ sub is_public_project {
     $ret;
 }
 
+sub anonymous_role_allows_browse_repository {
+  my $r = shift;
+  
+  my $dbh = connect_database($r);
+  my $sth = $dbh->prepare(
+      "SELECT permissions FROM roles WHERE builtin = 2;"
+  );
+  
+  $sth->execute();
+  my $ret = 0;
+  if (my @row = $sth->fetchrow_array) {
+    if ($row[0] =~ /:browse_repository/) {
+      $ret = 1;
+    }
+  }
+  $sth->finish();
+  undef $sth;
+  $dbh->disconnect();
+  undef $dbh;
+  
+  $ret;
+}
+
 # perhaps we should use repository right (other read right) to check public access.
 # it could be faster BUT it doesn't work for the moment.
 # sub is_public_project_by_file {
diff --git a/lib/redcloth3.rb b/lib/redcloth3.rb
index f4c6244..8a33943 100644
--- a/lib/redcloth3.rb
+++ b/lib/redcloth3.rb
@@ -938,7 +938,7 @@ class RedCloth3 < String
             stln,algn,atts,url,title,href,href_a1,href_a2 = $~[1..8]
             htmlesc title
             atts = pba( atts )
-            atts = " src=\"#{ url }\"#{ atts }"
+            atts = " src=\"#{ htmlesc url.dup }\"#{ atts }"
             atts << " title=\"#{ title }\"" if title
             atts << " alt=\"#{ title }\"" 
             # size = @getimagesize($url);
diff --git a/lib/redmine/codeset_util.rb b/lib/redmine/codeset_util.rb
index 20156b8..945b3ea 100644
--- a/lib/redmine/codeset_util.rb
+++ b/lib/redmine/codeset_util.rb
@@ -11,6 +11,13 @@ module Redmine
           str = str.encode("US-ASCII", :invalid => :replace,
                 :undef => :replace, :replace => '?').encode("UTF-8")
         end
+      elsif RUBY_PLATFORM == 'java'
+        begin
+          ic = Iconv.new('UTF-8', 'UTF-8')
+          str = ic.iconv(str)
+        rescue
+          str = str.gsub(%r{[^\r\n\t\x20-\x7e]}, '?')
+        end
       else
         ic = Iconv.new('UTF-8', 'UTF-8')
         txtar = ""
diff --git a/lib/redmine/hook.rb b/lib/redmine/hook.rb
index 84c33e3..5146ccb 100644
--- a/lib/redmine/hook.rb
+++ b/lib/redmine/hook.rb
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2008  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
 # as published by the Free Software Foundation; either version 2
 # of the License, or (at your option) any later version.
-# 
+#
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -22,7 +22,7 @@ module Redmine
     @@listener_classes = []
     @@listeners = nil
     @@hook_listeners = {}
-    
+
     class << self
       # Adds a listener class.
       # Automatically called when a class inherits from Redmine::Hook::Listener.
@@ -31,29 +31,29 @@ module Redmine
         @@listener_classes << klass
         clear_listeners_instances
       end
-      
+
       # Returns all the listerners instances.
       def listeners
         @@listeners ||= @@listener_classes.collect {|listener| listener.instance}
       end
- 
+
       # Returns the listeners instances for the given hook.
       def hook_listeners(hook)
         @@hook_listeners[hook] ||= listeners.select {|listener| listener.respond_to?(hook)}
       end
-      
+
       # Clears all the listeners.
       def clear_listeners
         @@listener_classes = []
         clear_listeners_instances
       end
-      
+
       # Clears all the listeners instances.
       def clear_listeners_instances
         @@listeners = nil
         @@hook_listeners = {}
       end
-      
+
       # Calls a hook.
       # Returns the listeners response.
       def call_hook(hook, context={})
@@ -101,11 +101,11 @@ module Redmine
       def self.default_url_options
         {:only_path => true }
       end
-      
+
       # Helper method to directly render a partial using the context:
-      # 
+      #
       #   class MyHook < Redmine::Hook::ViewListener
-      #     render_on :view_issues_show_details_bottom, :partial => "show_more_data" 
+      #     render_on :view_issues_show_details_bottom, :partial => "show_more_data"
       #   end
       #
       def self.render_on(hook, options={})
@@ -115,25 +115,25 @@ module Redmine
       end
     end
 
-    # Helper module included in ApplicationHelper and ActionControllerso that
+    # Helper module included in ApplicationHelper and ActionController so that
     # hooks can be called in views like this:
-    # 
+    #
     #   <%= call_hook(:some_hook) %>
-    #   <%= call_hook(:another_hook, :foo => 'bar' %>
-    # 
+    #   <%= call_hook(:another_hook, :foo => 'bar') %>
+    #
     # Or in controllers like:
     #   call_hook(:some_hook)
-    #   call_hook(:another_hook, :foo => 'bar'
-    # 
-    # Hooks added to views will be concatenated into a string.  Hooks added to
+    #   call_hook(:another_hook, :foo => 'bar')
+    #
+    # Hooks added to views will be concatenated into a string. Hooks added to
     # controllers will return an array of results.
     #
     # Several objects are automatically added to the call context:
-    # 
+    #
     # * project => current project
     # * request => Request instance
     # * controller => current Controller instance
-    # 
+    #
     module Helper
       def call_hook(hook, context={})
         if is_a?(ActionController::Base)
@@ -142,7 +142,7 @@ module Redmine
         else
           default_context = {:controller => controller, :project => @project, :request => request}
           Redmine::Hook.call_hook(hook, default_context.merge(context)).join(' ')
-        end        
+        end
       end
     end
   end
diff --git a/lib/redmine/scm/adapters/abstract_adapter.rb b/lib/redmine/scm/adapters/abstract_adapter.rb
index bb01611..9e0682b 100644
--- a/lib/redmine/scm/adapters/abstract_adapter.rb
+++ b/lib/redmine/scm/adapters/abstract_adapter.rb
@@ -29,6 +29,14 @@ module Redmine
             ""
           end
 
+          def shell_quote_command
+            if Redmine::Platform.mswin? && RUBY_PLATFORM == 'java'
+              client_command
+            else
+              shell_quote(client_command)
+            end
+          end
+
           # Returns the version of the scm client
           # Eg: [1, 5, 0] or [] if unknown
           def client_version
@@ -216,7 +224,11 @@ module Redmine
               io.close_write
               block.call(io) if block_given?
             end
-          rescue Errno::ENOENT => e
+          ## If scm command does not exist,
+          ## Linux JRuby 1.6.2 (ruby-1.8.7-p330) raises java.io.IOException
+          ## in production environment.
+          # rescue Errno::ENOENT => e
+          rescue Exception => e
             msg = strip_credential(e.message)
             # The command failed, log it and re-raise
             logmsg = "SCM command failed, "
diff --git a/lib/redmine/scm/adapters/bazaar_adapter.rb b/lib/redmine/scm/adapters/bazaar_adapter.rb
index 8eb5f93..ddf70ba 100644
--- a/lib/redmine/scm/adapters/bazaar_adapter.rb
+++ b/lib/redmine/scm/adapters/bazaar_adapter.rb
@@ -31,7 +31,7 @@ module Redmine
           end
 
           def sq_bin
-            @@sq_bin ||= shell_quote(BZR_BIN)
+            @@sq_bin ||= shell_quote_command
           end
 
           def client_version
diff --git a/lib/redmine/scm/adapters/cvs_adapter.rb b/lib/redmine/scm/adapters/cvs_adapter.rb
index ffa241e..91e2633 100644
--- a/lib/redmine/scm/adapters/cvs_adapter.rb
+++ b/lib/redmine/scm/adapters/cvs_adapter.rb
@@ -34,7 +34,7 @@ module Redmine
           end
 
           def sq_bin
-            @@sq_bin ||= shell_quote(CVS_BIN)
+            @@sq_bin ||= shell_quote_command
           end
 
           def client_version
@@ -379,13 +379,16 @@ module Redmine
         end
 
         def scm_cmd(*args, &block)
-          full_args = [CVS_BIN, '-d', root_url]
+          full_args = ['-d', root_url]
           full_args += args
           full_args_locale = []
           full_args.map do |e|
             full_args_locale << scm_iconv(@path_encoding, 'UTF-8', e)
           end
-          ret = shellout(full_args_locale.map { |e| shell_quote e.to_s }.join(' '), &block)
+          ret = shellout(
+                   self.class.sq_bin + ' ' + full_args_locale.map { |e| shell_quote e.to_s }.join(' '),
+                   &block
+                   )
           if $? && $?.exitstatus != 0
             raise ScmCommandAborted, "cvs exited with non-zero status: #{$?.exitstatus}"
           end
diff --git a/lib/redmine/scm/adapters/darcs_adapter.rb b/lib/redmine/scm/adapters/darcs_adapter.rb
index 7b03ac8..bc0dae5 100644
--- a/lib/redmine/scm/adapters/darcs_adapter.rb
+++ b/lib/redmine/scm/adapters/darcs_adapter.rb
@@ -31,7 +31,7 @@ module Redmine
           end
 
           def sq_bin
-            @@sq_bin ||= shell_quote(DARCS_BIN)
+            @@sq_bin ||= shell_quote_command
           end
 
           def client_version
diff --git a/lib/redmine/scm/adapters/git_adapter.rb b/lib/redmine/scm/adapters/git_adapter.rb
index ad04b62..fd1a9a8 100644
--- a/lib/redmine/scm/adapters/git_adapter.rb
+++ b/lib/redmine/scm/adapters/git_adapter.rb
@@ -34,7 +34,7 @@ module Redmine
           end
 
           def sq_bin
-            @@sq_bin ||= shell_quote(GIT_BIN)
+            @@sq_bin ||= shell_quote_command
           end
 
           def client_version
@@ -359,13 +359,16 @@ module Redmine
 
         def scm_cmd(*args, &block)
           repo_path = root_url || url
-          full_args = [GIT_BIN, '--git-dir', repo_path]
+          full_args = ['--git-dir', repo_path]
           if self.class.client_version_above?([1, 7, 2])
             full_args << '-c' << 'core.quotepath=false'
             full_args << '-c' << 'log.decorate=no'
           end
           full_args += args
-          ret = shellout(full_args.map { |e| shell_quote e.to_s }.join(' '), &block)
+          ret = shellout(
+                   self.class.sq_bin + ' ' + full_args.map { |e| shell_quote e.to_s }.join(' '),
+                   &block
+                   )
           if $? && $?.exitstatus != 0
             raise ScmCommandAborted, "git exited with non-zero status: #{$?.exitstatus}"
           end
diff --git a/lib/redmine/scm/adapters/mercurial/hg-template-0.9.5.tmpl b/lib/redmine/scm/adapters/mercurial/hg-template-0.9.5.tmpl
deleted file mode 100644
index 3cf584a..0000000
--- a/lib/redmine/scm/adapters/mercurial/hg-template-0.9.5.tmpl
+++ /dev/null
@@ -1,12 +0,0 @@
-changeset = 'This template must be used with --debug option\n'
-changeset_quiet =  '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'
-
-file = '<path action="M">{file|urlescape}</path>\n'
-file_add = '<path action="A">{file_add|urlescape}</path>\n'
-file_del = '<path action="D">{file_del|urlescape}</path>\n'
-file_copy = '<path-copied copyfrom-path="{source|urlescape}">{name|urlescape}</path-copied>\n'
-tag = '<tag>{tag|escape}</tag>\n'
-header='<?xml version="1.0" encoding="UTF-8" ?>\n<log>\n\n'
-# footer="</log>"
\ No newline at end of file
diff --git a/lib/redmine/scm/adapters/mercurial/redminehelper.py b/lib/redmine/scm/adapters/mercurial/redminehelper.py
index 7b3b639..6eed7ed 100644
--- a/lib/redmine/scm/adapters/mercurial/redminehelper.py
+++ b/lib/redmine/scm/adapters/mercurial/redminehelper.py
@@ -46,7 +46,7 @@ Output example of rhmanifest::
     </rhmanifest>
 """
 import re, time, cgi, urllib
-from mercurial import cmdutil, commands, node, error
+from mercurial import cmdutil, commands, node, error, hg
 
 _x = cgi.escape
 _u = lambda s: cgi.escape(urllib.quote(s))
@@ -146,7 +146,10 @@ def rhlog(ui, repo, *pats, **opts):
     bra      = urllib.unquote_plus(opts.pop('rhbranch', None))
     from_rev = from_rev.replace('"', '\\"')
     to_rev   = to_rev.replace('"', '\\"')
-    opts['rev'] = ['"%s":"%s"' % (from_rev, to_rev)]
+    if hg.util.version() >= '1.6':
+      opts['rev'] = ['"%s":"%s"' % (from_rev, to_rev)]
+    else:
+      opts['rev'] = ['%s:%s' % (from_rev, to_rev)]
     opts['branch'] = [bra]
     return commands.log(ui, repo, *map(urllib.unquote_plus, pats), **opts)
 
@@ -196,21 +199,21 @@ cmdtable = {
                    [
                     ('r', 'rev', [], 'show the specified revision'),
                     ('b', 'branch', [],
-                       'show changesets within the given named branch', 'BRANCH'),
+                       'show changesets within the given named branch'),
                     ('l', 'limit', '',
-                         'limit number of changes displayed', 'NUM'),
+                         'limit number of changes displayed'),
                     ('d', 'date', '',
-                         'show revisions matching date spec', 'DATE'),
+                         'show revisions matching date spec'),
                     ('u', 'user', [],
-                      'revisions committed by user', 'USER'),
+                      'revisions committed by user'),
                     ('', 'from', '',
-                      '', ''),
+                      ''),
                     ('', 'to', '',
-                      '', ''),
+                      ''),
                     ('', 'rhbranch', '',
-                      '', ''),
+                      ''),
                     ('', 'template', '',
-                       'display with template', 'TEMPLATE')],
+                       'display with template')],
                    'hg rhlog [OPTION]... [FILE]'),
     'rhmanifest': (rhmanifest,
                    [('r', 'rev', '', 'show the specified revision')],
diff --git a/lib/redmine/scm/adapters/mercurial_adapter.rb b/lib/redmine/scm/adapters/mercurial_adapter.rb
index 6ef816b..53f2473 100644
--- a/lib/redmine/scm/adapters/mercurial_adapter.rb
+++ b/lib/redmine/scm/adapters/mercurial_adapter.rb
@@ -39,7 +39,7 @@ module Redmine
           end
 
           def sq_bin
-            @@sq_bin ||= shell_quote(HG_BIN)
+            @@sq_bin ||= shell_quote_command
           end
 
           def client_version
@@ -47,7 +47,7 @@ module Redmine
           end
 
           def client_available
-            client_version_above?([0, 9, 5])
+            client_version_above?([1, 2])
           end
 
           def hgversion
@@ -72,12 +72,7 @@ module Redmine
           end
 
           def template_path_for(version)
-            if ((version <=> [0,9,5]) > 0) || version.empty?
-              ver = "1.0"
-            else
-              ver = "0.9.5"
-            end
-            "#{HELPERS_DIR}/#{TEMPLATE_NAME}-#{ver}.#{TEMPLATE_EXTENSION}"
+            "#{HELPERS_DIR}/#{TEMPLATE_NAME}-1.0.#{TEMPLATE_EXTENSION}"
           end
         end
 
@@ -294,11 +289,14 @@ module Redmine
         # Runs 'hg' command with the given args
         def hg(*args, &block)
           repo_path = root_url || url
-          full_args = [HG_BIN, '-R', repo_path, '--encoding', 'utf-8']
+          full_args = ['-R', repo_path, '--encoding', 'utf-8']
           full_args << '--config' << "extensions.redminehelper=#{HG_HELPER_EXT}"
           full_args << '--config' << 'diff.git=false'
           full_args += args
-          ret = shellout(full_args.map { |e| shell_quote e.to_s }.join(' '), &block)
+          ret = shellout(
+                   self.class.sq_bin + ' ' + full_args.map { |e| shell_quote e.to_s }.join(' '),
+                   &block
+                   )
           if $? && $?.exitstatus != 0
             raise HgCommandAborted, "hg exited with non-zero status: #{$?.exitstatus}"
           end
diff --git a/lib/redmine/scm/adapters/subversion_adapter.rb b/lib/redmine/scm/adapters/subversion_adapter.rb
index aa2d37f..a0a07f8 100644
--- a/lib/redmine/scm/adapters/subversion_adapter.rb
+++ b/lib/redmine/scm/adapters/subversion_adapter.rb
@@ -32,7 +32,7 @@ module Redmine
           end
 
           def sq_bin
-            @@sq_bin ||= shell_quote(SVN_BIN)
+            @@sq_bin ||= shell_quote_command
           end
 
           def client_version
diff --git a/lib/redmine/version.rb b/lib/redmine/version.rb
index 60d0241..f4081aa 100644
--- a/lib/redmine/version.rb
+++ b/lib/redmine/version.rb
@@ -4,7 +4,7 @@ module Redmine
   module VERSION #:nodoc:
     MAJOR = 1
     MINOR = 2
-    TINY  = 1
+    TINY  = 2
 
     # Branch values:
     # * official release: nil
diff --git a/lib/tasks/email.rake b/lib/tasks/email.rake
index 37c992d..617272a 100644
--- a/lib/tasks/email.rake
+++ b/lib/tasks/email.rake
@@ -100,14 +100,14 @@ Processed emails control options:
 Examples:
   # No project specified. Emails MUST contain the 'Project' keyword:
 
-  rake redmine:email:receive_iamp RAILS_ENV="production" \\
+  rake redmine:email:receive_imap RAILS_ENV="production" \\
     host=imap.foo.bar username=redmine at example.net password=xxx
 
 
   # Fixed project and default tracker specified, but emails can override
   # both tracker and priority attributes:
 
-  rake redmine:email:receive_iamp RAILS_ENV="production" \\
+  rake redmine:email:receive_imap RAILS_ENV="production" \\
     host=imap.foo.bar username=redmine at example.net password=xxx ssl=1 \\
     project=foo \\
     tracker=bug \\
diff --git a/test/exemplars/auth_source_exemplar.rb b/test/exemplars/auth_source_exemplar.rb
index da277e2..3976aeb 100644
--- a/test/exemplars/auth_source_exemplar.rb
+++ b/test/exemplars/auth_source_exemplar.rb
@@ -1,9 +1,4 @@
 class AuthSource < ActiveRecord::Base
-  generator_for :name, :method => :next_name
+  generator_for :name, :start => 'Auth0'
 
-  def self.next_name
-    @last_name ||= 'Auth0'
-    @last_name.succ!
-    @last_name
-  end
 end
diff --git a/test/exemplars/board_exemplar.rb b/test/exemplars/board_exemplar.rb
index 264ea81..eb8643d 100644
--- a/test/exemplars/board_exemplar.rb
+++ b/test/exemplars/board_exemplar.rb
@@ -1,20 +1,8 @@
 class Board < ActiveRecord::Base
-  generator_for :name, :method => :next_name
-  generator_for :description, :method => :next_description
+  generator_for :name, :start => 'A Forum'
+  generator_for :description, :start => 'Some description here'
   generator_for :project, :method => :generate_project
 
-  def self.next_name
-    @last_name ||= 'A Forum'
-    @last_name.succ!
-    @last_name
-  end
-
-  def self.next_description
-    @last_description ||= 'Some description here'
-    @last_description.succ!
-    @last_description
-  end
-
   def self.generate_project
     Project.generate!
   end
diff --git a/test/exemplars/change_exemplar.rb b/test/exemplars/change_exemplar.rb
index 97985fb..07f30ec 100644
--- a/test/exemplars/change_exemplar.rb
+++ b/test/exemplars/change_exemplar.rb
@@ -1,14 +1,8 @@
 class Change < ActiveRecord::Base
   generator_for :action => 'A'
-  generator_for :path, :method => :next_path
+  generator_for :path, :start => 'test/dir/aaa0001'
   generator_for :changeset, :method => :generate_changeset
 
-  def self.next_path
-    @last_path ||= 'test/dir/aaa0001'
-    @last_path.succ!
-    @last_path
-  end
-
   def self.generate_changeset
     Changeset.generate!
   end
diff --git a/test/exemplars/changeset_exemplar.rb b/test/exemplars/changeset_exemplar.rb
index a149977..62d6ee3 100644
--- a/test/exemplars/changeset_exemplar.rb
+++ b/test/exemplars/changeset_exemplar.rb
@@ -1,14 +1,8 @@
 class Changeset < ActiveRecord::Base
-  generator_for :revision, :method => :next_revision
+  generator_for :revision, :start => '1'
   generator_for :committed_on => Date.today
   generator_for :repository, :method => :generate_repository
 
-  def self.next_revision
-    @last_revision ||= '1'
-    @last_revision.succ!
-    @last_revision
-  end
-
   def self.generate_repository
     Repository::Subversion.generate!
   end
diff --git a/test/exemplars/custom_field_exemplar.rb b/test/exemplars/custom_field_exemplar.rb
index b9577bb..81e7788 100644
--- a/test/exemplars/custom_field_exemplar.rb
+++ b/test/exemplars/custom_field_exemplar.rb
@@ -1,10 +1,5 @@
 class CustomField < ActiveRecord::Base
-  generator_for :name, :method => :next_name
+  generator_for :name, :start => 'CustomField0'
   generator_for :field_format => 'string'
 
-  def self.next_name
-    @last_name ||= 'CustomField0'
-    @last_name.succ!
-    @last_name
-  end
 end
diff --git a/test/exemplars/document_category_exemplar.rb b/test/exemplars/document_category_exemplar.rb
index 5ffe9a9..758b6d4 100644
--- a/test/exemplars/document_category_exemplar.rb
+++ b/test/exemplars/document_category_exemplar.rb
@@ -1,10 +1,5 @@
 class DocumentCategory < Enumeration
-  generator_for :name, :method => :next_name
+  generator_for :name, :start => 'DocumentCategory0'
   generator_for :type => 'DocumentCategory'
 
-  def self.next_name
-    @last_name ||= 'DocumentCategory0'
-    @last_name.succ!
-    @last_name
-  end
 end
diff --git a/test/exemplars/document_exemplar.rb b/test/exemplars/document_exemplar.rb
index ae9a4a2..1d8e710 100644
--- a/test/exemplars/document_exemplar.rb
+++ b/test/exemplars/document_exemplar.rb
@@ -1,9 +1,4 @@
 class Document < ActiveRecord::Base
-  generator_for :title, :method => :next_title
+  generator_for :title, :start => 'Document001'
 
-  def self.next_title
-    @last_title ||= 'Document001'
-    @last_title.succ!
-    @last_title
-  end
 end
diff --git a/test/exemplars/enabled_module_exemplar.rb b/test/exemplars/enabled_module_exemplar.rb
index 85a38b5..60f0631 100644
--- a/test/exemplars/enabled_module_exemplar.rb
+++ b/test/exemplars/enabled_module_exemplar.rb
@@ -1,10 +1,4 @@
 class EnabledModule < ActiveRecord::Base
-  generator_for :name, :method => :next_name
-
-  def self.next_name
-    @last_name ||= 'module_001'
-    @last_name.succ!
-    @last_name
-  end
+  generator_for :name, :start => 'module_001'
 
 end
diff --git a/test/exemplars/enumeration_exemplar.rb b/test/exemplars/enumeration_exemplar.rb
index 6665a6d..29e4f45 100644
--- a/test/exemplars/enumeration_exemplar.rb
+++ b/test/exemplars/enumeration_exemplar.rb
@@ -1,10 +1,5 @@
 class Enumeration < ActiveRecord::Base
-  generator_for :name, :method => :next_name
+  generator_for :name, :start => 'Enumeration0'
   generator_for :type => 'TimeEntryActivity'
 
-  def self.next_name
-    @last_name ||= 'Enumeration0'
-    @last_name.succ!
-    @last_name
-  end
 end
diff --git a/test/exemplars/group_exemplar.rb b/test/exemplars/group_exemplar.rb
index 5d2cd74..a6851b4 100644
--- a/test/exemplars/group_exemplar.rb
+++ b/test/exemplars/group_exemplar.rb
@@ -1,10 +1,4 @@
 class Group < Principal
-  generator_for :lastname, :method => :next_lastname
-
-  def self.next_lastname
-    @last_lastname ||= 'Group'
-    @last_lastname.succ!
-    @last_lastname
-  end
+  generator_for :lastname, :start => 'Group'
 
 end
diff --git a/test/exemplars/issue_category_exemplar.rb b/test/exemplars/issue_category_exemplar.rb
index 318947c..246eafc 100644
--- a/test/exemplars/issue_category_exemplar.rb
+++ b/test/exemplars/issue_category_exemplar.rb
@@ -1,9 +1,4 @@
 class IssueCategory < ActiveRecord::Base
-  generator_for :name, :method => :next_name
-  
-  def self.next_name
-    @last_name ||= 'Category 0001'
-    @last_name.succ!
-    @last_name
-  end
+  generator_for :name, :start => 'Category 0001'
+
 end
diff --git a/test/exemplars/issue_exemplar.rb b/test/exemplars/issue_exemplar.rb
index 568f054..17868e6 100644
--- a/test/exemplars/issue_exemplar.rb
+++ b/test/exemplars/issue_exemplar.rb
@@ -1,13 +1,7 @@
 class Issue < ActiveRecord::Base
-  generator_for :subject, :method => :next_subject
+  generator_for :subject, :start => 'Subject 0'
   generator_for :author, :method => :next_author
   generator_for :priority, :method => :fetch_priority
-  
-  def self.next_subject
-    @last_subject ||= 'Subject 0'
-    @last_subject.succ!
-    @last_subject
-  end
 
   def self.next_author
     User.generate_with_protected!
@@ -16,5 +10,4 @@ class Issue < ActiveRecord::Base
   def self.fetch_priority
     IssuePriority.first || IssuePriority.generate!
   end
-
 end
diff --git a/test/exemplars/issue_priority_exemplar.rb b/test/exemplars/issue_priority_exemplar.rb
index 0819a8d..5059da5 100644
--- a/test/exemplars/issue_priority_exemplar.rb
+++ b/test/exemplars/issue_priority_exemplar.rb
@@ -1,10 +1,5 @@
 class IssuePriority < Enumeration
-  generator_for :name, :method => :next_name
+  generator_for :name, :start => 'IssuePriority0'
   generator_for :type => 'IssuePriority'
 
-  def self.next_name
-    @last_name ||= 'IssuePriority0'
-    @last_name.succ!
-    @last_name
-  end
 end
diff --git a/test/exemplars/issue_status_exemplar.rb b/test/exemplars/issue_status_exemplar.rb
index 9d3ccdc..0576568 100644
--- a/test/exemplars/issue_status_exemplar.rb
+++ b/test/exemplars/issue_status_exemplar.rb
@@ -1,9 +1,4 @@
 class IssueStatus < ActiveRecord::Base
-  generator_for :name, :method => :next_name
+  generator_for :name, :start => 'Status 0'
 
-  def self.next_name
-    @last_name ||= 'Status 0'
-    @last_name.succ!
-    @last_name
-  end
 end
diff --git a/test/exemplars/message_exemplar.rb b/test/exemplars/message_exemplar.rb
index 0a310fc..67c5b67 100644
--- a/test/exemplars/message_exemplar.rb
+++ b/test/exemplars/message_exemplar.rb
@@ -1,20 +1,8 @@
 class Message < ActiveRecord::Base
-  generator_for :subject, :method => :next_subject
-  generator_for :content, :method => :next_content
+  generator_for :subject, :start => 'A Message'
+  generator_for :content, :start => 'Some content here'
   generator_for :board, :method => :generate_board
 
-  def self.next_subject
-    @last_subject ||= 'A Message'
-    @last_subject.succ!
-    @last_subject
-  end
-
-  def self.next_content
-    @last_content ||= 'Some content here'
-    @last_content.succ!
-    @last_content
-  end
-
   def self.generate_board
     Board.generate!
   end
diff --git a/test/exemplars/news_exemplar.rb b/test/exemplars/news_exemplar.rb
index c7e22c5..d58a292 100644
--- a/test/exemplars/news_exemplar.rb
+++ b/test/exemplars/news_exemplar.rb
@@ -1,16 +1,5 @@
 class News < ActiveRecord::Base
-  generator_for :title, :method => :next_title
-  generator_for :description, :method => :next_description
+  generator_for :title, :start => 'A New Item'
+  generator_for :description, :start => 'Some content here'
 
-  def self.next_title
-    @last_title ||= 'A New Item'
-    @last_title.succ!
-    @last_title
-  end
-
-  def self.next_description
-    @last_description ||= 'Some content here'
-    @last_description.succ!
-    @last_description
-  end
 end
diff --git a/test/exemplars/project_exemplar.rb b/test/exemplars/project_exemplar.rb
index a28c333..ceda2be 100644
--- a/test/exemplars/project_exemplar.rb
+++ b/test/exemplars/project_exemplar.rb
@@ -1,21 +1,8 @@
 class Project < ActiveRecord::Base
-  generator_for :name, :method => :next_name
-  generator_for :identifier, :method => :next_identifier_from_object_daddy
+  generator_for :name, :start => 'Project 0'
+  generator_for :identifier, :start => 'project-0000'
   generator_for :enabled_modules, :method => :all_modules
   generator_for :trackers, :method => :next_tracker
-  
-  def self.next_name
-    @last_name ||= 'Project 0'
-    @last_name.succ!
-    @last_name
-  end
-
-  # Project#next_identifier is defined on Redmine
-  def self.next_identifier_from_object_daddy
-    @last_identifier ||= 'project-0000'
-    @last_identifier.succ!
-    @last_identifier
-  end
 
   def self.all_modules
     [].tap do |modules|
diff --git a/test/exemplars/query_exemplar.rb b/test/exemplars/query_exemplar.rb
index db32e93..2b0847c 100644
--- a/test/exemplars/query_exemplar.rb
+++ b/test/exemplars/query_exemplar.rb
@@ -1,9 +1,4 @@
 class Query < ActiveRecord::Base
-  generator_for :name, :method => :next_name
+  generator_for :name, :start => 'Query 0'
 
-  def self.next_name
-    @last_name ||= 'Query 0'
-    @last_name.succ!
-    @last_name
-  end
 end
diff --git a/test/exemplars/repository_exemplar.rb b/test/exemplars/repository_exemplar.rb
index 42d11fc..7b596ea 100644
--- a/test/exemplars/repository_exemplar.rb
+++ b/test/exemplars/repository_exemplar.rb
@@ -1,11 +1,5 @@
 class Repository < ActiveRecord::Base
   generator_for :type => 'Subversion'
-  generator_for :url, :method => :next_url
-
-  def self.next_url
-    @last_url ||= 'file:///test/svn'
-    @last_url.succ!
-    @last_url
-  end
+  generator_for :url, :start => 'file:///test/svn'
 
 end
diff --git a/test/exemplars/role_exemplar.rb b/test/exemplars/role_exemplar.rb
index 9f17e13..00bad92 100644
--- a/test/exemplars/role_exemplar.rb
+++ b/test/exemplars/role_exemplar.rb
@@ -1,8 +1,4 @@
 class Role < ActiveRecord::Base
-  generator_for :name, :method => :next_name
+  generator_for :name, :start => 'Role0'
 
-  def self.next_name
-    @last_name ||= 'Role0'
-    @last_name.succ!
-  end
 end
diff --git a/test/exemplars/subversion_repository_exemplar.rb b/test/exemplars/subversion_repository_exemplar.rb
index 2d48cb2..93c9fd1 100644
--- a/test/exemplars/subversion_repository_exemplar.rb
+++ b/test/exemplars/subversion_repository_exemplar.rb
@@ -1,11 +1,5 @@
 class Repository::Subversion < Repository
   generator_for :type, :method => 'Subversion'
-  generator_for :url, :method => :next_url
-
-  def self.next_url
-    @last_url ||= 'file:///test/svn'
-    @last_url.succ!
-    @last_url
-  end
+  generator_for :url, :start => 'file:///test/svn'
 
 end
diff --git a/test/exemplars/time_entry_activity.rb b/test/exemplars/time_entry_activity.rb
index 8473c2f..e5e318d 100644
--- a/test/exemplars/time_entry_activity.rb
+++ b/test/exemplars/time_entry_activity.rb
@@ -1,10 +1,5 @@
 class TimeEntryActivity < Enumeration
-  generator_for :name, :method => :next_name
+  generator_for :name, :start => 'TimeEntryActivity0'
   generator_for :type => 'TimeEntryActivity'
 
-  def self.next_name
-    @last_name ||= 'TimeEntryActivity0'
-    @last_name.succ!
-    @last_name
-  end
 end
diff --git a/test/exemplars/time_entry_exemplar.rb b/test/exemplars/time_entry_exemplar.rb
index b15b956..c8f2e20 100644
--- a/test/exemplars/time_entry_exemplar.rb
+++ b/test/exemplars/time_entry_exemplar.rb
@@ -6,5 +6,4 @@ class TimeEntry < ActiveRecord::Base
   def self.generate_user
     User.generate_with_protected!
   end
-  
 end
diff --git a/test/exemplars/tracker_exemplar.rb b/test/exemplars/tracker_exemplar.rb
index 94523f7..0aa0d3b 100644
--- a/test/exemplars/tracker_exemplar.rb
+++ b/test/exemplars/tracker_exemplar.rb
@@ -1,9 +1,4 @@
 class Tracker < ActiveRecord::Base
-  generator_for :name, :method => :next_name
+  generator_for :name, :start => 'Tracker 0'
 
-  def self.next_name
-    @last_name ||= 'Tracker 0'
-    @last_name.succ!
-    @last_name
-  end
 end
diff --git a/test/exemplars/user_exemplar.rb b/test/exemplars/user_exemplar.rb
index def8dc4..7aee145 100644
--- a/test/exemplars/user_exemplar.rb
+++ b/test/exemplars/user_exemplar.rb
@@ -1,30 +1,12 @@
 class User < Principal
-  generator_for :login, :method => :next_login
+  generator_for :login, :start => 'user1'
   generator_for :mail, :method => :next_email
-  generator_for :firstname, :method => :next_firstname
-  generator_for :lastname, :method => :next_lastname
-  
-  def self.next_login
-    @gen_login ||= 'user1'
-    @gen_login.succ!
-    @gen_login
-  end
-  
+  generator_for :firstname, :start => 'Bob'
+  generator_for :lastname, :start => 'Doe'
+
   def self.next_email
     @last_email ||= 'user1'
     @last_email.succ!
     "#{@last_email}@example.com"
   end
-
-  def self.next_firstname
-    @last_firstname ||= 'Bob'
-    @last_firstname.succ!
-    @last_firstname
-  end
-
-  def self.next_lastname
-    @last_lastname ||= 'Doe'
-    @last_lastname.succ!
-    @last_lastname
-  end
 end
diff --git a/test/exemplars/version_exemplar.rb b/test/exemplars/version_exemplar.rb
index 0433554..ee421fe 100644
--- a/test/exemplars/version_exemplar.rb
+++ b/test/exemplars/version_exemplar.rb
@@ -1,11 +1,5 @@
 class Version < ActiveRecord::Base
-  generator_for :name, :method => :next_name
+  generator_for :name, :start => 'Version 1.0.0'
   generator_for :status => 'open'
-  
-  def self.next_name
-    @last_name ||= 'Version 1.0.0'
-    @last_name.succ!
-    @last_name
-  end
 
 end
diff --git a/test/exemplars/wiki_page_exemplar.rb b/test/exemplars/wiki_page_exemplar.rb
index d70cc22..8db9a0e 100644
--- a/test/exemplars/wiki_page_exemplar.rb
+++ b/test/exemplars/wiki_page_exemplar.rb
@@ -1,13 +1,7 @@
 class WikiPage < ActiveRecord::Base
-  generator_for :title, :method => :next_title
+  generator_for :title, :start => 'AWikiPage'
   generator_for :wiki, :method => :generate_wiki
 
-  def self.next_title
-    @last_title ||= 'AWikiPage'
-    @last_title.succ!
-    @last_title
-  end
-
   def self.generate_wiki
     Wiki.generate!
   end
diff --git a/test/exemplars/wiki_redirect_exemplar.rb b/test/exemplars/wiki_redirect_exemplar.rb
index 0b380ac..cedb5bd 100644
--- a/test/exemplars/wiki_redirect_exemplar.rb
+++ b/test/exemplars/wiki_redirect_exemplar.rb
@@ -1,20 +1,8 @@
 class WikiRedirect < ActiveRecord::Base
-  generator_for :title, :method => :next_title
-  generator_for :redirects_to, :method => :next_redirects_to
+  generator_for :title, :start => 'AWikiPage'
+  generator_for :redirects_to, :start => '/a/path/000001'
   generator_for :wiki, :method => :generate_wiki
 
-  def self.next_title
-    @last_title ||= 'AWikiPage'
-    @last_title.succ!
-    @last_title
-  end
-
-  def self.next_redirects_to
-    @last_redirect ||= '/a/path/000001'
-    @last_redirect.succ!
-    @last_redirect
-  end
-
   def self.generate_wiki
     Wiki.generate!
   end
diff --git a/test/fixtures/mail_handler/ticket_with_attachment.eml b/test/fixtures/mail_handler/apple_mail_with_attachment.eml
similarity index 89%
copy from test/fixtures/mail_handler/ticket_with_attachment.eml
copy to test/fixtures/mail_handler/apple_mail_with_attachment.eml
index c85f6b4..3f54a62 100644
--- a/test/fixtures/mail_handler/ticket_with_attachment.eml
+++ b/test/fixtures/mail_handler/apple_mail_with_attachment.eml
@@ -1,248 +1,240 @@
-Return-Path: <jsmith at somenet.foo>
-Received: from osiris ([127.0.0.1])
-	by OSIRIS
-	with hMailServer ; Sat, 21 Jun 2008 15:53:25 +0200
-Message-ID: <002301c8d3a6$2cdf6950$0a00a8c0 at osiris>
-From: "John Smith" <jsmith at somenet.foo>
-To: <redmine at somenet.foo>
-Subject: Ticket created by email with attachment
-Date: Sat, 21 Jun 2008 15:53:25 +0200
-MIME-Version: 1.0
-Content-Type: multipart/mixed;
-	boundary="----=_NextPart_000_001F_01C8D3B6.F05C5270"
-X-Priority: 3
-X-MSMail-Priority: Normal
-X-Mailer: Microsoft Outlook Express 6.00.2900.2869
-X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2869
-
-This is a multi-part message in MIME format.
-
-------=_NextPart_000_001F_01C8D3B6.F05C5270
-Content-Type: multipart/alternative;
-	boundary="----=_NextPart_001_0020_01C8D3B6.F05C5270"
-
-
-------=_NextPart_001_0020_01C8D3B6.F05C5270
-Content-Type: text/plain;
-	charset="iso-8859-1"
-Content-Transfer-Encoding: quoted-printable
-
-This is  a new ticket with attachments
-------=_NextPart_001_0020_01C8D3B6.F05C5270
-Content-Type: text/html;
-	charset="iso-8859-1"
-Content-Transfer-Encoding: quoted-printable
-
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML><HEAD>
-<META http-equiv=3DContent-Type content=3D"text/html; =
-charset=3Diso-8859-1">
-<META content=3D"MSHTML 6.00.2900.2883" name=3DGENERATOR>
-<STYLE></STYLE>
-</HEAD>
-<BODY bgColor=3D#ffffff>
-<DIV><FONT face=3DArial size=3D2>This is  a new ticket with=20
-attachments</FONT></DIV></BODY></HTML>
-
-------=_NextPart_001_0020_01C8D3B6.F05C5270--
-
-------=_NextPart_000_001F_01C8D3B6.F05C5270
-Content-Type: image/jpeg;
-	name="Paella.jpg"
-Content-Transfer-Encoding: base64
-Content-Disposition: attachment;
-	filename="Paella.jpg"
-
-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
-cbis+/WpUqUcMZKdF44n/9k=
-
-------=_NextPart_000_001F_01C8D3B6.F05C5270--
-
+From JSmith at somenet.foo  Mon Jun 27 06:55:56 2011
+Return-Path: <JSmith at somenet.foo>
+X-Original-To: redmine at somenet.foo
+Delivered-To: redmine at somenet.foo
+From: John Smith <JSmith at somenet.foo>
+Mime-Version: 1.0 (Apple Message framework v1084)
+Content-Type: multipart/alternative; boundary=Apple-Mail-3-163265085
+Subject: Test attaching images to tickets by HTML mail
+Date: Mon, 27 Jun 2011 16:55:46 +0300
+To: redmine at somenet.foo
+Message-Id: <7ABE3636-07E8-47C9-90A1-FCB1AA894DA1 at somenet.foo>
+X-Mailer: Apple Mail (2.1084)
+
+
+--Apple-Mail-3-163265085
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/plain;
+	charset=us-ascii
+
+Yet another test!
+
+
+--Apple-Mail-3-163265085
+Content-Type: multipart/related;
+	type="text/html";
+	boundary=Apple-Mail-4-163265085
+
+
+--Apple-Mail-4-163265085
+Content-Transfer-Encoding: quoted-printable
+Content-Type: text/html;
+	charset=us-ascii
+
+<html><head></head><body style=3D"word-wrap: break-word; =
+-webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">
+<br></body></html>=
+
+--Apple-Mail-4-163265085
+Content-Transfer-Encoding: base64
+Content-Disposition: inline;
+	filename=paella.jpg
+Content-Type: image/jpg;
+	x-unix-mode=0644;
+	name="paella.jpg"
+Content-Id: <1207F0B5-9F9D-4AB4-B547-AF9033E82111>
+
+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
+cbis+/WpUqUcMZKdF44n/9k=
+
+--Apple-Mail-4-163265085--
+
+--Apple-Mail-3-163265085--
diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb
index 36497ac..f3960fa 100644
--- a/test/functional/issues_controller_test.rb
+++ b/test/functional/issues_controller_test.rb
@@ -78,17 +78,6 @@ class IssuesControllerTest < ActionController::TestCase
     assert_tag :tag => 'a', :content => /Subproject issue/
   end
 
-  def test_index_should_not_list_issues_when_module_disabled
-    EnabledModule.delete_all("name = 'issue_tracking' AND project_id = 1")
-    get :index
-    assert_response :success
-    assert_template 'index.rhtml'
-    assert_not_nil assigns(:issues)
-    assert_nil assigns(:project)
-    assert_no_tag :tag => 'a', :content => /Can't print recipes/
-    assert_tag :tag => 'a', :content => /Subproject issue/
-  end
-
   def test_index_should_list_visible_issues_only
     get :index, :per_page => 100
     assert_response :success
@@ -296,6 +285,27 @@ class IssuesControllerTest < ActionController::TestCase
                                     :parent => { :tag => 'select', :attributes => { :id => "selected_columns" } }
   end
 
+  def test_index_without_project_should_implicitly_add_project_column_to_default_columns
+    Setting.issue_list_default_columns = ['tracker', 'subject', 'assigned_to']
+    get :index, :set_filter => 1
+
+    # query should use specified columns
+    query = assigns(:query)
+    assert_kind_of Query, query
+    assert_equal [:project, :tracker, :subject, :assigned_to], query.columns.map(&:name)
+  end
+
+  def test_index_without_project_and_explicit_default_columns_should_not_add_project_column
+    Setting.issue_list_default_columns = ['tracker', 'subject', 'assigned_to']
+    columns = ['tracker', 'subject', 'assigned_to']
+    get :index, :set_filter => 1, :c => columns
+
+    # query should use specified columns
+    query = assigns(:query)
+    assert_kind_of Query, query
+    assert_equal columns.map(&:to_sym), query.columns.map(&:name)
+  end
+
   def test_index_with_custom_field_column
     columns = %w(tracker subject cf_2)
     get :index, :set_filter => 1, :c => columns
@@ -1258,7 +1268,7 @@ class IssuesControllerTest < ActionController::TestCase
       :attributes => {:name => "issue[custom_field_values][#{field.id}]"},
       :children => {
         :only => {:tag => 'option'},
-        :count => Project.find(1).versions.count + 1
+        :count => Project.find(1).shared_versions.count + 1
       }
   end
 
diff --git a/test/functional/repositories_git_controller_test.rb b/test/functional/repositories_git_controller_test.rb
index 36d0c2a..5da63f4 100644
--- a/test/functional/repositories_git_controller_test.rb
+++ b/test/functional/repositories_git_controller_test.rb
@@ -30,6 +30,14 @@ class RepositoriesGitControllerTest < ActionController::TestCase
   PRJ_ID     = 3
   CHAR_1_HEX = "\xc3\x9c"
 
+  ## Git, Mercurial and CVS path encodings are binary.
+  ## Subversion supports URL encoding for path.
+  ## Redmine Mercurial adapter and extension use URL encoding.
+  ## Git accepts only binary path in command line parameter.
+  ## So, there is no way to use binary command line parameter in JRuby.
+  JRUBY_SKIP     = (RUBY_PLATFORM == 'java')
+  JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
+
   def setup
     @ruby19_non_utf8_pass =
       (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8')
@@ -157,6 +165,8 @@ class RepositoriesGitControllerTest < ActionController::TestCase
     def test_entry_show_latin_1
       if @ruby19_non_utf8_pass
         puts_ruby19_non_utf8_pass()
+      elsif JRUBY_SKIP
+        puts JRUBY_SKIP_STR
       else
         with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
           ['57ca437c', '57ca437c0acbbcb749821fdf3726a1367056d364'].each do |r1|
@@ -313,6 +323,8 @@ class RepositoriesGitControllerTest < ActionController::TestCase
     def test_annotate_latin_1
       if @ruby19_non_utf8_pass
         puts_ruby19_non_utf8_pass()
+      elsif JRUBY_SKIP
+        puts JRUBY_SKIP_STR
       else
         with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
           ['57ca437c', '57ca437c0acbbcb749821fdf3726a1367056d364'].each do |r1|
diff --git a/test/unit/custom_field_test.rb b/test/unit/custom_field_test.rb
index 4d80f5f..d19e890 100644
--- a/test/unit/custom_field_test.rb
+++ b/test/unit/custom_field_test.rb
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -25,6 +25,15 @@ class CustomFieldTest < ActiveSupport::TestCase
     assert field.save
   end
   
+  def test_regexp_validation
+    field = IssueCustomField.new(:name => 'regexp', :field_format => 'text', :regexp => '[a-z0-9')
+    assert !field.save
+    assert_equal I18n.t('activerecord.errors.messages.invalid'), field.errors.on(:regexp)
+    
+    field.regexp = '[a-z0-9]'
+    assert field.save
+  end
+  
   def test_possible_values_should_accept_an_array
     field = CustomField.new
     field.possible_values = ["One value", ""]
diff --git a/test/unit/custom_field_user_format_test.rb b/test/unit/custom_field_version_format_test.rb
similarity index 79%
copy from test/unit/custom_field_user_format_test.rb
copy to test/unit/custom_field_version_format_test.rb
index 8cac300..cebad90 100644
--- a/test/unit/custom_field_user_format_test.rb
+++ b/test/unit/custom_field_version_format_test.rb
@@ -5,72 +5,71 @@
 # modify it under the terms of the GNU General Public License
 # as published by the Free Software Foundation; either version 2
 # of the License, or (at your option) any later version.
-# 
+#
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 require File.expand_path('../../test_helper', __FILE__)
 
-class CustomFieldUserFormatTest < ActiveSupport::TestCase
-  fixtures :custom_fields, :projects, :members, :users, :member_roles, :trackers, :issues
-  
+class CustomFieldVersionFormatTest < ActiveSupport::TestCase
+  fixtures :custom_fields, :projects, :members, :users, :member_roles, :trackers, :issues, :versions
+
   def setup
-    @field = IssueCustomField.create!(:name => 'Tester', :field_format => 'user')
+    @field = IssueCustomField.create!(:name => 'Tester', :field_format => 'version')
   end
-  
+
   def test_possible_values_with_no_arguments
     assert_equal [], @field.possible_values
     assert_equal [], @field.possible_values(nil)
   end
-  
+
   def test_possible_values_with_project_resource
     project = Project.find(1)
     possible_values = @field.possible_values(project.issues.first)
     assert possible_values.any?
-    assert_equal project.users.sort.collect(&:id).map(&:to_s), possible_values
+    assert_equal project.shared_versions.sort.collect(&:id).map(&:to_s), possible_values
   end
-  
+
   def test_possible_values_with_nil_project_resource
-    project = Project.find(1)
     assert_equal [], @field.possible_values(Issue.new)
   end
-  
+
   def test_possible_values_options_with_no_arguments
     assert_equal [], @field.possible_values_options
     assert_equal [], @field.possible_values_options(nil)
   end
-  
+
   def test_possible_values_options_with_project_resource
     project = Project.find(1)
     possible_values_options = @field.possible_values_options(project.issues.first)
     assert possible_values_options.any?
-    assert_equal project.users.sort.map {|u| [u.name, u.id.to_s]}, possible_values_options
+    assert_equal project.shared_versions.sort.map {|u| [u.name, u.id.to_s]}, possible_values_options
   end
-  
+
   def test_possible_values_options_with_array
     projects = Project.find([1, 2])
     possible_values_options = @field.possible_values_options(projects)
     assert possible_values_options.any?
-    assert_equal (projects.first.users & projects.last.users).sort.map {|u| [u.name, u.id.to_s]}, possible_values_options
+    assert_equal (projects.first.shared_versions & projects.last.shared_versions).sort.map {|u| [u.name, u.id.to_s]}, possible_values_options
   end
-  
+
   def test_cast_blank_value
     assert_equal nil, @field.cast_value(nil)
     assert_equal nil, @field.cast_value("")
   end
-  
+
   def test_cast_valid_value
-    user = @field.cast_value("2")
-    assert_kind_of User, user
-    assert_equal User.find(2), user
+    version = @field.cast_value("2")
+    assert_kind_of Version, version
+    assert_equal Version.find(2), version
   end
-  
+
   def test_cast_invalid_value
     assert_equal nil, @field.cast_value("187")
   end
diff --git a/test/unit/helpers/application_helper_test.rb b/test/unit/helpers/application_helper_test.rb
index 9b42c3a..1ac475a 100644
--- a/test/unit/helpers/application_helper_test.rb
+++ b/test/unit/helpers/application_helper_test.rb
@@ -375,6 +375,26 @@ RAW
     to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text) }
   end
 
+  def test_wiki_links_within_local_file_generation_context
+
+    to_test = {
+      # link to a page
+      '[[CookBook documentation]]' => '<a href="CookBook_documentation.html" class="wiki-page">CookBook documentation</a>',
+      '[[CookBook documentation|documentation]]' => '<a href="CookBook_documentation.html" class="wiki-page">documentation</a>',
+      '[[CookBook documentation#One-section]]' => '<a href="CookBook_documentation.html#One-section" class="wiki-page">CookBook documentation</a>',
+      '[[CookBook documentation#One-section|documentation]]' => '<a href="CookBook_documentation.html#One-section" class="wiki-page">documentation</a>',
+      # page that doesn't exist
+      '[[Unknown page]]' => '<a href="Unknown_page.html" class="wiki-page new">Unknown page</a>',
+      '[[Unknown page|404]]' => '<a href="Unknown_page.html" class="wiki-page new">404</a>',
+      '[[Unknown page#anchor]]' => '<a href="Unknown_page.html#anchor" class="wiki-page new">Unknown page</a>',
+      '[[Unknown page#anchor|404]]' => '<a href="Unknown_page.html#anchor" class="wiki-page new">404</a>',
+    }
+
+    @project = Project.find(1)
+
+    to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(text, :wiki_links => :local) }
+  end
+
   def test_html_tags
     to_test = {
       "<div>content</div>" => "<p><div>content</div></p>",
@@ -533,6 +553,43 @@ EXPECTED
     assert_equal expected, textilizable(raw)
   end
 
+  def test_headings_with_special_chars
+    # This test makes sure that the generated anchor names match the expected
+    # ones even if the heading text contains unconventional characters
+    raw = 'h1. Some heading related to version 0.5'
+    anchor = sanitize_anchor_name("Some-heading-related-to-version-0.5")
+    expected = %|<a name="#{anchor}"></a>\n<h1 >Some heading related to version 0.5<a href="##{anchor}" class="wiki-anchor">¶</a></h1>|
+
+    assert_equal expected, textilizable(raw)
+  end
+
+  def test_wiki_links_within_wiki_page_context
+
+    page = WikiPage.find_by_title('Another_page' )
+
+    to_test = {
+      # link to another page
+      '[[CookBook documentation]]' => '<a href="/projects/ecookbook/wiki/CookBook_documentation" class="wiki-page">CookBook documentation</a>',
+      '[[CookBook documentation|documentation]]' => '<a href="/projects/ecookbook/wiki/CookBook_documentation" class="wiki-page">documentation</a>',
+      '[[CookBook documentation#One-section]]' => '<a href="/projects/ecookbook/wiki/CookBook_documentation#One-section" class="wiki-page">CookBook documentation</a>',
+      '[[CookBook documentation#One-section|documentation]]' => '<a href="/projects/ecookbook/wiki/CookBook_documentation#One-section" class="wiki-page">documentation</a>',
+      # link to the current page
+      '[[Another page]]' => '<a href="/projects/ecookbook/wiki/Another_page" class="wiki-page">Another page</a>',
+      '[[Another page|Page]]' => '<a href="/projects/ecookbook/wiki/Another_page" class="wiki-page">Page</a>',
+      '[[Another page#anchor]]' => '<a href="#anchor" class="wiki-page">Another page</a>',
+      '[[Another page#anchor|Page]]' => '<a href="#anchor" class="wiki-page">Page</a>',
+      # page that doesn't exist
+      '[[Unknown page]]' => '<a href="/projects/ecookbook/wiki/Unknown_page" class="wiki-page new">Unknown page</a>',
+      '[[Unknown page|404]]' => '<a href="/projects/ecookbook/wiki/Unknown_page" class="wiki-page new">404</a>',
+      '[[Unknown page#anchor]]' => '<a href="/projects/ecookbook/wiki/Unknown_page#anchor" class="wiki-page new">Unknown page</a>',
+      '[[Unknown page#anchor|404]]' => '<a href="/projects/ecookbook/wiki/Unknown_page#anchor" class="wiki-page new">404</a>',
+    }
+
+    @project = Project.find(1)
+
+    to_test.each { |text, result| assert_equal "<p>#{result}</p>", textilizable(WikiContent.generate!( :text => text, :page => page ), :text) }
+  end
+
   def test_table_of_content
     raw = <<-RAW
 {{toc}}
diff --git a/test/unit/issue_nested_set_test.rb b/test/unit/issue_nested_set_test.rb
index 6cbc444..103787a 100644
--- a/test/unit/issue_nested_set_test.rb
+++ b/test/unit/issue_nested_set_test.rb
@@ -252,6 +252,20 @@ class IssueNestedSetTest < ActiveSupport::TestCase
     root = Issue.find(root.id)
     assert root.leaf?, "Root issue is not a leaf (lft: #{root.lft}, rgt: #{root.rgt})"
   end
+  
+  def test_destroy_issue_with_grand_child
+    parent = create_issue!
+    issue = create_issue!(:parent_issue_id => parent.id)
+    child = create_issue!(:parent_issue_id => issue.id)
+    grandchild1 = create_issue!(:parent_issue_id => child.id)
+    grandchild2 = create_issue!(:parent_issue_id => child.id)
+    
+    assert_difference 'Issue.count', -4 do
+      Issue.find(issue.id).destroy
+      parent.reload
+      assert_equal [1, 2], [parent.lft, parent.rgt]
+    end
+  end
 
   def test_parent_priority_should_be_the_highest_child_priority
     parent = create_issue!(:priority => IssuePriority.find_by_name('Normal'))
diff --git a/test/unit/issue_status_test.rb b/test/unit/issue_status_test.rb
index bc6535e..3939f92 100644
--- a/test/unit/issue_status_test.rb
+++ b/test/unit/issue_status_test.rb
@@ -83,11 +83,11 @@ class IssueStatusTest < ActiveSupport::TestCase
     assert_equal [2], status.new_statuses_allowed_to([role], tracker, false, false).map(&:id)
     assert_equal [2], status.find_new_statuses_allowed_to([role], tracker, false, false).map(&:id)
     
-    assert_equal [2, 3], status.new_statuses_allowed_to([role], tracker, true, false).map(&:id)
-    assert_equal [2, 3], status.find_new_statuses_allowed_to([role], tracker, true, false).map(&:id)
+    assert_equal [2, 3, 5], status.new_statuses_allowed_to([role], tracker, true, false).map(&:id)
+    assert_equal [2, 3, 5], status.find_new_statuses_allowed_to([role], tracker, true, false).map(&:id)
     
-    assert_equal [2, 4], status.new_statuses_allowed_to([role], tracker, false, true).map(&:id)
-    assert_equal [2, 4], status.find_new_statuses_allowed_to([role], tracker, false, true).map(&:id)
+    assert_equal [2, 4, 5], status.new_statuses_allowed_to([role], tracker, false, true).map(&:id)
+    assert_equal [2, 4, 5], status.find_new_statuses_allowed_to([role], tracker, false, true).map(&:id)
     
     assert_equal [2, 3, 4, 5], status.new_statuses_allowed_to([role], tracker, true, true).map(&:id)
     assert_equal [2, 3, 4, 5], status.find_new_statuses_allowed_to([role], tracker, true, true).map(&:id)
diff --git a/test/unit/issue_test.rb b/test/unit/issue_test.rb
index b19ddaa..d19c945 100644
--- a/test/unit/issue_test.rb
+++ b/test/unit/issue_test.rb
@@ -293,10 +293,10 @@ class IssueTest < ActiveSupport::TestCase
     assert_equal [1, 2], issue.new_statuses_allowed_to(user).map(&:id)
 
     issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1, :author => user)
-    assert_equal [1, 2, 3], issue.new_statuses_allowed_to(user).map(&:id)
+    assert_equal [1, 2, 3, 5], issue.new_statuses_allowed_to(user).map(&:id)
 
     issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1, :assigned_to => user)
-    assert_equal [1, 2, 4], issue.new_statuses_allowed_to(user).map(&:id)
+    assert_equal [1, 2, 4, 5], issue.new_statuses_allowed_to(user).map(&:id)
 
     issue = Issue.generate!(:tracker => tracker, :status => status, :project_id => 1, :author => user, :assigned_to => user)
     assert_equal [1, 2, 3, 4, 5], issue.new_statuses_allowed_to(user).map(&:id)
@@ -674,6 +674,15 @@ class IssueTest < ActiveSupport::TestCase
       assert issue.assignable_users.include?(non_project_member)
     end
 
+    should "include the current assignee" do
+      project = Project.find(1)
+      user = User.generate!
+      issue = Issue.generate_for_project!(project, :assigned_to => user)
+      user.lock!
+
+      assert Issue.find(issue.id).assignable_users.include?(user)
+    end
+
     should "not show the issue author twice" do
       assignable_user_ids = Issue.find(1).assignable_users.collect(&:id)
       assert_equal 2, assignable_user_ids.length
diff --git a/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb b/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb
index 42cc780..2c7fd89 100644
--- a/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb
+++ b/test/unit/lib/redmine/scm/adapters/git_adapter_test.rb
@@ -20,6 +20,14 @@ begin
     # WINDOWS_PASS = Redmine::Platform.mswin?
     WINDOWS_PASS = false
 
+    ## Git, Mercurial and CVS path encodings are binary.
+    ## Subversion supports URL encoding for path.
+    ## Redmine Mercurial adapter and extension use URL encoding.
+    ## Git accepts only binary path in command line parameter.
+    ## So, there is no way to use binary command line parameter in JRuby.
+    JRUBY_SKIP     = (RUBY_PLATFORM == 'java')
+    JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
+
     if File.directory?(REPOSITORY_PATH)
       def setup
         adapter_class = Redmine::Scm::Adapters::GitAdapter
@@ -262,6 +270,8 @@ begin
       def test_latin_1_path
         if WINDOWS_PASS
           #
+        elsif JRUBY_SKIP
+          puts JRUBY_SKIP_STR
         else
           p2 = "latin-1-dir/test-#{@char_1}-2.txt"
           ['4fc55c43bf3d3dc2efb66145365ddc17639ce81e', '4fc55c43bf3'].each do |r1|
@@ -322,6 +332,8 @@ begin
       def test_entries_latin_1_dir
         if WINDOWS_PASS
           #
+        elsif JRUBY_SKIP
+          puts JRUBY_SKIP_STR
         else
           entries1 = @adapter.entries("latin-1-dir/test-#{@char_1}-subdir",
                                       '1ca7f5ed')
diff --git a/test/unit/lib/redmine/scm/adapters/mercurial_adapter_test.rb b/test/unit/lib/redmine/scm/adapters/mercurial_adapter_test.rb
index 99315df..1640836 100644
--- a/test/unit/lib/redmine/scm/adapters/mercurial_adapter_test.rb
+++ b/test/unit/lib/redmine/scm/adapters/mercurial_adapter_test.rb
@@ -56,12 +56,14 @@ begin
       end
 
       def test_template_path
-        to_test = { [0,9,5]  => "0.9.5",
-                    [1,0]    => "1.0",
+        to_test = {
+                    [1,2]    => "1.0",
                     []       => "1.0",
-                    [1,0,1]  => "1.0",
+                    [1,2,1]  => "1.0",
                     [1,7]    => "1.0",
-                    [1,7,1]  => "1.0" }
+                    [1,7,1]  => "1.0",
+                    [2,0]    => "1.0",
+                   }
         to_test.each do |v, template|
           test_template_path_for(v, template)
         end
@@ -317,17 +319,21 @@ begin
           assert_equal 1, nib1.size
           case bra
             when 'branch (1)[2]&,%.-3_4'
-              assert_equal 3, nib0.size
-              assert_equal nib0[0], 'afc61e85bde7'
-              nib2 = @adapter.nodes_in_branch(bra, :limit => 2)
-              assert_equal 2, nib2.size
-              assert_equal nib2[1], '933ca60293d7'
+              if @adapter.class.client_version_above?([1, 6])
+                assert_equal 3, nib0.size
+                assert_equal nib0[0], 'afc61e85bde7'
+                nib2 = @adapter.nodes_in_branch(bra, :limit => 2)
+                assert_equal 2, nib2.size
+                assert_equal nib2[1], '933ca60293d7'
+              end
             when @branch_char_1
-              assert_equal 2, nib0.size
-              assert_equal nib0[1], '08ff3227303e'
-              nib2 = @adapter.nodes_in_branch(bra, :limit => 1)
-              assert_equal 1, nib2.size
-              assert_equal nib2[0], '7bbf4c738e71'
+              if @adapter.class.client_version_above?([1, 6])
+                assert_equal 2, nib0.size
+                assert_equal nib0[1], '08ff3227303e'
+                nib2 = @adapter.nodes_in_branch(bra, :limit => 1)
+                assert_equal 1, nib2.size
+                assert_equal nib2[0], '7bbf4c738e71'
+              end
           end
         end
       end
diff --git a/test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb b/test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb
index fa5f8ad..89e3622 100644
--- a/test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb
+++ b/test/unit/lib/redmine/wiki_formatting/textile_formatter_test.rb
@@ -1,16 +1,16 @@
 # Redmine - project management software
-# Copyright (C) 2006-2010  Jean-Philippe Lang
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
 # as published by the Free Software Foundation; either version 2
 # of the License, or (at your option) any later version.
-# 
+#
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
@@ -22,7 +22,7 @@ class Redmine::WikiFormatting::TextileFormatterTest < HelperTestCase
   def setup
     @formatter = Redmine::WikiFormatting::Textile::Formatter
   end
-  
+
   MODIFIERS = {
     "*" => 'strong', # bold
     "_" => 'em',     # italic
@@ -31,7 +31,7 @@ class Redmine::WikiFormatting::TextileFormatterTest < HelperTestCase
     "^" => 'sup',    # superscript
     "~" => 'sub'     # subscript
   }
-  
+
   def test_modifiers
     assert_html_output(
       '*bold*'                => '<strong>bold</strong>',
@@ -46,7 +46,7 @@ class Redmine::WikiFormatting::TextileFormatterTest < HelperTestCase
       '*(foo)two words*'      => '<strong class="foo">two words</strong>'
     )
   end
-  
+
   def test_modifiers_combination
     MODIFIERS.each do |m1, tag1|
       MODIFIERS.each do |m2, tag2|
@@ -57,7 +57,7 @@ class Redmine::WikiFormatting::TextileFormatterTest < HelperTestCase
       end
     end
   end
-  
+
   def test_inline_code
     assert_html_output(
       'this is @some code@'      => 'this is <code>some code</code>',
@@ -76,14 +76,14 @@ class Redmine::WikiFormatting::TextileFormatterTest < HelperTestCase
       'h1. 2009\02\09'      => '<h1>2009\02\09</h1>'
     }, false)
   end
-  
+
   def test_double_dashes_should_not_strikethrough
     assert_html_output(
       'double -- dashes -- test'  => 'double -- dashes -- test',
       'double -- *dashes* -- test'  => 'double -- <strong>dashes</strong> -- test'
     )
   end
-  
+
   def test_acronyms
     assert_html_output(
       'this is an acronym: GPL(General Public License)' => 'this is an acronym: <acronym title="General Public License">GPL</acronym>',
@@ -91,7 +91,7 @@ class Redmine::WikiFormatting::TextileFormatterTest < HelperTestCase
       'GPL(This is a double-quoted "title")' => '<acronym title="This is a double-quoted "title"">GPL</acronym>'
     )
   end
-  
+
   def test_blockquote
     # orig raw text
     raw = <<-RAW
@@ -108,7 +108,7 @@ John said:
 
 He's right.
 RAW
-    
+
     # expected html
     expected = <<-EXPECTED
 <p>John said:</p>
@@ -128,10 +128,10 @@ Nullam commodo metus accumsan nulla. Curabitur lobortis dui id dolor.
 </blockquote>
 <p>He's right.</p>
 EXPECTED
-    
+
     assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '')
   end
-  
+
   def test_table
     raw = <<-RAW
 This is a table with empty cells:
@@ -153,7 +153,7 @@ EXPECTED
 
     assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '')
   end
-  
+
   def test_table_with_line_breaks
     raw = <<-RAW
 This is a table with line breaks:
@@ -192,19 +192,26 @@ EXPECTED
 
     assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '')
   end
-  
+
   def test_textile_should_not_mangle_brackets
     assert_equal '<p>[msg1][msg2]</p>', to_html('[msg1][msg2]')
   end
-  
+
+  def test_textile_should_escape_image_urls
+    # this is onclick="alert('XSS');" in encoded form
+    raw = '!/images/comment.png"onclick=&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x27;&#x58;&#x53;&#x53;&#x27;&#x29;;&#x22;!'
+    expected = '<p><img src="/images/comment.png"onclick=&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x27;&#x58;&#x53;&#x53;&#x27;&#x29;;&#x22;" alt="" /></p>'
+    assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '')
+  end
+
   private
-  
+
   def assert_html_output(to_test, expect_paragraph = true)
     to_test.each do |text, expected|
       assert_equal(( expect_paragraph ? "<p>#{expected}</p>" : expected ), @formatter.new(text).to_html, "Formatting the following text failed:\n===\n#{text}\n===\n")
     end
   end
-  
+
   def to_html(text)
     @formatter.new(text).to_html
   end
diff --git a/test/unit/mail_handler_test.rb b/test/unit/mail_handler_test.rb
index 2ead039..8ed3adf 100644
--- a/test/unit/mail_handler_test.rb
+++ b/test/unit/mail_handler_test.rb
@@ -278,6 +278,16 @@ class MailHandlerTest < ActiveSupport::TestCase
     assert_kind_of Issue, issue
     assert_equal tracker, issue.tracker
   end
+  
+  def test_add_issue_from_apple_mail
+    issue = submit_email('apple_mail_with_attachment.eml', :issue => {:project => 'ecookbook'})
+    assert_kind_of Issue, issue
+    assert_equal 1, issue.attachments.size
+    
+    attachment = issue.attachments.first
+    assert_equal 'paella.jpg', attachment.filename
+    assert_equal 10790, attachment.filesize
+  end
 
   def test_should_ignore_emails_from_emission_address
     Role.anonymous.add_permission!(:add_issues)
diff --git a/test/unit/query_test.rb b/test/unit/query_test.rb
index 27a0a37..abaf0be 100644
--- a/test/unit/query_test.rb
+++ b/test/unit/query_test.rb
@@ -356,7 +356,21 @@ class QueryTest < ActiveSupport::TestCase
       q.issues(:conditions => "foo = 1")
     end
   end
-  
+
+  def test_issue_count
+    q = Query.new(:name => '_')
+    issue_count = q.issue_count
+    assert_equal q.issues.size, issue_count
+  end
+
+  def test_issue_count_with_archived_issues
+    p = Project.generate!( :status => Project::STATUS_ARCHIVED )
+    i = Issue.generate!( :project => p, :tracker => p.trackers.first )
+    assert !i.visible?
+
+    test_issue_count
+  end
+
   def test_issue_count_by_association_group
     q = Query.new(:name => '_', :group_by => 'assigned_to')
     count_by_group = q.issue_count_by_group
diff --git a/test/unit/repository_git_test.rb b/test/unit/repository_git_test.rb
index 3df0231..e859413 100644
--- a/test/unit/repository_git_test.rb
+++ b/test/unit/repository_git_test.rb
@@ -33,6 +33,14 @@ class RepositoryGitTest < ActiveSupport::TestCase
   # WINDOWS_PASS = Redmine::Platform.mswin?
   WINDOWS_PASS = false
 
+  ## Git, Mercurial and CVS path encodings are binary.
+  ## Subversion supports URL encoding for path.
+  ## Redmine Mercurial adapter and extension use URL encoding.
+  ## Git accepts only binary path in command line parameter.
+  ## So, there is no way to use binary command line parameter in JRuby.
+  JRUBY_SKIP     = (RUBY_PLATFORM == 'java')
+  JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
+
   if File.directory?(REPOSITORY_PATH)
     def setup
       klass = Repository::Git
@@ -308,24 +316,30 @@ class RepositoryGitTest < ActiveSupport::TestCase
               '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
           ], changesets.collect(&:revision)
 
-      # latin-1 encoding path
-      changesets = @repository.latest_changesets(
-                    "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89')
-      assert_equal [
+      if JRUBY_SKIP
+        puts JRUBY_SKIP_STR
+      else
+        # latin-1 encoding path
+        changesets = @repository.latest_changesets(
+                      "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89')
+        assert_equal [
               '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
               '4fc55c43bf3d3dc2efb66145365ddc17639ce81e',
           ], changesets.collect(&:revision)
 
-      changesets = @repository.latest_changesets(
+        changesets = @repository.latest_changesets(
                     "latin-1-dir/test-#{@char_1}-2.txt", '64f1f3e89', 1)
-      assert_equal [
+        assert_equal [
               '64f1f3e89ad1cb57976ff0ad99a107012ba3481d',
           ], changesets.collect(&:revision)
+      end
     end
 
     def test_latest_changesets_latin_1_dir
       if WINDOWS_PASS
         #
+      elsif JRUBY_SKIP
+        puts JRUBY_SKIP_STR
       else
         @repository.fetch_changesets
         @repository.reload
diff --git a/test/unit/repository_mercurial_test.rb b/test/unit/repository_mercurial_test.rb
index 6b79f76..4584b1e 100644
--- a/test/unit/repository_mercurial_test.rb
+++ b/test/unit/repository_mercurial_test.rb
@@ -158,8 +158,10 @@ class RepositoryMercurialTest < ActiveSupport::TestCase
       assert_equal %w|4 3|, changesets.collect(&:revision)
 
       # named branch
-      changesets = @repository.latest_changesets('', @branch_char_1)
-      assert_equal %w|27 26|, changesets.collect(&:revision)
+      if @repository.scm.class.client_version_above?([1, 6])
+        changesets = @repository.latest_changesets('', @branch_char_1)
+        assert_equal %w|27 26|, changesets.collect(&:revision)
+      end
 
       changesets = @repository.latest_changesets("latin-1-dir/test-#{@char_1}-subdir", @branch_char_1)
       assert_equal %w|27|, changesets.collect(&:revision)
diff --git a/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb b/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb
index f46fb43..fcf00b3 100644
--- a/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb
+++ b/vendor/plugins/awesome_nested_set/lib/awesome_nested_set.rb
@@ -446,16 +446,16 @@ module CollectiveIdea #:nodoc:
         def prune_from_tree
           return if right.nil? || left.nil? || leaf? || !self.class.exists?(id)
 
-          delete_method = acts_as_nested_set_options[:dependent] == :destroy ?
-            :destroy_all : :delete_all
-
-          # TODO: should destroy children (not descendants) when deleted_method is :destroy_all
           self.class.base_class.transaction do
             reload_nested_set
-            nested_set_scope.send(delete_method,
-              ["#{quoted_left_column_name} > ? AND #{quoted_right_column_name} < ?",
-                left, right]
-            )
+            if acts_as_nested_set_options[:dependent] == :destroy
+              children.each(&:destroy)
+            else
+              nested_set_scope.send(:delete_all,
+                ["#{quoted_left_column_name} > ? AND #{quoted_right_column_name} < ?",
+                  left, right]
+              )
+            end
             reload_nested_set
             diff = right - left + 1
             nested_set_scope.update_all(

-- 
redmine.git



More information about the Pkg-ruby-extras-commits mailing list