[DRE-commits] r4194 - in trunk/redmine/debian: . patches po

Jérémy Lal kapouer-guest at alioth.debian.org
Tue Sep 22 22:56:46 UTC 2009


Author: kapouer-guest
Date: 2009-09-22 22:56:46 +0000 (Tue, 22 Sep 2009)
New Revision: 4194

Added:
   trunk/redmine/debian/patches/changeset_r2886_r2887.diff
Removed:
   trunk/redmine/debian/patches/changeset_r2888.diff
   trunk/redmine/debian/patches/changeset_r2889.diff
   trunk/redmine/debian/patches/changeset_r2891.diff
   trunk/redmine/debian/patches/changeset_r2892.diff
   trunk/redmine/debian/patches/changeset_r2893.diff
   trunk/redmine/debian/patches/changeset_r2894.diff
Modified:
   trunk/redmine/debian/README.source
   trunk/redmine/debian/changelog
   trunk/redmine/debian/config
   trunk/redmine/debian/patches/series
   trunk/redmine/debian/po/fr.po
   trunk/redmine/debian/po/templates.pot
   trunk/redmine/debian/postinst
   trunk/redmine/debian/postrm
   trunk/redmine/debian/preinst
   trunk/redmine/debian/templates
Log:
Fixes some dash troubles.
Provide automatic migration from mentors redmine package, to default instance.
Instead of applying patches to follow upstream updates, apply reversed patches to undo revisions that make use of rails 2.3.

Modified: trunk/redmine/debian/README.source
===================================================================
--- trunk/redmine/debian/README.source	2009-09-22 22:56:39 UTC (rev 4193)
+++ trunk/redmine/debian/README.source	2009-09-22 22:56:46 UTC (rev 4194)
@@ -5,11 +5,10 @@
 Notes from a discussion with upstream author:
 Redmine 0.8.x targets rails 2.1.2
 Redmine 0.9 targets rails 2.3
-Redmine trunk revision 2886 targets rails 2.2.3,
-UPSTREAM TRUNK MIGRATION TO RAILS 2.3 HAS STARTED.
+UPSTREAM TRUNK MIGRATION TO RAILS 2.3 HAS STARTED SINCE REVISION 2886
 Until rails 2.3 enters debian, redmine debian package will keep using rails 2.2.3.
-Revisions > 2886 will be manually added to debian/patches, provided they're
-compatible with rails 2.2
+All upstream revisions concerning rails 2.3 will be ignored, and either patched,
+either reverse-patched.
 
 Please note the diff from the pristine source contains only the debian/ folder.
 

Modified: trunk/redmine/debian/changelog
===================================================================
--- trunk/redmine/debian/changelog	2009-09-22 22:56:39 UTC (rev 4193)
+++ trunk/redmine/debian/changelog	2009-09-22 22:56:46 UTC (rev 4194)
@@ -1,4 +1,4 @@
-redmine (0.9.0~svn2886-1) unstable; urgency=low
+redmine (0.9.0~svn2898-1) unstable; urgency=low
 
   * Initial release (Closes: #478741)
 

Modified: trunk/redmine/debian/config
===================================================================
--- trunk/redmine/debian/config	2009-09-22 22:56:39 UTC (rev 4193)
+++ trunk/redmine/debian/config	2009-09-22 22:56:46 UTC (rev 4194)
@@ -33,8 +33,9 @@
 	if [ $STATE -eq 1 ]; then
 		# upgrade debconf db if we detect an old redmine version (<= 0.9.0~svn2819) was installed
 		# detection
-		db_get redmine/dbconfig-install || true
-		if [ $? -eq 0 ]; then
+		fCode=0
+		db_get redmine/dbconfig-install || fCode=$?
+		if [ $fCode -eq 0 ]; then
 			# remove deprecated debconf templates
 			db_unregister redmine/reconfigure-webserver || true
 			db_unregister redmine/restart-webserver || true
@@ -43,24 +44,46 @@
 			# get old questions
 			fOldQuest=$(debconf-show redmine)
 			OLD_IFS=$IFS
-			IFS="\n"
+			# ugly, if somebody can tell me how to escape \n, please send me an email to kapouer at melix.org
+			fNewline="
+"
+			IFS=$fNewline
 			# for each line, we want to get the three fields, seen, question, value
 			for lLine in $fOldQuest; do
+				IFS=$OLD_IFS
 				lSeen="${lLine%% *}"
-				if [ "$lSeen" = "*" ]; then lSeen="true"; else lSeen="false";fi
-				lStr="${lLine#${lSeen} }"
-				lName="${lStr%%: *}"
-				lVal="${lStr#*: }"
-				lNewname="redmine/instances/default${lName#redmine}"
-				db_set "$lNewname" "$lVal"
-				db_set "$lNewname" seen "$lSeen"
-				db_unregister "$lName"
+				if [ "$lSeen" = "*" ]; then
+					lSeen="true"
+					lStr="${lLine#\* }"
+				else
+					lSeen="false"
+					lStr="${lLine#  }"
+				fi
+				lName="${lStr%%\:*}"
+				if [ "${lName#redmine/instances/}" = "$lName" ]; then
+					fCode=0
+					db_get $lName || fCode=$?
+					lVal=""
+					if [ $fCode -eq 0 ]; then
+						lVal="$RET"
+					fi
+					lNewname="redmine/instances/default${lName#redmine}"
+					if [ -n "$lVal" ]; then
+						db_register "$lName" "$lNewname"
+						db_set "$lNewname" "$lVal"
+						db_fset "$lNewname" seen "$lSeen"
+					fi
+					if [ "$lName" != "redmine/default-language" ]; then
+						# we need redmine/default-language later
+						db_unregister "$lName"
+					fi
+				fi
+				IFS=$fNewline
 			done
 			IFS=$OLD_IFS
 			
 			# setup default as an old instance
 			db_set redmine/current-instances "default"
-			db_set redmine/migrate "true"
 			db_input high redmine/notify-migration || true
 		fi
 		db_get redmine/current-instances || true
@@ -106,7 +129,18 @@
 				dbc_dbtypes="sqlite3, pgsql, mysql"
 				dbc_authmethod_user="password"
 				dbc_dbuser=redmine
-				dbc_dbname=redmine-$fInstance
+				# use same dbname if one has been registered in debconf before
+				# this is also needed for migration from version <= 0.9.0~svn2819
+				db_get redmine/instances/$fInstance/db/dbname || true
+				if [ -n "$RET" ]; then
+					dbc_dbname="$RET"
+				else
+					dbc_dbname=redmine-$fInstance
+				fi
+				db_get redmine/instances/$fInstance/db/basepath || true
+				if [ -n "$RET" ]; then
+					dbc_basepath="$RET"
+				fi
 				. /usr/share/dbconfig-common/dpkg/config
 				dbc_go redmine/instances/$fInstance $@
 				if [ $? -ne 0 ] ; then

Added: trunk/redmine/debian/patches/changeset_r2886_r2887.diff
===================================================================
--- trunk/redmine/debian/patches/changeset_r2886_r2887.diff	                        (rev 0)
+++ trunk/redmine/debian/patches/changeset_r2886_r2887.diff	2009-09-22 22:56:46 UTC (rev 4194)
@@ -0,0 +1,5710 @@
+Unpatches revision 2887, since it introduces rails 2.3 dependencies.
+diff -Nur redmine-0.9.0~svn2898/app/controllers/application_controller.rb redmine-0.9.0~svn2898.unpatched/app/controllers/application_controller.rb
+--- redmine-0.9.0~svn2898/app/controllers/application_controller.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/app/controllers/application_controller.rb	2009-09-21 11:03:27.991893602 +0200
+@@ -1,251 +0,0 @@
+-# redMine - project management software
+-# Copyright (C) 2006-2007  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.
+-
+-require 'uri'
+-require 'cgi'
+-
+-class ApplicationController < ActionController::Base
+-  include Redmine::I18n
+-
+-  layout 'base'
+-  
+-  before_filter :user_setup, :check_if_login_required, :set_localization
+-  filter_parameter_logging :password
+-  
+-  include Redmine::MenuManager::MenuController
+-  helper Redmine::MenuManager::MenuHelper
+-  
+-  REDMINE_SUPPORTED_SCM.each do |scm|
+-    require_dependency "repository/#{scm.underscore}"
+-  end
+-  
+-  def user_setup
+-    # Check the settings cache for each request
+-    Setting.check_cache
+-    # Find the current user
+-    User.current = find_current_user
+-  end
+-  
+-  # Returns the current user or nil if no user is logged in
+-  # and starts a session if needed
+-  def find_current_user
+-    if session[:user_id]
+-      # existing session
+-      (User.active.find(session[:user_id]) rescue nil)
+-    elsif cookies[:autologin] && Setting.autologin?
+-      # auto-login feature starts a new session
+-      user = User.try_to_autologin(cookies[:autologin])
+-      session[:user_id] = user.id if user
+-      user
+-    elsif params[:format] == 'atom' && params[:key] && accept_key_auth_actions.include?(params[:action])
+-      # RSS key authentication does not start a session
+-      User.find_by_rss_key(params[:key])
+-    end
+-  end
+-  
+-  # Sets the logged in user
+-  def logged_user=(user)
+-    if user && user.is_a?(User)
+-      User.current = user
+-      session[:user_id] = user.id
+-    else
+-      User.current = User.anonymous
+-      session[:user_id] = nil
+-    end
+-  end
+-  
+-  # check if login is globally required to access the application
+-  def check_if_login_required
+-    # no check needed if user is already logged in
+-    return true if User.current.logged?
+-    require_login if Setting.login_required?
+-  end 
+-  
+-  def set_localization
+-    lang = nil
+-    if User.current.logged?
+-      lang = find_language(User.current.language)
+-    end
+-    if lang.nil? && request.env['HTTP_ACCEPT_LANGUAGE']
+-      accept_lang = parse_qvalues(request.env['HTTP_ACCEPT_LANGUAGE']).first.downcase
+-      if !accept_lang.blank?
+-        lang = find_language(accept_lang) || find_language(accept_lang.split('-').first)
+-      end
+-    end
+-    lang ||= Setting.default_language
+-    set_language_if_valid(lang)
+-  end
+-  
+-  def require_login
+-    if !User.current.logged?
+-      redirect_to :controller => "account", :action => "login", :back_url => url_for(params)
+-      return false
+-    end
+-    true
+-  end
+-
+-  def require_admin
+-    return unless require_login
+-    if !User.current.admin?
+-      render_403
+-      return false
+-    end
+-    true
+-  end
+-  
+-  def deny_access
+-    User.current.logged? ? render_403 : require_login
+-  end
+-
+-  # Authorize the user for the requested action
+-  def authorize(ctrl = params[:controller], action = params[:action], global = false)
+-    allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @project, :global => global)
+-    allowed ? true : deny_access
+-  end
+-
+-  # Authorize the user for the requested action outside a project
+-  def authorize_global(ctrl = params[:controller], action = params[:action], global = true)
+-    authorize(ctrl, action, global)
+-  end
+-  
+-  # make sure that the user is a member of the project (or admin) if project is private
+-  # used as a before_filter for actions that do not require any particular permission on the project
+-  def check_project_privacy
+-    if @project && @project.active?
+-      if @project.is_public? || User.current.member_of?(@project) || User.current.admin?
+-        true
+-      else
+-        User.current.logged? ? render_403 : require_login
+-      end
+-    else
+-      @project = nil
+-      render_404
+-      false
+-    end
+-  end
+-
+-  def redirect_back_or_default(default)
+-    back_url = CGI.unescape(params[:back_url].to_s)
+-    if !back_url.blank?
+-      begin
+-        uri = URI.parse(back_url)
+-        # do not redirect user to another host or to the login or register page
+-        if (uri.relative? || (uri.host == request.host)) && !uri.path.match(%r{/(login|account/register)})
+-          redirect_to(back_url) and return
+-        end
+-      rescue URI::InvalidURIError
+-        # redirect to default
+-      end
+-    end
+-    redirect_to default
+-  end
+-  
+-  def render_403
+-    @project = nil
+-    render :template => "common/403", :layout => !request.xhr?, :status => 403
+-    return false
+-  end
+-    
+-  def render_404
+-    render :template => "common/404", :layout => !request.xhr?, :status => 404
+-    return false
+-  end
+-  
+-  def render_error(msg)
+-    flash.now[:error] = msg
+-    render :text => '', :layout => !request.xhr?, :status => 500
+-  end
+-  
+-  def render_feed(items, options={})    
+-    @items = items || []
+-    @items.sort! {|x,y| y.event_datetime <=> x.event_datetime }
+-    @items = @items.slice(0, Setting.feeds_limit.to_i)
+-    @title = options[:title] || Setting.app_title
+-    render :template => "common/feed.atom.rxml", :layout => false, :content_type => 'application/atom+xml'
+-  end
+-  
+-  def self.accept_key_auth(*actions)
+-    actions = actions.flatten.map(&:to_s)
+-    write_inheritable_attribute('accept_key_auth_actions', actions)
+-  end
+-  
+-  def accept_key_auth_actions
+-    self.class.read_inheritable_attribute('accept_key_auth_actions') || []
+-  end
+-  
+-  # TODO: move to model
+-  def attach_files(obj, attachments)
+-    attached = []
+-    unsaved = []
+-    if attachments && attachments.is_a?(Hash)
+-      attachments.each_value do |attachment|
+-        file = attachment['file']
+-        next unless file && file.size > 0
+-        a = Attachment.create(:container => obj, 
+-                              :file => file,
+-                              :description => attachment['description'].to_s.strip,
+-                              :author => User.current)
+-        a.new_record? ? (unsaved << a) : (attached << a)
+-      end
+-      if unsaved.any?
+-        flash[:warning] = l(:warning_attachments_not_saved, unsaved.size)
+-      end
+-    end
+-    attached
+-  end
+-
+-  # Returns the number of objects that should be displayed
+-  # on the paginated list
+-  def per_page_option
+-    per_page = nil
+-    if params[:per_page] && Setting.per_page_options_array.include?(params[:per_page].to_s.to_i)
+-      per_page = params[:per_page].to_s.to_i
+-      session[:per_page] = per_page
+-    elsif session[:per_page]
+-      per_page = session[:per_page]
+-    else
+-      per_page = Setting.per_page_options_array.first || 25
+-    end
+-    per_page
+-  end
+-
+-  # qvalues http header parser
+-  # code taken from webrick
+-  def parse_qvalues(value)
+-    tmp = []
+-    if value
+-      parts = value.split(/,\s*/)
+-      parts.each {|part|
+-        if m = %r{^([^\s,]+?)(?:;\s*q=(\d+(?:\.\d+)?))?$}.match(part)
+-          val = m[1]
+-          q = (m[2] or 1).to_f
+-          tmp.push([val, q])
+-        end
+-      }
+-      tmp = tmp.sort_by{|val, q| -q}
+-      tmp.collect!{|val, q| val}
+-    end
+-    return tmp
+-  rescue
+-    nil
+-  end
+-  
+-  # Returns a string that can be used as filename value in Content-Disposition header
+-  def filename_for_content_disposition(name)
+-    request.env['HTTP_USER_AGENT'] =~ %r{MSIE} ? ERB::Util.url_encode(name) : name
+-  end
+-end
+diff -Nur redmine-0.9.0~svn2898/app/controllers/application.rb redmine-0.9.0~svn2898.unpatched/app/controllers/application.rb
+--- redmine-0.9.0~svn2898/app/controllers/application.rb	1970-01-01 01:00:00.000000000 +0100
++++ redmine-0.9.0~svn2898.unpatched/app/controllers/application.rb	2009-09-21 11:03:27.991893602 +0200
+@@ -0,0 +1,256 @@
++# redMine - project management software
++# Copyright (C) 2006-2007  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.
++
++require 'uri'
++require 'cgi'
++
++class ApplicationController < ActionController::Base
++  include Redmine::I18n
++  
++  # In case the cookie store secret changes
++  rescue_from CGI::Session::CookieStore::TamperedWithCookie do |exception|
++    render :text => 'Your session was invalid and has been reset. Please, reload this page.', :status => 500
++  end
++  
++  layout 'base'
++  
++  before_filter :user_setup, :check_if_login_required, :set_localization
++  filter_parameter_logging :password
++  
++  include Redmine::MenuManager::MenuController
++  helper Redmine::MenuManager::MenuHelper
++  
++  REDMINE_SUPPORTED_SCM.each do |scm|
++    require_dependency "repository/#{scm.underscore}"
++  end
++  
++  def user_setup
++    # Check the settings cache for each request
++    Setting.check_cache
++    # Find the current user
++    User.current = find_current_user
++  end
++  
++  # Returns the current user or nil if no user is logged in
++  # and starts a session if needed
++  def find_current_user
++    if session[:user_id]
++      # existing session
++      (User.active.find(session[:user_id]) rescue nil)
++    elsif cookies[:autologin] && Setting.autologin?
++      # auto-login feature starts a new session
++      user = User.try_to_autologin(cookies[:autologin])
++      session[:user_id] = user.id if user
++      user
++    elsif params[:format] == 'atom' && params[:key] && accept_key_auth_actions.include?(params[:action])
++      # RSS key authentication does not start a session
++      User.find_by_rss_key(params[:key])
++    end
++  end
++  
++  # Sets the logged in user
++  def logged_user=(user)
++    if user && user.is_a?(User)
++      User.current = user
++      session[:user_id] = user.id
++    else
++      User.current = User.anonymous
++      session[:user_id] = nil
++    end
++  end
++  
++  # check if login is globally required to access the application
++  def check_if_login_required
++    # no check needed if user is already logged in
++    return true if User.current.logged?
++    require_login if Setting.login_required?
++  end 
++  
++  def set_localization
++    lang = nil
++    if User.current.logged?
++      lang = find_language(User.current.language)
++    end
++    if lang.nil? && request.env['HTTP_ACCEPT_LANGUAGE']
++      accept_lang = parse_qvalues(request.env['HTTP_ACCEPT_LANGUAGE']).first.downcase
++      if !accept_lang.blank?
++        lang = find_language(accept_lang) || find_language(accept_lang.split('-').first)
++      end
++    end
++    lang ||= Setting.default_language
++    set_language_if_valid(lang)
++  end
++  
++  def require_login
++    if !User.current.logged?
++      redirect_to :controller => "account", :action => "login", :back_url => url_for(params)
++      return false
++    end
++    true
++  end
++
++  def require_admin
++    return unless require_login
++    if !User.current.admin?
++      render_403
++      return false
++    end
++    true
++  end
++  
++  def deny_access
++    User.current.logged? ? render_403 : require_login
++  end
++
++  # Authorize the user for the requested action
++  def authorize(ctrl = params[:controller], action = params[:action], global = false)
++    allowed = User.current.allowed_to?({:controller => ctrl, :action => action}, @project, :global => global)
++    allowed ? true : deny_access
++  end
++
++  # Authorize the user for the requested action outside a project
++  def authorize_global(ctrl = params[:controller], action = params[:action], global = true)
++    authorize(ctrl, action, global)
++  end
++  
++  # make sure that the user is a member of the project (or admin) if project is private
++  # used as a before_filter for actions that do not require any particular permission on the project
++  def check_project_privacy
++    if @project && @project.active?
++      if @project.is_public? || User.current.member_of?(@project) || User.current.admin?
++        true
++      else
++        User.current.logged? ? render_403 : require_login
++      end
++    else
++      @project = nil
++      render_404
++      false
++    end
++  end
++
++  def redirect_back_or_default(default)
++    back_url = CGI.unescape(params[:back_url].to_s)
++    if !back_url.blank?
++      begin
++        uri = URI.parse(back_url)
++        # do not redirect user to another host or to the login or register page
++        if (uri.relative? || (uri.host == request.host)) && !uri.path.match(%r{/(login|account/register)})
++          redirect_to(back_url) and return
++        end
++      rescue URI::InvalidURIError
++        # redirect to default
++      end
++    end
++    redirect_to default
++  end
++  
++  def render_403
++    @project = nil
++    render :template => "common/403", :layout => !request.xhr?, :status => 403
++    return false
++  end
++    
++  def render_404
++    render :template => "common/404", :layout => !request.xhr?, :status => 404
++    return false
++  end
++  
++  def render_error(msg)
++    flash.now[:error] = msg
++    render :text => '', :layout => !request.xhr?, :status => 500
++  end
++  
++  def render_feed(items, options={})    
++    @items = items || []
++    @items.sort! {|x,y| y.event_datetime <=> x.event_datetime }
++    @items = @items.slice(0, Setting.feeds_limit.to_i)
++    @title = options[:title] || Setting.app_title
++    render :template => "common/feed.atom.rxml", :layout => false, :content_type => 'application/atom+xml'
++  end
++  
++  def self.accept_key_auth(*actions)
++    actions = actions.flatten.map(&:to_s)
++    write_inheritable_attribute('accept_key_auth_actions', actions)
++  end
++  
++  def accept_key_auth_actions
++    self.class.read_inheritable_attribute('accept_key_auth_actions') || []
++  end
++  
++  # TODO: move to model
++  def attach_files(obj, attachments)
++    attached = []
++    unsaved = []
++    if attachments && attachments.is_a?(Hash)
++      attachments.each_value do |attachment|
++        file = attachment['file']
++        next unless file && file.size > 0
++        a = Attachment.create(:container => obj, 
++                              :file => file,
++                              :description => attachment['description'].to_s.strip,
++                              :author => User.current)
++        a.new_record? ? (unsaved << a) : (attached << a)
++      end
++      if unsaved.any?
++        flash[:warning] = l(:warning_attachments_not_saved, unsaved.size)
++      end
++    end
++    attached
++  end
++
++  # Returns the number of objects that should be displayed
++  # on the paginated list
++  def per_page_option
++    per_page = nil
++    if params[:per_page] && Setting.per_page_options_array.include?(params[:per_page].to_s.to_i)
++      per_page = params[:per_page].to_s.to_i
++      session[:per_page] = per_page
++    elsif session[:per_page]
++      per_page = session[:per_page]
++    else
++      per_page = Setting.per_page_options_array.first || 25
++    end
++    per_page
++  end
++
++  # qvalues http header parser
++  # code taken from webrick
++  def parse_qvalues(value)
++    tmp = []
++    if value
++      parts = value.split(/,\s*/)
++      parts.each {|part|
++        if m = %r{^([^\s,]+?)(?:;\s*q=(\d+(?:\.\d+)?))?$}.match(part)
++          val = m[1]
++          q = (m[2] or 1).to_f
++          tmp.push([val, q])
++        end
++      }
++      tmp = tmp.sort_by{|val, q| -q}
++      tmp.collect!{|val, q| val}
++    end
++    return tmp
++  rescue
++    nil
++  end
++  
++  # Returns a string that can be used as filename value in Content-Disposition header
++  def filename_for_content_disposition(name)
++    request.env['HTTP_USER_AGENT'] =~ %r{MSIE} ? ERB::Util.url_encode(name) : name
++  end
++end
+diff -Nur redmine-0.9.0~svn2898/app/controllers/repositories_controller.rb redmine-0.9.0~svn2898.unpatched/app/controllers/repositories_controller.rb
+--- redmine-0.9.0~svn2898/app/controllers/repositories_controller.rb	2009-09-20 17:20:22.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/app/controllers/repositories_controller.rb	2009-09-21 11:03:27.995904878 +0200
+@@ -259,7 +259,7 @@
+ 
+   def graph_commits_per_author(repository)
+     commits_by_author = repository.changesets.count(:all, :group => :committer)
+-    commits_by_author.to_a.sort! {|x, y| x.last <=> y.last}
++    commits_by_author.sort! {|x, y| x.last <=> y.last}
+ 
+     changes_by_author = repository.changes.count(:all, :group => :committer)
+     h = changes_by_author.inject({}) {|o, i| o[i.first] = i.last; o}
+diff -Nur redmine-0.9.0~svn2898/app/models/mailer.rb redmine-0.9.0~svn2898.unpatched/app/models/mailer.rb
+--- redmine-0.9.0~svn2898/app/models/mailer.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/app/models/mailer.rb	2009-09-21 11:03:27.991893602 +0200
+@@ -16,7 +16,6 @@
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ class Mailer < ActionMailer::Base
+-  layout 'mailer'
+   helper :application
+   helper :issues
+   helper :custom_fields
+@@ -46,7 +45,6 @@
+     subject "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}] (#{issue.status.name}) #{issue.subject}"
+     body :issue => issue,
+          :issue_url => url_for(:controller => 'issues', :action => 'show', :id => issue)
+-    render_multipart('issue_add', body)
+   end
+ 
+   # Builds a tmail object used to email recipients of the edited issue.
+@@ -73,8 +71,6 @@
+     body :issue => issue,
+          :journal => journal,
+          :issue_url => url_for(:controller => 'issues', :action => 'show', :id => issue)
+-
+-    render_multipart('issue_edit', body)
+   end
+ 
+   def reminder(user, issues, days)
+@@ -84,7 +80,6 @@
+     body :issues => issues,
+          :days => days,
+          :issues_url => url_for(:controller => 'issues', :action => 'index', :set_filter => 1, :assigned_to_id => user.id, :sort_key => 'due_date', :sort_order => 'asc')
+-    render_multipart('reminder', body)
+   end
+ 
+   # Builds a tmail object used to email users belonging to the added document's project.
+@@ -98,7 +93,6 @@
+     subject "[#{document.project.name}] #{l(:label_document_new)}: #{document.title}"
+     body :document => document,
+          :document_url => url_for(:controller => 'documents', :action => 'show', :id => document)
+-    render_multipart('document_added', body)
+   end
+ 
+   # Builds a tmail object used to email recipients of a project when an attachements are added.
+@@ -127,7 +121,6 @@
+     body :attachments => attachments,
+          :added_to => added_to,
+          :added_to_url => added_to_url
+-    render_multipart('attachments_added', body)
+   end
+   
+   # Builds a tmail object used to email recipients of a news' project when a news item is added.
+@@ -142,7 +135,6 @@
+     subject "[#{news.project.name}] #{l(:label_news)}: #{news.title}"
+     body :news => news,
+          :news_url => url_for(:controller => 'news', :action => 'show', :id => news)
+-    render_multipart('news_added', body)
+   end
+ 
+   # Builds a tmail object used to email the specified recipients of the specified message that was posted. 
+@@ -159,7 +151,6 @@
+     subject "[#{message.board.project.name} - #{message.board.name} - msg#{message.root.id}] #{message.subject}"
+     body :message => message,
+          :message_url => url_for(:controller => 'messages', :action => 'show', :board_id => message.board_id, :id => message.root)
+-    render_multipart('message_posted', body)
+   end
+   
+   # Builds a tmail object used to email the recipients of a project of the specified wiki content was added. 
+@@ -176,7 +167,6 @@
+     subject "[#{wiki_content.project.name}] #{l(:mail_subject_wiki_content_added, :page => wiki_content.page.pretty_title)}"
+     body :wiki_content => wiki_content,
+          :wiki_content_url => url_for(:controller => 'wiki', :action => 'index', :id => wiki_content.project, :page => wiki_content.page.title)
+-    render_multipart('wiki_content_added', body)
+   end
+   
+   # Builds a tmail object used to email the recipients of a project of the specified wiki content was updated. 
+@@ -194,7 +184,6 @@
+     body :wiki_content => wiki_content,
+          :wiki_content_url => url_for(:controller => 'wiki', :action => 'index', :id => wiki_content.project, :page => wiki_content.page.title),
+          :wiki_diff_url => url_for(:controller => 'wiki', :action => 'diff', :id => wiki_content.project, :page => wiki_content.page.title, :version => wiki_content.version)
+-    render_multipart('wiki_content_updated', body)
+   end
+ 
+   # Builds a tmail object used to email the specified user their account information.
+@@ -209,7 +198,6 @@
+     body :user => user,
+          :password => password,
+          :login_url => url_for(:controller => 'account', :action => 'login')
+-    render_multipart('account_information', body)
+   end
+ 
+   # Builds a tmail object used to email all active administrators of an account activation request.
+@@ -223,7 +211,6 @@
+     subject l(:mail_subject_account_activation_request, Setting.app_title)
+     body :user => user,
+          :url => url_for(:controller => 'users', :action => 'index', :status => User::STATUS_REGISTERED, :sort_key => 'created_on', :sort_order => 'desc')
+-    render_multipart('account_activation_request', body)
+   end
+ 
+   # Builds a tmail object used to email the specified user that their account was activated by an administrator.
+@@ -237,7 +224,6 @@
+     subject l(:mail_subject_register, Setting.app_title)
+     body :user => user,
+          :login_url => url_for(:controller => 'account', :action => 'login')
+-    render_multipart('account_activated', body)
+   end
+ 
+   def lost_password(token)
+@@ -246,7 +232,6 @@
+     subject l(:mail_subject_lost_password, Setting.app_title)
+     body :token => token,
+          :url => url_for(:controller => 'account', :action => 'lost_password', :token => token.value)
+-    render_multipart('lost_password', body)
+   end
+ 
+   def register(token)
+@@ -255,7 +240,6 @@
+     subject l(:mail_subject_register, Setting.app_title)
+     body :token => token,
+          :url => url_for(:controller => 'account', :action => 'activate', :token => token.value)
+-    render_multipart('register', body)
+   end
+ 
+   def test(user)
+@@ -263,7 +247,6 @@
+     recipients user.mail
+     subject 'Redmine test'
+     body :url => url_for(:controller => 'welcome')
+-    render_multipart('test', body)
+   end
+ 
+   # Overrides default deliver! method to prevent from sending an email
+@@ -344,17 +327,26 @@
+     super
+   end
+ 
+-  # Rails 2.3 has problems rendering implicit multipart messages with
+-  # layouts so this method will wrap an multipart messages with
+-  # explicit parts.
+-  #
+-  # https://rails.lighthouseapp.com/projects/8994/tickets/2338-actionmailer-mailer-views-and-content-type
+-  # https://rails.lighthouseapp.com/projects/8994/tickets/1799-actionmailer-doesnt-set-template_format-when-rendering-layouts
+-  
+-  def render_multipart(method_name, body)
+-    content_type "multipart/alternative"
+-    part :content_type => "text/plain", :body => render(:file => "#{method_name}.text.plain.rhtml", :body => body, :layout => 'mailer.text.plain.erb')
+-    part :content_type => "text/html", :body => render_message("#{method_name}.text.html.rhtml", body) unless Setting.plain_text_mail?
++  # Renders a message with the corresponding layout
++  def render_message(method_name, body)
++    layout = method_name.to_s.match(%r{text\.html\.(rhtml|rxml)}) ? 'layout.text.html.rhtml' : 'layout.text.plain.rhtml'
++    body[:content_for_layout] = render(:file => method_name, :body => body)
++    ActionView::Base.new(template_root, body, self).render(:file => "mailer/#{layout}", :use_full_path => true)
++  end
++
++  # for the case of plain text only
++  def body(*params)
++    value = super(*params)
++    if Setting.plain_text_mail?
++      templates = Dir.glob("#{template_path}/#{@template}.text.plain.{rhtml,erb}")
++      unless String === @body or templates.empty?
++        template = File.basename(templates.first)
++        @body[:content_for_layout] = render(:file => template, :body => @body)
++        @body = ActionView::Base.new(template_root, @body, self).render(:file => "mailer/layout.text.plain.rhtml", :use_full_path => true)
++        return @body
++      end
++    end
++    return value
+   end
+ 
+   # Makes partial rendering work with Rails 1.2 (retro-compatibility)
+diff -Nur redmine-0.9.0~svn2898/app/views/layouts/mailer.text.html.erb redmine-0.9.0~svn2898.unpatched/app/views/layouts/mailer.text.html.erb
+--- redmine-0.9.0~svn2898/app/views/layouts/mailer.text.html.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/app/views/layouts/mailer.text.html.erb	2009-09-21 11:03:27.995904878 +0200
+@@ -1,32 +0,0 @@
+-<html>
+-<head>
+-<style>
+-body {
+-  font-family: Verdana, sans-serif;
+-  font-size: 0.8em;
+-  color:#484848;
+-}
+-h1, h2, h3 { font-family: "Trebuchet MS", Verdana, sans-serif; margin: 0px; }
+-h1 { font-size: 1.2em; }
+-h2, h3 { font-size: 1.1em; }
+-a, a:link, a:visited { color: #2A5685;}
+-a:hover, a:active { color: #c61a1a; }
+-a.wiki-anchor { display: none; }
+-hr {
+-  width: 100%;
+-  height: 1px;
+-  background: #ccc;
+-  border: 0;
+-}
+-.footer {
+-  font-size: 0.8em;
+-  font-style: italic;
+-}
+-</style>
+-</head>
+-<body>
+-<%= yield %>
+-<hr />
+-<span class="footer"><%= Redmine::WikiFormatting.to_html(Setting.text_formatting, Setting.emails_footer) %></span>
+-</body>
+-</html>
+diff -Nur redmine-0.9.0~svn2898/app/views/layouts/mailer.text.plain.erb redmine-0.9.0~svn2898.unpatched/app/views/layouts/mailer.text.plain.erb
+--- redmine-0.9.0~svn2898/app/views/layouts/mailer.text.plain.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/app/views/layouts/mailer.text.plain.erb	2009-09-21 11:03:27.995904878 +0200
+@@ -1,3 +0,0 @@
+-<%= yield %>
+--- 
+-<%= Setting.emails_footer %>
+diff -Nur redmine-0.9.0~svn2898/app/views/mailer/layout.text.html.rhtml redmine-0.9.0~svn2898.unpatched/app/views/mailer/layout.text.html.rhtml
+--- redmine-0.9.0~svn2898/app/views/mailer/layout.text.html.rhtml	1970-01-01 01:00:00.000000000 +0100
++++ redmine-0.9.0~svn2898.unpatched/app/views/mailer/layout.text.html.rhtml	2009-09-21 11:03:27.995904878 +0200
+@@ -0,0 +1,32 @@
++<html>
++<head>
++<style>
++body {
++  font-family: Verdana, sans-serif;
++  font-size: 0.8em;
++  color:#484848;
++}
++h1, h2, h3 { font-family: "Trebuchet MS", Verdana, sans-serif; margin: 0px; }
++h1 { font-size: 1.2em; }
++h2, h3 { font-size: 1.1em; }
++a, a:link, a:visited { color: #2A5685;}
++a:hover, a:active { color: #c61a1a; }
++a.wiki-anchor { display: none; }
++hr {
++  width: 100%;
++  height: 1px;
++  background: #ccc;
++  border: 0;
++}
++.footer {
++  font-size: 0.8em;
++  font-style: italic;
++}
++</style>
++</head>
++<body>
++<%= yield %>
++<hr />
++<span class="footer"><%= Redmine::WikiFormatting.to_html(Setting.text_formatting, Setting.emails_footer) %></span>
++</body>
++</html>
+diff -Nur redmine-0.9.0~svn2898/app/views/mailer/layout.text.plain.rhtml redmine-0.9.0~svn2898.unpatched/app/views/mailer/layout.text.plain.rhtml
+--- redmine-0.9.0~svn2898/app/views/mailer/layout.text.plain.rhtml	1970-01-01 01:00:00.000000000 +0100
++++ redmine-0.9.0~svn2898.unpatched/app/views/mailer/layout.text.plain.rhtml	2009-09-21 11:03:27.995904878 +0200
+@@ -0,0 +1,3 @@
++<%= yield %>
++-- 
++<%= Setting.emails_footer %>
+diff -Nur redmine-0.9.0~svn2898/app/views/settings/_authentication.rhtml redmine-0.9.0~svn2898.unpatched/app/views/settings/_authentication.rhtml
+--- redmine-0.9.0~svn2898/app/views/settings/_authentication.rhtml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/app/views/settings/_authentication.rhtml	2009-09-21 11:03:27.995904878 +0200
+@@ -2,9 +2,7 @@
+ 
+ <div class="box tabular settings">
+ <p><label><%= l(:setting_login_required) %></label>
+-<%= hidden_field_tag 'settings[login_required]', 0 %>
+-<%= check_box_tag 'settings[login_required]', 1, Setting.login_required? %>
+-</p>
++<%= check_box_tag 'settings[login_required]', 1, Setting.login_required? %><%= hidden_field_tag 'settings[login_required]', 0 %></p>
+ 
+ <p><label><%= l(:setting_autologin) %></label>
+ <%= select_tag 'settings[autologin]', options_for_select( [[l(:label_disabled), "0"]] + [1, 7, 30, 365].collect{|days| [l('datetime.distance_in_words.x_days', :count => days), days.to_s]}, Setting.autologin) %></p>
+@@ -21,14 +19,10 @@
+ <%= text_field_tag 'settings[password_min_length]', Setting.password_min_length, :size => 6 %></p>
+ 
+ <p><label><%= l(:label_password_lost) %></label>
+-<%= hidden_field_tag 'settings[lost_password]', 0 %>
+-<%= check_box_tag 'settings[lost_password]', 1, Setting.lost_password? %>
+-</p>
++<%= check_box_tag 'settings[lost_password]', 1, Setting.lost_password? %><%= hidden_field_tag 'settings[lost_password]', 0 %></p>
+ 
+ <p><label><%= l(:setting_openid) %></label>
+-<%= hidden_field_tag 'settings[openid]', 0 %>
+-<%= check_box_tag 'settings[openid]', 1, Setting.openid?, :disabled => !Object.const_defined?(:OpenID) %>
+-</p>
++<%= check_box_tag 'settings[openid]', 1, Setting.openid?, :disabled => !Object.const_defined?(:OpenID) %><%= hidden_field_tag 'settings[openid]', 0 %></p>
+ </div>
+ 
+ <div style="float:right;">
+diff -Nur redmine-0.9.0~svn2898/app/views/settings/_display.rhtml redmine-0.9.0~svn2898.unpatched/app/views/settings/_display.rhtml
+--- redmine-0.9.0~svn2898/app/views/settings/_display.rhtml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/app/views/settings/_display.rhtml	2009-09-21 11:03:27.995904878 +0200
+@@ -17,9 +17,7 @@
+ <%= select_tag 'settings[user_format]', options_for_select( @options[:user_format], Setting.user_format.to_s ) %></p>
+ 
+ <p><label><%= l(:setting_gravatar_enabled) %></label>
+-<%= hidden_field_tag 'settings[gravatar_enabled]', 0 %>
+-<%= check_box_tag 'settings[gravatar_enabled]', 1, Setting.gravatar_enabled? %>
+-</p>
++<%= check_box_tag 'settings[gravatar_enabled]', 1, Setting.gravatar_enabled? %><%= hidden_field_tag 'settings[gravatar_enabled]', 0 %></p>
+ </div>
+ 
+ <%= submit_tag l(:button_save) %>
+diff -Nur redmine-0.9.0~svn2898/app/views/settings/_issues.rhtml redmine-0.9.0~svn2898.unpatched/app/views/settings/_issues.rhtml
+--- redmine-0.9.0~svn2898/app/views/settings/_issues.rhtml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/app/views/settings/_issues.rhtml	2009-09-21 11:03:27.995904878 +0200
+@@ -2,14 +2,10 @@
+ 
+ <div class="box tabular settings">
+ <p><label><%= l(:setting_cross_project_issue_relations) %></label>
+-<%= hidden_field_tag 'settings[cross_project_issue_relations]', 0 %>
+-<%= check_box_tag 'settings[cross_project_issue_relations]', 1, Setting.cross_project_issue_relations? %>
+-</p>
++<%= check_box_tag 'settings[cross_project_issue_relations]', 1, Setting.cross_project_issue_relations? %><%= hidden_field_tag 'settings[cross_project_issue_relations]', 0 %></p>
+ 
+ <p><label><%= l(:setting_display_subprojects_issues) %></label>
+-<%= hidden_field_tag 'settings[display_subprojects_issues]', 0 %>
+-<%= check_box_tag 'settings[display_subprojects_issues]', 1, Setting.display_subprojects_issues? %>
+-</p>
++<%= check_box_tag 'settings[display_subprojects_issues]', 1, Setting.display_subprojects_issues? %><%= hidden_field_tag 'settings[display_subprojects_issues]', 0 %></p>
+ 
+ <p><label><%= l(:setting_issues_export_limit) %></label>
+ <%= text_field_tag 'settings[issues_export_limit]', Setting.issues_export_limit, :size => 6 %></p>
+diff -Nur redmine-0.9.0~svn2898/app/views/settings/_mail_handler.rhtml redmine-0.9.0~svn2898.unpatched/app/views/settings/_mail_handler.rhtml
+--- redmine-0.9.0~svn2898/app/views/settings/_mail_handler.rhtml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/app/views/settings/_mail_handler.rhtml	2009-09-21 11:03:27.995904878 +0200
+@@ -2,10 +2,9 @@
+ 
+ <div class="box tabular settings">
+ <p><label><%= l(:setting_mail_handler_api_enabled) %></label>
+-<%= hidden_field_tag 'settings[mail_handler_api_enabled]', 0 %>
+ <%= check_box_tag 'settings[mail_handler_api_enabled]', 1, Setting.mail_handler_api_enabled?,
+                   :onclick => "if (this.checked) { Form.Element.enable('settings_mail_handler_api_key'); } else { Form.Element.disable('settings_mail_handler_api_key'); }" %>
+-</p>
++<%= hidden_field_tag 'settings[mail_handler_api_enabled]', 0 %></p>
+ 
+ <p><label><%= l(:setting_mail_handler_api_key) %></label>
+ <%= text_field_tag 'settings[mail_handler_api_key]', Setting.mail_handler_api_key, 
+diff -Nur redmine-0.9.0~svn2898/app/views/settings/_notifications.rhtml redmine-0.9.0~svn2898.unpatched/app/views/settings/_notifications.rhtml
+--- redmine-0.9.0~svn2898/app/views/settings/_notifications.rhtml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/app/views/settings/_notifications.rhtml	2009-09-21 11:03:27.995904878 +0200
+@@ -6,14 +6,12 @@
+ <%= text_field_tag 'settings[mail_from]', Setting.mail_from, :size => 60 %></p>
+ 
+ <p><label><%= l(:setting_bcc_recipients) %></label>
+-<%= hidden_field_tag 'settings[bcc_recipients]', 0 %>
+ <%= check_box_tag 'settings[bcc_recipients]', 1, Setting.bcc_recipients? %>
+-</p>
++<%= hidden_field_tag 'settings[bcc_recipients]', 0 %></p>
+ 
+ <p><label><%= l(:setting_plain_text_mail) %></label>
+-<%= hidden_field_tag 'settings[plain_text_mail]', 0 %>
+ <%= check_box_tag 'settings[plain_text_mail]', 1, Setting.plain_text_mail? %>
+-</p>
++<%= hidden_field_tag 'settings[plain_text_mail]', 0 %></p>
+ </div>
+ 
+ <fieldset class="box" id="notified_events"><legend><%=l(:text_select_mail_notifications)%></legend>
+diff -Nur redmine-0.9.0~svn2898/app/views/settings/_projects.rhtml redmine-0.9.0~svn2898.unpatched/app/views/settings/_projects.rhtml
+--- redmine-0.9.0~svn2898/app/views/settings/_projects.rhtml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/app/views/settings/_projects.rhtml	2009-09-21 11:03:27.995904878 +0200
+@@ -2,14 +2,10 @@
+ 
+ <div class="box tabular settings">
+ <p><label><%= l(:setting_default_projects_public) %></label>
+-<%= hidden_field_tag 'settings[default_projects_public]', 0 %>
+-<%= check_box_tag 'settings[default_projects_public]', 1, Setting.default_projects_public? %>
+-</p>
++<%= check_box_tag 'settings[default_projects_public]', 1, Setting.default_projects_public? %><%= hidden_field_tag 'settings[default_projects_public]', 0 %></p>
+ 
+ <p><label><%= l(:setting_sequential_project_identifiers) %></label>
+-<%= hidden_field_tag 'settings[sequential_project_identifiers]', 0 %>
+-<%= check_box_tag 'settings[sequential_project_identifiers]', 1, Setting.sequential_project_identifiers? %>
+-</p>
++<%= check_box_tag 'settings[sequential_project_identifiers]', 1, Setting.sequential_project_identifiers? %><%= hidden_field_tag 'settings[sequential_project_identifiers]', 0 %></p>
+ 
+ <p><label><%= l(:setting_new_project_user_role_id) %></label>
+ <%= select_tag('settings[new_project_user_role_id]', options_for_select([["--- #{l(:actionview_instancetag_blank_option)} ---", '']] + Role.find_all_givable.collect {|r| [r.name, r.id]}, Setting.new_project_user_role_id.to_i)) %></p>
+diff -Nur redmine-0.9.0~svn2898/app/views/settings/_repositories.rhtml redmine-0.9.0~svn2898.unpatched/app/views/settings/_repositories.rhtml
+--- redmine-0.9.0~svn2898/app/views/settings/_repositories.rhtml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/app/views/settings/_repositories.rhtml	2009-09-21 11:03:27.995904878 +0200
+@@ -2,14 +2,10 @@
+ 
+ <div class="box tabular settings">
+ <p><label><%= l(:setting_autofetch_changesets) %></label>
+-<%= hidden_field_tag 'settings[autofetch_changesets]', 0 %>
+-<%= check_box_tag 'settings[autofetch_changesets]', 1, Setting.autofetch_changesets? %>
+-</p>
++<%= check_box_tag 'settings[autofetch_changesets]', 1, Setting.autofetch_changesets? %><%= hidden_field_tag 'settings[autofetch_changesets]', 0 %></p>
+ 
+ <p><label><%= l(:setting_sys_api_enabled) %></label>
+-<%= hidden_field_tag 'settings[sys_api_enabled]', 0 %>
+-<%= check_box_tag 'settings[sys_api_enabled]', 1, Setting.sys_api_enabled? %>
+-</p>
++<%= check_box_tag 'settings[sys_api_enabled]', 1, Setting.sys_api_enabled? %><%= hidden_field_tag 'settings[sys_api_enabled]', 0 %></p>
+ 
+ <p><label><%= l(:setting_enabled_scm) %></label>
+ <% REDMINE_SUPPORTED_SCM.each do |scm| -%>
+diff -Nur redmine-0.9.0~svn2898/config/boot.rb redmine-0.9.0~svn2898.unpatched/config/boot.rb
+--- redmine-0.9.0~svn2898/config/boot.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/boot.rb	2009-09-21 11:03:28.027905064 +0200
+@@ -1,7 +1,7 @@
+ # Don't change this file!
+ # Configure your app in config/environment.rb and config/environments/*.rb
+ 
+-RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
++RAILS_ROOT = File.expand_path("#{File.dirname(__FILE__)}/..") unless defined?(RAILS_ROOT)
+ 
+ module Rails
+   class << self
+@@ -44,7 +44,6 @@
+     def load_initializer
+       require "#{RAILS_ROOT}/vendor/rails/railties/lib/initializer"
+       Rails::Initializer.run(:install_gem_spec_stubs)
+-      Rails::GemDependency.add_frozen_gem_path
+     end
+   end
+ 
+@@ -82,8 +81,8 @@
+       end
+ 
+       def load_rubygems
+-        min_version = '1.3.2'
+         require 'rubygems'
++        min_version = '1.3.1'
+         unless rubygems_version >= min_version
+           $stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.)
+           exit 1
+diff -Nur redmine-0.9.0~svn2898/config/environment.rb redmine-0.9.0~svn2898.unpatched/config/environment.rb
+--- redmine-0.9.0~svn2898/config/environment.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/environment.rb	2009-09-21 11:03:28.027905064 +0200
+@@ -5,7 +5,7 @@
+ # ENV['RAILS_ENV'] ||= 'production'
+ 
+ # Specifies gem version of Rails to use when vendor/rails is not present
+-RAILS_GEM_VERSION = '2.3.4' unless defined? RAILS_GEM_VERSION
++RAILS_GEM_VERSION = '2.2.2' unless defined? RAILS_GEM_VERSION
+ 
+ # Bootstrap the Rails environment, frameworks, and default configuration
+ require File.join(File.dirname(__FILE__), 'boot')
+diff -Nur redmine-0.9.0~svn2898/config/initializers/10-patches.rb redmine-0.9.0~svn2898.unpatched/config/initializers/10-patches.rb
+--- redmine-0.9.0~svn2898/config/initializers/10-patches.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/initializers/10-patches.rb	2009-09-21 11:03:28.027905064 +0200
+@@ -33,7 +33,7 @@
+             end
+           else
+             attr_name = @base.class.human_attribute_name(attr)
+-            full_messages << attr_name + ' ' + message.to_s
++            full_messages << attr_name + ' ' + message
+           end
+         end
+       end
+diff -Nur redmine-0.9.0~svn2898/config/initializers/backtrace_silencers.rb redmine-0.9.0~svn2898.unpatched/config/initializers/backtrace_silencers.rb
+--- redmine-0.9.0~svn2898/config/initializers/backtrace_silencers.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/initializers/backtrace_silencers.rb	2009-09-21 11:03:28.027905064 +0200
+@@ -1,7 +0,0 @@
+-# Be sure to restart your server when you modify this file.
+-
+-# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
+-# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
+-
+-# You can also remove all the silencers if you're trying do debug a problem that might steem from framework code.
+-# Rails.backtrace_cleaner.remove_silencers!
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/config/initializers/inflections.rb redmine-0.9.0~svn2898.unpatched/config/initializers/inflections.rb
+--- redmine-0.9.0~svn2898/config/initializers/inflections.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/initializers/inflections.rb	2009-09-21 11:03:28.027905064 +0200
+@@ -1,10 +0,0 @@
+-# Be sure to restart your server when you modify this file.
+-
+-# Add new inflection rules using the following format 
+-# (all these examples are active by default):
+-# ActiveSupport::Inflector.inflections do |inflect|
+-#   inflect.plural /^(ox)$/i, '\1en'
+-#   inflect.singular /^(ox)en/i, '\1'
+-#   inflect.irregular 'person', 'people'
+-#   inflect.uncountable %w( fish sheep )
+-# end
+diff -Nur redmine-0.9.0~svn2898/config/locales/bg.yml redmine-0.9.0~svn2898.unpatched/config/locales/bg.yml
+--- redmine-0.9.0~svn2898/config/locales/bg.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/bg.yml	2009-09-21 11:03:28.015884086 +0200
+@@ -59,22 +59,6 @@
+       over_x_years:
+         one:   "over 1 year"
+         other: "over {{count}} years"
+-
+-  number: 
+-    human: 
+-      format: 
+-        precision: 1
+-        delimiter: ""
+-      storage_units: 
+-        format: "%n %u"
+-        units: 
+-          kb: KB
+-          tb: TB
+-          gb: GB
+-          byte: 
+-            one: Byte
+-            other: Bytes
+-          mb: 'MB'
+       
+ # Used in array.to_sentence.
+   support:
+diff -Nur redmine-0.9.0~svn2898/config/locales/bs.yml redmine-0.9.0~svn2898.unpatched/config/locales/bs.yml
+--- redmine-0.9.0~svn2898/config/locales/bs.yml	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/bs.yml	2009-09-21 11:03:28.019905838 +0200
+@@ -83,16 +83,9 @@
+       format:
+         delimiter: ""
+         precision: 1
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "Byte"
+-            other: "Bytes"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
++
++
++
+         
+ # Used in array.to_sentence.
+   support:
+diff -Nur redmine-0.9.0~svn2898/config/locales/ca.yml redmine-0.9.0~svn2898.unpatched/config/locales/ca.yml
+--- redmine-0.9.0~svn2898/config/locales/ca.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/ca.yml	2009-09-21 11:03:27.999904631 +0200
+@@ -59,22 +59,6 @@
+       over_x_years:
+         one:   "més d'un any"
+         other: "més de {{count}} anys"
+-
+-  number:
+-    human:
+-      format:
+-        delimiter: ""
+-        precision: 1
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "Byte"
+-            other: "Bytes"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
+         
+ # Used in array.to_sentence.
+   support:
+diff -Nur redmine-0.9.0~svn2898/config/locales/cs.yml redmine-0.9.0~svn2898.unpatched/config/locales/cs.yml
+--- redmine-0.9.0~svn2898/config/locales/cs.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/cs.yml	2009-09-21 11:03:28.007883044 +0200
+@@ -59,22 +59,6 @@
+       over_x_years:
+         one:   "více než 1 rok"
+         other: "více než {{count}} roky"
+-
+-  number: 
+-    human: 
+-      format: 
+-        precision: 1
+-        delimiter: ""
+-      storage_units: 
+-        format: "%n %u"
+-        units: 
+-          kb: KB
+-          tb: TB
+-          gb: GB
+-          byte: 
+-            one: Byte
+-            other: Bytes
+-          mb: MB
+         
+ # Used in array.to_sentence.
+   support:
+diff -Nur redmine-0.9.0~svn2898/config/locales/da.yml redmine-0.9.0~svn2898.unpatched/config/locales/da.yml
+--- redmine-0.9.0~svn2898/config/locales/da.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/da.yml	2009-09-21 11:03:28.015884086 +0200
+@@ -85,16 +85,7 @@
+         # separator: 
+         delimiter: ""
+         precision: 1
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "Byte"
+-            other: "Bytes"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
++      storage_units: [Bytes, KB, MB, GB, TB]
+     percentage:
+       format:
+         # separator:
+diff -Nur redmine-0.9.0~svn2898/config/locales/de.yml redmine-0.9.0~svn2898.unpatched/config/locales/de.yml
+--- redmine-0.9.0~svn2898/config/locales/de.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/de.yml	2009-09-21 11:03:28.015884086 +0200
+@@ -83,16 +83,6 @@
+       format:
+         delimiter: ""
+         precision: 1
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "Byte"
+-            other: "Bytes"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
+ 
+   support:
+     array:
+diff -Nur redmine-0.9.0~svn2898/config/locales/el.yml redmine-0.9.0~svn2898.unpatched/config/locales/el.yml
+--- redmine-0.9.0~svn2898/config/locales/el.yml	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/el.yml	2009-09-21 11:03:28.003905082 +0200
+@@ -63,22 +63,6 @@
+         one:   "πάνω από 1 χρόνο"
+         other: "πάνω από {{count}} χρόνια"
+         
+-  number: 
+-    human: 
+-      format: 
+-        precision: 1
+-        delimiter: ""
+-      storage_units: 
+-        format: "%n %u"
+-        units: 
+-          kb: KB
+-          tb: TB
+-          gb: GB
+-          byte: 
+-            one: Byte
+-            other: Bytes
+-          mb: MB
+-
+ # Used in array.to_sentence.
+   support:
+     array:
+diff -Nur redmine-0.9.0~svn2898/config/locales/en.yml redmine-0.9.0~svn2898.unpatched/config/locales/en.yml
+--- redmine-0.9.0~svn2898/config/locales/en.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/en.yml	2009-09-21 11:03:28.003905082 +0200
+@@ -59,23 +59,6 @@
+       over_x_years:
+         one:   "over 1 year"
+         other: "over {{count}} years"
+-
+-  number:
+-    human:
+-      format:
+-        delimiter: ""
+-        precision: 1
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "Byte"
+-            other: "Bytes"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
+-
+         
+ # Used in array.to_sentence.
+   support:
+diff -Nur redmine-0.9.0~svn2898/config/locales/es.yml redmine-0.9.0~svn2898.unpatched/config/locales/es.yml
+--- redmine-0.9.0~svn2898/config/locales/es.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/es.yml	2009-09-21 11:03:28.007883044 +0200
+@@ -47,16 +47,6 @@
+         # separator: 
+         delimiter: "" 
+         precision: 1
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "Byte"
+-            other: "Bytes"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
+ 
+   # Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words()
+   datetime:
+diff -Nur redmine-0.9.0~svn2898/config/locales/fi.yml redmine-0.9.0~svn2898.unpatched/config/locales/fi.yml
+--- redmine-0.9.0~svn2898/config/locales/fi.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/fi.yml	2009-09-21 11:03:28.019905838 +0200
+@@ -61,16 +61,7 @@
+       format:
+         delimiter: ""
+         precision: 1
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "Tavua"
+-            other: "Tavua"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
++      storage_units: [Tavua, KB, MB, GB, TB]
+  
+   datetime:
+     distance_in_words:
+diff -Nur redmine-0.9.0~svn2898/config/locales/fr.yml redmine-0.9.0~svn2898.unpatched/config/locales/fr.yml
+--- redmine-0.9.0~svn2898/config/locales/fr.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/fr.yml	2009-09-21 11:03:28.019905838 +0200
+@@ -84,16 +84,7 @@
+     human:
+       format:
+         precision: 2
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "Octet"
+-            other: "Octet"
+-          kb: "ko"
+-          mb: "Mo"
+-          gb: "Go"
+-          tb: "To"
++      storage_units: [ Octet, ko, Mo, Go, To ]
+   
+   support:
+     array:
+diff -Nur redmine-0.9.0~svn2898/config/locales/gl.yml redmine-0.9.0~svn2898.unpatched/config/locales/gl.yml
+--- redmine-0.9.0~svn2898/config/locales/gl.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/gl.yml	2009-09-21 11:03:28.007883044 +0200
+@@ -33,16 +33,6 @@
+         # separator: 
+         delimiter: "" 
+         precision: 1
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "Byte"
+-            other: "Bytes"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
+   
+   
+   date:
+diff -Nur redmine-0.9.0~svn2898/config/locales/he.yml redmine-0.9.0~svn2898.unpatched/config/locales/he.yml
+--- redmine-0.9.0~svn2898/config/locales/he.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/he.yml	2009-09-21 11:03:28.019905838 +0200
+@@ -76,17 +76,6 @@
+         unit: 'שח'
+         precision: 2
+         format: '%u %n'
+-    human:
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "Byte"
+-            other: "Bytes"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
+         
+   support:
+     array:
+diff -Nur redmine-0.9.0~svn2898/config/locales/hu.yml redmine-0.9.0~svn2898.unpatched/config/locales/hu.yml
+--- redmine-0.9.0~svn2898/config/locales/hu.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/hu.yml	2009-09-21 11:03:28.027905064 +0200
+@@ -90,16 +90,7 @@
+       format:
+         delimiter: ""
+         precision: 1
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "bájt"
+-            other: "bájt"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
++      storage_units: [bájt, KB, MB, GB, TB]
+ 
+   support:
+     array:
+diff -Nur redmine-0.9.0~svn2898/config/locales/it.yml redmine-0.9.0~svn2898.unpatched/config/locales/it.yml
+--- redmine-0.9.0~svn2898/config/locales/it.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/it.yml	2009-09-21 11:03:28.011883845 +0200
+@@ -74,17 +74,6 @@
+         unit: '€'
+         precision: 2
+         format: '%n %u'
+-    human:
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "Byte"
+-            other: "Bytes"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
+         
+   support:
+     array:
+diff -Nur redmine-0.9.0~svn2898/config/locales/ja.yml redmine-0.9.0~svn2898.unpatched/config/locales/ja.yml
+--- redmine-0.9.0~svn2898/config/locales/ja.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/ja.yml	2009-09-21 11:03:28.019905838 +0200
+@@ -96,16 +96,6 @@
+       format:
+         delimiter: ""
+         precision: 1
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "Byte"
+-            other: "Bytes"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
+ 
+   activerecord:
+     errors:
+diff -Nur redmine-0.9.0~svn2898/config/locales/ko.yml redmine-0.9.0~svn2898.unpatched/config/locales/ko.yml
+--- redmine-0.9.0~svn2898/config/locales/ko.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/ko.yml	2009-09-21 11:03:28.007883044 +0200
+@@ -116,16 +116,7 @@
+         # separator: 
+         delimiter: ""
+         precision: 1
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "Byte"
+-            other: "Bytes"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
++      storage_units: [Bytes, KB, MB, GB, TB]
+ 
+ # Used in array.to_sentence.
+   support:
+diff -Nur redmine-0.9.0~svn2898/config/locales/lt.yml redmine-0.9.0~svn2898.unpatched/config/locales/lt.yml
+--- redmine-0.9.0~svn2898/config/locales/lt.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/lt.yml	2009-09-21 11:03:27.999904631 +0200
+@@ -28,16 +28,7 @@
+       format:
+         delimiter: ""
+         precision: 1
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "baitai"
+-            other: "baitai"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
++      storage_units: [baitai, KB, MB, GB, TB]
+ 
+   datetime:
+     distance_in_words:
+diff -Nur redmine-0.9.0~svn2898/config/locales/nl.yml redmine-0.9.0~svn2898.unpatched/config/locales/nl.yml
+--- redmine-0.9.0~svn2898/config/locales/nl.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/nl.yml	2009-09-21 11:03:28.023883870 +0200
+@@ -59,22 +59,6 @@
+       over_x_years:
+         one:   "over 1 jaar"
+         other: "over {{count}} jaren"
+-
+-  number: 
+-    human: 
+-      format: 
+-        precision: 1
+-        delimiter: ""
+-      storage_units: 
+-        format: "%n %u"
+-        units: 
+-          kb: KB
+-          tb: TB
+-          gb: GB
+-          byte: 
+-            one: Byte
+-            other: Bytes
+-          mb: MB
+         
+ # Used in array.to_sentence.
+   support:
+diff -Nur redmine-0.9.0~svn2898/config/locales/no.yml redmine-0.9.0~svn2898.unpatched/config/locales/no.yml
+--- redmine-0.9.0~svn2898/config/locales/no.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/no.yml	2009-09-21 11:03:28.023883870 +0200
+@@ -67,18 +67,6 @@
+       format:
+         delimiter: ""
+         precision: 4
+-    human:
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "Byte"
+-            other: "Bytes"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
+-
+   activerecord:
+     errors:
+       template:
+diff -Nur redmine-0.9.0~svn2898/config/locales/pl.yml redmine-0.9.0~svn2898.unpatched/config/locales/pl.yml
+--- redmine-0.9.0~svn2898/config/locales/pl.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/pl.yml	2009-09-21 11:03:28.023883870 +0200
+@@ -21,16 +21,7 @@
+       format:
+         delimiter: ""
+         precision: 1
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "B"
+-            other: "B"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
++      storage_units: [B, KB, MB, GB, TB]
+ 
+   date:
+     formats:
+diff -Nur redmine-0.9.0~svn2898/config/locales/pt-BR.yml redmine-0.9.0~svn2898.unpatched/config/locales/pt-BR.yml
+--- redmine-0.9.0~svn2898/config/locales/pt-BR.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/pt-BR.yml	2009-09-21 11:03:28.003905082 +0200
+@@ -93,16 +93,6 @@
+       format:
+         precision: 1
+         delimiter: '.'
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "Byte"
+-            other: "Bytes"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
+   support:
+     array:
+       sentence_connector: "e"
+diff -Nur redmine-0.9.0~svn2898/config/locales/pt.yml redmine-0.9.0~svn2898.unpatched/config/locales/pt.yml
+--- redmine-0.9.0~svn2898/config/locales/pt.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/pt.yml	2009-09-21 11:03:27.999904631 +0200
+@@ -83,16 +83,6 @@
+       format:
+         precision: 1
+         delimiter: ''
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "Byte"
+-            other: "Bytes"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
+ 
+   activerecord:
+     errors:
+diff -Nur redmine-0.9.0~svn2898/config/locales/ro.yml redmine-0.9.0~svn2898.unpatched/config/locales/ro.yml
+--- redmine-0.9.0~svn2898/config/locales/ro.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/ro.yml	2009-09-21 11:03:27.999904631 +0200
+@@ -57,22 +57,6 @@
+       over_x_years:
+         one:   "peste un an"
+         other: "peste {{count}} ani"
+-
+-  number: 
+-    human: 
+-      format: 
+-        precision: 1
+-        delimiter: ""
+-      storage_units: 
+-        format: "%n %u"
+-        units: 
+-          kb: KB
+-          tb: TB
+-          gb: GB
+-          byte: 
+-            one: Byte
+-            other: Bytes
+-          mb: MB
+         
+ # Used in array.to_sentence.
+   support:
+diff -Nur redmine-0.9.0~svn2898/config/locales/sk.yml redmine-0.9.0~svn2898.unpatched/config/locales/sk.yml
+--- redmine-0.9.0~svn2898/config/locales/sk.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/sk.yml	2009-09-21 11:03:28.011883845 +0200
+@@ -59,22 +59,6 @@
+       over_x_years:
+         one:   "cez 1 rok"
+         other: "cez {{count}} roky/ov"
+-
+-  number: 
+-    human: 
+-      format: 
+-        precision: 1
+-        delimiter: ""
+-      storage_units: 
+-        format: "%n %u"
+-        units: 
+-          kb: KB
+-          tb: TB
+-          gb: GB
+-          byte: 
+-            one: Byte
+-            other: Bytes
+-          mb: MB
+         
+ # Used in array.to_sentence.
+   support:
+diff -Nur redmine-0.9.0~svn2898/config/locales/sl.yml redmine-0.9.0~svn2898.unpatched/config/locales/sl.yml
+--- redmine-0.9.0~svn2898/config/locales/sl.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/sl.yml	2009-09-21 11:03:28.011883845 +0200
+@@ -59,22 +59,6 @@
+       over_x_years:
+         one:   "over 1 year"
+         other: "over {{count}} years"
+-
+-  number: 
+-    human: 
+-      format: 
+-        precision: 1
+-        delimiter: ""
+-      storage_units: 
+-        format: "%n %u"
+-        units: 
+-          kb: KB
+-          tb: TB
+-          gb: GB
+-          byte: 
+-            one: Byte
+-            other: Bytes
+-          mb: MB
+         
+ # Used in array.to_sentence.
+   support:
+diff -Nur redmine-0.9.0~svn2898/config/locales/sr.yml redmine-0.9.0~svn2898.unpatched/config/locales/sr.yml
+--- redmine-0.9.0~svn2898/config/locales/sr.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/sr.yml	2009-09-21 11:03:28.011883845 +0200
+@@ -81,17 +81,6 @@
+         unit: 'ДИН'
+         precision: 2
+         format: '%n %u'
+-    human:
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "Byte"
+-            other: "Bytes"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
+ 
+   support:
+     array:
+diff -Nur redmine-0.9.0~svn2898/config/locales/sv.yml redmine-0.9.0~svn2898.unpatched/config/locales/sv.yml
+--- redmine-0.9.0~svn2898/config/locales/sv.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/sv.yml	2009-09-21 11:03:28.015884086 +0200
+@@ -47,16 +47,7 @@
+         # separator: 
+         delimiter: ""
+         # precision: 1
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "Byte"
+-            other: "Bytes"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
++      storage_units: [Byte, KB, MB, GB, TB]
+ 
+   # Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words()
+   datetime:
+diff -Nur redmine-0.9.0~svn2898/config/locales/th.yml redmine-0.9.0~svn2898.unpatched/config/locales/th.yml
+--- redmine-0.9.0~svn2898/config/locales/th.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/th.yml	2009-09-21 11:03:28.023883870 +0200
+@@ -59,22 +59,6 @@
+       over_x_years:
+         one:   "over 1 year"
+         other: "over {{count}} years"
+-
+-  number: 
+-    human: 
+-      format: 
+-        precision: 1
+-        delimiter: ""
+-      storage_units: 
+-        format: "%n %u"
+-        units: 
+-          kb: KB
+-          tb: TB
+-          gb: GB
+-          byte: 
+-            one: Byte
+-            other: Bytes
+-          mb: MB
+         
+ # Used in array.to_sentence.
+   support:
+diff -Nur redmine-0.9.0~svn2898/config/locales/tr.yml redmine-0.9.0~svn2898.unpatched/config/locales/tr.yml
+--- redmine-0.9.0~svn2898/config/locales/tr.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/tr.yml	2009-09-21 11:03:28.003905082 +0200
+@@ -92,16 +92,6 @@
+         delimiter: '.'
+         separator: ','
+         precision: 2
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "Byte"
+-            other: "Bytes"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
+ 
+   support:
+     array:
+diff -Nur redmine-0.9.0~svn2898/config/locales/uk.yml redmine-0.9.0~svn2898.unpatched/config/locales/uk.yml
+--- redmine-0.9.0~svn2898/config/locales/uk.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/uk.yml	2009-09-21 11:03:28.011883845 +0200
+@@ -59,22 +59,6 @@
+       over_x_years:
+         one:   "over 1 year"
+         other: "over {{count}} years"
+-
+-  number: 
+-    human: 
+-      format: 
+-        precision: 1
+-        delimiter: ""
+-      storage_units: 
+-        format: "%n %u"
+-        units: 
+-          kb: KB
+-          tb: TB
+-          gb: GB
+-          byte: 
+-            one: Byte
+-            other: Bytes
+-          mb: MB
+         
+ # Used in array.to_sentence.
+   support:
+diff -Nur redmine-0.9.0~svn2898/config/locales/vi.yml redmine-0.9.0~svn2898.unpatched/config/locales/vi.yml
+--- redmine-0.9.0~svn2898/config/locales/vi.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/vi.yml	2009-09-21 11:03:28.027905064 +0200
+@@ -49,16 +49,7 @@
+         # separator:
+         delimiter: ""
+         precision: 1
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "Byte"
+-            other: "Bytes"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
++      storage_units: [Bytes, KB, MB, GB, TB]
+ 
+   # Used in distance_of_time_in_words(), distance_of_time_in_words_to_now(), time_ago_in_words()
+   datetime:
+diff -Nur redmine-0.9.0~svn2898/config/locales/zh-TW.yml redmine-0.9.0~svn2898.unpatched/config/locales/zh-TW.yml
+--- redmine-0.9.0~svn2898/config/locales/zh-TW.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/zh-TW.yml	2009-09-21 11:03:28.007883044 +0200
+@@ -86,9 +86,8 @@
+         precision: 1
+         # 儲存單位輸出格式.
+         # %u 是儲存單位, %n 是數值 (預設值: 2 MB)
+-      storage_units:
+         format: "%n %u"
+-        units:
++        storage_units:
+           byte:
+             one: "位元組 (B)"
+             other: "位元組 (B)"
+diff -Nur redmine-0.9.0~svn2898/config/locales/zh.yml redmine-0.9.0~svn2898.unpatched/config/locales/zh.yml
+--- redmine-0.9.0~svn2898/config/locales/zh.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/locales/zh.yml	2009-09-21 11:03:27.999904631 +0200
+@@ -86,16 +86,7 @@
+       format:
+         delimiter: ""
+         precision: 1
+-      storage_units:
+-        format: "%n %u"
+-        units:
+-          byte:
+-            one: "Byte"
+-            other: "Bytes"
+-          kb: "KB"
+-          mb: "MB"
+-          gb: "GB"
+-          tb: "TB"
++      storage_units: [Bytes, KB, MB, GB, TB]
+   
+   support:
+     array:
+diff -Nur redmine-0.9.0~svn2898/config/routes.rb redmine-0.9.0~svn2898.unpatched/config/routes.rb
+--- redmine-0.9.0~svn2898/config/routes.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/config/routes.rb	2009-09-21 11:03:28.027905064 +0200
+@@ -6,6 +6,11 @@
+   # map.connect 'products/:id', :controller => 'catalog', :action => 'view'
+   # Keep in mind you can assign values other than :controller and :action
+ 
++  # Allow Redmine plugins to map routes and potentially override them
++  Rails.plugins.each do |plugin|
++    map.from_plugin plugin.name.to_sym
++  end
++
+   map.home '', :controller => 'welcome'
+   
+   map.signin 'login', :controller => 'account', :action => 'login'
+diff -Nur redmine-0.9.0~svn2898/lib/tabular_form_builder.rb redmine-0.9.0~svn2898.unpatched/lib/tabular_form_builder.rb
+--- redmine-0.9.0~svn2898/lib/tabular_form_builder.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/lib/tabular_form_builder.rb	2009-09-21 11:03:28.027905064 +0200
+@@ -43,7 +43,7 @@
+       return '' if options.delete(:no_label)
+       text = options[:label].is_a?(Symbol) ? l(options[:label]) : options[:label]
+       text ||= l(("field_" + field.to_s.gsub(/\_id$/, "")).to_sym)
+-      text += @template.content_tag("span", " *", :class => "required") if options.delete(:required)
++      text << @template.content_tag("span", " *", :class => "required") if options.delete(:required)
+       @template.content_tag("label", text, 
+                                      :class => (@object && @object.errors[field] ? "error" : nil), 
+                                      :for => (@object_name.to_s + "_" + field.to_s))
+diff -Nur redmine-0.9.0~svn2898/test/functional/account_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/account_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/account_controller_test.rb	2009-09-20 11:56:06.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/account_controller_test.rb	2009-09-21 11:03:27.979886242 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class AccountController; def rescue_action(e) raise e end; end
+ 
+-class AccountControllerTest < ActionController::TestCase
++class AccountControllerTest < Test::Unit::TestCase
+   fixtures :users, :roles
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/admin_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/admin_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/admin_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/admin_controller_test.rb	2009-09-21 11:03:27.975884395 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class AdminController; def rescue_action(e) raise e end; end
+ 
+-class AdminControllerTest < ActionController::TestCase
++class AdminControllerTest < Test::Unit::TestCase
+   fixtures :projects, :users, :roles
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/application_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/application_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/application_controller_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/application_controller_test.rb	2009-09-21 11:03:27.979886242 +0200
+@@ -16,12 +16,12 @@
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+-require 'application_controller'
++require 'application'
+ 
+ # Re-raise errors caught by the controller.
+ class ApplicationController; def rescue_action(e) raise e end; end
+ 
+-class ApplicationControllerTest < ActionController::TestCase
++class ApplicationControllerTest < Test::Unit::TestCase
+   include Redmine::I18n
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/attachments_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/attachments_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/attachments_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/attachments_controller_test.rb	2009-09-21 11:03:27.983883271 +0200
+@@ -22,7 +22,7 @@
+ class AttachmentsController; def rescue_action(e) raise e end; end
+ 
+ 
+-class AttachmentsControllerTest < ActionController::TestCase
++class AttachmentsControllerTest < Test::Unit::TestCase
+   fixtures :users, :projects, :roles, :members, :member_roles, :enabled_modules, :issues, :trackers, :attachments,
+            :versions, :wiki_pages, :wikis, :documents
+   
+diff -Nur redmine-0.9.0~svn2898/test/functional/boards_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/boards_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/boards_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/boards_controller_test.rb	2009-09-21 11:03:27.991893602 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class BoardsController; def rescue_action(e) raise e end; end
+ 
+-class BoardsControllerTest < ActionController::TestCase
++class BoardsControllerTest < Test::Unit::TestCase
+   fixtures :projects, :users, :members, :member_roles, :roles, :boards, :messages, :enabled_modules
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/custom_fields_controller_test.rb.orig redmine-0.9.0~svn2898.unpatched/test/functional/custom_fields_controller_test.rb.orig
+--- redmine-0.9.0~svn2898/test/functional/custom_fields_controller_test.rb.orig	1970-01-01 01:00:00.000000000 +0100
++++ redmine-0.9.0~svn2898.unpatched/test/functional/custom_fields_controller_test.rb.orig	2009-09-20 16:06:57.000000000 +0200
+@@ -0,0 +1,61 @@
++# Redmine - project management software
++# Copyright (C) 2006-2009  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.
++
++require File.dirname(__FILE__) + '/../test_helper'
++require 'custom_fields_controller'
++
++# Re-raise errors caught by the controller.
++class CustomFieldsController; def rescue_action(e) raise e end; end
++
++class CustomFieldsControllerTest < ActionController::TestCase
++  fixtures :custom_fields, :trackers, :users
++  
++  def setup
++    @controller = CustomFieldsController.new
++    @request    = ActionController::TestRequest.new
++    @response   = ActionController::TestResponse.new
++    @request.session[:user_id] = 1
++  end
++  
++  def test_post_new_list_custom_field
++    assert_difference 'CustomField.count' do
++      post :new, :type => "IssueCustomField",
++                 :custom_field => {:name => "test_post_new_list",
++                                   :default_value => "",
++                                   :min_length => "0",
++                                   :searchable => "0",
++                                   :regexp => "",
++                                   :is_for_all => "1",
++                                   :possible_values => "0.1\n0.2\n",
++                                   :max_length => "0",
++                                   :is_filter => "0",
++                                   :is_required =>"0",
++                                   :field_format => "list",
++                                   :tracker_ids => ["1", ""]}
++    end        
++    assert_redirected_to '/custom_fields?tab=IssueCustomField'
++    field = IssueCustomField.find_by_name('test_post_new_list')
++    assert_not_nil field
++    assert_equal ["0.1", "0.2"], field.possible_values
++    assert_equal 1, field.trackers.size
++  end
++  
++  def test_invalid_custom_field_class_should_redirect_to_list
++    get :new, :type => 'UnknownCustomField'
++    assert_redirected_to '/custom_fields'
++  end
++end
+diff -Nur redmine-0.9.0~svn2898/test/functional/custom_fields_controller_test.rb.rej redmine-0.9.0~svn2898.unpatched/test/functional/custom_fields_controller_test.rb.rej
+--- redmine-0.9.0~svn2898/test/functional/custom_fields_controller_test.rb.rej	1970-01-01 01:00:00.000000000 +0100
++++ redmine-0.9.0~svn2898.unpatched/test/functional/custom_fields_controller_test.rb.rej	2009-09-21 11:03:27.987905792 +0200
+@@ -0,0 +1,17 @@
++***************
++*** 21,27 ****
++  # Re-raise errors caught by the controller.
++  class CustomFieldsController; def rescue_action(e) raise e end; end
++  
++- class CustomFieldsControllerTest < ActionController::TestCase
++    fixtures :custom_fields, :trackers, :users
++    
++    def setup
++--- 21,27 ----
++  # Re-raise errors caught by the controller.
++  class CustomFieldsController; def rescue_action(e) raise e end; end
++  
+++ class CustomFieldsControllerTest < Test::Unit::TestCase
++    fixtures :custom_fields, :trackers, :users
++    
++    def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/documents_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/documents_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/documents_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/documents_controller_test.rb	2009-09-21 11:03:27.987905792 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class DocumentsController; def rescue_action(e) raise e end; end
+ 
+-class DocumentsControllerTest < ActionController::TestCase
++class DocumentsControllerTest < Test::Unit::TestCase
+   fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :documents, :enumerations
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/enumerations_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/enumerations_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/enumerations_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/enumerations_controller_test.rb	2009-09-21 11:03:27.991893602 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class EnumerationsController; def rescue_action(e) raise e end; end
+ 
+-class EnumerationsControllerTest < ActionController::TestCase
++class EnumerationsControllerTest < Test::Unit::TestCase
+   fixtures :enumerations, :issues, :users
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/groups_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/groups_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/groups_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/groups_controller_test.rb	2009-09-21 11:03:27.983883271 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class GroupsController; def rescue_action(e) raise e end; end
+ 
+-class GroupsControllerTest < ActionController::TestCase
++class GroupsControllerTest < Test::Unit::TestCase
+   fixtures :projects, :users, :members, :member_roles
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/issue_categories_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/issue_categories_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/issue_categories_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/issue_categories_controller_test.rb	2009-09-21 11:03:27.983883271 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class IssueCategoriesController; def rescue_action(e) raise e end; end
+ 
+-class IssueCategoriesControllerTest < ActionController::TestCase
++class IssueCategoriesControllerTest < Test::Unit::TestCase
+   fixtures :projects, :users, :members, :member_roles, :roles, :enabled_modules, :issue_categories
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/issue_relations_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/issue_relations_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/issue_relations_controller_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/issue_relations_controller_test.rb	2009-09-21 11:03:27.987905792 +0200
+@@ -5,7 +5,7 @@
+ class IssueRelationsController; def rescue_action(e) raise e end; end
+ 
+ 
+-class IssueRelationsControllerTest < ActionController::TestCase
++class IssueRelationsControllerTest < Test::Unit::TestCase
+   fixtures :projects,
+            :users,
+            :roles,
+diff -Nur redmine-0.9.0~svn2898/test/functional/issues_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/issues_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/issues_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/issues_controller_test.rb	2009-09-21 11:03:27.971883106 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class IssuesController; def rescue_action(e) raise e end; end
+ 
+-class IssuesControllerTest < ActionController::TestCase
++class IssuesControllerTest < Test::Unit::TestCase
+   fixtures :projects,
+            :users,
+            :roles,
+@@ -42,8 +42,7 @@
+            :custom_fields_trackers,
+            :time_entries,
+            :journals,
+-           :journal_details,
+-           :queries
++           :journal_details
+   
+   def setup
+     @controller = IssuesController.new
+@@ -453,16 +452,14 @@
+   
+   def test_post_new
+     @request.session[:user_id] = 2
+-    assert_difference 'Issue.count' do
+-      post :new, :project_id => 1, 
+-                 :issue => {:tracker_id => 3,
+-                            :subject => 'This is the test_new issue',
+-                            :description => 'This is the description',
+-                            :priority_id => 5,
+-                            :estimated_hours => '',
+-                            :custom_field_values => {'2' => 'Value for field 2'}}
+-    end
+-    assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id
++    post :new, :project_id => 1, 
++               :issue => {:tracker_id => 3,
++                          :subject => 'This is the test_new issue',
++                          :description => 'This is the description',
++                          :priority_id => 5,
++                          :estimated_hours => '',
++                          :custom_field_values => {'2' => 'Value for field 2'}}
++    assert_redirected_to :action => 'show'
+     
+     issue = Issue.find_by_subject('This is the test_new issue')
+     assert_not_nil issue
+@@ -486,14 +483,12 @@
+   
+   def test_post_new_without_custom_fields_param
+     @request.session[:user_id] = 2
+-    assert_difference 'Issue.count' do
+-      post :new, :project_id => 1, 
+-                 :issue => {:tracker_id => 1,
+-                            :subject => 'This is the test_new issue',
+-                            :description => 'This is the description',
+-                            :priority_id => 5}
+-    end
+-    assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id
++    post :new, :project_id => 1, 
++               :issue => {:tracker_id => 1,
++                          :subject => 'This is the test_new issue',
++                          :description => 'This is the description',
++                          :priority_id => 5}
++    assert_redirected_to :action => 'show'
+   end
+ 
+   def test_post_new_with_required_custom_field_and_without_custom_fields_param
+@@ -541,16 +536,14 @@
+   def test_post_new_should_send_a_notification
+     ActionMailer::Base.deliveries.clear
+     @request.session[:user_id] = 2
+-    assert_difference 'Issue.count' do
+-      post :new, :project_id => 1, 
+-                 :issue => {:tracker_id => 3,
+-                            :subject => 'This is the test_new issue',
+-                            :description => 'This is the description',
+-                            :priority_id => 5,
+-                            :estimated_hours => '',
+-                            :custom_field_values => {'2' => 'Value for field 2'}}
+-    end
+-    assert_redirected_to :controller => 'issues', :action => 'show', :id => Issue.last.id
++    post :new, :project_id => 1, 
++               :issue => {:tracker_id => 3,
++                          :subject => 'This is the test_new issue',
++                          :description => 'This is the description',
++                          :priority_id => 5,
++                          :estimated_hours => '',
++                          :custom_field_values => {'2' => 'Value for field 2'}}
++    assert_redirected_to :action => 'show'
+     
+     assert_equal 1, ActionMailer::Base.deliveries.size
+   end
+diff -Nur redmine-0.9.0~svn2898/test/functional/journals_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/journals_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/journals_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/journals_controller_test.rb	2009-09-21 11:03:27.979886242 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class JournalsController; def rescue_action(e) raise e end; end
+ 
+-class JournalsControllerTest < ActionController::TestCase
++class JournalsControllerTest < Test::Unit::TestCase
+   fixtures :projects, :users, :members, :member_roles, :roles, :issues, :journals, :journal_details, :enabled_modules
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/mail_handler_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/mail_handler_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/mail_handler_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/mail_handler_controller_test.rb	2009-09-21 11:03:27.975884395 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class MailHandlerController; def rescue_action(e) raise e end; end
+ 
+-class MailHandlerControllerTest < ActionController::TestCase
++class MailHandlerControllerTest < Test::Unit::TestCase
+   fixtures :users, :projects, :enabled_modules, :roles, :members, :member_roles, :issues, :issue_statuses, :trackers, :enumerations
+   
+   FIXTURES_PATH = File.dirname(__FILE__) + '/../fixtures/mail_handler'
+diff -Nur redmine-0.9.0~svn2898/test/functional/members_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/members_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/members_controller_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/members_controller_test.rb	2009-09-21 11:03:27.983883271 +0200
+@@ -22,7 +22,7 @@
+ class MembersController; def rescue_action(e) raise e end; end
+ 
+ 
+-class MembersControllerTest < ActionController::TestCase
++class MembersControllerTest < Test::Unit::TestCase
+   fixtures :projects, :members, :member_roles, :roles, :users
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/messages_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/messages_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/messages_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/messages_controller_test.rb	2009-09-21 11:03:27.979886242 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class MessagesController; def rescue_action(e) raise e end; end
+ 
+-class MessagesControllerTest < ActionController::TestCase
++class MessagesControllerTest < Test::Unit::TestCase
+   fixtures :projects, :users, :members, :member_roles, :roles, :boards, :messages, :enabled_modules
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/my_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/my_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/my_controller_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/my_controller_test.rb	2009-09-21 11:03:27.975884395 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class MyController; def rescue_action(e) raise e end; end
+ 
+-class MyControllerTest < ActionController::TestCase
++class MyControllerTest < Test::Unit::TestCase
+   fixtures :users, :issues, :issue_statuses, :trackers, :enumerations, :custom_fields
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/news_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/news_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/news_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/news_controller_test.rb	2009-09-21 11:03:27.975884395 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class NewsController; def rescue_action(e) raise e end; end
+ 
+-class NewsControllerTest < ActionController::TestCase
++class NewsControllerTest < Test::Unit::TestCase
+   fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :news, :comments
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/projects_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/projects_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/projects_controller_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/projects_controller_test.rb	2009-09-21 11:03:27.983883271 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class ProjectsController; def rescue_action(e) raise e end; end
+ 
+-class ProjectsControllerTest < ActionController::TestCase
++class ProjectsControllerTest < Test::Unit::TestCase
+   fixtures :projects, :versions, :users, :roles, :members, :member_roles, :issues, :journals, :journal_details,
+            :trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages,
+            :attachments
+diff -Nur redmine-0.9.0~svn2898/test/functional/queries_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/queries_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/queries_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/queries_controller_test.rb	2009-09-21 11:03:27.975884395 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class QueriesController; def rescue_action(e) raise e end; end
+ 
+-class QueriesControllerTest < ActionController::TestCase
++class QueriesControllerTest < Test::Unit::TestCase
+   fixtures :projects, :users, :members, :member_roles, :roles, :trackers, :issue_statuses, :issue_categories, :enumerations, :issues, :custom_fields, :custom_values, :queries
+   
+   def setup
+@@ -70,7 +70,7 @@
+          :query => {"name" => "test_new_project_public_query", "is_public" => "1"}
+          
+     q = Query.find_by_name('test_new_project_public_query')
+-    assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook', :query_id => q
++    assert_redirected_to :controller => 'issues', :action => 'index', :query_id => q
+     assert q.is_public?
+     assert q.has_default_columns?
+     assert q.valid?
+@@ -88,7 +88,7 @@
+          :query => {"name" => "test_new_project_private_query", "is_public" => "1"}
+          
+     q = Query.find_by_name('test_new_project_private_query')
+-    assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook', :query_id => q
++    assert_redirected_to :controller => 'issues', :action => 'index', :query_id => q
+     assert !q.is_public?
+     assert q.has_default_columns?
+     assert q.valid?
+@@ -104,7 +104,7 @@
+          :query => {"name" => "test_new_global_private_query", "is_public" => "1", "column_names" => ["", "tracker", "subject", "priority", "category"]}
+          
+     q = Query.find_by_name('test_new_global_private_query')
+-    assert_redirected_to :controller => 'issues', :action => 'index', :project_id => nil, :query_id => q
++    assert_redirected_to :controller => 'issues', :action => 'index', :query_id => q
+     assert !q.is_public?
+     assert !q.has_default_columns?
+     assert_equal [:tracker, :subject, :priority, :category], q.columns.collect {|c| c.name}
+diff -Nur redmine-0.9.0~svn2898/test/functional/reports_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/reports_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/reports_controller_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/reports_controller_test.rb	2009-09-21 11:03:27.987905792 +0200
+@@ -22,7 +22,7 @@
+ class ReportsController; def rescue_action(e) raise e end; end
+ 
+ 
+-class ReportsControllerTest < ActionController::TestCase
++class ReportsControllerTest < Test::Unit::TestCase
+   fixtures :all
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/repositories_bazaar_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/repositories_bazaar_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/repositories_bazaar_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/repositories_bazaar_controller_test.rb	2009-09-21 11:03:27.979886242 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class RepositoriesController; def rescue_action(e) raise e end; end
+ 
+-class RepositoriesBazaarControllerTest < ActionController::TestCase
++class RepositoriesBazaarControllerTest < Test::Unit::TestCase
+   fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :enabled_modules
+ 
+   # No '..' in the repository path
+diff -Nur redmine-0.9.0~svn2898/test/functional/repositories_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/repositories_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/repositories_controller_test.rb	2009-09-20 17:20:22.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/repositories_controller_test.rb	2009-09-21 11:03:27.983883271 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class RepositoriesController; def rescue_action(e) raise e end; end
+ 
+-class RepositoriesControllerTest < ActionController::TestCase
++class RepositoriesControllerTest < Test::Unit::TestCase
+   fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :issues, :issue_statuses, :changesets, :changes, :issue_categories, :enumerations, :custom_fields, :custom_values, :trackers
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/repositories_cvs_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/repositories_cvs_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/repositories_cvs_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/repositories_cvs_controller_test.rb	2009-09-21 11:03:27.979886242 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class RepositoriesController; def rescue_action(e) raise e end; end
+ 
+-class RepositoriesCvsControllerTest < ActionController::TestCase
++class RepositoriesCvsControllerTest < Test::Unit::TestCase
+ 
+   # No '..' in the repository path
+   REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/cvs_repository'
+diff -Nur redmine-0.9.0~svn2898/test/functional/repositories_darcs_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/repositories_darcs_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/repositories_darcs_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/repositories_darcs_controller_test.rb	2009-09-21 11:03:27.987905792 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class RepositoriesController; def rescue_action(e) raise e end; end
+ 
+-class RepositoriesDarcsControllerTest < ActionController::TestCase
++class RepositoriesDarcsControllerTest < Test::Unit::TestCase
+   fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :enabled_modules
+ 
+   # No '..' in the repository path
+diff -Nur redmine-0.9.0~svn2898/test/functional/repositories_git_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/repositories_git_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/repositories_git_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/repositories_git_controller_test.rb	2009-09-21 11:03:27.983883271 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class RepositoriesController; def rescue_action(e) raise e end; end
+ 
+-class RepositoriesGitControllerTest < ActionController::TestCase
++class RepositoriesGitControllerTest < Test::Unit::TestCase
+   fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :enabled_modules
+ 
+   # No '..' in the repository path
+diff -Nur redmine-0.9.0~svn2898/test/functional/repositories_mercurial_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/repositories_mercurial_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/repositories_mercurial_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/repositories_mercurial_controller_test.rb	2009-09-21 11:03:27.983883271 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class RepositoriesController; def rescue_action(e) raise e end; end
+ 
+-class RepositoriesMercurialControllerTest < ActionController::TestCase
++class RepositoriesMercurialControllerTest < Test::Unit::TestCase
+   fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :enabled_modules
+ 
+   # No '..' in the repository path
+diff -Nur redmine-0.9.0~svn2898/test/functional/repositories_subversion_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/repositories_subversion_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/repositories_subversion_controller_test.rb	2009-09-20 17:20:22.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/repositories_subversion_controller_test.rb	2009-09-21 11:03:27.987905792 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class RepositoriesController; def rescue_action(e) raise e end; end
+ 
+-class RepositoriesSubversionControllerTest < ActionController::TestCase
++class RepositoriesSubversionControllerTest < Test::Unit::TestCase
+   fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules,
+            :repositories, :issues, :issue_statuses, :changesets, :changes,
+            :issue_categories, :enumerations, :custom_fields, :custom_values, :trackers
+diff -Nur redmine-0.9.0~svn2898/test/functional/roles_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/roles_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/roles_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/roles_controller_test.rb	2009-09-21 11:03:27.975884395 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class RolesController; def rescue_action(e) raise e end; end
+ 
+-class RolesControllerTest < ActionController::TestCase
++class RolesControllerTest < Test::Unit::TestCase
+   fixtures :roles, :users, :members, :member_roles, :workflows
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/search_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/search_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/search_controller_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/search_controller_test.rb	2009-09-21 11:03:27.979886242 +0200
+@@ -4,7 +4,7 @@
+ # Re-raise errors caught by the controller.
+ class SearchController; def rescue_action(e) raise e end; end
+ 
+-class SearchControllerTest < ActionController::TestCase
++class SearchControllerTest < Test::Unit::TestCase
+   fixtures :projects, :enabled_modules, :roles, :users, :members, :member_roles,
+            :issues, :trackers, :issue_statuses,
+            :custom_fields, :custom_values,
+diff -Nur redmine-0.9.0~svn2898/test/functional/settings_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/settings_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/settings_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/settings_controller_test.rb	2009-09-21 11:03:27.987905792 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class SettingsController; def rescue_action(e) raise e end; end
+ 
+-class SettingsControllerTest < ActionController::TestCase
++class SettingsControllerTest < Test::Unit::TestCase
+   fixtures :users
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/sys_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/sys_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/sys_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/sys_controller_test.rb	2009-09-21 11:03:27.983883271 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class SysController; def rescue_action(e) raise e end; end
+ 
+-class SysControllerTest < ActionController::TestCase
++class SysControllerTest < Test::Unit::TestCase
+   fixtures :projects, :repositories
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/timelog_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/timelog_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/timelog_controller_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/timelog_controller_test.rb	2009-09-21 11:03:27.987905792 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class TimelogController; def rescue_action(e) raise e end; end
+ 
+-class TimelogControllerTest < ActionController::TestCase
++class TimelogControllerTest < Test::Unit::TestCase
+   fixtures :projects, :enabled_modules, :roles, :members, :member_roles, :issues, :time_entries, :users, :trackers, :enumerations, :issue_statuses, :custom_fields, :custom_values
+ 
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/trackers_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/trackers_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/trackers_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/trackers_controller_test.rb	2009-09-21 11:03:27.975884395 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class TrackersController; def rescue_action(e) raise e end; end
+ 
+-class TrackersControllerTest < ActionController::TestCase
++class TrackersControllerTest < Test::Unit::TestCase
+   fixtures :trackers, :projects, :projects_trackers, :users, :issues
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/users_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/users_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/users_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/users_controller_test.rb	2009-09-21 11:03:27.979886242 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class UsersController; def rescue_action(e) raise e end; end
+ 
+-class UsersControllerTest < ActionController::TestCase
++class UsersControllerTest < Test::Unit::TestCase
+   include Redmine::I18n
+   
+   fixtures :users, :projects, :members, :member_roles, :roles
+diff -Nur redmine-0.9.0~svn2898/test/functional/versions_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/versions_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/versions_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/versions_controller_test.rb	2009-09-21 11:03:27.991893602 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class VersionsController; def rescue_action(e) raise e end; end
+ 
+-class VersionsControllerTest < ActionController::TestCase
++class VersionsControllerTest < Test::Unit::TestCase
+   fixtures :projects, :versions, :issues, :users, :roles, :members, :member_roles, :enabled_modules
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/watchers_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/watchers_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/watchers_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/watchers_controller_test.rb	2009-09-21 11:03:27.983883271 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class WatchersController; def rescue_action(e) raise e end; end
+ 
+-class WatchersControllerTest < ActionController::TestCase
++class WatchersControllerTest < Test::Unit::TestCase
+   fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules,
+            :issues, :trackers, :projects_trackers, :issue_statuses, :enumerations, :watchers
+   
+diff -Nur redmine-0.9.0~svn2898/test/functional/welcome_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/welcome_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/welcome_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/welcome_controller_test.rb	2009-09-21 11:03:27.979886242 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class WelcomeController; def rescue_action(e) raise e end; end
+ 
+-class WelcomeControllerTest < ActionController::TestCase
++class WelcomeControllerTest < Test::Unit::TestCase
+   fixtures :projects, :news
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/wiki_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/wiki_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/wiki_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/wiki_controller_test.rb	2009-09-21 11:03:27.987905792 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class WikiController; def rescue_action(e) raise e end; end
+ 
+-class WikiControllerTest < ActionController::TestCase
++class WikiControllerTest < Test::Unit::TestCase
+   fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions, :attachments
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/wikis_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/wikis_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/wikis_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/wikis_controller_test.rb	2009-09-21 11:03:27.975884395 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class WikisController; def rescue_action(e) raise e end; end
+ 
+-class WikisControllerTest < ActionController::TestCase
++class WikisControllerTest < Test::Unit::TestCase
+   fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :wikis
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/functional/workflows_controller_test.rb redmine-0.9.0~svn2898.unpatched/test/functional/workflows_controller_test.rb
+--- redmine-0.9.0~svn2898/test/functional/workflows_controller_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/functional/workflows_controller_test.rb	2009-09-21 11:03:27.979886242 +0200
+@@ -21,7 +21,7 @@
+ # Re-raise errors caught by the controller.
+ class WorkflowsController; def rescue_action(e) raise e end; end
+ 
+-class WorkflowsControllerTest < ActionController::TestCase
++class WorkflowsControllerTest < Test::Unit::TestCase
+   fixtures :roles, :trackers, :workflows
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/helper_testcase.rb redmine-0.9.0~svn2898.unpatched/test/helper_testcase.rb
+--- redmine-0.9.0~svn2898/test/helper_testcase.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/helper_testcase.rb	2009-09-21 11:03:27.991893602 +0200
+@@ -4,7 +4,7 @@
+   attr_accessor :request, :url
+ end
+ 
+-class HelperTestCase < ActiveSupport::TestCase
++class HelperTestCase < Test::Unit::TestCase
+ 
+   # Add other helpers here if you need them
+   include ActionView::Helpers::ActiveRecordHelper
+diff -Nur redmine-0.9.0~svn2898/test/test_helper.rb redmine-0.9.0~svn2898.unpatched/test/test_helper.rb
+--- redmine-0.9.0~svn2898/test/test_helper.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/test_helper.rb	2009-09-21 11:03:27.971883106 +0200
+@@ -21,7 +21,7 @@
+ require File.expand_path(File.dirname(__FILE__) + '/helper_testcase')
+ require File.join(RAILS_ROOT,'test', 'mocks', 'open_id_authentication_mock.rb')
+ 
+-class ActiveSupport::TestCase
++class Test::Unit::TestCase
+   # Transactional fixtures accelerate your tests by wrapping each test method
+   # in a transaction that's rolled back on completion.  This ensures that the
+   # test database remains unchanged so your fixtures don't have to be reloaded
+@@ -55,7 +55,7 @@
+   end
+   
+   def test_uploaded_file(name, mime)
+-    ActionController::TestUploadedFile.new(ActiveSupport::TestCase.fixture_path + "/files/#{name}", mime)
++    ActionController::TestUploadedFile.new(Test::Unit::TestCase.fixture_path + "/files/#{name}", mime)
+   end
+   
+   # Use a temporary directory for attachment related tests
+diff -Nur redmine-0.9.0~svn2898/test/unit/activity_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/activity_test.rb
+--- redmine-0.9.0~svn2898/test/unit/activity_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/activity_test.rb	2009-09-21 11:03:27.963883323 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class ActivityTest < ActiveSupport::TestCase
++class ActivityTest < Test::Unit::TestCase
+   fixtures :projects, :versions, :attachments, :users, :roles, :members, :member_roles, :issues, :journals, :journal_details,
+            :trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages
+ 
+diff -Nur redmine-0.9.0~svn2898/test/unit/attachment_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/attachment_test.rb
+--- redmine-0.9.0~svn2898/test/unit/attachment_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/attachment_test.rb	2009-09-21 11:03:27.963883323 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class AttachmentTest < ActiveSupport::TestCase
++class AttachmentTest < Test::Unit::TestCase
+   fixtures :issues, :users
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/unit/auth_source_ldap_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/auth_source_ldap_test.rb
+--- redmine-0.9.0~svn2898/test/unit/auth_source_ldap_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/auth_source_ldap_test.rb	2009-09-21 11:03:27.955883539 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class AuthSourceLdapTest < ActiveSupport::TestCase
++class AuthSourceLdapTest < Test::Unit::TestCase
+ 
+   def setup
+   end
+diff -Nur redmine-0.9.0~svn2898/test/unit/board_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/board_test.rb
+--- redmine-0.9.0~svn2898/test/unit/board_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/board_test.rb	2009-09-21 11:03:27.947882777 +0200
+@@ -1,6 +1,6 @@
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class BoardTest < ActiveSupport::TestCase
++class BoardTest < Test::Unit::TestCase
+   fixtures :projects, :boards, :messages
+ 
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/unit/calendar_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/calendar_test.rb
+--- redmine-0.9.0~svn2898/test/unit/calendar_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/calendar_test.rb	2009-09-21 11:03:27.951883158 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class CalendarTest < ActiveSupport::TestCase
++class CalendarTest < Test::Unit::TestCase
+   
+   def test_monthly
+     c = Redmine::Helpers::Calendar.new(Date.today, :fr, :month)
+diff -Nur redmine-0.9.0~svn2898/test/unit/changeset_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/changeset_test.rb
+--- redmine-0.9.0~svn2898/test/unit/changeset_test.rb	2009-09-20 17:20:22.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/changeset_test.rb	2009-09-21 11:03:27.947882777 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class ChangesetTest < ActiveSupport::TestCase
++class ChangesetTest < Test::Unit::TestCase
+   fixtures :projects, :repositories, :issues, :issue_statuses, :changesets, :changes, :issue_categories, :enumerations, :custom_fields, :custom_values, :users, :members, :member_roles, :trackers
+ 
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/unit/comment_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/comment_test.rb
+--- redmine-0.9.0~svn2898/test/unit/comment_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/comment_test.rb	2009-09-21 11:03:27.951883158 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class CommentTest < ActiveSupport::TestCase
++class CommentTest < Test::Unit::TestCase
+   fixtures :users, :news, :comments
+ 
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/unit/custom_field_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/custom_field_test.rb
+--- redmine-0.9.0~svn2898/test/unit/custom_field_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/custom_field_test.rb	2009-09-21 11:03:27.971883106 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class CustomFieldTest < ActiveSupport::TestCase
++class CustomFieldTest < Test::Unit::TestCase
+   fixtures :custom_fields
+   
+   def test_create
+diff -Nur redmine-0.9.0~svn2898/test/unit/custom_value_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/custom_value_test.rb
+--- redmine-0.9.0~svn2898/test/unit/custom_value_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/custom_value_test.rb	2009-09-21 11:03:27.967882795 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class CustomValueTest < ActiveSupport::TestCase
++class CustomValueTest < Test::Unit::TestCase
+   fixtures :custom_fields
+ 
+   def test_string_field_validation_with_blank_value
+diff -Nur redmine-0.9.0~svn2898/test/unit/default_data_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/default_data_test.rb
+--- redmine-0.9.0~svn2898/test/unit/default_data_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/default_data_test.rb	2009-09-21 11:03:27.955883539 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class DefaultDataTest < ActiveSupport::TestCase
++class DefaultDataTest < Test::Unit::TestCase
+   include Redmine::I18n
+   fixtures :roles
+   
+diff -Nur redmine-0.9.0~svn2898/test/unit/document_category_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/document_category_test.rb
+--- redmine-0.9.0~svn2898/test/unit/document_category_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/document_category_test.rb	2009-09-21 11:03:27.951883158 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class DocumentCategoryTest < ActiveSupport::TestCase
++class DocumentCategoryTest < Test::Unit::TestCase
+   fixtures :enumerations, :documents
+ 
+   def test_should_be_an_enumeration
+diff -Nur redmine-0.9.0~svn2898/test/unit/document_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/document_test.rb
+--- redmine-0.9.0~svn2898/test/unit/document_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/document_test.rb	2009-09-21 11:03:27.943884003 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class DocumentTest < ActiveSupport::TestCase
++class DocumentTest < Test::Unit::TestCase
+   fixtures :projects, :enumerations, :documents
+ 
+   def test_create
+diff -Nur redmine-0.9.0~svn2898/test/unit/enabled_module_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/enabled_module_test.rb
+--- redmine-0.9.0~svn2898/test/unit/enabled_module_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/enabled_module_test.rb	2009-09-21 11:03:27.963883323 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class EnabledModuleTest < ActiveSupport::TestCase
++class EnabledModuleTest < Test::Unit::TestCase
+   fixtures :projects, :wikis
+   
+   def test_enabling_wiki_should_create_a_wiki
+diff -Nur redmine-0.9.0~svn2898/test/unit/enumeration_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/enumeration_test.rb
+--- redmine-0.9.0~svn2898/test/unit/enumeration_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/enumeration_test.rb	2009-09-21 11:03:27.947882777 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class EnumerationTest < ActiveSupport::TestCase
++class EnumerationTest < Test::Unit::TestCase
+   fixtures :enumerations, :issues
+ 
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/unit/filesystem_adapter_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/filesystem_adapter_test.rb
+--- redmine-0.9.0~svn2898/test/unit/filesystem_adapter_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/filesystem_adapter_test.rb	2009-09-21 11:03:27.943884003 +0200
+@@ -2,7 +2,7 @@
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+ 
+-class FilesystemAdapterTest < ActiveSupport::TestCase
++class FilesystemAdapterTest < Test::Unit::TestCase
+   
+   REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/filesystem_repository'  
+   
+diff -Nur redmine-0.9.0~svn2898/test/unit/git_adapter_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/git_adapter_test.rb
+--- redmine-0.9.0~svn2898/test/unit/git_adapter_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/git_adapter_test.rb	2009-09-21 11:03:27.943884003 +0200
+@@ -1,6 +1,6 @@
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class GitAdapterTest < ActiveSupport::TestCase
++class GitAdapterTest < Test::Unit::TestCase
+   REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
+ 
+   if File.directory?(REPOSITORY_PATH)  
+diff -Nur redmine-0.9.0~svn2898/test/unit/group_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/group_test.rb
+--- redmine-0.9.0~svn2898/test/unit/group_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/group_test.rb	2009-09-21 11:03:27.963883323 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class GroupTest < ActiveSupport::TestCase
++class GroupTest < Test::Unit::TestCase
+   fixtures :all
+ 
+   def test_create
+diff -Nur redmine-0.9.0~svn2898/test/unit/issue_category_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/issue_category_test.rb
+--- redmine-0.9.0~svn2898/test/unit/issue_category_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/issue_category_test.rb	2009-09-21 11:03:27.955883539 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class IssueCategoryTest < ActiveSupport::TestCase
++class IssueCategoryTest < Test::Unit::TestCase
+   fixtures :issue_categories, :issues
+ 
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/unit/issue_priority_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/issue_priority_test.rb
+--- redmine-0.9.0~svn2898/test/unit/issue_priority_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/issue_priority_test.rb	2009-09-21 11:03:27.963883323 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class IssuePriorityTest < ActiveSupport::TestCase
++class IssuePriorityTest < Test::Unit::TestCase
+   fixtures :enumerations, :issues
+ 
+   def test_should_be_an_enumeration
+diff -Nur redmine-0.9.0~svn2898/test/unit/issue_status_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/issue_status_test.rb
+--- redmine-0.9.0~svn2898/test/unit/issue_status_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/issue_status_test.rb	2009-09-21 11:03:27.947882777 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class IssueStatusTest < ActiveSupport::TestCase
++class IssueStatusTest < Test::Unit::TestCase
+   fixtures :issue_statuses, :issues
+ 
+   def test_create
+diff -Nur redmine-0.9.0~svn2898/test/unit/issue_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/issue_test.rb
+--- redmine-0.9.0~svn2898/test/unit/issue_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/issue_test.rb	2009-09-21 11:03:27.947882777 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class IssueTest < ActiveSupport::TestCase
++class IssueTest < Test::Unit::TestCase
+   fixtures :projects, :users, :members, :member_roles,
+            :trackers, :projects_trackers,
+            :issue_statuses, :issue_categories, :issue_relations, :workflows, 
+diff -Nur redmine-0.9.0~svn2898/test/unit/journal_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/journal_test.rb
+--- redmine-0.9.0~svn2898/test/unit/journal_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/journal_test.rb	2009-09-21 11:03:27.951883158 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class JournalTest < ActiveSupport::TestCase
++class JournalTest < Test::Unit::TestCase
+   fixtures :issues, :issue_statuses, :journals, :journal_details
+ 
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/unit/lib/redmine/access_control_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/lib/redmine/access_control_test.rb
+--- redmine-0.9.0~svn2898/test/unit/lib/redmine/access_control_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/lib/redmine/access_control_test.rb	2009-09-21 11:03:27.951883158 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../../../test_helper'
+ 
+-class Redmine::AccessControlTest < ActiveSupport::TestCase
++class Redmine::AccessControlTest < Test::Unit::TestCase
+   
+   def setup
+     @access_module = Redmine::AccessControl
+diff -Nur redmine-0.9.0~svn2898/test/unit/lib/redmine/hook_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/lib/redmine/hook_test.rb
+--- redmine-0.9.0~svn2898/test/unit/lib/redmine/hook_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/lib/redmine/hook_test.rb	2009-09-21 11:03:27.951883158 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../../../test_helper'
+ 
+-class Redmine::Hook::ManagerTest < ActiveSupport::TestCase
++class Redmine::Hook::ManagerTest < Test::Unit::TestCase
+ 
+   fixtures :issues
+   
+diff -Nur redmine-0.9.0~svn2898/test/unit/lib/redmine/i18n_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/lib/redmine/i18n_test.rb
+--- redmine-0.9.0~svn2898/test/unit/lib/redmine/i18n_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/lib/redmine/i18n_test.rb	2009-09-21 11:03:27.951883158 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../../../test_helper'
+ 
+-class Redmine::I18nTest < ActiveSupport::TestCase
++class Redmine::I18nTest < Test::Unit::TestCase
+   include Redmine::I18n
+   
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/unit/lib/redmine/mime_type_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/lib/redmine/mime_type_test.rb
+--- redmine-0.9.0~svn2898/test/unit/lib/redmine/mime_type_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/lib/redmine/mime_type_test.rb	2009-09-21 11:03:27.951883158 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../../../test_helper'
+ 
+-class Redmine::MimeTypeTest < ActiveSupport::TestCase
++class Redmine::MimeTypeTest < Test::Unit::TestCase
+   
+   def test_of
+     to_test = {'test.unk' => nil,
+diff -Nur redmine-0.9.0~svn2898/test/unit/lib/redmine/plugin_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/lib/redmine/plugin_test.rb
+--- redmine-0.9.0~svn2898/test/unit/lib/redmine/plugin_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/lib/redmine/plugin_test.rb	2009-09-21 11:03:27.951883158 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../../../test_helper'
+ 
+-class Redmine::PluginTest < ActiveSupport::TestCase
++class Redmine::PluginTest < Test::Unit::TestCase
+ 
+   def setup
+     @klass = Redmine::Plugin
+diff -Nur redmine-0.9.0~svn2898/test/unit/lib/redmine/unified_diff_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/lib/redmine/unified_diff_test.rb
+--- redmine-0.9.0~svn2898/test/unit/lib/redmine/unified_diff_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/lib/redmine/unified_diff_test.rb	2009-09-21 11:03:27.951883158 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../../../test_helper'
+ 
+-class Redmine::UnifiedDiffTest < ActiveSupport::TestCase
++class Redmine::UnifiedDiffTest < Test::Unit::TestCase
+   
+   def setup
+   end
+diff -Nur redmine-0.9.0~svn2898/test/unit/mailer_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/mailer_test.rb
+--- redmine-0.9.0~svn2898/test/unit/mailer_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/mailer_test.rb	2009-09-21 11:03:27.967882795 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class MailerTest < ActiveSupport::TestCase
++class MailerTest < Test::Unit::TestCase
+   include Redmine::I18n
+   fixtures :projects, :issues, :users, :members, :member_roles, :documents, :attachments, :news, :tokens, :journals, :journal_details, :changesets, :trackers, :issue_statuses, :enumerations, :messages, :boards, :repositories
+   
+@@ -103,19 +103,9 @@
+     journal = Journal.find(2)
+     Mailer.deliver_issue_edit(journal)
+     mail = ActionMailer::Base.deliveries.last
+-    assert_equal 1, mail.parts.size
+-    assert !mail.encoded.include?('href')
++    assert !mail.body.include?('<a href="https://mydomain.foo/issues/1">Bug #1: Can\'t print recipes</a>')
+   end
+-
+-  def test_html_mail
+-    Setting.plain_text_mail = 0
+-    journal = Journal.find(2)
+-    Mailer.deliver_issue_edit(journal)
+-    mail = ActionMailer::Base.deliveries.last
+-    assert_equal 2, mail.parts.size
+-    assert mail.encoded.include?('href')
+-  end
+-
++  
+   def test_issue_add_message_id
+     ActionMailer::Base.deliveries.clear
+     issue = Issue.find(1)
+diff -Nur redmine-0.9.0~svn2898/test/unit/mail_handler_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/mail_handler_test.rb
+--- redmine-0.9.0~svn2898/test/unit/mail_handler_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/mail_handler_test.rb	2009-09-21 11:03:27.955883539 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class MailHandlerTest < ActiveSupport::TestCase
++class MailHandlerTest < Test::Unit::TestCase
+   fixtures :users, :projects, 
+                    :enabled_modules,
+                    :roles,
+diff -Nur redmine-0.9.0~svn2898/test/unit/member_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/member_test.rb
+--- redmine-0.9.0~svn2898/test/unit/member_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/member_test.rb	2009-09-21 11:03:27.967882795 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class MemberTest < ActiveSupport::TestCase
++class MemberTest < Test::Unit::TestCase
+   fixtures :users, :projects, :roles, :members, :member_roles
+ 
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/unit/mercurial_adapter_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/mercurial_adapter_test.rb
+--- redmine-0.9.0~svn2898/test/unit/mercurial_adapter_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/mercurial_adapter_test.rb	2009-09-21 11:03:27.943884003 +0200
+@@ -2,7 +2,7 @@
+ begin
+   require 'mocha'
+   
+-  class MercurialAdapterTest < ActiveSupport::TestCase
++  class MercurialAdapterTest < Test::Unit::TestCase
+     
+     TEMPLATES_DIR = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATES_DIR
+     TEMPLATE_NAME = Redmine::Scm::Adapters::MercurialAdapter::TEMPLATE_NAME
+diff -Nur redmine-0.9.0~svn2898/test/unit/message_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/message_test.rb
+--- redmine-0.9.0~svn2898/test/unit/message_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/message_test.rb	2009-09-21 11:03:27.955883539 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class MessageTest < ActiveSupport::TestCase
++class MessageTest < Test::Unit::TestCase
+   fixtures :projects, :roles, :members, :member_roles, :boards, :messages, :users, :watchers
+ 
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/unit/news_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/news_test.rb
+--- redmine-0.9.0~svn2898/test/unit/news_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/news_test.rb	2009-09-21 11:03:27.967882795 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class NewsTest < ActiveSupport::TestCase
++class NewsTest < Test::Unit::TestCase
+   fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, :news
+ 
+   def valid_news
+diff -Nur redmine-0.9.0~svn2898/test/unit/project_test.rb.orig redmine-0.9.0~svn2898.unpatched/test/unit/project_test.rb.orig
+--- redmine-0.9.0~svn2898/test/unit/project_test.rb.orig	1970-01-01 01:00:00.000000000 +0100
++++ redmine-0.9.0~svn2898.unpatched/test/unit/project_test.rb.orig	2009-09-20 16:06:57.000000000 +0200
+@@ -0,0 +1,355 @@
++# redMine - project management software
++# Copyright (C) 2006-2007  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.
++
++require File.dirname(__FILE__) + '/../test_helper'
++
++class ProjectTest < ActiveSupport::TestCase
++  fixtures :projects, :enabled_modules, 
++           :issues, :issue_statuses, :journals, :journal_details,
++           :users, :members, :member_roles, :roles, :projects_trackers, :trackers, :boards,
++           :queries
++
++  def setup
++    @ecookbook = Project.find(1)
++    @ecookbook_sub1 = Project.find(3)
++  end
++  
++  def test_truth
++    assert_kind_of Project, @ecookbook
++    assert_equal "eCookbook", @ecookbook.name
++  end
++  
++  def test_update
++    assert_equal "eCookbook", @ecookbook.name
++    @ecookbook.name = "eCook"
++    assert @ecookbook.save, @ecookbook.errors.full_messages.join("; ")
++    @ecookbook.reload
++    assert_equal "eCook", @ecookbook.name
++  end
++  
++  def test_validate
++    @ecookbook.name = ""
++    assert !@ecookbook.save
++    assert_equal 1, @ecookbook.errors.count
++    assert_equal I18n.translate('activerecord.errors.messages.blank'), @ecookbook.errors.on(:name)
++  end
++  
++  def test_validate_identifier
++    to_test = {"abc" => true,
++               "ab12" => true,
++               "ab-12" => true,
++               "12" => false,
++               "new" => false}
++               
++    to_test.each do |identifier, valid|
++      p = Project.new
++      p.identifier = identifier
++      p.valid?
++      assert_equal valid, p.errors.on('identifier').nil?
++    end
++  end
++  
++  def test_members_should_be_active_users
++    Project.all.each do |project|
++      assert_nil project.members.detect {|m| !(m.user.is_a?(User) && m.user.active?) }
++    end
++  end
++  
++  def test_users_should_be_active_users
++    Project.all.each do |project|
++      assert_nil project.users.detect {|u| !(u.is_a?(User) && u.active?) }
++    end
++  end
++  
++  def test_archive
++    user = @ecookbook.members.first.user
++    @ecookbook.archive
++    @ecookbook.reload
++    
++    assert !@ecookbook.active?
++    assert !user.projects.include?(@ecookbook)
++    # Subproject are also archived
++    assert !@ecookbook.children.empty?
++    assert @ecookbook.descendants.active.empty?
++  end
++  
++  def test_unarchive
++    user = @ecookbook.members.first.user
++    @ecookbook.archive
++    # A subproject of an archived project can not be unarchived
++    assert !@ecookbook_sub1.unarchive
++    
++    # Unarchive project
++    assert @ecookbook.unarchive
++    @ecookbook.reload
++    assert @ecookbook.active?
++    assert user.projects.include?(@ecookbook)
++    # Subproject can now be unarchived
++    @ecookbook_sub1.reload
++    assert @ecookbook_sub1.unarchive
++  end
++  
++  def test_destroy
++    # 2 active members
++    assert_equal 2, @ecookbook.members.size
++    # and 1 is locked
++    assert_equal 3, Member.find(:all, :conditions => ['project_id = ?', @ecookbook.id]).size
++    # some boards
++    assert @ecookbook.boards.any?
++    
++    @ecookbook.destroy
++    # make sure that the project non longer exists
++    assert_raise(ActiveRecord::RecordNotFound) { Project.find(@ecookbook.id) }
++    # make sure related data was removed
++    assert Member.find(:all, :conditions => ['project_id = ?', @ecookbook.id]).empty?
++    assert Board.find(:all, :conditions => ['project_id = ?', @ecookbook.id]).empty?
++  end
++  
++  def test_move_an_orphan_project_to_a_root_project
++    sub = Project.find(2)
++    sub.set_parent! @ecookbook
++    assert_equal @ecookbook.id, sub.parent.id
++    @ecookbook.reload
++    assert_equal 4, @ecookbook.children.size
++  end
++  
++  def test_move_an_orphan_project_to_a_subproject
++    sub = Project.find(2)
++    assert sub.set_parent!(@ecookbook_sub1)
++  end
++  
++  def test_move_a_root_project_to_a_project
++    sub = @ecookbook
++    assert sub.set_parent!(Project.find(2))
++  end
++  
++  def test_should_not_move_a_project_to_its_children
++    sub = @ecookbook
++    assert !(sub.set_parent!(Project.find(3)))
++  end
++  
++  def test_set_parent_should_add_roots_in_alphabetical_order
++    ProjectCustomField.delete_all
++    Project.delete_all
++    Project.create!(:name => 'Project C', :identifier => 'project-c').set_parent!(nil)
++    Project.create!(:name => 'Project B', :identifier => 'project-b').set_parent!(nil)
++    Project.create!(:name => 'Project D', :identifier => 'project-d').set_parent!(nil)
++    Project.create!(:name => 'Project A', :identifier => 'project-a').set_parent!(nil)
++    
++    assert_equal 4, Project.count
++    assert_equal Project.all.sort_by(&:name), Project.all.sort_by(&:lft)
++  end
++  
++  def test_set_parent_should_add_children_in_alphabetical_order
++    ProjectCustomField.delete_all
++    parent = Project.create!(:name => 'Parent', :identifier => 'parent')
++    Project.create!(:name => 'Project C', :identifier => 'project-c').set_parent!(parent)
++    Project.create!(:name => 'Project B', :identifier => 'project-b').set_parent!(parent)
++    Project.create!(:name => 'Project D', :identifier => 'project-d').set_parent!(parent)
++    Project.create!(:name => 'Project A', :identifier => 'project-a').set_parent!(parent)
++    
++    parent.reload
++    assert_equal 4, parent.children.size
++    assert_equal parent.children.sort_by(&:name), parent.children
++  end
++  
++  def test_rebuild_should_sort_children_alphabetically
++    ProjectCustomField.delete_all
++    parent = Project.create!(:name => 'Parent', :identifier => 'parent')
++    Project.create!(:name => 'Project C', :identifier => 'project-c').move_to_child_of(parent)
++    Project.create!(:name => 'Project B', :identifier => 'project-b').move_to_child_of(parent)
++    Project.create!(:name => 'Project D', :identifier => 'project-d').move_to_child_of(parent)
++    Project.create!(:name => 'Project A', :identifier => 'project-a').move_to_child_of(parent)
++    
++    Project.update_all("lft = NULL, rgt = NULL")
++    Project.rebuild!
++    
++    parent.reload
++    assert_equal 4, parent.children.size
++    assert_equal parent.children.sort_by(&:name), parent.children
++  end
++  
++  def test_parent
++    p = Project.find(6).parent
++    assert p.is_a?(Project)
++    assert_equal 5, p.id
++  end
++  
++  def test_ancestors
++    a = Project.find(6).ancestors
++    assert a.first.is_a?(Project)
++    assert_equal [1, 5], a.collect(&:id)
++  end
++  
++  def test_root
++    r = Project.find(6).root
++    assert r.is_a?(Project)
++    assert_equal 1, r.id
++  end
++  
++  def test_children
++    c = Project.find(1).children
++    assert c.first.is_a?(Project)
++    assert_equal [5, 3, 4], c.collect(&:id)
++  end
++  
++  def test_descendants
++    d = Project.find(1).descendants
++    assert d.first.is_a?(Project)
++    assert_equal [5, 6, 3, 4], d.collect(&:id)
++  end
++  
++  def test_users_by_role
++    users_by_role = Project.find(1).users_by_role
++    assert_kind_of Hash, users_by_role
++    role = Role.find(1)
++    assert_kind_of Array, users_by_role[role]
++    assert users_by_role[role].include?(User.find(2))
++  end
++  
++  def test_rolled_up_trackers
++    parent = Project.find(1)
++    parent.trackers = Tracker.find([1,2])
++    child = parent.children.find(3)
++  
++    assert_equal [1, 2], parent.tracker_ids
++    assert_equal [2, 3], child.trackers.collect(&:id)
++    
++    assert_kind_of Tracker, parent.rolled_up_trackers.first
++    assert_equal Tracker.find(1), parent.rolled_up_trackers.first
++    
++    assert_equal [1, 2, 3], parent.rolled_up_trackers.collect(&:id)
++    assert_equal [2, 3], child.rolled_up_trackers.collect(&:id)
++  end
++  
++  def test_rolled_up_trackers_should_ignore_archived_subprojects
++    parent = Project.find(1)
++    parent.trackers = Tracker.find([1,2])
++    child = parent.children.find(3)
++    child.trackers = Tracker.find([1,3])
++    parent.children.each(&:archive)
++    
++    assert_equal [1,2], parent.rolled_up_trackers.collect(&:id)
++  end
++  
++  def test_next_identifier
++    ProjectCustomField.delete_all
++    Project.create!(:name => 'last', :identifier => 'p2008040')
++    assert_equal 'p2008041', Project.next_identifier
++  end
++  
++  def test_next_identifier_first_project
++    Project.delete_all
++    assert_nil Project.next_identifier
++  end
++  
++
++  def test_enabled_module_names_should_not_recreate_enabled_modules
++    project = Project.find(1)
++    # Remove one module
++    modules = project.enabled_modules.slice(0..-2)
++    assert modules.any?
++    assert_difference 'EnabledModule.count', -1 do
++      project.enabled_module_names = modules.collect(&:name)
++    end
++    project.reload
++    # Ids should be preserved
++    assert_equal project.enabled_module_ids.sort, modules.collect(&:id).sort
++  end
++
++  def test_copy_from_existing_project
++    source_project = Project.find(1)
++    copied_project = Project.copy_from(1)
++
++    assert copied_project
++    # Cleared attributes
++    assert copied_project.id.blank?
++    assert copied_project.name.blank?
++    assert copied_project.identifier.blank?
++    
++    # Duplicated attributes
++    assert_equal source_project.description, copied_project.description
++    assert_equal source_project.enabled_modules, copied_project.enabled_modules
++    assert_equal source_project.trackers, copied_project.trackers
++
++    # Default attributes
++    assert_equal 1, copied_project.status
++  end
++  
++  # Context: Project#copy
++  def test_copy_should_copy_issues
++    # Setup
++    ProjectCustomField.destroy_all # Custom values are a mess to isolate in tests
++    source_project = Project.find(2)
++    Project.destroy_all :identifier => "copy-test"
++    project = Project.new(:name => 'Copy Test', :identifier => 'copy-test')
++    project.trackers = source_project.trackers
++    assert project.valid?
++    
++    assert project.issues.empty?
++    assert project.copy(source_project)
++
++    # Tests
++    assert_equal source_project.issues.size, project.issues.size
++    project.issues.each do |issue|
++      assert issue.valid?
++      assert ! issue.assigned_to.blank?
++      assert_equal project, issue.project
++    end
++  end
++  
++  def test_copy_should_copy_members
++    # Setup
++    ProjectCustomField.destroy_all # Custom values are a mess to isolate in tests
++    source_project = Project.find(2)
++    project = Project.new(:name => 'Copy Test', :identifier => 'copy-test')
++    project.trackers = source_project.trackers
++    project.enabled_modules = source_project.enabled_modules
++    assert project.valid?
++
++    assert project.members.empty?
++    assert project.copy(source_project)
++
++    # Tests
++    assert_equal source_project.members.size, project.members.size
++    project.members.each do |member|
++      assert member
++      assert_equal project, member.project
++    end
++  end
++
++  def test_copy_should_copy_project_level_queries
++    # Setup
++    ProjectCustomField.destroy_all # Custom values are a mess to isolate in tests
++    source_project = Project.find(2)
++    project = Project.new(:name => 'Copy Test', :identifier => 'copy-test')
++    project.trackers = source_project.trackers
++    project.enabled_modules = source_project.enabled_modules
++    assert project.valid?
++
++    assert project.queries.empty?
++    assert project.copy(source_project)
++
++    # Tests
++    assert_equal source_project.queries.size, project.queries.size
++    project.queries.each do |query|
++      assert query
++      assert_equal project, query.project
++    end
++  end
++
++end
+diff -Nur redmine-0.9.0~svn2898/test/unit/project_test.rb.rej redmine-0.9.0~svn2898.unpatched/test/unit/project_test.rb.rej
+--- redmine-0.9.0~svn2898/test/unit/project_test.rb.rej	1970-01-01 01:00:00.000000000 +0100
++++ redmine-0.9.0~svn2898.unpatched/test/unit/project_test.rb.rej	2009-09-21 11:03:27.967882795 +0200
+@@ -0,0 +1,17 @@
++***************
++*** 17,23 ****
++  
++  require File.dirname(__FILE__) + '/../test_helper'
++  
++- class ProjectTest < ActiveSupport::TestCase
++    fixtures :projects, :enabled_modules, 
++             :issues, :issue_statuses, :journals, :journal_details,
++             :users, :members, :member_roles, :roles, :projects_trackers, :trackers, :boards,
++--- 17,23 ----
++  
++  require File.dirname(__FILE__) + '/../test_helper'
++  
+++ class ProjectTest < Test::Unit::TestCase
++    fixtures :projects, :enabled_modules, 
++             :issues, :issue_statuses, :journals, :journal_details,
++             :users, :members, :member_roles, :roles, :projects_trackers, :trackers, :boards,
+diff -Nur redmine-0.9.0~svn2898/test/unit/query_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/query_test.rb
+--- redmine-0.9.0~svn2898/test/unit/query_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/query_test.rb	2009-09-21 11:03:27.963883323 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class QueryTest < ActiveSupport::TestCase
++class QueryTest < Test::Unit::TestCase
+   fixtures :projects, :enabled_modules, :users, :members, :member_roles, :roles, :trackers, :issue_statuses, :issue_categories, :enumerations, :issues, :watchers, :custom_fields, :custom_values, :versions, :queries
+ 
+   def test_custom_fields_for_all_projects_should_be_available_in_global_queries
+diff -Nur redmine-0.9.0~svn2898/test/unit/repository_bazaar_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/repository_bazaar_test.rb
+--- redmine-0.9.0~svn2898/test/unit/repository_bazaar_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/repository_bazaar_test.rb	2009-09-21 11:03:27.947882777 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class RepositoryBazaarTest < ActiveSupport::TestCase
++class RepositoryBazaarTest < Test::Unit::TestCase
+   fixtures :projects
+   
+   # No '..' in the repository path
+diff -Nur redmine-0.9.0~svn2898/test/unit/repository_cvs_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/repository_cvs_test.rb
+--- redmine-0.9.0~svn2898/test/unit/repository_cvs_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/repository_cvs_test.rb	2009-09-21 11:03:27.963883323 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ require 'pp'
+-class RepositoryCvsTest < ActiveSupport::TestCase
++class RepositoryCvsTest < Test::Unit::TestCase
+   fixtures :projects
+   
+   # No '..' in the repository path
+diff -Nur redmine-0.9.0~svn2898/test/unit/repository_darcs_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/repository_darcs_test.rb
+--- redmine-0.9.0~svn2898/test/unit/repository_darcs_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/repository_darcs_test.rb	2009-09-21 11:03:27.963883323 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class RepositoryDarcsTest < ActiveSupport::TestCase
++class RepositoryDarcsTest < Test::Unit::TestCase
+   fixtures :projects
+   
+   # No '..' in the repository path
+diff -Nur redmine-0.9.0~svn2898/test/unit/repository_filesystem_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/repository_filesystem_test.rb
+--- redmine-0.9.0~svn2898/test/unit/repository_filesystem_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/repository_filesystem_test.rb	2009-09-21 11:03:27.955883539 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class RepositoryFilesystemTest < ActiveSupport::TestCase
++class RepositoryFilesystemTest < Test::Unit::TestCase
+   fixtures :projects
+   
+   # No '..' in the repository path
+diff -Nur redmine-0.9.0~svn2898/test/unit/repository_git_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/repository_git_test.rb
+--- redmine-0.9.0~svn2898/test/unit/repository_git_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/repository_git_test.rb	2009-09-21 11:03:27.943884003 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class RepositoryGitTest < ActiveSupport::TestCase
++class RepositoryGitTest < Test::Unit::TestCase
+   fixtures :projects
+   
+   # No '..' in the repository path
+diff -Nur redmine-0.9.0~svn2898/test/unit/repository_mercurial_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/repository_mercurial_test.rb
+--- redmine-0.9.0~svn2898/test/unit/repository_mercurial_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/repository_mercurial_test.rb	2009-09-21 11:03:27.943884003 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class RepositoryMercurialTest < ActiveSupport::TestCase
++class RepositoryMercurialTest < Test::Unit::TestCase
+   fixtures :projects
+   
+   # No '..' in the repository path
+diff -Nur redmine-0.9.0~svn2898/test/unit/repository_subversion_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/repository_subversion_test.rb
+--- redmine-0.9.0~svn2898/test/unit/repository_subversion_test.rb	2009-09-20 17:20:22.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/repository_subversion_test.rb	2009-09-21 11:03:27.947882777 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class RepositorySubversionTest < ActiveSupport::TestCase
++class RepositorySubversionTest < Test::Unit::TestCase
+   fixtures :projects
+   
+   # No '..' in the repository path for svn
+diff -Nur redmine-0.9.0~svn2898/test/unit/repository_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/repository_test.rb
+--- redmine-0.9.0~svn2898/test/unit/repository_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/repository_test.rb	2009-09-21 11:03:27.955883539 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class RepositoryTest < ActiveSupport::TestCase
++class RepositoryTest < Test::Unit::TestCase
+   fixtures :projects,
+            :trackers,
+            :projects_trackers,
+diff -Nur redmine-0.9.0~svn2898/test/unit/role_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/role_test.rb
+--- redmine-0.9.0~svn2898/test/unit/role_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/role_test.rb	2009-09-21 11:03:27.951883158 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class RoleTest < ActiveSupport::TestCase
++class RoleTest < Test::Unit::TestCase
+   fixtures :roles, :workflows
+ 
+   def test_copy_workflows
+diff -Nur redmine-0.9.0~svn2898/test/unit/search_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/search_test.rb
+--- redmine-0.9.0~svn2898/test/unit/search_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/search_test.rb	2009-09-21 11:03:27.967882795 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class SearchTest < ActiveSupport::TestCase
++class SearchTest < Test::Unit::TestCase
+   fixtures :users,
+            :members, 
+            :member_roles,
+diff -Nur redmine-0.9.0~svn2898/test/unit/setting_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/setting_test.rb
+--- redmine-0.9.0~svn2898/test/unit/setting_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/setting_test.rb	2009-09-21 11:03:27.971883106 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class SettingTest < ActiveSupport::TestCase
++class SettingTest < Test::Unit::TestCase
+   
+   def test_read_default
+     assert_equal "Redmine", Setting.app_title
+diff -Nur redmine-0.9.0~svn2898/test/unit/subversion_adapter_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/subversion_adapter_test.rb
+--- redmine-0.9.0~svn2898/test/unit/subversion_adapter_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/subversion_adapter_test.rb	2009-09-21 11:03:27.963883323 +0200
+@@ -19,7 +19,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class SubversionAdapterTest < ActiveSupport::TestCase
++class SubversionAdapterTest < Test::Unit::TestCase
+   
+   if find_executable0('svn')
+     def test_client_version
+diff -Nur redmine-0.9.0~svn2898/test/unit/time_entry_activity_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/time_entry_activity_test.rb
+--- redmine-0.9.0~svn2898/test/unit/time_entry_activity_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/time_entry_activity_test.rb	2009-09-21 11:03:27.947882777 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class TimeEntryActivityTest < ActiveSupport::TestCase
++class TimeEntryActivityTest < Test::Unit::TestCase
+   fixtures :enumerations, :time_entries
+ 
+   def test_should_be_an_enumeration
+diff -Nur redmine-0.9.0~svn2898/test/unit/time_entry_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/time_entry_test.rb
+--- redmine-0.9.0~svn2898/test/unit/time_entry_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/time_entry_test.rb	2009-09-21 11:03:27.955883539 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class TimeEntryTest < ActiveSupport::TestCase
++class TimeEntryTest < Test::Unit::TestCase
+   fixtures :issues, :projects, :users, :time_entries
+ 
+   def test_hours_format
+diff -Nur redmine-0.9.0~svn2898/test/unit/token_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/token_test.rb
+--- redmine-0.9.0~svn2898/test/unit/token_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/token_test.rb	2009-09-21 11:03:27.943884003 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class TokenTest < ActiveSupport::TestCase
++class TokenTest < Test::Unit::TestCase
+   fixtures :tokens
+ 
+   def test_create
+diff -Nur redmine-0.9.0~svn2898/test/unit/tracker_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/tracker_test.rb
+--- redmine-0.9.0~svn2898/test/unit/tracker_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/tracker_test.rb	2009-09-21 11:03:27.947882777 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class TrackerTest < ActiveSupport::TestCase
++class TrackerTest < Test::Unit::TestCase
+   fixtures :trackers, :workflows
+ 
+   def test_copy_workflows
+diff -Nur redmine-0.9.0~svn2898/test/unit/user_preference_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/user_preference_test.rb
+--- redmine-0.9.0~svn2898/test/unit/user_preference_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/user_preference_test.rb	2009-09-21 11:03:27.967882795 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class UserPreferenceTest < ActiveSupport::TestCase
++class UserPreferenceTest < Test::Unit::TestCase
+   fixtures :users, :user_preferences
+ 
+   def test_create
+diff -Nur redmine-0.9.0~svn2898/test/unit/user_test.rb.orig redmine-0.9.0~svn2898.unpatched/test/unit/user_test.rb.orig
+--- redmine-0.9.0~svn2898/test/unit/user_test.rb.orig	1970-01-01 01:00:00.000000000 +0100
++++ redmine-0.9.0~svn2898.unpatched/test/unit/user_test.rb.orig	2009-09-20 16:06:57.000000000 +0200
+@@ -0,0 +1,223 @@
++# redMine - project management software
++# Copyright (C) 2006  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.
++
++require File.dirname(__FILE__) + '/../test_helper'
++
++class UserTest < ActiveSupport::TestCase
++  fixtures :users, :members, :projects, :roles, :member_roles
++
++  def setup
++    @admin = User.find(1)
++    @jsmith = User.find(2)
++    @dlopper = User.find(3)
++  end
++  
++  def test_truth
++    assert_kind_of User, @jsmith
++  end
++
++  def test_create
++    user = User.new(:firstname => "new", :lastname => "user", :mail => "newuser at somenet.foo")
++    
++    user.login = "jsmith"
++    user.password, user.password_confirmation = "password", "password"
++    # login uniqueness
++    assert !user.save
++    assert_equal 1, user.errors.count
++  
++    user.login = "newuser"
++    user.password, user.password_confirmation = "passwd", "password"
++    # password confirmation
++    assert !user.save
++    assert_equal 1, user.errors.count
++
++    user.password, user.password_confirmation = "password", "password"
++    assert user.save
++  end
++  
++  def test_mail_uniqueness_should_not_be_case_sensitive
++    u = User.new(:firstname => "new", :lastname => "user", :mail => "newuser at somenet.foo")
++    u.login = 'newuser1'
++    u.password, u.password_confirmation = "password", "password"
++    assert u.save
++    
++    u = User.new(:firstname => "new", :lastname => "user", :mail => "newUser at Somenet.foo")
++    u.login = 'newuser2'
++    u.password, u.password_confirmation = "password", "password"
++    assert !u.save
++    assert_equal I18n.translate('activerecord.errors.messages.taken'), u.errors.on(:mail)
++  end
++
++  def test_update
++    assert_equal "admin", @admin.login
++    @admin.login = "john"
++    assert @admin.save, @admin.errors.full_messages.join("; ")
++    @admin.reload
++    assert_equal "john", @admin.login
++  end
++  
++  def test_destroy
++    User.find(2).destroy
++    assert_nil User.find_by_id(2)
++    assert Member.find_all_by_user_id(2).empty?
++  end
++  
++  def test_validate
++    @admin.login = ""
++    assert !@admin.save
++    assert_equal 1, @admin.errors.count
++  end
++  
++  def test_password
++    user = User.try_to_login("admin", "admin")
++    assert_kind_of User, user
++    assert_equal "admin", user.login
++    user.password = "hello"
++    assert user.save
++    
++    user = User.try_to_login("admin", "hello")
++    assert_kind_of User, user
++    assert_equal "admin", user.login
++    assert_equal User.hash_password("hello"), user.hashed_password    
++  end
++  
++  def test_name_format
++    assert_equal 'Smith, John', @jsmith.name(:lastname_coma_firstname)
++    Setting.user_format = :firstname_lastname
++    assert_equal 'John Smith', @jsmith.reload.name
++    Setting.user_format = :username
++    assert_equal 'jsmith', @jsmith.reload.name
++  end
++  
++  def test_lock
++    user = User.try_to_login("jsmith", "jsmith")
++    assert_equal @jsmith, user
++    
++    @jsmith.status = User::STATUS_LOCKED
++    assert @jsmith.save
++    
++    user = User.try_to_login("jsmith", "jsmith")
++    assert_equal nil, user  
++  end
++  
++  def test_create_anonymous
++    AnonymousUser.delete_all
++    anon = User.anonymous
++    assert !anon.new_record?
++    assert_kind_of AnonymousUser, anon
++  end
++  
++  def test_rss_key
++    assert_nil @jsmith.rss_token
++    key = @jsmith.rss_key
++    assert_equal 40, key.length
++    
++    @jsmith.reload
++    assert_equal key, @jsmith.rss_key
++  end
++  
++  def test_roles_for_project
++    # user with a role
++    roles = @jsmith.roles_for_project(Project.find(1))
++    assert_kind_of Role, roles.first
++    assert_equal "Manager", roles.first.name
++    
++    # user with no role
++    assert_nil @dlopper.roles_for_project(Project.find(2)).detect {|role| role.member?}
++  end
++  
++  def test_mail_notification_all
++    @jsmith.mail_notification = true
++    @jsmith.notified_project_ids = []
++    @jsmith.save
++    @jsmith.reload
++    assert @jsmith.projects.first.recipients.include?(@jsmith.mail)
++  end
++  
++  def test_mail_notification_selected
++    @jsmith.mail_notification = false
++    @jsmith.notified_project_ids = [1]
++    @jsmith.save
++    @jsmith.reload
++    assert Project.find(1).recipients.include?(@jsmith.mail)
++  end
++  
++  def test_mail_notification_none
++    @jsmith.mail_notification = false
++    @jsmith.notified_project_ids = []
++    @jsmith.save
++    @jsmith.reload
++    assert !@jsmith.projects.first.recipients.include?(@jsmith.mail)
++  end
++  
++  def test_comments_sorting_preference
++    assert !@jsmith.wants_comments_in_reverse_order?
++    @jsmith.pref.comments_sorting = 'asc'
++    assert !@jsmith.wants_comments_in_reverse_order?
++    @jsmith.pref.comments_sorting = 'desc'
++    assert @jsmith.wants_comments_in_reverse_order?
++  end
++  
++  def test_find_by_mail_should_be_case_insensitive
++    u = User.find_by_mail('JSmith at somenet.foo')
++    assert_not_nil u
++    assert_equal 'jsmith at somenet.foo', u.mail
++  end
++  
++  def test_random_password
++    u = User.new
++    u.random_password
++    assert !u.password.blank?
++    assert !u.password_confirmation.blank?
++  end
++  
++  if Object.const_defined?(:OpenID)
++    
++  def test_setting_identity_url
++    normalized_open_id_url = 'http://example.com/'
++    u = User.new( :identity_url => 'http://example.com/' )
++    assert_equal normalized_open_id_url, u.identity_url
++  end
++
++  def test_setting_identity_url_without_trailing_slash
++    normalized_open_id_url = 'http://example.com/'
++    u = User.new( :identity_url => 'http://example.com' )
++    assert_equal normalized_open_id_url, u.identity_url
++  end
++
++  def test_setting_identity_url_without_protocol
++    normalized_open_id_url = 'http://example.com/'
++    u = User.new( :identity_url => 'example.com' )
++    assert_equal normalized_open_id_url, u.identity_url
++  end
++    
++  def test_setting_blank_identity_url
++    u = User.new( :identity_url => 'example.com' )
++    u.identity_url = ''
++    assert u.identity_url.blank?
++  end
++    
++  def test_setting_invalid_identity_url
++    u = User.new( :identity_url => 'this is not an openid url' )
++    assert u.identity_url.blank?
++  end
++  
++  else
++    puts "Skipping openid tests."
++  end
++
++end
+diff -Nur redmine-0.9.0~svn2898/test/unit/user_test.rb.rej redmine-0.9.0~svn2898.unpatched/test/unit/user_test.rb.rej
+--- redmine-0.9.0~svn2898/test/unit/user_test.rb.rej	1970-01-01 01:00:00.000000000 +0100
++++ redmine-0.9.0~svn2898.unpatched/test/unit/user_test.rb.rej	2009-09-21 11:03:27.955883539 +0200
+@@ -0,0 +1,17 @@
++***************
++*** 17,23 ****
++  
++  require File.dirname(__FILE__) + '/../test_helper'
++  
++- class UserTest < ActiveSupport::TestCase
++    fixtures :users, :members, :projects, :roles, :member_roles
++  
++    def setup
++--- 17,23 ----
++  
++  require File.dirname(__FILE__) + '/../test_helper'
++  
+++ class UserTest < Test::Unit::TestCase
++    fixtures :users, :members, :projects, :roles, :member_roles
++  
++    def setup
+diff -Nur redmine-0.9.0~svn2898/test/unit/version_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/version_test.rb
+--- redmine-0.9.0~svn2898/test/unit/version_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/version_test.rb	2009-09-21 11:03:27.947882777 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class VersionTest < ActiveSupport::TestCase
++class VersionTest < Test::Unit::TestCase
+   fixtures :projects, :users, :issues, :issue_statuses, :trackers, :enumerations, :versions
+ 
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/unit/watcher_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/watcher_test.rb
+--- redmine-0.9.0~svn2898/test/unit/watcher_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/watcher_test.rb	2009-09-21 11:03:27.963883323 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class WatcherTest < ActiveSupport::TestCase
++class WatcherTest < Test::Unit::TestCase
+   fixtures :issues, :users
+ 
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/unit/wiki_content_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/wiki_content_test.rb
+--- redmine-0.9.0~svn2898/test/unit/wiki_content_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/wiki_content_test.rb	2009-09-21 11:03:27.963883323 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class WikiContentTest < ActiveSupport::TestCase
++class WikiContentTest < Test::Unit::TestCase
+   fixtures :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions, :users
+ 
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/unit/wiki_page_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/wiki_page_test.rb
+--- redmine-0.9.0~svn2898/test/unit/wiki_page_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/wiki_page_test.rb	2009-09-21 11:03:27.963883323 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class WikiPageTest < ActiveSupport::TestCase
++class WikiPageTest < Test::Unit::TestCase
+   fixtures :projects, :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions
+ 
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/unit/wiki_redirect_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/wiki_redirect_test.rb
+--- redmine-0.9.0~svn2898/test/unit/wiki_redirect_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/wiki_redirect_test.rb	2009-09-21 11:03:27.955883539 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class WikiRedirectTest < ActiveSupport::TestCase
++class WikiRedirectTest < Test::Unit::TestCase
+   fixtures :projects, :wikis
+ 
+   def setup
+diff -Nur redmine-0.9.0~svn2898/test/unit/wiki_test.rb redmine-0.9.0~svn2898.unpatched/test/unit/wiki_test.rb
+--- redmine-0.9.0~svn2898/test/unit/wiki_test.rb	2009-09-20 16:06:57.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/test/unit/wiki_test.rb	2009-09-21 11:03:27.951883158 +0200
+@@ -17,7 +17,7 @@
+ 
+ require File.dirname(__FILE__) + '/../test_helper'
+ 
+-class WikiTest < ActiveSupport::TestCase
++class WikiTest < Test::Unit::TestCase
+   fixtures :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions
+   
+   def test_create
+diff -Nur redmine-0.9.0~svn2898/test/unit/wiki_test.rb.orig redmine-0.9.0~svn2898.unpatched/test/unit/wiki_test.rb.orig
+--- redmine-0.9.0~svn2898/test/unit/wiki_test.rb.orig	1970-01-01 01:00:00.000000000 +0100
++++ redmine-0.9.0~svn2898.unpatched/test/unit/wiki_test.rb.orig	2009-09-20 16:06:57.000000000 +0200
+@@ -0,0 +1,44 @@
++# redMine - project management software
++# Copyright (C) 2006-2007  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.
++
++require File.dirname(__FILE__) + '/../test_helper'
++
++class WikiTest < ActiveSupport::TestCase
++  fixtures :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions
++  
++  def test_create
++    wiki = Wiki.new(:project => Project.find(2))
++    assert !wiki.save
++    assert_equal 1, wiki.errors.count
++  
++    wiki.start_page = "Start page"
++    assert wiki.save
++  end
++
++  def test_update
++    @wiki = Wiki.find(1)
++    @wiki.start_page = "Another start page"
++    assert @wiki.save
++    @wiki.reload
++    assert_equal "Another start page", @wiki.start_page
++  end
++  
++  def test_titleize
++    assert_equal 'Page_title_with_CAPITALES', Wiki.titleize('page title with CAPITALES')
++    assert_equal 'テスト', Wiki.titleize('テスト')
++  end
++end
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/about.yml redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/about.yml
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/about.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/about.yml	2009-09-21 11:03:28.055905007 +0200
+@@ -4,4 +4,4 @@
+ summary: Enhances the plugin mechanism to perform more flexible sharing
+ description: The Rails Engines plugin allows the sharing of almost any type of code or asset that you could use in a Rails application, including controllers, models, stylesheets, and views.
+ license: MIT
+-version: 2.3.2
+\ Pas de fin de ligne à la fin du fichier.
++version: 2.1.0
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/boot.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/boot.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/boot.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/boot.rb	2009-09-21 11:03:28.051904486 +0200
+@@ -1,7 +1,7 @@
+ begin
+   require 'rails/version'
+-  unless Rails::VERSION::MAJOR >= 2 && Rails::VERSION::MINOR >= 3 && Rails::VERSION::TINY >= 2
+-    raise "This version of the engines plugin requires Rails 2.3.2 or later!"
++  unless Rails::VERSION::MAJOR >= 2 && Rails::VERSION::MINOR >= 2 && Rails::VERSION::TINY >= 0
++    raise "This version of the engines plugin requires Rails 2.2.0 or later!"
+   end
+ end
+ 
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/init.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/init.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/init.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/init.rb	2009-09-21 11:03:28.051904486 +0200
+@@ -1,5 +1,5 @@
+ # Only call Engines.init once, in the after_initialize block so that Rails
+ # plugin reloading works when turned on
+ config.after_initialize do
+-  Engines.init(initializer) if defined? :Engines
+-end
+\ Pas de fin de ligne à la fin du fichier.
++  Engines.init if defined? :Engines
++end
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/lib/engines/plugin/loader.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/lib/engines/plugin/loader.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/lib/engines/plugin/loader.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/lib/engines/plugin/loader.rb	2009-09-21 11:03:28.055905007 +0200
+@@ -5,7 +5,14 @@
+         def register_plugin_as_loaded(plugin)
+           super plugin
+           Engines.plugins << plugin
++          register_to_routing(plugin)
+         end    
++        
++        # Registers the plugin's controller_paths for the routing system. 
++        def register_to_routing(plugin)
++          initializer.configuration.controller_paths += plugin.select_existing_paths(:controller_paths)
++          initializer.configuration.controller_paths.uniq!
++        end
+     end
+   end
+ end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/lib/engines/plugin.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/lib/engines/plugin.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/lib/engines/plugin.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/lib/engines/plugin.rb	2009-09-21 11:03:28.051904486 +0200
+@@ -4,9 +4,23 @@
+ #
+ #   Engines.plugins[:plugin_name]
+ #
++# If this plugin contains paths in directories other than <tt>app/controllers</tt>,
++# <tt>app/helpers</tt>, <tt>app/models</tt> and <tt>components</tt>, authors can
++# declare this by adding extra paths to #code_paths:
++#
++#    Rails.plugin[:my_plugin].code_paths << "app/sweepers" << "vendor/my_lib"
++#
+ # Other properties of the Plugin instance can also be set.
+ module Engines
+   class Plugin < Rails::Plugin    
++    # Plugins can add code paths to this attribute in init.rb if they 
++    # need plugin directories to be added to the load path, i.e.
++    #
++    #   plugin.code_paths << 'app/other_classes'
++    #
++    # Defaults to ["app/controllers", "app/helpers", "app/models", "components"]
++    attr_accessor :code_paths
++
+     # Plugins can add paths to this attribute in init.rb if they need
+     # controllers loaded from additional locations. 
+     attr_accessor :controller_paths
+@@ -18,6 +32,16 @@
+     attr_accessor :public_directory   
+     
+     protected
++  
++      # The default set of code paths which will be added to $LOAD_PATH
++      # and Dependencies.load_paths
++      def default_code_paths
++        # lib will actually be removed from the load paths when we call
++        # uniq! in #inject_into_load_paths, but it's important to keep it
++        # around (for the documentation tasks, for instance).
++        %w(app/controllers app/helpers app/models components lib)
++      end
++    
+       # The default set of code paths which will be added to the routing system
+       def default_controller_paths
+         %w(app/controllers components)
+@@ -34,23 +58,41 @@
+   
+     def initialize(directory)
+       super directory
++      @code_paths = default_code_paths
+       @controller_paths = default_controller_paths
+       @public_directory = default_public_directory
+     end
+   
++    # Returns a list of paths this plugin wishes to make available in $LOAD_PATH
++    #
++    # Overwrites the correspondend method in the superclass  
++    def load_paths
++      report_nonexistant_or_empty_plugin! unless valid?
++      select_existing_paths :code_paths
++    end
++    
+     # Extends the superclass' load method to additionally mirror public assets
+     def load(initializer)
+       return if loaded?
+       super initializer
++      add_plugin_view_paths
+       add_plugin_locale_paths
+       Assets.mirror_files_for(self)
+     end    
+   
+-    # select those paths that actually exist in the plugin's directory
++    # for code_paths and controller_paths select those paths that actually 
++    # exist in the plugin's directory
+     def select_existing_paths(name)
+       Engines.select_existing_paths(self.send(name).map { |p| File.join(directory, p) })
+     end    
+ 
++    def add_plugin_view_paths
++      view_path = File.join(directory, 'app', 'views')
++      if File.exist?(view_path)
++        ActionController::Base.prepend_view_path(view_path) # push it just underneath the app
++      end
++    end
++
+     def add_plugin_locale_paths
+       locale_path = File.join(directory, 'locales')
+       return unless File.exists?(locale_path)
+@@ -70,6 +112,11 @@
+       "#{File.basename(Engines.public_directory)}/#{name}"
+     end
+     
++    # The path to this plugin's routes file
++    def routes_path
++      File.join(directory, "routes.rb")
++    end
++
+     # The directory containing this plugin's migrations (<tt>plugin/db/migrate</tt>)
+     def migration_directory
+       File.join(self.directory, 'db', 'migrate')
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/lib/engines/rails_extensions/action_mailer.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/lib/engines/rails_extensions/action_mailer.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/lib/engines/rails_extensions/action_mailer.rb	1970-01-01 01:00:00.000000000 +0100
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/lib/engines/rails_extensions/action_mailer.rb	2009-09-21 11:03:28.055905007 +0200
+@@ -0,0 +1,82 @@
++# The way ActionMailer is coded in terms of finding templates is very restrictive, to the point
++# where all templates for rendering must exist under the single base path. This is difficult to
++# work around without re-coding significant parts of the action mailer code.
++#
++# ---
++#
++# The MailTemplates module overrides two (private) methods from ActionMailer to enable mail 
++# templates within plugins:
++#
++# [+template_path+]             which now produces the contents of #template_paths
++# [+initialize_template_class+] which now find the first matching template and creates 
++#                               an ActionVew::Base instance with the correct view_paths
++#
++# Ideally ActionMailer would use the same template-location logic as ActionView, and the same
++# view paths as ActionController::Base.view_paths, but it currently does not.
++module Engines::RailsExtensions::ActionMailer
++  def self.included(base) #:nodoc:
++    base.class_eval do
++      alias_method_chain :template_path, :engine_additions
++      alias_method_chain :initialize_template_class, :engine_additions
++    end
++  end
++
++  private
++  
++    #--
++    # ActionMailer::Base#create uses two mechanisms to determine the proper template file(s)
++    # to load. Firstly, it searches within the template_root for files that much the explicit
++    # (or implicit) part encodings (like signup.text.plain.erb for the signup action). 
++    # This is how implicit multipart emails are built, by the way.
++    #
++    # Secondly, it then creates an ActionMailer::Base instance with it's view_paths parameter
++    # set to the template_root, so that ActionMailer will then take over rendering the
++    # templates.
++    #
++    # Ideally, ActionMailer would pass the same set of view paths as it gets in a normal
++    # request (i.e. ActionController::Base.view_paths), so that all possible view paths
++    # were searched. However, this seems to introduce some problems with helper modules.
++    #
++    # So instead, and because we have to fool these two independent parts of ActionMailer,
++    # we fudge with the mechanisms it uses to find the templates (via template_paths, and
++    # template_path_with_engine_additions), and then intercept the creation of the ActionView
++    # instance so we can set the view_paths (in initialize_template_class_with_engine_additions).
++    #++
++  
++    # Returns all possible template paths for the current mailer, including those
++    # within the loaded plugins.
++    def template_paths
++      paths = Engines.plugins.by_precedence.map { |p| "#{p.directory}/app/views/#{mailer_name}" }
++      paths.unshift(template_path_without_engine_additions) unless Engines.disable_application_view_loading
++      paths
++    end
++
++    # Return something that Dir[] can glob against. This method is called in 
++    # ActionMailer::Base#create! and used as part of an argument to Dir. We can
++    # take advantage of this by using some of the features of Dir.glob to search
++    # multiple paths for matching files.
++    def template_path_with_engine_additions
++      "{#{template_paths.join(",")}}"
++    end
++
++    # Return an instance of ActionView::Base with the view paths set to all paths
++    # in ActionController::Base.view_paths (i.e. including all plugin view paths)
++    def initialize_template_class_with_engine_additions(assigns)
++      # I'd like to just return this, but I get problems finding methods in helper
++      # modules if the method implemention from the regular class is not called
++      # 
++      # ActionView::Base.new(ActionController::Base.view_paths.dup, assigns, self)
++      renderer = initialize_template_class_without_engine_additions(assigns)
++      renderer.view_paths.unshift(*ActionController::Base.view_paths.dup)
++      renderer
++    end
++end
++
++# We don't need to do this if ActionMailer hasn't been loaded.
++if Object.const_defined?(:ActionMailer) 
++  module ::ActionMailer #:nodoc:
++    class Base #:nodoc:
++      include Engines::RailsExtensions::ActionMailer
++    end
++  end
++end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/lib/engines/rails_extensions/routing.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/lib/engines/rails_extensions/routing.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/lib/engines/rails_extensions/routing.rb	1970-01-01 01:00:00.000000000 +0100
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/lib/engines/rails_extensions/routing.rb	2009-09-21 11:03:28.055905007 +0200
+@@ -0,0 +1,83 @@
++# Effective use of Rails' routes can help create a tidy and elegant set of URLs,
++# and is a significant part of creating an external API for your web application.
++# 
++# When developing plugins which contain controllers, it seems obvious that including
++# the corresponding routes would be extremely useful. This is particularly true
++# when exposing RESTful resources using the new REST-ian features of Rails.
++#
++# == Including routes in your plugin
++#
++# The engines plugin makes it possible to include a set of routes within your plugin
++# very simply, as it turns out. Include a <tt>routes.rb</tt> file like the one below 
++# at the root of your plugin (along-side <tt>init.rb</tt> and <tt>lib/</tt>):
++# 
++#   connect "/login", :controller => "account", :action => "login"
++#
++#   # add a named route
++#   logout "/logout", :controller => "account", :action => "logout"
++#
++#   # some restful stuff
++#   resources :things do |t|
++#     t.resources :other_things
++#   end
++# 
++# Everywhere in a normal <tt>RAILS_ROOT/config/routes.rb</tt> file 
++# where you might have <tt>map.connect</tt>, you just use <tt>connect</tt> in your 
++# plugin's <tt>routes.rb</tt>.
++# 
++# === Hooking it up in your application
++#
++# While it would be possible to have each plugin's routes automagically included into
++# the application's route set, to do so would actually be a stunningly bad idea. Route
++# priority is the key issue here. You, the application developer, needs to be in complete
++# control when it comes to specifying the priority of routes in your application, since 
++# the ordering of your routes directly affects how Rails will interpret incoming requests.
++# 
++# To add plugin routes into your application's <tt>routes.rb</tt> file, you need to explicitly 
++# map them in using the Engines::RailsExtensions::Routing#from_plugin method:
++# 
++#   ApplicationController::Routing::Routes.draw do |map|
++#
++#     map.connect "/app_stuff", :controller => "application_thing" # etc...
++#
++#     # This line includes the routes from the given plugin at this point, giving you
++#     # control over the priority of your application routes 
++#     map.from_plugin :your_plugin
++#
++#     map.connect ":controller/:action/:id"
++#   end
++# 
++# By including routes in plugins which have controllers, you can now share in a simple way 
++# a compact and elegant URL scheme which corresponds to those controllers.
++#
++# ---
++#
++# The Engines::RailsExtensions::Routing module defines extensions to Rails' 
++# routing (ActionController::Routing) mechanism such that routes can be loaded 
++# from a given plugin.
++#
++# The key method is Engines::RailsExtensions::Routing#from_plugin, which can be called 
++# within your application's <tt>config/routes.rb</tt> file to load plugin routes at that point.
++#
++module Engines::RailsExtensions::Routing
++  # Loads the set of routes from within a plugin and evaluates them at this
++  # point within an application's main <tt>routes.rb</tt> file.
++  #
++  # Plugin routes are loaded from <tt><plugin_root>/routes.rb</tt>.
++  def from_plugin(name)
++    map = self # to make 'map' available within the plugin route file
++    routes_path = Engines.plugins[name].routes_path
++    eval(IO.read(routes_path), binding, routes_path) if File.file?(routes_path)
++  end
++end
++
++  
++module ::ActionController #:nodoc:
++  module Routing #:nodoc:
++    class RouteSet #:nodoc:
++      class Mapper #:nodoc:
++        include Engines::RailsExtensions::Routing
++      end
++    end
++  end
++end
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/lib/engines/testing.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/lib/engines/testing.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/lib/engines/testing.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/lib/engines/testing.rb	2009-09-21 11:03:28.051904486 +0200
+@@ -67,14 +67,10 @@
+   # This method is called by the engines-supplied plugin testing rake tasks
+   def self.setup_plugin_fixtures(plugins = Engines.plugins.by_precedence)
+     
+-    # First, clear the directory
+-    Dir.glob("#{self.temporary_fixtures_directory}/*.yml").each{|fixture| File.delete(fixture)}
+-    
+     # Copy all plugin fixtures, and then the application fixtures, into this directory
+     plugins.each do |plugin| 
+       plugin_fixtures_directory =  File.join(plugin.directory, "test", "fixtures")
+-      plugin_app_directory =  File.join(plugin.directory, "app")
+-      if File.directory?(plugin_app_directory) && File.directory?(plugin_fixtures_directory)
++      if File.directory?(plugin_fixtures_directory)
+         Engines.mirror_files_from(plugin_fixtures_directory, self.temporary_fixtures_directory)
+       end
+     end
+@@ -88,14 +84,4 @@
+     ActiveSupport::TestCase.fixture_path = self.temporary_fixtures_directory
+     $LOAD_PATH.unshift self.temporary_fixtures_directory
+   end
+-  
+-  # overridden test should be in test/{unit,functional,integration}/{plugin_name}/{test_name}
+-  def self.override_tests_from_app
+-    filename = caller.first.split(":").first
+-    plugin_name = filename.split("/")[-4]
+-    test_kind = filename.split("/")[-2]
+-    override_file = File.expand_path(File.join(File.dirname(filename), "..", "..", "..", "..", "..", "test", 
+-                                               test_kind, plugin_name, File.basename(filename)))
+-    load(override_file) if File.exist?(override_file)
+-  end
+ end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/lib/engines.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/lib/engines.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/lib/engines.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/lib/engines.rb	2009-09-21 11:03:28.055905007 +0200
+@@ -43,7 +43,7 @@
+   
+   # List of extensions to load, can be changed in init.rb before calling Engines.init
+   mattr_accessor :rails_extensions
+-  self.rails_extensions = %w(asset_helpers form_tag_helpers migrations dependencies)
++  self.rails_extensions = %w(action_mailer asset_helpers form_tag_helpers routing migrations dependencies)
+   
+   # The name of the public directory to mirror public engine assets into.
+   # Defaults to <tt>RAILS_ROOT/public/plugin_assets</tt>.
+@@ -68,7 +68,7 @@
+   mattr_accessor :disable_application_code_loading
+   self.disable_application_code_loading = false
+   
+-  # Set this to true if code should not be mixed (i.e. it will be loaded
++  # Set this ti true if code should not be mixed (i.e. it will be loaded
+   # from the first valid path on $LOAD_PATH)
+   mattr_accessor :disable_code_mixing
+   self.disable_code_mixing = false
+@@ -81,7 +81,7 @@
+   self.code_mixing_file_types = %w(controller helper)
+   
+   class << self
+-    def init(initializer)
++    def init
+       load_extensions
+       Engines::Assets.initialize_base_public_directory
+     end
+@@ -124,9 +124,9 @@
+     # and that they are placed within plugin/app/things (the pluralized form of 'thing').
+     # 
+     # It's important to note that you'll also want to ensure that the "things" are
+-    # on your load path by including them in Rails load path mechanism, e.g. in init.rb:
++    # on your load path in your plugin's init.rb:
+     #
+-    #  ActiveSupport::Dependencies.load_paths << File.join(File.dirname(__FILE__), 'app', 'things'))
++    #   Rails.plugins[:my_plugin].code_paths << "app/things"
+     #
+     def mix_code_from(*types)
+       self.code_mixing_file_types += types.map { |x| x.to_s.singularize }
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/Rakefile redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/Rakefile
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/Rakefile	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/Rakefile	2009-09-21 11:03:28.051904486 +0200
+@@ -172,29 +172,16 @@
+   
+   desc 'Update the plugin and tests files in the test application from the plugin'
+   task :mirror_engine_files => [:test_app, :copy_engines_plugin] do
+-    puts "> Tweaking generated application to be suitable for testing"
+-    
+-    # Replace the Rails plugin loader with the engines one.
++    puts "> Modifying default config files to load engines plugin"
+     insert_line("require File.join(File.dirname(__FILE__), '../vendor/plugins/engines/boot')",
+                 :into => 'config/environment.rb',
+                 :after => "require File.join(File.dirname(__FILE__), 'boot')")
+-    
+-    # Add the engines test helper to handle fixtures & stuff.
++                
++    insert_line('map.from_plugin :test_routing', :into => 'config/routes.rb', 
++                :after => /\AActionController::Routing::Routes/)
++                
+     insert_line("require 'engines_test_helper'", :into => 'test/test_helper.rb')
+     
+-    # Run engine plugin tests when running the application 
+-    insert_line("task :test => ['test:engines:all']", :into => 'Rakefile')
+-    
+-    # We want exceptions to be raised
+-    insert_line("def rescue_action(e) raise e end;", 
+-                :into => "app/controllers/application_controller.rb",
+-                :after => "class ApplicationController < ActionController::Base")
+-    
+-    # We need this method to test where actions are being rendered from.
+-    insert_line("include RenderInformation", 
+-                :into => "app/controllers/application_controller.rb",
+-                :after => "class ApplicationController < ActionController::Base")
+-    
+     puts "> Mirroring test application files into #{test_app_dir}"
+     mirror_test_files('app')
+     mirror_test_files('lib')
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/tasks/engines.rake redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/tasks/engines.rake
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/tasks/engines.rake	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/tasks/engines.rake	2009-09-21 11:03:28.051904486 +0200
+@@ -118,10 +118,10 @@
+     end
+     
+     desc 'Migrate a specified plugin.'
+-    task(:plugin => :environment) do
+-      name = ENV['NAME']
++    task({:plugin => :environment}, :name, :version) do |task, args|
++      name = args[:name] || ENV['NAME']
+       if plugin = Engines.plugins[name]
+-        version = ENV['VERSION']
++        version = args[:version] || ENV['VERSION']
+         puts "Migrating #{plugin.name} to " + (version ? "version #{version}" : 'latest version') + " ..."
+         plugin.migrate(version ? version.to_i : nil)
+       else
+@@ -152,8 +152,8 @@
+ 
+ # this is just a modification of the original task in railties/lib/tasks/documentation.rake, 
+ # because the default task doesn't support subdirectories like <plugin>/app or
+-# <plugin>/component. These tasks now include every file under a plugin's load paths (see
+-# Plugin#load_paths).
++# <plugin>/component. These tasks now include every file under a plugin's code paths (see
++# Plugin#code_paths).
+ namespace :doc do
+ 
+   plugins = FileList['vendor/plugins/**'].collect { |plugin| File.basename(plugin) }
+@@ -172,9 +172,9 @@
+         options << '--line-numbers' << '--inline-source'
+         options << '-T html'
+ 
+-        # Include every file in the plugin's load_paths (see Plugin#load_paths)
++        # Include every file in the plugin's code_paths (see Plugin#code_paths)
+         if Engines.plugins[plugin]
+-          files.include("#{plugin_base}/{#{Engines.plugins[plugin].load_paths.join(",")}}/**/*.rb")
++          files.include("#{plugin_base}/{#{Engines.plugins[plugin].code_paths.join(",")}}/**/*.rb")
+         end
+         if File.exists?("#{plugin_base}/README")
+           files.include("#{plugin_base}/README")    
+@@ -217,34 +217,6 @@
+ -~===============( ... as you were ... )============================~-}
+   end
+   
+-  namespace :engines do
+-    
+-    def engine_plugins
+-      Dir["vendor/plugins/*"].select { |f| File.directory?(File.join(f, "app")) }.map { |f| File.basename(f) }.join(",")
+-    end
+-    
+-    desc "Run tests from within engines plugins (plugins with an 'app' directory)"
+-    task :all => [:units, :functionals, :integration]
+-    
+-    desc "Run unit tests from within engines plugins (plugins with an 'app' directory)"
+-    Rake::TestTask.new(:units => "test:plugins:setup_plugin_fixtures") do |t|
+-      t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/unit/**/*_test.rb"
+-      t.verbose = true
+-    end
+-
+-    desc "Run functional tests from within engines plugins (plugins with an 'app' directory)"
+-    Rake::TestTask.new(:functionals => "test:plugins:setup_plugin_fixtures") do |t|
+-      t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/functional/**/*_test.rb"
+-      t.verbose = true
+-    end
+-
+-    desc "Run integration tests from within engines plugins (plugins with an 'app' directory)"
+-    Rake::TestTask.new(:integration => "test:plugins:setup_plugin_fixtures") do |t|
+-      t.pattern = "vendor/plugins/{#{ENV['PLUGIN'] || engine_plugins}}/test/integration/**/*_test.rb"
+-      t.verbose = true
+-    end
+-  end
+-  
+   namespace :plugins do
+ 
+     desc "Run the plugin tests in vendor/plugins/**/test (or specify with PLUGIN=name)"
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/controllers/app_and_plugin_controller.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/controllers/app_and_plugin_controller.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/controllers/app_and_plugin_controller.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/controllers/app_and_plugin_controller.rb	2009-09-21 11:03:28.031893432 +0200
+@@ -1,5 +0,0 @@
+-class AppAndPluginController < ApplicationController
+-  def an_action
+-    render_class_and_action 'from app'
+-  end
+-end
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/controllers/namespace/app_and_plugin_controller.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/controllers/namespace/app_and_plugin_controller.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/controllers/namespace/app_and_plugin_controller.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/controllers/namespace/app_and_plugin_controller.rb	2009-09-21 11:03:28.031893432 +0200
+@@ -1,5 +0,0 @@
+-class Namespace::AppAndPluginController < ApplicationController
+-  def an_action
+-    render_class_and_action 'from app'
+-  end
+-end
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/helpers/mail_helper.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/helpers/mail_helper.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/helpers/mail_helper.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/helpers/mail_helper.rb	2009-09-21 11:03:28.031893432 +0200
+@@ -1,5 +0,0 @@
+-module MailHelper
+-  def do_something_helpful(var)
+-    var.to_s.reverse
+-  end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/models/app_and_plugin_model.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/models/app_and_plugin_model.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/models/app_and_plugin_model.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/models/app_and_plugin_model.rb	2009-09-21 11:03:28.031893432 +0200
+@@ -1,3 +0,0 @@
+-class AppAndPluginModel < ActiveRecord::Base
+-  def self.report_location; TestHelper::report_location(__FILE__); end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/models/notify_mail.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/models/notify_mail.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/models/notify_mail.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/models/notify_mail.rb	2009-09-21 11:03:28.031893432 +0200
+@@ -1,26 +0,0 @@
+-class NotifyMail < ActionMailer::Base
+-
+-  helper :mail
+-  
+-  def signup(txt)
+-    body(:name => txt)
+-  end
+-  
+-  def multipart
+-    recipients 'some_address at email.com'
+-    subject    'multi part email'
+-    from       "another_user at email.com"
+-    content_type 'multipart/alternative'
+-    
+-    part :content_type => "text/html", :body => render_message("multipart_html", {})
+-    part "text/plain" do |p|
+-      p.body = render_message("multipart_plain", {})
+-    end
+-  end
+-  
+-  def implicit_multipart
+-    recipients 'some_address at email.com'
+-    subject    'multi part email'
+-    from       "another_user at email.com"
+-  end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/things/thing.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/things/thing.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/things/thing.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/things/thing.rb	2009-09-21 11:03:28.035904150 +0200
+@@ -1,3 +0,0 @@
+-class Thing
+-  def self.from_app; TestHelper::report_location(__FILE__); end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/views/app_and_plugin/a_view.html.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/views/app_and_plugin/a_view.html.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/views/app_and_plugin/a_view.html.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/views/app_and_plugin/a_view.html.erb	2009-09-21 11:03:28.035904150 +0200
+@@ -1 +0,0 @@
+-<%= TestHelper.view_path_for __FILE__ %> (from app)
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/views/namespace/app_and_plugin/a_view.html.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/views/namespace/app_and_plugin/a_view.html.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/views/namespace/app_and_plugin/a_view.html.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/views/namespace/app_and_plugin/a_view.html.erb	2009-09-21 11:03:28.035904150 +0200
+@@ -1 +0,0 @@
+-<%= TestHelper.view_path_for __FILE__ %> (from app)
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/views/notify_mail/implicit_multipart.text.html.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/views/notify_mail/implicit_multipart.text.html.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/views/notify_mail/implicit_multipart.text.html.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/views/notify_mail/implicit_multipart.text.html.erb	2009-09-21 11:03:28.035904150 +0200
+@@ -1 +0,0 @@
+-the implicit html part of the email <%= do_something_helpful("semaj") %>
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/views/notify_mail/implicit_multipart.text.plain.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/views/notify_mail/implicit_multipart.text.plain.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/views/notify_mail/implicit_multipart.text.plain.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/views/notify_mail/implicit_multipart.text.plain.erb	2009-09-21 11:03:28.035904150 +0200
+@@ -1 +0,0 @@
+-the implicit plaintext part of the email
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/views/notify_mail/multipart_html.html.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/views/notify_mail/multipart_html.html.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/views/notify_mail/multipart_html.html.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/views/notify_mail/multipart_html.html.erb	2009-09-21 11:03:28.035904150 +0200
+@@ -1 +0,0 @@
+-the html part of the email <%= do_something_helpful("semaj") %>
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/views/notify_mail/multipart_plain.html.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/views/notify_mail/multipart_plain.html.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/views/notify_mail/multipart_plain.html.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/views/notify_mail/multipart_plain.html.erb	2009-09-21 11:03:28.035904150 +0200
+@@ -1 +0,0 @@
+-the plaintext part of the email
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/views/notify_mail/signup.text.plain.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/views/notify_mail/signup.text.plain.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/views/notify_mail/signup.text.plain.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/views/notify_mail/signup.text.plain.erb	2009-09-21 11:03:28.035904150 +0200
+@@ -1,5 +0,0 @@
+-Signup template from application
+-
+-Here's a local variable set in the Mail object: <%= @name %>.
+-
+-And here's a method called in a mail helper: <%= do_something_helpful(@name) %>
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/views/plugin_mail/mail_from_plugin_with_application_template.text.plain.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/views/plugin_mail/mail_from_plugin_with_application_template.text.plain.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/views/plugin_mail/mail_from_plugin_with_application_template.text.plain.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/views/plugin_mail/mail_from_plugin_with_application_template.text.plain.erb	2009-09-21 11:03:28.035904150 +0200
+@@ -1 +0,0 @@
+-<%= @note %> (from application)
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/views/plugin_mail/multipart_from_plugin_with_application_template_plain.html.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/views/plugin_mail/multipart_from_plugin_with_application_template_plain.html.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/app/views/plugin_mail/multipart_from_plugin_with_application_template_plain.html.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/app/views/plugin_mail/multipart_from_plugin_with_application_template_plain.html.erb	2009-09-21 11:03:28.035904150 +0200
+@@ -1 +0,0 @@
+-plugin mail template loaded from application
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/functional/controller_loading_test.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/functional/controller_loading_test.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/functional/controller_loading_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/functional/controller_loading_test.rb	2009-09-21 11:03:28.047905572 +0200
+@@ -1,51 +0,0 @@
+-# Tests in this file ensure that:
+-#
+-# * plugin controller actions are found
+-# * actions defined in application controllers take precedence over those in plugins
+-# * actions in controllers in subsequently loaded plugins take precendence over those in previously loaded plugins
+-# * this works for actions in namespaced controllers accordingly
+-
+-require File.dirname(__FILE__) + '/../test_helper'
+-
+-class ControllerLoadingTest < ActionController::TestCase
+-  def setup
+-    @request    = ActionController::TestRequest.new
+-    @response   = ActionController::TestResponse.new
+-  end
+-
+-  # plugin controller actions should be found
+-
+-	def test_WITH_an_action_defined_only_in_a_plugin_IT_should_use_this_action
+-	  get_action_on_controller :an_action, :alpha_plugin
+-    assert_response_body 'rendered in AlphaPluginController#an_action'
+-  end
+-  
+-	def test_WITH_an_action_defined_only_in_a_namespaced_plugin_controller_IT_should_use_this_action
+-	  get_action_on_controller :an_action, :alpha_plugin, :namespace
+-    assert_response_body 'rendered in Namespace::AlphaPluginController#an_action'
+-  end
+-
+-  # app takes precedence over plugins
+-
+-  def test_WITH_an_action_defined_in_both_app_and_plugin_IT_should_use_the_one_in_app
+-	  get_action_on_controller :an_action, :app_and_plugin
+-    assert_response_body 'rendered in AppAndPluginController#an_action (from app)'
+-  end
+-  
+-  def test_WITH_an_action_defined_in_namespaced_controllers_in_both_app_and_plugin_IT_should_use_the_one_in_app
+-	  get_action_on_controller :an_action, :app_and_plugin, :namespace
+-    assert_response_body 'rendered in Namespace::AppAndPluginController#an_action (from app)'
+-  end
+-
+-  # subsequently loaded plugins take precendence over previously loaded plugins
+-
+-  def test_WITH_an_action_defined_in_two_plugin_controllers_IT_should_use_the_latter_of_both
+-	  get_action_on_controller :an_action, :shared_plugin
+-    assert_response_body 'rendered in SharedPluginController#an_action (from beta_plugin)'
+-  end
+-  
+-  def test_WITH_an_action_defined_in_two_namespaced_plugin_controllers_IT_should_use_the_latter_of_both
+-	  get_action_on_controller :an_action, :shared_plugin, :namespace
+-    assert_response_body 'rendered in Namespace::SharedPluginController#an_action (from beta_plugin)'
+-  end
+-end
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/functional/exception_notification_compatibility_test.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/functional/exception_notification_compatibility_test.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/functional/exception_notification_compatibility_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/functional/exception_notification_compatibility_test.rb	2009-09-21 11:03:28.047905572 +0200
+@@ -1,29 +0,0 @@
+-require File.dirname(__FILE__) + '/../test_helper'
+-
+-class ExceptionNotificationCompatibilityTest < ActionController::TestCase
+-  ExceptionNotifier.exception_recipients = %w(joe at schmoe.com bill at schmoe.com)
+-  class SimpleController < ApplicationController
+-    include ExceptionNotifiable
+-    local_addresses.clear
+-    consider_all_requests_local = false
+-    def index
+-      begin
+-        raise "Fail!"
+-      rescue Exception => e
+-        rescue_action_in_public(e)
+-      end
+-    end
+-  end
+-  
+-  def setup
+-    @controller = SimpleController.new
+-    @request    = ActionController::TestRequest.new
+-    @response   = ActionController::TestResponse.new
+-  end
+-  
+-  def test_should_work
+-    assert_nothing_raised do
+-      get :index
+-    end
+-  end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/functional/locale_loading_test.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/functional/locale_loading_test.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/functional/locale_loading_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/functional/locale_loading_test.rb	2009-09-21 11:03:28.047905572 +0200
+@@ -1,26 +0,0 @@
+-# Tests in this file ensure that:
+-#
+-# * translations in the application take precedence over those in plugins
+-# * translations in subsequently loaded plugins take precendence over those in previously loaded plugins
+-
+-require File.dirname(__FILE__) + '/../test_helper'
+-
+-class LocaleLoadingTest < ActionController::TestCase
+-  def setup
+-    @request    = ActionController::TestRequest.new
+-    @response   = ActionController::TestResponse.new
+-  end
+-
+-  # app takes precedence over plugins
+-	
+-  def test_WITH_a_translation_defined_in_both_app_and_plugin_IT_should_find_the_one_in_app
+-    assert_equal I18n.t('hello'), 'Hello world'
+-  end
+-	
+-  # subsequently loaded plugins take precendence over previously loaded plugins
+-	
+-  def test_WITH_a_translation_defined_in_two_plugins_IT_should_find_the_latter_of_both
+-    assert_equal I18n.t('plugin'), 'beta'
+-  end
+-end
+-	
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/functional/routes_test.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/functional/routes_test.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/functional/routes_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/functional/routes_test.rb	2009-09-21 11:03:28.047905572 +0200
+@@ -1,29 +0,0 @@
+-# Tests in this file ensure that:
+-#
+-# * Routes from plugins can be routed to
+-# * Named routes can be defined within a plugin
+-
+-require File.dirname(__FILE__) + '/../test_helper'
+-
+-class RoutesTest < ActionController::TestCase
+-  tests TestRoutingController
+-  
+-	def test_WITH_a_route_defined_in_a_plugin_IT_should_route_it
+-	  path = '/routes/an_action'
+-    opts = {:controller => 'test_routing', :action => 'an_action'}
+-    assert_routing path, opts
+-    assert_recognizes opts, path # not sure what exactly the difference is, but it won't hurt either
+-  end
+-
+-	def test_WITH_a_route_for_a_namespaced_controller_defined_in_a_plugin_IT_should_route_it
+-	  path = 'somespace/routes/an_action'
+-    opts = {:controller => 'namespace/test_routing', :action => 'an_action'}
+-    assert_routing path, opts
+-    assert_recognizes opts, path
+-  end
+-  
+-  def test_should_properly_generate_named_routes
+-    get :test_named_routes_from_plugin
+-    assert_response_body '/somespace/routes'
+-  end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/functional/view_helpers_test.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/functional/view_helpers_test.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/functional/view_helpers_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/functional/view_helpers_test.rb	2009-09-21 11:03:28.047905572 +0200
+@@ -1,37 +0,0 @@
+-require File.dirname(__FILE__) + '/../test_helper'
+-
+-class ViewHelpersTest < ActionController::TestCase
+-  tests AssetsController
+-  
+-  def setup
+-    get :index
+-  end
+-  
+-  def test_plugin_javascript_helpers
+-    base_selector = "script[type='text/javascript']"
+-    js_dir = "/plugin_assets/test_assets/javascripts"
+-    assert_select "#{base_selector}[src='#{js_dir}/file.1.js']"
+-    assert_select "#{base_selector}[src='#{js_dir}/file2.js']"
+-  end
+-
+-  def test_plugin_stylesheet_helpers
+-    base_selector = "link[media='screen'][rel='stylesheet'][type='text/css']"
+-    css_dir = "/plugin_assets/test_assets/stylesheets"
+-    assert_select "#{base_selector}[href='#{css_dir}/file.1.css']"
+-    assert_select "#{base_selector}[href='#{css_dir}/file2.css']"
+-  end
+-
+-  def test_plugin_image_helpers
+-    assert_select "img[src='/plugin_assets/test_assets/images/image.png'][alt='Image']"
+-  end
+-
+-  def test_plugin_layouts
+-    get :index
+-    assert_select "div[id='assets_layout']"
+-  end  
+-
+-  def test_plugin_image_submit_helpers
+-    assert_select "input[src='/plugin_assets/test_assets/images/image.png'][type='image']"
+-  end
+-
+-end
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/functional/view_loading_test.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/functional/view_loading_test.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/functional/view_loading_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/functional/view_loading_test.rb	2009-09-21 11:03:28.047905572 +0200
+@@ -1,60 +0,0 @@
+-# Tests in this file ensure that:
+-#
+-# * plugin views are found
+-# * views in the application take precedence over those in plugins
+-# * views in subsequently loaded plugins take precendence over those in previously loaded plugins
+-# * this works for namespaced views accordingly
+-
+-require File.dirname(__FILE__) + '/../test_helper'
+-
+-class ViewLoadingTest < ActionController::TestCase
+-  def setup
+-    @request    = ActionController::TestRequest.new
+-    @response   = ActionController::TestResponse.new
+-  end
+-
+-  # plugin views should be found
+-
+- 	def test_WITH_a_view_defined_only_in_a_plugin_IT_should_find_the_view
+-	  get_action_on_controller :a_view, :alpha_plugin
+-    assert_response_body 'alpha_plugin/a_view'
+-  end
+-	
+-	def test_WITH_a_namespaced_view_defined_only_in_a_plugin_IT_should_find_the_view
+-	  get_action_on_controller :a_view, :alpha_plugin, :namespace
+-    assert_response_body 'namespace/alpha_plugin/a_view'
+-  end
+-
+-  # app takes precedence over plugins
+-	
+-	def test_WITH_a_view_defined_in_both_app_and_plugin_IT_should_find_the_one_in_app
+-	  get_action_on_controller :a_view, :app_and_plugin
+-    assert_response_body 'app_and_plugin/a_view (from app)'
+-  end
+-	
+-	def test_WITH_a_namespaced_view_defined_in_both_app_and_plugin_IT_should_find_the_one_in_app
+-	  get_action_on_controller :a_view, :app_and_plugin, :namespace
+-    assert_response_body 'namespace/app_and_plugin/a_view (from app)'
+-  end
+-
+-  # subsequently loaded plugins take precendence over previously loaded plugins
+-	
+-	def test_WITH_a_view_defined_in_two_plugins_IT_should_find_the_latter_of_both
+-	  get_action_on_controller :a_view, :shared_plugin
+-    assert_response_body 'shared_plugin/a_view (from beta_plugin)'
+-  end
+-	
+-	def test_WITH_a_namespaced_view_defined_in_two_plugins_IT_should_find_the_latter_of_both
+-	  get_action_on_controller :a_view, :shared_plugin, :namespace
+-    assert_response_body 'namespace/shared_plugin/a_view (from beta_plugin)'
+-  end
+-  
+-  # layouts loaded from plugins
+-
+-  def test_should_be_able_to_load_a_layout_from_a_plugin
+-    get_action_on_controller :action_with_layout, :alpha_plugin
+-    assert_response_body 'rendered in AlphaPluginController#action_with_layout (with plugin layout)'
+-  end
+-	
+-end
+-	
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/lib/app_and_plugin_lib_model.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/lib/app_and_plugin_lib_model.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/lib/app_and_plugin_lib_model.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/lib/app_and_plugin_lib_model.rb	2009-09-21 11:03:28.051904486 +0200
+@@ -1,3 +0,0 @@
+-class AppAndPluginLibModel < ActiveRecord::Base
+-  def self.report_location; TestHelper::report_location(__FILE__); end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/lib/engines_test_helper.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/lib/engines_test_helper.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/lib/engines_test_helper.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/lib/engines_test_helper.rb	2009-09-21 11:03:28.051904486 +0200
+@@ -1,42 +0,0 @@
+-module TestHelper
+-  def self.report_location(path)
+-    [RAILS_ROOT + '/', 'vendor/plugins/'].each { |part| path.sub! part, ''}
+-    path = path.split('/')
+-    location, subject = path.first, path.last
+-    if subject.sub! '.rb', ''
+-      subject = subject.classify
+-    else 
+-      subject.sub! '.html.erb', ''
+-    end
+-    "#{subject} (from #{location})"
+-  end
+-  
+-  def self.view_path_for path
+-    [RAILS_ROOT + '/', 'vendor/plugins/', '.html.erb'].each { |part| path.sub! part, ''}
+-    parts = path.split('/')
+-    parts[(parts.index('views')+1)..-1].join('/')
+-  end
+-end
+-
+-class Test::Unit::TestCase
+-  # Add more helper methods to be used by all tests here...  
+-  def get_action_on_controller(*args)
+-    action = args.shift
+-    with_controller *args
+-    get action
+-  end
+-  
+-  def with_controller(controller, namespace = nil)
+-    classname = controller.to_s.classify + 'Controller'
+-    classname = namespace.to_s.classify + '::' + classname unless namespace.nil?
+-    @controller = classname.constantize.new
+-  end
+-  
+-  def assert_response_body(expected)
+-    assert_equal expected, @response.body
+-  end
+-end
+-
+-# Because we're testing this behaviour, we actually want these features on!
+-Engines.disable_application_view_loading = false
+-Engines.disable_application_code_loading = false
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/lib/render_information.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/lib/render_information.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/lib/render_information.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/lib/render_information.rb	2009-09-21 11:03:28.051904486 +0200
+@@ -1,7 +0,0 @@
+-module RenderInformation
+-  def render_class_and_action(note = nil, options={})
+-    text = "rendered in #{self.class.name}##{params[:action]}"
+-    text += " (#{note})" unless note.nil?
+-    render options.update(:text => text)
+-  end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/alpha_plugin_controller.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/alpha_plugin_controller.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/alpha_plugin_controller.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/alpha_plugin_controller.rb	2009-09-21 11:03:28.039883858 +0200
+@@ -1,8 +0,0 @@
+-class AlphaPluginController < ApplicationController
+-  def an_action
+-    render_class_and_action
+-  end
+-  def action_with_layout
+-    render_class_and_action(nil, :layout => "plugin_layout")
+-  end
+-end
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/app_and_plugin_controller.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/app_and_plugin_controller.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/app_and_plugin_controller.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/app_and_plugin_controller.rb	2009-09-21 11:03:28.035904150 +0200
+@@ -1,5 +0,0 @@
+-class AppAndPluginController < ApplicationController
+-  def an_action
+-    render_class_and_action 'from alpha_plugin'
+-  end
+-end
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/alpha_plugin_controller.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/alpha_plugin_controller.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/alpha_plugin_controller.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/alpha_plugin_controller.rb	2009-09-21 11:03:28.039883858 +0200
+@@ -1,5 +0,0 @@
+-class Namespace::AlphaPluginController < ApplicationController
+-  def an_action
+-    render_class_and_action
+-  end  
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/app_and_plugin_controller.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/app_and_plugin_controller.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/app_and_plugin_controller.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/app_and_plugin_controller.rb	2009-09-21 11:03:28.039883858 +0200
+@@ -1,5 +0,0 @@
+-class Namespace::AppAndPluginController < ApplicationController
+-  def an_action
+-    render_class_and_action 'from alpha_plugin'
+-  end
+-end
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/shared_plugin_controller.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/shared_plugin_controller.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/shared_plugin_controller.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/namespace/shared_plugin_controller.rb	2009-09-21 11:03:28.039883858 +0200
+@@ -1,5 +0,0 @@
+-class Namespace::SharedPluginController < ApplicationController
+-  def an_action
+-    render_class_and_action 'from alpha_plugin'
+-  end
+-end
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/shared_plugin_controller.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/shared_plugin_controller.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/shared_plugin_controller.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/controllers/shared_plugin_controller.rb	2009-09-21 11:03:28.039883858 +0200
+@@ -1,5 +0,0 @@
+-class SharedEngineController < ApplicationController
+-  def an_action
+-    render_class_and_action 'from alpha_engine'
+-  end
+-end
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/alpha_plugin_model.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/alpha_plugin_model.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/alpha_plugin_model.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/alpha_plugin_model.rb	2009-09-21 11:03:28.035904150 +0200
+@@ -1,3 +0,0 @@
+-class AlphaPluginModel < ActiveRecord::Base
+-  def self.report_location; TestHelper::report_location(__FILE__); end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/app_and_plugin_model.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/app_and_plugin_model.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/app_and_plugin_model.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/app_and_plugin_model.rb	2009-09-21 11:03:28.035904150 +0200
+@@ -1,7 +0,0 @@
+-class AppAndPluginModel < ActiveRecord::Base
+-  def self.report_location; TestHelper::report_location(__FILE__); end
+-
+-  def defined_only_in_alpha_plugin_version
+-    # should not be defined as the model in app/models takes precedence
+-  end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/shared_plugin_model.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/shared_plugin_model.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/shared_plugin_model.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/models/shared_plugin_model.rb	2009-09-21 11:03:28.035904150 +0200
+@@ -1,3 +0,0 @@
+-class SharedPluginModel < ActiveRecord::Base  
+-  def self.report_location; TestHelper::report_location(__FILE__); end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/a_view.html.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/a_view.html.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/a_view.html.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/alpha_plugin/a_view.html.erb	2009-09-21 11:03:28.039883858 +0200
+@@ -1 +0,0 @@
+-<%= TestHelper.view_path_for __FILE__ %>
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/a_view.html.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/a_view.html.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/a_view.html.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/app_and_plugin/a_view.html.erb	2009-09-21 11:03:28.039883858 +0200
+@@ -1 +0,0 @@
+-<%= TestHelper.view_path_for __FILE__ %> (from a_view)
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/plugin_layout.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/plugin_layout.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/plugin_layout.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/layouts/plugin_layout.erb	2009-09-21 11:03:28.039883858 +0200
+@@ -1 +0,0 @@
+-<%= yield %> (with plugin layout)
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/a_view.html.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/a_view.html.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/a_view.html.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/alpha_plugin/a_view.html.erb	2009-09-21 11:03:28.039883858 +0200
+@@ -1 +0,0 @@
+-<%= TestHelper.view_path_for __FILE__ %>
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/a_view.html.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/a_view.html.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/a_view.html.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/app_and_plugin/a_view.html.erb	2009-09-21 11:03:28.039883858 +0200
+@@ -1 +0,0 @@
+-<%= TestHelper.view_path_for __FILE__ %>
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/a_view.html.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/a_view.html.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/a_view.html.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/namespace/shared_plugin/a_view.html.erb	2009-09-21 11:03:28.039883858 +0200
+@@ -1 +0,0 @@
+-<%= TestHelper.view_path_for __FILE__ %> (from alpha_plugin)
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/a_view.html.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/a_view.html.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/a_view.html.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/app/views/shared_plugin/a_view.html.erb	2009-09-21 11:03:28.039883858 +0200
+@@ -1 +0,0 @@
+-<%= TestHelper.view_path_for __FILE__ %> (from alpha_plugin)
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/lib/alpha_plugin_lib_model.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/lib/alpha_plugin_lib_model.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/lib/alpha_plugin_lib_model.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/lib/alpha_plugin_lib_model.rb	2009-09-21 11:03:28.039883858 +0200
+@@ -1,3 +0,0 @@
+-class AlphaPluginLibModel < ActiveRecord::Base
+-  def self.report_location; TestHelper::report_location(__FILE__); end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/lib/app_and_plugin_lib_model.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/lib/app_and_plugin_lib_model.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/lib/app_and_plugin_lib_model.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/lib/app_and_plugin_lib_model.rb	2009-09-21 11:03:28.039883858 +0200
+@@ -1,7 +0,0 @@
+-class AppAndPluginLibModel < ActiveRecord::Base
+-  def self.report_location; TestHelper::report_location(__FILE__); end
+-
+-  def defined_only_in_alpha_plugin_version
+-    # should not be defined
+-  end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/locales/en.yml redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/locales/en.yml
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/alpha_plugin/locales/en.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/alpha_plugin/locales/en.yml	2009-09-21 11:03:28.039883858 +0200
+@@ -1,3 +0,0 @@
+-en:
+-  hello: "Hello from alfa"
+-  plugin: "alfa"
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/app_and_plugin_controller.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/app_and_plugin_controller.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/app_and_plugin_controller.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/app_and_plugin_controller.rb	2009-09-21 11:03:28.043883331 +0200
+@@ -1,5 +0,0 @@
+-class AppAndPluginController < ApplicationController
+-  def an_action
+-    render_class_and_action 'from beta_plugin'
+-  end
+-end
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/shared_plugin_controller.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/shared_plugin_controller.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/shared_plugin_controller.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/namespace/shared_plugin_controller.rb	2009-09-21 11:03:28.043883331 +0200
+@@ -1,5 +0,0 @@
+-class Namespace::SharedPluginController < ApplicationController
+-  def an_action
+-    render_class_and_action 'from beta_plugin'
+-  end
+-end
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/shared_plugin_controller.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/shared_plugin_controller.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/shared_plugin_controller.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/beta_plugin/app/controllers/shared_plugin_controller.rb	2009-09-21 11:03:28.043883331 +0200
+@@ -1,5 +0,0 @@
+-class SharedPluginController < ApplicationController
+-  def an_action
+-    render_class_and_action 'from beta_plugin'
+-  end
+-end
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/beta_plugin/app/models/shared_plugin_model.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/beta_plugin/app/models/shared_plugin_model.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/beta_plugin/app/models/shared_plugin_model.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/beta_plugin/app/models/shared_plugin_model.rb	2009-09-21 11:03:28.043883331 +0200
+@@ -1,3 +0,0 @@
+-class SharedPluginModel < ActiveRecord::Base
+-  def self.report_location; TestHelper::report_location(__FILE__); end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/a_view.html.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/a_view.html.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/a_view.html.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/beta_plugin/app/views/namespace/shared_plugin/a_view.html.erb	2009-09-21 11:03:28.043883331 +0200
+@@ -1 +0,0 @@
+-<%= TestHelper.view_path_for __FILE__ %> (from beta_plugin)
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/a_view.html.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/a_view.html.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/a_view.html.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/beta_plugin/app/views/shared_plugin/a_view.html.erb	2009-09-21 11:03:28.043883331 +0200
+@@ -1 +0,0 @@
+-<%= TestHelper.view_path_for __FILE__ %> (from beta_plugin)
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/beta_plugin/init.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/beta_plugin/init.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/beta_plugin/init.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/beta_plugin/init.rb	2009-09-21 11:03:28.043883331 +0200
+@@ -1 +0,0 @@
+-# just here so that Rails recognizes this as a plugin
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/beta_plugin/locales/en.yml redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/beta_plugin/locales/en.yml
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/beta_plugin/locales/en.yml	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/beta_plugin/locales/en.yml	2009-09-21 11:03:28.043883331 +0200
+@@ -1,3 +0,0 @@
+-en:
+-  hello: "Hello from beta"
+-  plugin: "beta"
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_assets/app/controllers/assets_controller.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_assets/app/controllers/assets_controller.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_assets/app/controllers/assets_controller.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_assets/app/controllers/assets_controller.rb	2009-09-21 11:03:28.035904150 +0200
+@@ -1,2 +0,0 @@
+-class AssetsController < ApplicationController
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_assets/app/views/assets/index.html.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_assets/app/views/assets/index.html.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_assets/app/views/assets/index.html.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_assets/app/views/assets/index.html.erb	2009-09-21 11:03:28.035904150 +0200
+@@ -1,4 +0,0 @@
+-<%= image_tag 'image.png', :plugin => 'test_assets' %>
+-<%= javascript_include_tag 'file.1.js', 'file2', :plugin => "test_assets" %>
+-<%= stylesheet_link_tag 'file.1.css', 'file2', :plugin => "test_assets" %>
+-<%= image_submit_tag 'image.png', :plugin => "test_assets" %>
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/assets.html.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/assets.html.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/assets.html.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_assets/app/views/layouts/assets.html.erb	2009-09-21 11:03:28.035904150 +0200
+@@ -1,3 +0,0 @@
+-<div id="assets_layout">
+-	<%= yield %>
+-</div>
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_code_mixing/app/things/thing.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_code_mixing/app/things/thing.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_code_mixing/app/things/thing.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_code_mixing/app/things/thing.rb	2009-09-21 11:03:28.043883331 +0200
+@@ -1,3 +0,0 @@
+-class Thing
+-  def self.from_plugin; TestHelper::report_location(__FILE__); end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_code_mixing/init.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_code_mixing/init.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_code_mixing/init.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_code_mixing/init.rb	2009-09-21 11:03:28.043883331 +0200
+@@ -1 +0,0 @@
+-# just here so that Rails recognizes this as a plugin
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_migration/db/migrate/001_create_tests.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_migration/db/migrate/001_create_tests.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_migration/db/migrate/001_create_tests.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_migration/db/migrate/001_create_tests.rb	2009-09-21 11:03:28.043883331 +0200
+@@ -1,11 +0,0 @@
+-class CreateTests < ActiveRecord::Migration
+-  def self.up
+-    create_table 'tests' do |t|
+-      t.column 'name', :string
+-    end
+-  end
+-
+-  def self.down
+-    drop_table 'tests'
+-  end
+-end
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_migration/db/migrate/002_create_others.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_migration/db/migrate/002_create_others.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_migration/db/migrate/002_create_others.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_migration/db/migrate/002_create_others.rb	2009-09-21 11:03:28.043883331 +0200
+@@ -1,11 +0,0 @@
+-class CreateOthers < ActiveRecord::Migration
+-  def self.up
+-    create_table 'others' do |t|
+-      t.column 'name', :string
+-    end
+-  end
+-
+-  def self.down
+-    drop_table 'others'
+-  end
+-end
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_migration/db/migrate/003_create_extras.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_migration/db/migrate/003_create_extras.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_migration/db/migrate/003_create_extras.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_migration/db/migrate/003_create_extras.rb	2009-09-21 11:03:28.043883331 +0200
+@@ -1,11 +0,0 @@
+-class CreateExtras < ActiveRecord::Migration
+-  def self.up
+-    create_table 'extras' do |t|
+-      t.column 'name', :string
+-    end
+-  end
+-
+-  def self.down
+-    drop_table 'extras'
+-  end
+-end
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/plugin_mail.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/plugin_mail.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/plugin_mail.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/models/plugin_mail.rb	2009-09-21 11:03:28.047905572 +0200
+@@ -1,26 +0,0 @@
+-class PluginMail < ActionMailer::Base
+-  def mail_from_plugin(note=nil)
+-    body(:note => note)
+-  end
+-  
+-  def mail_from_plugin_with_application_template(note=nil)
+-    body(:note => note)
+-  end
+-  
+-  def multipart_from_plugin
+-    content_type 'multipart/alternative'
+-    part :content_type => "text/html", :body => render_message("multipart_from_plugin_html", {})
+-    part "text/plain" do |p|
+-      p.body = render_message("multipart_from_plugin_plain", {})
+-    end
+-  end
+-  
+-  def multipart_from_plugin_with_application_template
+-    content_type 'multipart/alternative'
+-    part :content_type => "text/html", :body => render_message("multipart_from_plugin_with_application_template_html", {})
+-    part "text/plain" do |p|
+-      p.body = render_message("multipart_from_plugin_with_application_template_plain", {})
+-    end
+-  end  
+-  
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/mail_from_plugin.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/mail_from_plugin.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/mail_from_plugin.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/mail_from_plugin.erb	2009-09-21 11:03:28.047905572 +0200
+@@ -1 +0,0 @@
+-<%= @note %>
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_html.html.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_html.html.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_html.html.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_html.html.erb	2009-09-21 11:03:28.047905572 +0200
+@@ -1 +0,0 @@
+-html template
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_plain.html.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_plain.html.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_plain.html.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_plain.html.erb	2009-09-21 11:03:28.047905572 +0200
+@@ -1 +0,0 @@
+-plain template
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_with_application_template_html.html.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_with_application_template_html.html.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_with_application_template_html.html.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_with_application_template_html.html.erb	2009-09-21 11:03:28.047905572 +0200
+@@ -1 +0,0 @@
+-template from plugin
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_with_application_template_plain.html.erb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_with_application_template_plain.html.erb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_with_application_template_plain.html.erb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_plugin_mailing/app/views/plugin_mail/multipart_from_plugin_with_application_template_plain.html.erb	2009-09-21 11:03:28.047905572 +0200
+@@ -1 +0,0 @@
+-template from plugin
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/test_routing_controller.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/test_routing_controller.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/test_routing_controller.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_routing/app/controllers/namespace/test_routing_controller.rb	2009-09-21 11:03:28.043883331 +0200
+@@ -1,5 +0,0 @@
+-class Namespace::TestRoutingController < ApplicationController
+-  def routed_action
+-    render_class_and_action
+-  end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_routing/app/controllers/test_routing_controller.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_routing/app/controllers/test_routing_controller.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_routing/app/controllers/test_routing_controller.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_routing/app/controllers/test_routing_controller.rb	2009-09-21 11:03:28.043883331 +0200
+@@ -1,9 +0,0 @@
+-class TestRoutingController < ApplicationController
+-  def routed_action
+-    render_class_and_action
+-  end
+-  
+-  def test_named_routes_from_plugin
+-    render :text => plugin_route_path(:action => "index")
+-  end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_routing/config/routes.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_routing/config/routes.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_routing/config/routes.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_routing/config/routes.rb	2009-09-21 11:03:28.043883331 +0200
+@@ -1,4 +0,0 @@
+-ActionController::Routing::Routes.draw do |map|
+-  map.connect 'routes/:action', :controller => "test_routing"
+-  map.plugin_route 'somespace/routes/:action', :controller => "namespace/test_routing"
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_testing/app/README.txt redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_testing/app/README.txt
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_testing/app/README.txt	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_testing/app/README.txt	2009-09-21 11:03:28.047905572 +0200
+@@ -1 +0,0 @@
+-Fixtures are only copied from plugins with an +app+ directory, but git needs this directory to be non-empty
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_testing/test/unit/override_test.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_testing/test/unit/override_test.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/plugins/test_testing/test/unit/override_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/plugins/test_testing/test/unit/override_test.rb	2009-09-21 11:03:28.047905572 +0200
+@@ -1,13 +0,0 @@
+-require File.expand_path(File.join(File.dirname(__FILE__), *%w[.. .. .. .. .. test test_helper]))
+-
+-class OverrideTest < ActiveSupport::TestCase
+-  def test_overrides_from_the_application_should_work
+-    flunk "this test should be overridden by the app"
+-  end
+-  
+-  def test_tests_within_the_plugin_should_still_run
+-    assert true, "non-overridden plugin tests should still run"
+-  end
+-end
+-
+-Engines::Testing.override_tests_from_app
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/unit/action_mailer_test.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/unit/action_mailer_test.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/unit/action_mailer_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/unit/action_mailer_test.rb	2009-09-21 11:03:28.031893432 +0200
+@@ -1,54 +0,0 @@
+-require File.dirname(__FILE__) + '/../test_helper'
+-
+-class ActionMailerWithinApplicationTest < Test::Unit::TestCase
+-  
+-  def test_normal_implicit_template
+-    m = NotifyMail.create_signup("hello")
+-    assert m.body =~ /^Signup template from application/
+-  end
+-  
+-  def test_action_mailer_can_get_helper
+-    m = NotifyMail.create_signup('James')
+-    assert m.body =~ /James/
+-    assert m.body =~ /semaJ/ # from the helper
+-  end
+-  
+-  def test_multipart_mails_with_explicit_templates
+-    m = NotifyMail.create_multipart
+-    assert_equal 2, m.parts.length
+-    assert_equal 'the html part of the email james', m.parts[0].body
+-    assert_equal 'the plaintext part of the email', m.parts[1].body
+-  end
+-  
+-  def test_multipart_mails_with_implicit_templates
+-    m = NotifyMail.create_implicit_multipart
+-    assert_equal 2, m.parts.length
+-    assert_equal 'the implicit plaintext part of the email', m.parts[0].body    
+-    assert_equal 'the implicit html part of the email james', m.parts[1].body
+-  end
+-end
+-
+-
+-class ActionMailerWithinPluginsTest < Test::Unit::TestCase  
+-  def test_should_be_able_to_create_mails_from_plugin
+-    m = PluginMail.create_mail_from_plugin("from_plugin")
+-    assert_equal "from_plugin", m.body
+-  end
+-  
+-  def test_should_be_able_to_overload_views_within_the_application
+-    m = PluginMail.create_mail_from_plugin_with_application_template("from_plugin")
+-    assert_equal "from_plugin (from application)", m.body    
+-  end
+-  
+-  def test_should_be_able_to_create_a_multipart_mail_from_within_plugin
+-    m = PluginMail.create_multipart_from_plugin
+-    assert_equal 2, m.parts.length
+-    assert_equal 'html template', m.parts[0].body
+-    assert_equal 'plain template', m.parts[1].body
+-  end
+-  
+-  def test_plugin_mailer_template_overriding
+-    m = PluginMail.create_multipart_from_plugin_with_application_template
+-    assert_equal 'plugin mail template loaded from application', m.parts[1].body
+-  end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/unit/arbitrary_code_mixing_test.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/unit/arbitrary_code_mixing_test.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/unit/arbitrary_code_mixing_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/unit/arbitrary_code_mixing_test.rb	2009-09-21 11:03:28.031893432 +0200
+@@ -1,41 +0,0 @@
+-require File.dirname(__FILE__) + '/../test_helper'
+-
+-class ArbitraryCodeMixingTest < Test::Unit::TestCase  
+-  def setup
+-    Engines.code_mixing_file_types = %w(controller helper)
+-  end
+-  
+-  def test_should_allow_setting_of_different_code_mixing_file_types
+-    assert_nothing_raised {
+-      Engines.mix_code_from :things
+-    }
+-  end
+-
+-  def test_should_add_new_types_to_existing_code_mixing_file_types
+-    Engines.mix_code_from :things
+-    assert_equal ["controller", "helper", "thing"], Engines.code_mixing_file_types
+-    Engines.mix_code_from :other
+-    assert_equal ["controller", "helper", "thing", "other"], Engines.code_mixing_file_types
+-  end
+-  
+-  def test_should_allow_setting_of_multiple_types_at_once
+-    Engines.mix_code_from :things, :other
+-    assert_equal ["controller", "helper", "thing", "other"], Engines.code_mixing_file_types
+-  end
+-   
+-  def test_should_singularize_elements_to_be_mixed
+-    # this is the only test using mocha, so let's try to work around it
+-    # also, this seems to be already tested with the :things in the tests above
+-    # arg = stub(:to_s => stub(:singularize => "element")) 
+-    Engines.mix_code_from :elements
+-    assert Engines.code_mixing_file_types.include?("element")
+-  end
+-  
+-  # TODO doesn't seem to work as expected?
+-  
+-  # def test_should_successfully_mix_custom_types
+-  #   Engines.mix_code_from :things    
+-  #   assert_equal 'Thing (from app)', Thing.from_app
+-  #   assert_equal 'Thing (from test_code_mixing)', Thing.from_plugin
+-  # end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/unit/assets_test.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/unit/assets_test.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/unit/assets_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/unit/assets_test.rb	2009-09-21 11:03:28.027905064 +0200
+@@ -1,52 +0,0 @@
+-require File.dirname(__FILE__) + '/../test_helper'
+-
+-class AssetsTest < Test::Unit::TestCase  
+-  def setup
+-    Engines::Assets.mirror_files_for Engines.plugins[:test_assets]
+-  end
+-  
+-  def teardown
+-    FileUtils.rm_r(Engines.public_directory) if File.exist?(Engines.public_directory)
+-  end
+-  
+-  def test_engines_has_created_base_public_file
+-    assert File.exist?(Engines.public_directory)
+-  end
+-  
+-  def test_engines_has_created_README_in_public_directory
+-    assert File.exist?(File.join(Engines.public_directory, 'README'))
+-  end
+-  
+-  def test_public_files_have_been_copied_from_test_assets_plugin
+-    assert File.exist?(File.join(Engines.public_directory, 'test_assets'))
+-    assert File.exist?(File.join(Engines.public_directory, 'test_assets', 'file.txt'))
+-    assert File.exist?(File.join(Engines.public_directory, 'test_assets', 'subfolder'))
+-    assert File.exist?(File.join(Engines.public_directory, 'test_assets', 'subfolder', 'file_in_subfolder.txt'))
+-  end
+-  
+-  def test_engines_has_not_created_duplicated_file_structure
+-    assert !File.exists?(File.join(Engines.public_directory, "test_assets", RAILS_ROOT))
+-  end
+-  
+-  def test_public_files_have_been_copied_from_test_assets_with_assets_dir_plugin
+-    Engines::Assets.mirror_files_for Engines.plugins[:test_assets_with_assets_directory]
+-
+-    assert File.exist?(File.join(Engines.public_directory, 'test_assets_with_assets_directory'))
+-    assert File.exist?(File.join(Engines.public_directory, 'test_assets_with_assets_directory', 'file.txt'))
+-    assert File.exist?(File.join(Engines.public_directory, 'test_assets_with_assets_directory', 'subfolder'))
+-    assert File.exist?(File.join(Engines.public_directory, 'test_assets_with_assets_directory', 'subfolder', 'file_in_subfolder.txt'))
+-  end
+-  
+-  def test_public_files_have_been_copied_from_test_assets_with_no_subdirectory_plugin
+-    Engines::Assets.mirror_files_for Engines.plugins[:test_assets_with_no_subdirectory]
+-
+-    assert File.exist?(File.join(Engines.public_directory, 'test_assets_with_no_subdirectory'))
+-    assert File.exist?(File.join(Engines.public_directory, 'test_assets_with_no_subdirectory', 'file.txt'))    
+-  end
+-  
+-  def test_public_files_have_NOT_been_copied_from_plugins_without_public_or_asset_directories
+-    Engines::Assets.mirror_files_for Engines.plugins[:alpha_plugin]
+-    
+-    assert !File.exist?(File.join(Engines.public_directory, 'alpha_plugin'))
+-  end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/unit/backwards_compat_test.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/unit/backwards_compat_test.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/unit/backwards_compat_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/unit/backwards_compat_test.rb	2009-09-21 11:03:28.031893432 +0200
+@@ -1,8 +0,0 @@
+-require File.dirname(__FILE__) + '/../test_helper'
+-
+-class BackwardsCompatibilityTest < Test::Unit::TestCase
+-  def test_rails_module_plugin_method_should_delegate_to_engines_plugins
+-    assert_nothing_raised { Rails.plugins }
+-    assert_equal Engines.plugins, Rails.plugins 
+-  end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/unit/load_path_test.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/unit/load_path_test.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/unit/load_path_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/unit/load_path_test.rb	2009-09-21 11:03:28.031893432 +0200
+@@ -1,58 +0,0 @@
+-# Tests in this file ensure that:
+-#
+-# * the application /app/[controllers|helpers|models] and /lib 
+-#   paths preceed the corresponding plugin paths
+-# * the plugin paths are added to $LOAD_PATH in the order in which plugins are 
+-#   loaded
+-
+-require File.dirname(__FILE__) + '/../test_helper'
+-
+-class LoadPathTest < Test::Unit::TestCase
+-  def setup
+-    @load_path = expand_paths($LOAD_PATH)
+-  end
+-  
+-  # Not sure if these test actually make sense as this now essentially tests
+-  # Rails core functionality. On the other hand Engines relies on this to some
+-  # extend so this will choke if something important changes in Rails.
+-  
+-  # the application app/... and lib/ directories should appear
+-  # before any plugin directories
+-  
+-  def test_application_app_libs_should_precede_all_plugin_app_libs
+-    types = %w(app/controllers app/helpers app/models lib)
+-    types.each do |t|
+-      app_index = load_path_index(File.join(RAILS_ROOT, t))
+-      assert_not_nil app_index, "#{t} is missing in $LOAD_PATH"
+-      Engines.plugins.each do |plugin|
+-        first_plugin_index = load_path_index(File.join(plugin.directory, t))
+-        assert(app_index < first_plugin_index) unless first_plugin_index.nil?
+-      end
+-    end
+-  end
+-  
+-  # the engine directories should appear in the proper order based on
+-  # the order they were started  
+-  
+-  def test_plugin_dirs_should_appear_in_reverse_plugin_loading_order
+-    app_paths = %w(app/controllers/ app app/models app/helpers lib)
+-    app_paths.map { |p| File.join(RAILS_ROOT, p)}
+-    plugin_paths = Engines.plugins.reverse.collect { |plugin| plugin.load_paths.reverse }.flatten    
+-    
+-    expected_paths = expand_paths(app_paths + plugin_paths)    
+-    # only look at those paths that are also present in expected_paths so
+-    # the only difference would be in the order of the paths
+-    actual_paths = @load_path & expected_paths 
+-    
+-    assert_equal expected_paths, actual_paths
+-  end
+-  
+-  protected    
+-    def expand_paths(paths)
+-      paths.collect { |p| File.expand_path(p) }
+-    end
+-    
+-    def load_path_index(dir)
+-      @load_path.index(File.expand_path(dir))
+-    end  
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/unit/migration_test.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/unit/migration_test.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/unit/migration_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/unit/migration_test.rb	2009-09-21 11:03:28.031893432 +0200
+@@ -1,63 +0,0 @@
+-require File.dirname(__FILE__) + '/../test_helper'
+-require 'rails_generator'
+-require 'rails_generator/scripts/generate'
+-
+-class MigrationsTest < Test::Unit::TestCase
+-  
+-  @@migration_dir = "#{RAILS_ROOT}/db/migrate"
+-
+-  def setup
+-    ActiveRecord::Migration.verbose = false
+-    Engines.plugins[:test_migration].migrate(0)
+-  end
+-  
+-  def teardown
+-    FileUtils.rm_r(@@migration_dir) if File.exist?(@@migration_dir)
+-  end
+-  
+-  def test_engine_migrations_can_run_down
+-    assert !table_exists?('tests'), ActiveRecord::Base.connection.tables.inspect
+-    assert !table_exists?('others'), ActiveRecord::Base.connection.tables.inspect
+-    assert !table_exists?('extras'), ActiveRecord::Base.connection.tables.inspect
+-  end
+-    
+-  def test_engine_migrations_can_run_up
+-    Engines.plugins[:test_migration].migrate(3)
+-    assert table_exists?('tests')
+-    assert table_exists?('others')
+-    assert table_exists?('extras')
+-  end
+-  
+-  def test_engine_migrations_can_upgrade_incrementally
+-    Engines.plugins[:test_migration].migrate(1)
+-    assert table_exists?('tests')
+-    assert !table_exists?('others')
+-    assert !table_exists?('extras')
+-    assert_equal 1, Engines::Plugin::Migrator.current_version(Engines.plugins[:test_migration])
+-    
+-    
+-    Engines.plugins[:test_migration].migrate(2)
+-    assert table_exists?('others')
+-    assert_equal 2, Engines::Plugin::Migrator.current_version(Engines.plugins[:test_migration])
+-    
+-    
+-    Engines.plugins[:test_migration].migrate(3)
+-    assert table_exists?('extras')
+-    assert_equal 3, Engines::Plugin::Migrator.current_version(Engines.plugins[:test_migration])
+-  end
+-    
+-  def test_generator_creates_plugin_migration_file
+-    Rails::Generator::Scripts::Generate.new.run(['plugin_migration', 'test_migration'], :quiet => true)
+-    assert migration_file, "migration file is missing"
+-  end
+-  
+-  private
+-  
+-  def table_exists?(table)
+-    ActiveRecord::Base.connection.tables.include?(table)
+-  end
+-  
+-  def migration_file
+-    Dir["#{@@migration_dir}/*test_migration_to_version_3.rb"][0]
+-  end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/unit/model_and_lib_test.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/unit/model_and_lib_test.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/unit/model_and_lib_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/unit/model_and_lib_test.rb	2009-09-21 11:03:28.031893432 +0200
+@@ -1,37 +0,0 @@
+-require File.dirname(__FILE__) + '/../test_helper'
+-
+-class ModelAndLibTest < Test::Unit::TestCase
+-
+- 	def test_WITH_a_model_defined_only_in_a_plugin_IT_should_load_the_model
+- 	  assert_equal 'AlphaPluginModel (from alpha_plugin)', AlphaPluginModel.report_location
+-  end
+-  
+-  def test_WITH_a_model_defined_only_in_a_plugin_lib_dir_IT_should_load_the_model
+- 	  assert_equal 'AlphaPluginLibModel (from alpha_plugin)', AlphaPluginLibModel.report_location
+-  end
+-
+-  # app takes precedence over plugins
+-	
+-	def test_WITH_a_model_defined_in_both_app_and_plugin_IT_should_load_the_one_in_app
+- 	  assert_equal 'AppAndPluginModel (from app)',	AppAndPluginModel.report_location  
+- 	  assert_raises(NoMethodError) { AppAndPluginLibModel.defined_only_in_alpha_engine_version }
+-  end
+-	
+-	def test_WITH_a_model_defined_in_both_app_and_plugin_lib_dirs_IT_should_load_the_one_in_app
+- 	  assert_equal 'AppAndPluginLibModel (from lib)', AppAndPluginLibModel.report_location
+- 	  assert_raises(NoMethodError) { AppAndPluginLibModel.defined_only_in_alpha_engine_version }
+-  end
+-
+-  # subsequently loaded plugins take precendence over previously loaded plugins
+-	
+-  # TODO
+-  #
+-  # this does work when we rely on $LOAD_PATH while it won't work when we use
+-  # Dependency constant autoloading. This somewhat confusing difference has
+-  # been there since at least Rails 1.2.x. See http://www.ruby-forum.com/topic/134529
+-  
+-  def test_WITH_a_model_defined_in_two_plugins_IT_should_load_the_latter_of_both
+-    require 'shared_plugin_model'
+-    assert_equal SharedPluginModel.report_location, 'SharedPluginModel (from beta_plugin)'
+-  end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/unit/plugins_test.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/unit/plugins_test.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/unit/plugins_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/unit/plugins_test.rb	2009-09-21 11:03:28.027905064 +0200
+@@ -1,11 +0,0 @@
+-require File.dirname(__FILE__) + '/../test_helper'
+-
+-class PluginsTest < Test::Unit::TestCase
+-  
+-  def test_should_allow_access_to_plugins_by_strings_or_symbols
+-    p = Engines.plugins["alpha_plugin"]
+-    q = Engines.plugins[:alpha_plugin]
+-    assert_kind_of Engines::Plugin, p
+-    assert_equal p, q
+-  end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/unit/testing_test.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/unit/testing_test.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/unit/testing_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/unit/testing_test.rb	2009-09-21 11:03:28.031893432 +0200
+@@ -1,19 +0,0 @@
+-require File.dirname(__FILE__) + '/../test_helper'
+-
+-class TestingTest < Test::Unit::TestCase
+-  def setup
+-    Engines::Testing.set_fixture_path
+-    @filename = File.join(Engines::Testing.temporary_fixtures_directory, 'testing_fixtures.yml')
+-    File.delete(@filename) if File.exists?(@filename)
+-  end
+-  
+-  def teardown
+-    File.delete(@filename) if File.exists?(@filename)
+-  end
+-
+-  def test_should_copy_fixtures_files_to_tmp_directory
+-    assert !File.exists?(@filename)
+-    Engines::Testing.setup_plugin_fixtures
+-    assert File.exists?(@filename)
+-  end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/engines/test/unit/test_testing/override_test.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/unit/test_testing/override_test.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/engines/test/unit/test_testing/override_test.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/engines/test/unit/test_testing/override_test.rb	2009-09-21 11:03:28.031893432 +0200
+@@ -1,7 +0,0 @@
+-require File.join(File.dirname(__FILE__), *%w[.. .. test_helper])
+-
+-class OverrideTest < ActiveSupport::TestCase
+-  def test_overrides_from_the_application_should_work
+-    assert true, "overriding plugin tests from the application should work"
+-  end
+-end
+\ Pas de fin de ligne à la fin du fichier.
+diff -Nur redmine-0.9.0~svn2898/vendor/plugins/prepend_engine_views/init.rb redmine-0.9.0~svn2898.unpatched/vendor/plugins/prepend_engine_views/init.rb
+--- redmine-0.9.0~svn2898/vendor/plugins/prepend_engine_views/init.rb	2009-09-13 19:14:35.000000000 +0200
++++ redmine-0.9.0~svn2898.unpatched/vendor/plugins/prepend_engine_views/init.rb	2009-09-21 11:03:28.055905007 +0200
+@@ -1,21 +0,0 @@
+-module PrependEngineViews
+-  def self.included(base)
+-    base.send(:include, InstanceMethods)
+-    base.class_eval do
+-      alias_method_chain :add_engine_view_paths, :prepend
+-    end
+-  end
+-
+-  module InstanceMethods
+-    # Patch Rails so engine's views are prepended to the view_path,
+-    # thereby letting plugins override application views
+-    def add_engine_view_paths_with_prepend
+-      paths = ActionView::PathSet.new(engines.collect(&:view_path))
+-      ActionController::Base.view_paths.unshift(*paths)
+-      ActionMailer::Base.view_paths.unshift(*paths) if configuration.frameworks.include?(:action_mailer)
+-    end
+-  end
+-end
+-
+-Rails::Plugin::Loader.send :include, PrependEngineViews
+-

Deleted: trunk/redmine/debian/patches/changeset_r2888.diff
===================================================================
--- trunk/redmine/debian/patches/changeset_r2888.diff	2009-09-22 22:56:39 UTC (rev 4193)
+++ trunk/redmine/debian/patches/changeset_r2888.diff	2009-09-22 22:56:46 UTC (rev 4194)
@@ -1,30 +0,0 @@
-Cherry pick upstream patch
-===================================================================
---- redmine/config/locales/ru.yml	(revision 2887)
-+++ redmine/config/locales/ru.yml	(revision 2888)
-@@ -503,8 +503,8 @@
-   label_history: История
-   label_home: Домашняя страница
-   label_incoming_emails: Приём сообщений
--  label_index_by_date: Индекс по дате
--  label_index_by_title: Индекс по названию
-+  label_index_by_date: История страниц
-+  label_index_by_title: Оглавление
-   label_information_plural: Информация
-   label_information: Информация
-   label_in_less_than: менее чем
-@@ -914,10 +914,10 @@
-   text_workflow_edit: Выберите роль и трекер для редактирования последовательности состояний
- 
-   warning_attachments_not_saved: "{{count}} файл(ов) невозможно сохранить."
--  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
-+  text_wiki_page_destroy_question: Эта страница имеет {{descendants}} дочерних страниц и их потомков. Что вы хотите сделать?
-+  text_wiki_page_reassign_children: Переопределить дочерние страницы на текущую страницу
-+  text_wiki_page_nullify_children: Сделать дочерние страницы главными страницами
-+  text_wiki_page_destroy_children: Удалить дочерние страницы и всех их потомков
-   setting_password_min_length: Минимальная длина пароля
-   field_group_by: Группировать результаты по
-   mail_subject_wiki_content_updated: "Wiki-страница '{{page}}' была обновлена"

Deleted: trunk/redmine/debian/patches/changeset_r2889.diff
===================================================================
--- trunk/redmine/debian/patches/changeset_r2889.diff	2009-09-22 22:56:39 UTC (rev 4193)
+++ trunk/redmine/debian/patches/changeset_r2889.diff	2009-09-22 22:56:46 UTC (rev 4194)
@@ -1,13 +0,0 @@
-Cherry pick upstream patch
-===================================================================
---- redmine/lib/redmine/version.rb	(revision 2888)
-+++ redmine/lib/redmine/version.rb	(revision 2889)
-@@ -4,7 +4,7 @@
-   module VERSION #:nodoc:
-     MAJOR = 0
-     MINOR = 8
--    TINY  = 4
-+    TINY  = 5
-     
-     # Branch values:
-     # * official release: nil

Deleted: trunk/redmine/debian/patches/changeset_r2891.diff
===================================================================
--- trunk/redmine/debian/patches/changeset_r2891.diff	2009-09-22 22:56:39 UTC (rev 4193)
+++ trunk/redmine/debian/patches/changeset_r2891.diff	2009-09-22 22:56:46 UTC (rev 4194)
@@ -1,238 +0,0 @@
-Index: trunk/app/views/timelog/report.rhtml
-===================================================================
---- trunk/app/views/timelog/report.rhtml	(revision 2890)
-+++ trunk/app/views/timelog/report.rhtml	(revision 2891)
-@@ -6,7 +6,7 @@
- 
- <h2><%= l(:label_spent_time) %></h2>
- 
--<% form_remote_tag(:url => {}, :html => {:method => :get}, :method => :get, :update => 'content') do %>
-+<% form_remote_tag(:url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content') do %>
-   <% @criterias.each do |criteria| %>
-     <%= hidden_field_tag 'criterias[]', criteria, :id => nil %>
-   <% end %>
-Index: trunk/app/views/timelog/details.rhtml
-===================================================================
---- trunk/app/views/timelog/details.rhtml	(revision 2890)
-+++ trunk/app/views/timelog/details.rhtml	(revision 2891)
-@@ -6,7 +6,7 @@
- 
- <h2><%= l(:label_spent_time) %></h2>
- 
--<% form_remote_tag( :url => {}, :html => {:method => :get}, :method => :get, :update => 'content' ) do %>
-+<% form_remote_tag( :url => {}, :html => {:method => :get, :id => 'query_form'}, :method => :get, :update => 'content' ) do %>
- <%# TOOD: remove the project_id and issue_id hidden fields, that information is
- already in the URI %>
- <%= hidden_field_tag('project_id', params[:project_id]) if @project %>
-Index: trunk/app/views/timelog/_date_range.rhtml
-===================================================================
---- trunk/app/views/timelog/_date_range.rhtml	(revision 2890)
-+++ trunk/app/views/timelog/_date_range.rhtml	(revision 2891)
-@@ -1,4 +1,6 @@
--<fieldset id="filters"><legend><%= l(:label_date_range) %></legend>
-+<fieldset id="date-range" class="collapsible">
-+<legend onclick="toggleFieldset(this);"><%= l(:label_date_range) %></legend>
-+<div>
- <p>
- <%= radio_button_tag 'period_type', '1', !@free_period %>
- <%= select_tag 'period', options_for_period_select(params[:period]),
-@@ -11,9 +13,16 @@
- <%= l(:label_date_from_to, :start => (text_field_tag('from', @from, :size => 10) + calendar_for('from')),
- 													 :end => (text_field_tag('to', @to, :size => 10) + calendar_for('to'))) %>
- </span>
--<%= submit_tag l(:button_apply), :name => nil %>
- </p>
-+</div>
- </fieldset>
-+<p class="buttons">
-+	<%= link_to_remote l(:button_apply), 
-+	                   { :url => { },
-+	                     :update => "content",
-+	                     :with => "Form.serialize('query_form')"
-+	                   }, :class => 'icon icon-checked' %>
-+</p>
- 
- <div class="tabs">
- <% url_params = @free_period ? { :from => @from, :to => @to } : { :period => params[:period] } %>
-Index: trunk/app/views/issues/index.rhtml
-===================================================================
---- trunk/app/views/issues/index.rhtml	(revision 2890)
-+++ trunk/app/views/issues/index.rhtml	(revision 2891)
-@@ -5,11 +5,19 @@
-     <% form_tag({ :controller => 'queries', :action => 'new' }, :id => 'query_form') do %>
-     <%= hidden_field_tag('project_id', @project.to_param) if @project %>
- 		<div id="query_form_content">
--    <fieldset id="filters"><legend><%= l(:label_filter_plural) %></legend>
--    <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
-+    <fieldset id="filters" class="collapsible">
-+    	<legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
-+    	<div>
-+    		<%= render :partial => 'queries/filters', :locals => {:query => @query} %>
-+    	</div>
-     </fieldset>
--		<p><%= l(:field_group_by) %>
--		<%= select_tag('group_by', options_for_select([[]] + @query.groupable_columns.collect {|c| [c.caption, c.name.to_s]}, @query.group_by)) %></p>
-+    <fieldset class="collapsible collapsed">
-+    	<legend onclick="toggleFieldset(this);">Options</legend>
-+    	<div style="display: none;">
-+				<%= l(:field_group_by) %>
-+				<%= select_tag('group_by', options_for_select([[]] + @query.groupable_columns.collect {|c| [c.caption, c.name.to_s]}, @query.group_by)) %></p>
-+			</div>
-+		</fieldset>
- 		</div>
-     <p class="buttons">
- 
-Index: trunk/app/views/issues/calendar.rhtml
-===================================================================
---- trunk/app/views/issues/calendar.rhtml	(revision 2890)
-+++ trunk/app/views/issues/calendar.rhtml	(revision 2891)
-@@ -1,20 +1,18 @@
- <% form_tag({}, :id => 'query_form') do %>
- <% if @query.new_record? %>
--    <h2><%= l(:label_calendar) %></h2>
--    <fieldset id="filters"><legend><%= l(:label_filter_plural) %></legend>
-+<h2><%= l(:label_calendar) %></h2>
-+<fieldset id="filters" class="collapsible">
-+  <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
-+  <div>
-     <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
--    </fieldset>
-+  </div>
-+</fieldset>
- <% else %>
-     <h2><%=h @query.name %></h2>
-     <% html_title @query.name %>
- <% end %>
- 
--<fieldset id="date-range"><legend><%= l(:label_date_range) %></legend>
--    <%= select_month(@month, :prefix => "month", :discard_type => true) %>
--    <%= select_year(@year, :prefix => "year", :discard_type => true) %>
--</fieldset>
--
--<p style="float:right; margin:0px;">
-+<p style="float:right;">
- <%= link_to_remote ('&#171; ' + (@month==1 ? "#{month_name(12)} #{@year-1}" : "#{month_name(@month-1)}")), 
-                         {:update => "content", :url => { :year => (@month==1 ? @year-1 : @year), :month =>(@month==1 ? 12 : @month-1) }},
-                         {:href => url_for(:action => 'calendar', :year => (@month==1 ? @year-1 : @year), :month =>(@month==1 ? 12 : @month-1))}
-@@ -26,6 +24,9 @@
- </p>
- 
- <p class="buttons">
-+<%= select_month(@month, :prefix => "month", :discard_type => true) %>
-+<%= select_year(@year, :prefix => "year", :discard_type => true) %>
-+
- <%= link_to_remote l(:button_apply), 
-                    { :url => { :set_filter => (@query.new_record? ? 1 : nil) },
-                      :update => "content",
-Index: trunk/app/views/issues/gantt.rhtml
-===================================================================
---- trunk/app/views/issues/gantt.rhtml	(revision 2890)
-+++ trunk/app/views/issues/gantt.rhtml	(revision 2891)
-@@ -1,23 +1,18 @@
- <% form_tag(params.merge(:month => nil, :year => nil, :months => nil), :id => 'query_form') do %>
- <% if @query.new_record? %>
--    <h2><%=l(:label_gantt)%></h2>
--    <fieldset id="filters"><legend><%= l(:label_filter_plural) %></legend>
-+<h2><%=l(:label_gantt)%></h2>
-+<fieldset id="filters" class="collapsible">
-+  <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
-+	<div>
-     <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
--    </fieldset>
-+  </div>
-+</fieldset>
- <% else %>
-     <h2><%=h @query.name %></h2>
-     <% html_title @query.name %>
- <% end %>
- 
--<fieldset id="date-range"><legend><%= l(:label_date_range) %></legend>
--    <%= text_field_tag 'months', @gantt.months, :size => 2 %>
--    <%= l(:label_months_from) %>
--    <%= select_month(@gantt.month_from, :prefix => "month", :discard_type => true) %>
--    <%= select_year(@gantt.year_from, :prefix => "year", :discard_type => true) %>
--    <%= hidden_field_tag 'zoom', @gantt.zoom %>
--</fieldset>
--
--<p style="float:right; margin:0px;">
-+<p style="float:right;">
- <%= if @gantt.zoom < 4
-     link_to_remote image_tag('zoom_in.png'), {:url => @gantt.params.merge(:zoom => (@gantt.zoom+1)), :update => 'content'}, {:href => url_for(@gantt.params.merge(:zoom => (@gantt.zoom+1)))}
-   else
-@@ -31,6 +26,12 @@
- </p>
- 
- <p class="buttons">
-+<%= text_field_tag 'months', @gantt.months, :size => 2 %>
-+<%= l(:label_months_from) %>
-+<%= select_month(@gantt.month_from, :prefix => "month", :discard_type => true) %>
-+<%= select_year(@gantt.year_from, :prefix => "year", :discard_type => true) %>
-+<%= hidden_field_tag 'zoom', @gantt.zoom %>
-+
- <%= link_to_remote l(:button_apply), 
-                    { :url => { :set_filter => (@query.new_record? ? 1 : nil) },
-                      :update => "content",
-Index: trunk/public/images/arrow_expanded.png
-===================================================================
-Cannot display: file marked as a binary type.
-svn:mime-type = application/octet-stream
-
-Property changes on: trunk/public/images/arrow_expanded.png
-___________________________________________________________________
-Name: svn:mime-type
-   + application/octet-stream
-
-Index: trunk/public/images/arrow_collapsed.png
-===================================================================
-Cannot display: file marked as a binary type.
-svn:mime-type = application/octet-stream
-
-Property changes on: trunk/public/images/arrow_collapsed.png
-___________________________________________________________________
-Name: svn:mime-type
-   + application/octet-stream
-
-Index: trunk/public/javascripts/application.js
-===================================================================
---- trunk/public/javascripts/application.js	(revision 2890)
-+++ trunk/public/javascripts/application.js	(revision 2891)
-@@ -33,6 +33,12 @@
- 	}
- }
- 
-+function toggleFieldset(el) {
-+	var fieldset = Element.up(el, 'fieldset');
-+	fieldset.toggleClassName('collapsed');
-+	Effect.toggle(fieldset.down('div'), 'slide', {duration:0.2});
-+}
-+
- var fileFieldCount = 1;
- 
- function addFileField() {
-Index: trunk/public/stylesheets/application.css
-===================================================================
---- trunk/public/stylesheets/application.css	(revision 2890)
-+++ trunk/public/stylesheets/application.css	(revision 2891)
-@@ -200,17 +200,16 @@
- p.subtitle { font-size: 0.9em; margin: -6px 0 12px 0; font-style: italic; } 
- p.footnote { font-size: 0.9em; margin-top: 0px; margin-bottom: 0px; }
- 
--#query_form_content { font-size: 0.9em; padding: 4px; background: #f6f6f6; border: 1px solid #e4e4e4; }
--#query_form_content fieldset#filters { border-left: 0; border-right: 0; }
--#query_form_content p { margin-top: 0.5em; margin-bottom: 0.5em; }
-+fieldset.collapsible { border-width: 1px 0 0 0; font-size: 0.9em; }
-+fieldset.collapsible legend { padding-left: 16px; background: url(../images/arrow_expanded.png) no-repeat 0% 40%; cursor:pointer; }
-+fieldset.collapsible.collapsed legend { background-image: url(../images/arrow_collapsed.png); }
- 
--fieldset#filters, fieldset#date-range { padding: 0.7em; margin-bottom: 8px; }
--fieldset#filters p { margin: 1.2em 0 0.8em 2px; }
-+fieldset#date-range p { margin: 2px 0 2px 0; }
- fieldset#filters table { border-collapse: collapse; }
- fieldset#filters table td { padding: 0; vertical-align: middle; }
- fieldset#filters tr.filter { height: 2em; }
- fieldset#filters td.add-filter { text-align: right; vertical-align: top; }
--.buttons { font-size: 0.9em; margin-bottom: 1.4em; }
-+.buttons { font-size: 0.9em; margin-bottom: 1.4em; margin-top: 1em; }
- 
- div#issue-changesets {float:right; width:45%; margin-left: 1em; margin-bottom: 1em; background: #fff; padding-left: 1em; font-size: 90%;}
- div#issue-changesets .changeset { padding: 4px;}

Deleted: trunk/redmine/debian/patches/changeset_r2892.diff
===================================================================
--- trunk/redmine/debian/patches/changeset_r2892.diff	2009-09-22 22:56:39 UTC (rev 4193)
+++ trunk/redmine/debian/patches/changeset_r2892.diff	2009-09-22 22:56:46 UTC (rev 4194)
@@ -1,93 +0,0 @@
-Index: trunk/app/views/issues/index.rhtml
-===================================================================
---- trunk/app/views/issues/index.rhtml	(revision 2891)
-+++ trunk/app/views/issues/index.rhtml	(revision 2892)
-@@ -1,8 +1,14 @@
--<% if @query.new_record? %>
--    <h2><%=l(:label_issue_plural)%></h2>
--    <% html_title(l(:label_issue_plural)) %>
--    
--    <% form_tag({ :controller => 'queries', :action => 'new' }, :id => 'query_form') do %>
-+<div class="contextual">
-+<% if !@query.new_record? && @query.editable_by?(User.current) %>
-+	<%= link_to l(:button_edit), {:controller => 'queries', :action => 'edit', :id => @query}, :class => 'icon icon-edit' %>
-+	<%= link_to l(:button_delete), {:controller => 'queries', :action => 'destroy', :id => @query}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %>
-+<% end %>
-+</div>
-+
-+<h2><%= @query.new_record? ? l(:label_issue_plural) : h(@query.name) %></h2>
-+<% html_title(@query.new_record? ? l(:label_issue_plural) : @query.name) %>
-+
-+<% form_tag({ :controller => 'queries', :action => 'new' }, :id => 'query_form') do %>
-     <%= hidden_field_tag('project_id', @project.to_param) if @project %>
- 		<div id="query_form_content">
-     <fieldset id="filters" class="collapsible">
-@@ -33,21 +39,10 @@
-                          :update => "content",
-                        }, :class => 'icon icon-reload'  %>
-                        
--    <% if User.current.allowed_to?(:save_queries, @project, :global => true) %>
-+    <% if @query.new_record? && User.current.allowed_to?(:save_queries, @project, :global => true) %>
-     <%= link_to l(:button_save), {}, :onclick => "$('query_form').submit(); return false;", :class => 'icon icon-save' %>
-     <% end %>
-     </p>
--    <% end %>
--<% else %>
--    <div class="contextual">
--    <% if @query.editable_by?(User.current) %>
--    <%= link_to l(:button_edit), {:controller => 'queries', :action => 'edit', :id => @query}, :class => 'icon icon-edit' %>
--    <%= link_to l(:button_delete), {:controller => 'queries', :action => 'destroy', :id => @query}, :confirm => l(:text_are_you_sure), :method => :post, :class => 'icon icon-del' %>
--    <% end %>
--    </div>
--    <h2><%=h @query.name %></h2>
--    <div id="query_form"></div>
--    <% html_title @query.name %>
- <% end %>
- 
- <%= error_messages_for 'query' %>
-Index: trunk/app/views/issues/calendar.rhtml
-===================================================================
---- trunk/app/views/issues/calendar.rhtml	(revision 2891)
-+++ trunk/app/views/issues/calendar.rhtml	(revision 2892)
-@@ -1,16 +1,12 @@
--<% form_tag({}, :id => 'query_form') do %>
--<% if @query.new_record? %>
- <h2><%= l(:label_calendar) %></h2>
-+
-+<% form_tag({}, :id => 'query_form') do %>
- <fieldset id="filters" class="collapsible">
-   <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
-   <div>
-     <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
-   </div>
- </fieldset>
--<% else %>
--    <h2><%=h @query.name %></h2>
--    <% html_title @query.name %>
--<% end %>
- 
- <p style="float:right;">
- <%= link_to_remote ('&#171; ' + (@month==1 ? "#{month_name(12)} #{@year-1}" : "#{month_name(@month-1)}")), 
-Index: trunk/app/views/issues/gantt.rhtml
-===================================================================
---- trunk/app/views/issues/gantt.rhtml	(revision 2891)
-+++ trunk/app/views/issues/gantt.rhtml	(revision 2892)
-@@ -1,16 +1,12 @@
-+<h2><%= l(:label_gantt) %></h2>
-+
- <% form_tag(params.merge(:month => nil, :year => nil, :months => nil), :id => 'query_form') do %>
--<% if @query.new_record? %>
--<h2><%=l(:label_gantt)%></h2>
- <fieldset id="filters" class="collapsible">
-   <legend onclick="toggleFieldset(this);"><%= l(:label_filter_plural) %></legend>
- 	<div>
-     <%= render :partial => 'queries/filters', :locals => {:query => @query} %>
-   </div>
- </fieldset>
--<% else %>
--    <h2><%=h @query.name %></h2>
--    <% html_title @query.name %>
--<% end %>
- 
- <p style="float:right;">
- <%= if @gantt.zoom < 4

Deleted: trunk/redmine/debian/patches/changeset_r2893.diff
===================================================================
--- trunk/redmine/debian/patches/changeset_r2893.diff	2009-09-22 22:56:39 UTC (rev 4193)
+++ trunk/redmine/debian/patches/changeset_r2893.diff	2009-09-22 22:56:46 UTC (rev 4194)
@@ -1,76 +0,0 @@
-Index: trunk/test/functional/timelog_controller_test.rb
-===================================================================
---- trunk/test/functional/timelog_controller_test.rb	(revision 2892)
-+++ trunk/test/functional/timelog_controller_test.rb	(revision 2893)
-@@ -206,6 +206,14 @@
-     assert_equal "162.90", "%.2f" % assigns(:total_hours)
-   end
-   
-+  def test_report_at_issue_level
-+    get :report, :project_id => 1, :issue_id => 1, :columns => 'month', :from => "2007-01-01", :to => "2007-12-31", :criterias => ["member", "activity"]
-+    assert_response :success
-+    assert_template 'report'
-+    assert_not_nil assigns(:total_hours)
-+    assert_equal "154.25", "%.2f" % assigns(:total_hours)
-+  end
-+  
-   def test_report_custom_field_criteria
-     get :report, :project_id => 1, :criterias => ['project', 'cf_1']
-     assert_response :success
-Index: trunk/app/controllers/timelog_controller.rb
-===================================================================
---- trunk/app/controllers/timelog_controller.rb	(revision 2892)
-+++ trunk/app/controllers/timelog_controller.rb	(revision 2893)
-@@ -80,14 +80,22 @@
-     unless @criterias.empty?
-       sql_select = @criterias.collect{|criteria| @available_criterias[criteria][:sql] + " AS " + criteria}.join(', ')
-       sql_group_by = @criterias.collect{|criteria| @available_criterias[criteria][:sql]}.join(', ')
-+      sql_condition = ''
-       
-+      if @project.nil?
-+        sql_condition = Project.allowed_to_condition(User.current, :view_time_entries)
-+      elsif @issue.nil?
-+        sql_condition = @project.project_condition(Setting.display_subprojects_issues?)
-+      else
-+        sql_condition = "#{TimeEntry.table_name}.issue_id = #{@issue.id}"
-+      end
-+
-       sql = "SELECT #{sql_select}, tyear, tmonth, tweek, spent_on, SUM(hours) AS hours"
-       sql << " FROM #{TimeEntry.table_name}"
-       sql << " LEFT JOIN #{Issue.table_name} ON #{TimeEntry.table_name}.issue_id = #{Issue.table_name}.id"
-       sql << " LEFT JOIN #{Project.table_name} ON #{TimeEntry.table_name}.project_id = #{Project.table_name}.id"
-       sql << " WHERE"
--      sql << " (%s) AND" % @project.project_condition(Setting.display_subprojects_issues?) if @project
--      sql << " (%s) AND" % Project.allowed_to_condition(User.current, :view_time_entries)
-+      sql << " (%s) AND" % sql_condition
-       sql << " (spent_on BETWEEN '%s' AND '%s')" % [ActiveRecord::Base.connection.quoted_date(@from.to_time), ActiveRecord::Base.connection.quoted_date(@to.to_time)]
-       sql << " GROUP BY #{sql_group_by}, tyear, tmonth, tweek, spent_on"
-       
-Index: trunk/app/views/timelog/report.rhtml
-===================================================================
---- trunk/app/views/timelog/report.rhtml	(revision 2892)
-+++ trunk/app/views/timelog/report.rhtml	(revision 2893)
-@@ -12,6 +12,7 @@
-   <% end %>
-   <%# TODO: get rid of the project_id field, that should already be in the URL %>
-   <%= hidden_field_tag('project_id', params[:project_id]) if @project %>
-+  <%= hidden_field_tag('issue_id', params[:issue_id]) if @issue %>
-   <%= render :partial => 'date_range' %>
- 
-   <p><%= l(:label_details) %>: <%= select_tag 'columns', options_for_select([[l(:label_year), 'year'],
-Index: trunk/app/views/timelog/_date_range.rhtml
-===================================================================
---- trunk/app/views/timelog/_date_range.rhtml	(revision 2892)
-+++ trunk/app/views/timelog/_date_range.rhtml	(revision 2893)
-@@ -27,9 +27,9 @@
- <div class="tabs">
- <% url_params = @free_period ? { :from => @from, :to => @to } : { :period => params[:period] } %>
- <ul>
--    <li><%= link_to(l(:label_details), url_params.merge({:controller => 'timelog', :action => 'details', :project_id => @project }),
-+    <li><%= link_to(l(:label_details), url_params.merge({:controller => 'timelog', :action => 'details', :project_id => @project, :issue_id => @issue }),
-                                        :class => (@controller.action_name == 'details' ? 'selected' : nil)) %></li>
--    <li><%= link_to(l(:label_report), url_params.merge({:controller => 'timelog', :action => 'report', :project_id => @project}),
-+    <li><%= link_to(l(:label_report), url_params.merge({:controller => 'timelog', :action => 'report', :project_id => @project, :issue_id => @issue}),
-                                        :class => (@controller.action_name == 'report' ? 'selected' : nil)) %></li>
- </ul>
- </div>

Deleted: trunk/redmine/debian/patches/changeset_r2894.diff
===================================================================
--- trunk/redmine/debian/patches/changeset_r2894.diff	2009-09-22 22:56:39 UTC (rev 4193)
+++ trunk/redmine/debian/patches/changeset_r2894.diff	2009-09-22 22:56:46 UTC (rev 4194)
@@ -1,1199 +0,0 @@
-Index: trunk/test/functional/account_controller_test.rb
-===================================================================
---- trunk/test/functional/account_controller_test.rb	(revision 2893)
-+++ trunk/test/functional/account_controller_test.rb	(revision 2894)
-@@ -37,7 +37,19 @@
-     assert_template 'show'
-     assert_not_nil assigns(:user)
-   end
-+
-+  def test_show_should_not_fail_when_custom_values_are_nil
-+    user = User.find(2)
-+
-+    # Create a custom field to illustrate the issue
-+    custom_field = CustomField.create!(:name => 'Testing', :field_format => 'text')
-+    custom_value = user.custom_values.build(:custom_field => custom_field).save!
-+
-+    get :show, :id => 2
-+    assert_response :success
-+  end
-   
-+
-   def test_show_inactive
-     get :show, :id => 5
-     assert_response 404
-Index: trunk/test/functional/projects_controller_test.rb
-===================================================================
---- trunk/test/functional/projects_controller_test.rb	(revision 2893)
-+++ trunk/test/functional/projects_controller_test.rb	(revision 2894)
-@@ -1,567 +1,577 @@
--# Redmine - project management software
--# Copyright (C) 2006-2008  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.
--
--require File.dirname(__FILE__) + '/../test_helper'
--require 'projects_controller'
--
--# Re-raise errors caught by the controller.
--class ProjectsController; def rescue_action(e) raise e end; end
--
--class ProjectsControllerTest < ActionController::TestCase
--  fixtures :projects, :versions, :users, :roles, :members, :member_roles, :issues, :journals, :journal_details,
--           :trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages,
--           :attachments
--
--  def setup
--    @controller = ProjectsController.new
--    @request    = ActionController::TestRequest.new
--    @response   = ActionController::TestResponse.new
--    @request.session[:user_id] = nil
--    Setting.default_language = 'en'
--  end
--  
--  def test_index_routing
--    assert_routing(
--      {:method => :get, :path => '/projects'},
--      :controller => 'projects', :action => 'index'
--    )
--  end
--  
--  def test_index
--    get :index
--    assert_response :success
--    assert_template 'index'
--    assert_not_nil assigns(:projects)
--    
--    assert_tag :ul, :child => {:tag => 'li',
--                               :descendant => {:tag => 'a', :content => 'eCookbook'},
--                               :child => { :tag => 'ul',
--                                           :descendant => { :tag => 'a',
--                                                            :content => 'Child of private child'
--                                                           }
--                                          }
--                               }
--                               
--    assert_no_tag :a, :content => /Private child of eCookbook/
--  end
--  
--  def test_index_atom_routing
--    assert_routing(
--      {:method => :get, :path => '/projects.atom'},
--      :controller => 'projects', :action => 'index', :format => 'atom'
--    )
--  end
--  
--  def test_index_atom
--    get :index, :format => 'atom'
--    assert_response :success
--    assert_template 'common/feed.atom.rxml'
--    assert_select 'feed>title', :text => 'Redmine: Latest projects'
--    assert_select 'feed>entry', :count => Project.count(:conditions => Project.visible_by(User.current))
--  end
--  
--  def test_add_routing
--    assert_routing(
--      {:method => :get, :path => '/projects/new'},
--      :controller => 'projects', :action => 'add'
--    )
--    assert_recognizes(
--      {:controller => 'projects', :action => 'add'},
--      {:method => :post, :path => '/projects/new'}
--    )
--    assert_recognizes(
--      {:controller => 'projects', :action => 'add'},
--      {:method => :post, :path => '/projects'}
--    )
--  end
--  
--  def test_get_add
--    @request.session[:user_id] = 1
--    get :add
--    assert_response :success
--    assert_template 'add'
--  end
--  
--  def test_get_add_by_non_admin
--    @request.session[:user_id] = 2
--    get :add
--    assert_response :success
--    assert_template 'add'
--  end
--  
--  def test_post_add
--    @request.session[:user_id] = 1
--    post :add, :project => { :name => "blog", 
--                             :description => "weblog",
--                             :identifier => "blog",
--                             :is_public => 1,
--                             :custom_field_values => { '3' => 'Beta' }
--                            }
--    assert_redirected_to '/projects/blog/settings'
--    
--    project = Project.find_by_name('blog')
--    assert_kind_of Project, project
--    assert_equal 'weblog', project.description 
--    assert_equal true, project.is_public?
--  end
--  
--  def test_post_add_by_non_admin
--    @request.session[:user_id] = 2
--    post :add, :project => { :name => "blog", 
--                             :description => "weblog",
--                             :identifier => "blog",
--                             :is_public => 1,
--                             :custom_field_values => { '3' => 'Beta' }
--                            }
--    assert_redirected_to '/projects/blog/settings'
--    
--    project = Project.find_by_name('blog')
--    assert_kind_of Project, project
--    assert_equal 'weblog', project.description 
--    assert_equal true, project.is_public?
--    
--    # User should be added as a project member
--    assert User.find(2).member_of?(project)
--    assert_equal 1, project.members.size
--  end
--  
--  def test_show_routing
--    assert_routing(
--      {:method => :get, :path => '/projects/test'},
--      :controller => 'projects', :action => 'show', :id => 'test'
--    )
--  end
--  
--  def test_show_by_id
--    get :show, :id => 1
--    assert_response :success
--    assert_template 'show'
--    assert_not_nil assigns(:project)
--  end
--
--  def test_show_by_identifier
--    get :show, :id => 'ecookbook'
--    assert_response :success
--    assert_template 'show'
--    assert_not_nil assigns(:project)
--    assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
--  end
--  
--  def test_private_subprojects_hidden
--    get :show, :id => 'ecookbook'
--    assert_response :success
--    assert_template 'show'
--    assert_no_tag :tag => 'a', :content => /Private child/
--  end
--
--  def test_private_subprojects_visible
--    @request.session[:user_id] = 2 # manager who is a member of the private subproject
--    get :show, :id => 'ecookbook'
--    assert_response :success
--    assert_template 'show'
--    assert_tag :tag => 'a', :content => /Private child/
--  end
--  
--  def test_settings_routing
--    assert_routing(
--      {:method => :get, :path => '/projects/4223/settings'},
--      :controller => 'projects', :action => 'settings', :id => '4223'
--    )
--    assert_routing(
--      {:method => :get, :path => '/projects/4223/settings/members'},
--      :controller => 'projects', :action => 'settings', :id => '4223', :tab => 'members'
--    )
--  end
--  
--  def test_settings
--    @request.session[:user_id] = 2 # manager
--    get :settings, :id => 1
--    assert_response :success
--    assert_template 'settings'
--  end
--  
--  def test_edit
--    @request.session[:user_id] = 2 # manager
--    post :edit, :id => 1, :project => {:name => 'Test changed name',
--                                       :issue_custom_field_ids => ['']}
--    assert_redirected_to 'projects/ecookbook/settings'
--    project = Project.find(1)
--    assert_equal 'Test changed name', project.name
--  end
--  
--  def test_add_version_routing
--    assert_routing(
--      {:method => :get, :path => 'projects/64/versions/new'},
--      :controller => 'projects', :action => 'add_version', :id => '64'
--    )
--    assert_routing(
--    #TODO: use PUT
--      {:method => :post, :path => 'projects/64/versions/new'},
--      :controller => 'projects', :action => 'add_version', :id => '64'
--    )
--  end
--  
--  def test_add_issue_category_routing
--    assert_routing(
--      {:method => :get, :path => 'projects/test/categories/new'},
--      :controller => 'projects', :action => 'add_issue_category', :id => 'test'
--    )
--    assert_routing(
--    #TODO: use PUT and update form
--      {:method => :post, :path => 'projects/64/categories/new'},
--      :controller => 'projects', :action => 'add_issue_category', :id => '64'
--    )
--  end
--  
--  def test_destroy_routing
--    assert_routing(
--      {:method => :get, :path => '/projects/567/destroy'},
--      :controller => 'projects', :action => 'destroy', :id => '567'
--    )
--    assert_routing(
--    #TODO: use DELETE and update form
--      {:method => :post, :path => 'projects/64/destroy'},
--      :controller => 'projects', :action => 'destroy', :id => '64'
--    )
--  end
--  
--  def test_get_destroy
--    @request.session[:user_id] = 1 # admin
--    get :destroy, :id => 1
--    assert_response :success
--    assert_template 'destroy'
--    assert_not_nil Project.find_by_id(1)
--  end
--
--  def test_post_destroy
--    @request.session[:user_id] = 1 # admin
--    post :destroy, :id => 1, :confirm => 1
--    assert_redirected_to 'admin/projects'
--    assert_nil Project.find_by_id(1)
--  end
--  
--  def test_add_file
--    set_tmp_attachments_directory
--    @request.session[:user_id] = 2
--    Setting.notified_events = ['file_added']
--    ActionMailer::Base.deliveries.clear
--    
--    assert_difference 'Attachment.count' do
--      post :add_file, :id => 1, :version_id => '',
--           :attachments => {'1' => {'file' => test_uploaded_file('testfile.txt', 'text/plain')}}
--    end
--    assert_redirected_to 'projects/ecookbook/files'
--    a = Attachment.find(:first, :order => 'created_on DESC')
--    assert_equal 'testfile.txt', a.filename
--    assert_equal Project.find(1), a.container
--
--    mail = ActionMailer::Base.deliveries.last
--    assert_kind_of TMail::Mail, mail
--    assert_equal "[eCookbook] New file", mail.subject
--    assert mail.body.include?('testfile.txt')
--  end
--  
--  def test_add_file_routing
--    assert_routing(
--      {:method => :get, :path => '/projects/33/files/new'},
--      :controller => 'projects', :action => 'add_file', :id => '33'
--    )
--    assert_routing(
--      {:method => :post, :path => '/projects/33/files/new'},
--      :controller => 'projects', :action => 'add_file', :id => '33'
--    )
--  end
--  
--  def test_add_version_file
--    set_tmp_attachments_directory
--    @request.session[:user_id] = 2
--    Setting.notified_events = ['file_added']
--    
--    assert_difference 'Attachment.count' do
--      post :add_file, :id => 1, :version_id => '2',
--           :attachments => {'1' => {'file' => test_uploaded_file('testfile.txt', 'text/plain')}}
--    end
--    assert_redirected_to 'projects/ecookbook/files'
--    a = Attachment.find(:first, :order => 'created_on DESC')
--    assert_equal 'testfile.txt', a.filename
--    assert_equal Version.find(2), a.container
--  end
--  
--  def test_list_files
--    get :list_files, :id => 1
--    assert_response :success
--    assert_template 'list_files'
--    assert_not_nil assigns(:containers)
--    
--    # file attached to the project
--    assert_tag :a, :content => 'project_file.zip',
--                   :attributes => { :href => '/attachments/download/8/project_file.zip' }
--    
--    # file attached to a project's version
--    assert_tag :a, :content => 'version_file.zip',
--                   :attributes => { :href => '/attachments/download/9/version_file.zip' }
--  end
--
--  def test_list_files_routing
--    assert_routing(
--      {:method => :get, :path => '/projects/33/files'},
--      :controller => 'projects', :action => 'list_files', :id => '33'
--    )
--  end
--  
--  def test_changelog_routing
--    assert_routing(
--      {:method => :get, :path => '/projects/44/changelog'},
--      :controller => 'projects', :action => 'changelog', :id => '44'
--    )
--  end
--  
--  def test_changelog
--    get :changelog, :id => 1
--    assert_response :success
--    assert_template 'changelog'
--    assert_not_nil assigns(:versions)
--  end
--  
--  def test_roadmap_routing
--    assert_routing(
--      {:method => :get, :path => 'projects/33/roadmap'},
--      :controller => 'projects', :action => 'roadmap', :id => '33'
--    )
--  end
--  
--  def test_roadmap
--    get :roadmap, :id => 1
--    assert_response :success
--    assert_template 'roadmap'
--    assert_not_nil assigns(:versions)
--    # Version with no date set appears
--    assert assigns(:versions).include?(Version.find(3))
--    # Completed version doesn't appear
--    assert !assigns(:versions).include?(Version.find(1))
--  end
--  
--  def test_roadmap_with_completed_versions
--    get :roadmap, :id => 1, :completed => 1
--    assert_response :success
--    assert_template 'roadmap'
--    assert_not_nil assigns(:versions)
--    # Version with no date set appears
--    assert assigns(:versions).include?(Version.find(3))
--    # Completed version appears
--    assert assigns(:versions).include?(Version.find(1))
--  end
--  
--  def test_project_activity_routing
--    assert_routing(
--      {:method => :get, :path => '/projects/1/activity'},
--       :controller => 'projects', :action => 'activity', :id => '1'
--    )
--  end
--  
--  def test_project_activity_atom_routing
--    assert_routing(
--      {:method => :get, :path => '/projects/1/activity.atom'},
--       :controller => 'projects', :action => 'activity', :id => '1', :format => 'atom'
--    )    
--  end
--  
--  def test_project_activity
--    get :activity, :id => 1, :with_subprojects => 0
--    assert_response :success
--    assert_template 'activity'
--    assert_not_nil assigns(:events_by_day)
--    
--    assert_tag :tag => "h3", 
--               :content => /#{2.days.ago.to_date.day}/,
--               :sibling => { :tag => "dl",
--                 :child => { :tag => "dt",
--                   :attributes => { :class => /issue-edit/ },
--                   :child => { :tag => "a",
--                     :content => /(#{IssueStatus.find(2).name})/,
--                   }
--                 }
--               }
--  end
--  
--  def test_previous_project_activity
--    get :activity, :id => 1, :from => 3.days.ago.to_date
--    assert_response :success
--    assert_template 'activity'
--    assert_not_nil assigns(:events_by_day)
--               
--    assert_tag :tag => "h3", 
--               :content => /#{3.day.ago.to_date.day}/,
--               :sibling => { :tag => "dl",
--                 :child => { :tag => "dt",
--                   :attributes => { :class => /issue/ },
--                   :child => { :tag => "a",
--                     :content => /#{Issue.find(1).subject}/,
--                   }
--                 }
--               }
--  end
--  
--  def test_global_activity_routing
--    assert_routing({:method => :get, :path => '/activity'}, :controller => 'projects', :action => 'activity', :id => nil)
--  end
--  
--  def test_global_activity
--    get :activity
--    assert_response :success
--    assert_template 'activity'
--    assert_not_nil assigns(:events_by_day)
--    
--    assert_tag :tag => "h3", 
--               :content => /#{5.day.ago.to_date.day}/,
--               :sibling => { :tag => "dl",
--                 :child => { :tag => "dt",
--                   :attributes => { :class => /issue/ },
--                   :child => { :tag => "a",
--                     :content => /#{Issue.find(5).subject}/,
--                   }
--                 }
--               }
--  end
--  
--  def test_user_activity
--    get :activity, :user_id => 2
--    assert_response :success
--    assert_template 'activity'
--    assert_not_nil assigns(:events_by_day)
--    
--    assert_tag :tag => "h3", 
--               :content => /#{3.day.ago.to_date.day}/,
--               :sibling => { :tag => "dl",
--                 :child => { :tag => "dt",
--                   :attributes => { :class => /issue/ },
--                   :child => { :tag => "a",
--                     :content => /#{Issue.find(1).subject}/,
--                   }
--                 }
--               }
--  end
--  
--  def test_global_activity_atom_routing
--    assert_routing({:method => :get, :path => '/activity.atom'}, :controller => 'projects', :action => 'activity', :id => nil, :format => 'atom')
--  end
--  
--  def test_activity_atom_feed
--    get :activity, :format => 'atom'
--    assert_response :success
--    assert_template 'common/feed.atom.rxml'
--  end
--  
--  def test_archive_routing
--    assert_routing(
--    #TODO: use PUT to project path and modify form
--      {:method => :post, :path => 'projects/64/archive'},
--      :controller => 'projects', :action => 'archive', :id => '64'
--    )
--  end
--  
--  def test_archive
--    @request.session[:user_id] = 1 # admin
--    post :archive, :id => 1
--    assert_redirected_to 'admin/projects'
--    assert !Project.find(1).active?
--  end
--  
--  def test_unarchive_routing
--    assert_routing(
--    #TODO: use PUT to project path and modify form
--      {:method => :post, :path => '/projects/567/unarchive'},
--      :controller => 'projects', :action => 'unarchive', :id => '567'
--    )
--  end
--  
--  def test_unarchive
--    @request.session[:user_id] = 1 # admin
--    Project.find(1).archive
--    post :unarchive, :id => 1
--    assert_redirected_to 'admin/projects'
--    assert Project.find(1).active?
--  end
--  
--  def test_project_breadcrumbs_should_be_limited_to_3_ancestors
--    CustomField.delete_all
--    parent = nil
--    6.times do |i|
--      p = Project.create!(:name => "Breadcrumbs #{i}", :identifier => "breadcrumbs-#{i}")
--      p.set_parent!(parent)
--      get :show, :id => p
--      assert_tag :h1, :parent => { :attributes => {:id => 'header'}},
--                      :children => { :count => [i, 3].min,
--                                     :only => { :tag => 'a' } }
--                                     
--      parent = p
--    end
--  end
--
--  def test_copy_with_project
--    @request.session[:user_id] = 1 # admin
--    get :copy, :id => 1
--    assert_response :success
--    assert_template 'copy'
--    assert assigns(:project)
--    assert_equal Project.find(1).description, assigns(:project).description
--    assert_nil assigns(:project).id
--  end
--
--  def test_copy_without_project
--    @request.session[:user_id] = 1 # admin
--    get :copy
--    assert_response :redirect
--    assert_redirected_to :controller => 'admin', :action => 'projects'
--  end
--
--  def test_jump_should_redirect_to_active_tab
--    get :show, :id => 1, :jump => 'issues'
--    assert_redirected_to 'projects/ecookbook/issues'
--  end
--  
--  def test_jump_should_not_redirect_to_inactive_tab
--    get :show, :id => 3, :jump => 'documents'
--    assert_response :success
--    assert_template 'show'
--  end
--  
--  def test_jump_should_not_redirect_to_unknown_tab
--    get :show, :id => 3, :jump => 'foobar'
--    assert_response :success
--    assert_template 'show'
--  end
--  
--  # A hook that is manually registered later
--  class ProjectBasedTemplate < Redmine::Hook::ViewListener
--    def view_layouts_base_html_head(context)
--      # Adds a project stylesheet
--      stylesheet_link_tag(context[:project].identifier) if context[:project]
--    end
--  end
--  # Don't use this hook now
--  Redmine::Hook.clear_listeners
--  
--  def test_hook_response
--    Redmine::Hook.add_listener(ProjectBasedTemplate)
--    get :show, :id => 1
--    assert_tag :tag => 'link', :attributes => {:href => '/stylesheets/ecookbook.css'},
--                               :parent => {:tag => 'head'}
--    
--    Redmine::Hook.clear_listeners
--  end
--end
-+# Redmine - project management software
-+# Copyright (C) 2006-2008  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.
-+
-+require File.dirname(__FILE__) + '/../test_helper'
-+require 'projects_controller'
-+
-+# Re-raise errors caught by the controller.
-+class ProjectsController; def rescue_action(e) raise e end; end
-+
-+class ProjectsControllerTest < ActionController::TestCase
-+  fixtures :projects, :versions, :users, :roles, :members, :member_roles, :issues, :journals, :journal_details,
-+           :trackers, :projects_trackers, :issue_statuses, :enabled_modules, :enumerations, :boards, :messages,
-+           :attachments
-+
-+  def setup
-+    @controller = ProjectsController.new
-+    @request    = ActionController::TestRequest.new
-+    @response   = ActionController::TestResponse.new
-+    @request.session[:user_id] = nil
-+    Setting.default_language = 'en'
-+  end
-+  
-+  def test_index_routing
-+    assert_routing(
-+      {:method => :get, :path => '/projects'},
-+      :controller => 'projects', :action => 'index'
-+    )
-+  end
-+  
-+  def test_index
-+    get :index
-+    assert_response :success
-+    assert_template 'index'
-+    assert_not_nil assigns(:projects)
-+    
-+    assert_tag :ul, :child => {:tag => 'li',
-+                               :descendant => {:tag => 'a', :content => 'eCookbook'},
-+                               :child => { :tag => 'ul',
-+                                           :descendant => { :tag => 'a',
-+                                                            :content => 'Child of private child'
-+                                                           }
-+                                          }
-+                               }
-+                               
-+    assert_no_tag :a, :content => /Private child of eCookbook/
-+  end
-+  
-+  def test_index_atom_routing
-+    assert_routing(
-+      {:method => :get, :path => '/projects.atom'},
-+      :controller => 'projects', :action => 'index', :format => 'atom'
-+    )
-+  end
-+  
-+  def test_index_atom
-+    get :index, :format => 'atom'
-+    assert_response :success
-+    assert_template 'common/feed.atom.rxml'
-+    assert_select 'feed>title', :text => 'Redmine: Latest projects'
-+    assert_select 'feed>entry', :count => Project.count(:conditions => Project.visible_by(User.current))
-+  end
-+  
-+  def test_add_routing
-+    assert_routing(
-+      {:method => :get, :path => '/projects/new'},
-+      :controller => 'projects', :action => 'add'
-+    )
-+    assert_recognizes(
-+      {:controller => 'projects', :action => 'add'},
-+      {:method => :post, :path => '/projects/new'}
-+    )
-+    assert_recognizes(
-+      {:controller => 'projects', :action => 'add'},
-+      {:method => :post, :path => '/projects'}
-+    )
-+  end
-+  
-+  def test_get_add
-+    @request.session[:user_id] = 1
-+    get :add
-+    assert_response :success
-+    assert_template 'add'
-+  end
-+  
-+  def test_get_add_by_non_admin
-+    @request.session[:user_id] = 2
-+    get :add
-+    assert_response :success
-+    assert_template 'add'
-+  end
-+  
-+  def test_post_add
-+    @request.session[:user_id] = 1
-+    post :add, :project => { :name => "blog", 
-+                             :description => "weblog",
-+                             :identifier => "blog",
-+                             :is_public => 1,
-+                             :custom_field_values => { '3' => 'Beta' }
-+                            }
-+    assert_redirected_to '/projects/blog/settings'
-+    
-+    project = Project.find_by_name('blog')
-+    assert_kind_of Project, project
-+    assert_equal 'weblog', project.description 
-+    assert_equal true, project.is_public?
-+  end
-+  
-+  def test_post_add_by_non_admin
-+    @request.session[:user_id] = 2
-+    post :add, :project => { :name => "blog", 
-+                             :description => "weblog",
-+                             :identifier => "blog",
-+                             :is_public => 1,
-+                             :custom_field_values => { '3' => 'Beta' }
-+                            }
-+    assert_redirected_to '/projects/blog/settings'
-+    
-+    project = Project.find_by_name('blog')
-+    assert_kind_of Project, project
-+    assert_equal 'weblog', project.description 
-+    assert_equal true, project.is_public?
-+    
-+    # User should be added as a project member
-+    assert User.find(2).member_of?(project)
-+    assert_equal 1, project.members.size
-+  end
-+  
-+  def test_show_routing
-+    assert_routing(
-+      {:method => :get, :path => '/projects/test'},
-+      :controller => 'projects', :action => 'show', :id => 'test'
-+    )
-+  end
-+  
-+  def test_show_by_id
-+    get :show, :id => 1
-+    assert_response :success
-+    assert_template 'show'
-+    assert_not_nil assigns(:project)
-+  end
-+
-+  def test_show_by_identifier
-+    get :show, :id => 'ecookbook'
-+    assert_response :success
-+    assert_template 'show'
-+    assert_not_nil assigns(:project)
-+    assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
-+  end
-+  
-+  def test_show_should_not_fail_when_custom_values_are_nil
-+    project = Project.find_by_identifier('ecookbook')
-+    project.custom_values.first.update_attribute(:value, nil)
-+    get :show, :id => 'ecookbook'
-+    assert_response :success
-+    assert_template 'show'
-+    assert_not_nil assigns(:project)
-+    assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
-+  end
-+  
-+  def test_private_subprojects_hidden
-+    get :show, :id => 'ecookbook'
-+    assert_response :success
-+    assert_template 'show'
-+    assert_no_tag :tag => 'a', :content => /Private child/
-+  end
-+
-+  def test_private_subprojects_visible
-+    @request.session[:user_id] = 2 # manager who is a member of the private subproject
-+    get :show, :id => 'ecookbook'
-+    assert_response :success
-+    assert_template 'show'
-+    assert_tag :tag => 'a', :content => /Private child/
-+  end
-+  
-+  def test_settings_routing
-+    assert_routing(
-+      {:method => :get, :path => '/projects/4223/settings'},
-+      :controller => 'projects', :action => 'settings', :id => '4223'
-+    )
-+    assert_routing(
-+      {:method => :get, :path => '/projects/4223/settings/members'},
-+      :controller => 'projects', :action => 'settings', :id => '4223', :tab => 'members'
-+    )
-+  end
-+  
-+  def test_settings
-+    @request.session[:user_id] = 2 # manager
-+    get :settings, :id => 1
-+    assert_response :success
-+    assert_template 'settings'
-+  end
-+  
-+  def test_edit
-+    @request.session[:user_id] = 2 # manager
-+    post :edit, :id => 1, :project => {:name => 'Test changed name',
-+                                       :issue_custom_field_ids => ['']}
-+    assert_redirected_to 'projects/ecookbook/settings'
-+    project = Project.find(1)
-+    assert_equal 'Test changed name', project.name
-+  end
-+  
-+  def test_add_version_routing
-+    assert_routing(
-+      {:method => :get, :path => 'projects/64/versions/new'},
-+      :controller => 'projects', :action => 'add_version', :id => '64'
-+    )
-+    assert_routing(
-+    #TODO: use PUT
-+      {:method => :post, :path => 'projects/64/versions/new'},
-+      :controller => 'projects', :action => 'add_version', :id => '64'
-+    )
-+  end
-+  
-+  def test_add_issue_category_routing
-+    assert_routing(
-+      {:method => :get, :path => 'projects/test/categories/new'},
-+      :controller => 'projects', :action => 'add_issue_category', :id => 'test'
-+    )
-+    assert_routing(
-+    #TODO: use PUT and update form
-+      {:method => :post, :path => 'projects/64/categories/new'},
-+      :controller => 'projects', :action => 'add_issue_category', :id => '64'
-+    )
-+  end
-+  
-+  def test_destroy_routing
-+    assert_routing(
-+      {:method => :get, :path => '/projects/567/destroy'},
-+      :controller => 'projects', :action => 'destroy', :id => '567'
-+    )
-+    assert_routing(
-+    #TODO: use DELETE and update form
-+      {:method => :post, :path => 'projects/64/destroy'},
-+      :controller => 'projects', :action => 'destroy', :id => '64'
-+    )
-+  end
-+  
-+  def test_get_destroy
-+    @request.session[:user_id] = 1 # admin
-+    get :destroy, :id => 1
-+    assert_response :success
-+    assert_template 'destroy'
-+    assert_not_nil Project.find_by_id(1)
-+  end
-+
-+  def test_post_destroy
-+    @request.session[:user_id] = 1 # admin
-+    post :destroy, :id => 1, :confirm => 1
-+    assert_redirected_to 'admin/projects'
-+    assert_nil Project.find_by_id(1)
-+  end
-+  
-+  def test_add_file
-+    set_tmp_attachments_directory
-+    @request.session[:user_id] = 2
-+    Setting.notified_events = ['file_added']
-+    ActionMailer::Base.deliveries.clear
-+    
-+    assert_difference 'Attachment.count' do
-+      post :add_file, :id => 1, :version_id => '',
-+           :attachments => {'1' => {'file' => test_uploaded_file('testfile.txt', 'text/plain')}}
-+    end
-+    assert_redirected_to 'projects/ecookbook/files'
-+    a = Attachment.find(:first, :order => 'created_on DESC')
-+    assert_equal 'testfile.txt', a.filename
-+    assert_equal Project.find(1), a.container
-+
-+    mail = ActionMailer::Base.deliveries.last
-+    assert_kind_of TMail::Mail, mail
-+    assert_equal "[eCookbook] New file", mail.subject
-+    assert mail.body.include?('testfile.txt')
-+  end
-+  
-+  def test_add_file_routing
-+    assert_routing(
-+      {:method => :get, :path => '/projects/33/files/new'},
-+      :controller => 'projects', :action => 'add_file', :id => '33'
-+    )
-+    assert_routing(
-+      {:method => :post, :path => '/projects/33/files/new'},
-+      :controller => 'projects', :action => 'add_file', :id => '33'
-+    )
-+  end
-+  
-+  def test_add_version_file
-+    set_tmp_attachments_directory
-+    @request.session[:user_id] = 2
-+    Setting.notified_events = ['file_added']
-+    
-+    assert_difference 'Attachment.count' do
-+      post :add_file, :id => 1, :version_id => '2',
-+           :attachments => {'1' => {'file' => test_uploaded_file('testfile.txt', 'text/plain')}}
-+    end
-+    assert_redirected_to 'projects/ecookbook/files'
-+    a = Attachment.find(:first, :order => 'created_on DESC')
-+    assert_equal 'testfile.txt', a.filename
-+    assert_equal Version.find(2), a.container
-+  end
-+  
-+  def test_list_files
-+    get :list_files, :id => 1
-+    assert_response :success
-+    assert_template 'list_files'
-+    assert_not_nil assigns(:containers)
-+    
-+    # file attached to the project
-+    assert_tag :a, :content => 'project_file.zip',
-+                   :attributes => { :href => '/attachments/download/8/project_file.zip' }
-+    
-+    # file attached to a project's version
-+    assert_tag :a, :content => 'version_file.zip',
-+                   :attributes => { :href => '/attachments/download/9/version_file.zip' }
-+  end
-+
-+  def test_list_files_routing
-+    assert_routing(
-+      {:method => :get, :path => '/projects/33/files'},
-+      :controller => 'projects', :action => 'list_files', :id => '33'
-+    )
-+  end
-+  
-+  def test_changelog_routing
-+    assert_routing(
-+      {:method => :get, :path => '/projects/44/changelog'},
-+      :controller => 'projects', :action => 'changelog', :id => '44'
-+    )
-+  end
-+  
-+  def test_changelog
-+    get :changelog, :id => 1
-+    assert_response :success
-+    assert_template 'changelog'
-+    assert_not_nil assigns(:versions)
-+  end
-+  
-+  def test_roadmap_routing
-+    assert_routing(
-+      {:method => :get, :path => 'projects/33/roadmap'},
-+      :controller => 'projects', :action => 'roadmap', :id => '33'
-+    )
-+  end
-+  
-+  def test_roadmap
-+    get :roadmap, :id => 1
-+    assert_response :success
-+    assert_template 'roadmap'
-+    assert_not_nil assigns(:versions)
-+    # Version with no date set appears
-+    assert assigns(:versions).include?(Version.find(3))
-+    # Completed version doesn't appear
-+    assert !assigns(:versions).include?(Version.find(1))
-+  end
-+  
-+  def test_roadmap_with_completed_versions
-+    get :roadmap, :id => 1, :completed => 1
-+    assert_response :success
-+    assert_template 'roadmap'
-+    assert_not_nil assigns(:versions)
-+    # Version with no date set appears
-+    assert assigns(:versions).include?(Version.find(3))
-+    # Completed version appears
-+    assert assigns(:versions).include?(Version.find(1))
-+  end
-+  
-+  def test_project_activity_routing
-+    assert_routing(
-+      {:method => :get, :path => '/projects/1/activity'},
-+       :controller => 'projects', :action => 'activity', :id => '1'
-+    )
-+  end
-+  
-+  def test_project_activity_atom_routing
-+    assert_routing(
-+      {:method => :get, :path => '/projects/1/activity.atom'},
-+       :controller => 'projects', :action => 'activity', :id => '1', :format => 'atom'
-+    )    
-+  end
-+  
-+  def test_project_activity
-+    get :activity, :id => 1, :with_subprojects => 0
-+    assert_response :success
-+    assert_template 'activity'
-+    assert_not_nil assigns(:events_by_day)
-+    
-+    assert_tag :tag => "h3", 
-+               :content => /#{2.days.ago.to_date.day}/,
-+               :sibling => { :tag => "dl",
-+                 :child => { :tag => "dt",
-+                   :attributes => { :class => /issue-edit/ },
-+                   :child => { :tag => "a",
-+                     :content => /(#{IssueStatus.find(2).name})/,
-+                   }
-+                 }
-+               }
-+  end
-+  
-+  def test_previous_project_activity
-+    get :activity, :id => 1, :from => 3.days.ago.to_date
-+    assert_response :success
-+    assert_template 'activity'
-+    assert_not_nil assigns(:events_by_day)
-+               
-+    assert_tag :tag => "h3", 
-+               :content => /#{3.day.ago.to_date.day}/,
-+               :sibling => { :tag => "dl",
-+                 :child => { :tag => "dt",
-+                   :attributes => { :class => /issue/ },
-+                   :child => { :tag => "a",
-+                     :content => /#{Issue.find(1).subject}/,
-+                   }
-+                 }
-+               }
-+  end
-+  
-+  def test_global_activity_routing
-+    assert_routing({:method => :get, :path => '/activity'}, :controller => 'projects', :action => 'activity', :id => nil)
-+  end
-+  
-+  def test_global_activity
-+    get :activity
-+    assert_response :success
-+    assert_template 'activity'
-+    assert_not_nil assigns(:events_by_day)
-+    
-+    assert_tag :tag => "h3", 
-+               :content => /#{5.day.ago.to_date.day}/,
-+               :sibling => { :tag => "dl",
-+                 :child => { :tag => "dt",
-+                   :attributes => { :class => /issue/ },
-+                   :child => { :tag => "a",
-+                     :content => /#{Issue.find(5).subject}/,
-+                   }
-+                 }
-+               }
-+  end
-+  
-+  def test_user_activity
-+    get :activity, :user_id => 2
-+    assert_response :success
-+    assert_template 'activity'
-+    assert_not_nil assigns(:events_by_day)
-+    
-+    assert_tag :tag => "h3", 
-+               :content => /#{3.day.ago.to_date.day}/,
-+               :sibling => { :tag => "dl",
-+                 :child => { :tag => "dt",
-+                   :attributes => { :class => /issue/ },
-+                   :child => { :tag => "a",
-+                     :content => /#{Issue.find(1).subject}/,
-+                   }
-+                 }
-+               }
-+  end
-+  
-+  def test_global_activity_atom_routing
-+    assert_routing({:method => :get, :path => '/activity.atom'}, :controller => 'projects', :action => 'activity', :id => nil, :format => 'atom')
-+  end
-+  
-+  def test_activity_atom_feed
-+    get :activity, :format => 'atom'
-+    assert_response :success
-+    assert_template 'common/feed.atom.rxml'
-+  end
-+  
-+  def test_archive_routing
-+    assert_routing(
-+    #TODO: use PUT to project path and modify form
-+      {:method => :post, :path => 'projects/64/archive'},
-+      :controller => 'projects', :action => 'archive', :id => '64'
-+    )
-+  end
-+  
-+  def test_archive
-+    @request.session[:user_id] = 1 # admin
-+    post :archive, :id => 1
-+    assert_redirected_to 'admin/projects'
-+    assert !Project.find(1).active?
-+  end
-+  
-+  def test_unarchive_routing
-+    assert_routing(
-+    #TODO: use PUT to project path and modify form
-+      {:method => :post, :path => '/projects/567/unarchive'},
-+      :controller => 'projects', :action => 'unarchive', :id => '567'
-+    )
-+  end
-+  
-+  def test_unarchive
-+    @request.session[:user_id] = 1 # admin
-+    Project.find(1).archive
-+    post :unarchive, :id => 1
-+    assert_redirected_to 'admin/projects'
-+    assert Project.find(1).active?
-+  end
-+  
-+  def test_project_breadcrumbs_should_be_limited_to_3_ancestors
-+    CustomField.delete_all
-+    parent = nil
-+    6.times do |i|
-+      p = Project.create!(:name => "Breadcrumbs #{i}", :identifier => "breadcrumbs-#{i}")
-+      p.set_parent!(parent)
-+      get :show, :id => p
-+      assert_tag :h1, :parent => { :attributes => {:id => 'header'}},
-+                      :children => { :count => [i, 3].min,
-+                                     :only => { :tag => 'a' } }
-+                                     
-+      parent = p
-+    end
-+  end
-+
-+  def test_copy_with_project
-+    @request.session[:user_id] = 1 # admin
-+    get :copy, :id => 1
-+    assert_response :success
-+    assert_template 'copy'
-+    assert assigns(:project)
-+    assert_equal Project.find(1).description, assigns(:project).description
-+    assert_nil assigns(:project).id
-+  end
-+
-+  def test_copy_without_project
-+    @request.session[:user_id] = 1 # admin
-+    get :copy
-+    assert_response :redirect
-+    assert_redirected_to :controller => 'admin', :action => 'projects'
-+  end
-+
-+  def test_jump_should_redirect_to_active_tab
-+    get :show, :id => 1, :jump => 'issues'
-+    assert_redirected_to 'projects/ecookbook/issues'
-+  end
-+  
-+  def test_jump_should_not_redirect_to_inactive_tab
-+    get :show, :id => 3, :jump => 'documents'
-+    assert_response :success
-+    assert_template 'show'
-+  end
-+  
-+  def test_jump_should_not_redirect_to_unknown_tab
-+    get :show, :id => 3, :jump => 'foobar'
-+    assert_response :success
-+    assert_template 'show'
-+  end
-+  
-+  # A hook that is manually registered later
-+  class ProjectBasedTemplate < Redmine::Hook::ViewListener
-+    def view_layouts_base_html_head(context)
-+      # Adds a project stylesheet
-+      stylesheet_link_tag(context[:project].identifier) if context[:project]
-+    end
-+  end
-+  # Don't use this hook now
-+  Redmine::Hook.clear_listeners
-+  
-+  def test_hook_response
-+    Redmine::Hook.add_listener(ProjectBasedTemplate)
-+    get :show, :id => 1
-+    assert_tag :tag => 'link', :attributes => {:href => '/stylesheets/ecookbook.css'},
-+                               :parent => {:tag => 'head'}
-+    
-+    Redmine::Hook.clear_listeners
-+  end
-+end
-Index: trunk/app/views/projects/show.rhtml
-===================================================================
---- trunk/app/views/projects/show.rhtml	(revision 2893)
-+++ trunk/app/views/projects/show.rhtml	(revision 2894)
-@@ -9,7 +9,7 @@
- 	    <%= @subprojects.collect{|p| link_to(h(p), :action => 'show', :id => p)}.join(", ") %></li>
-   <% end %>
- 	<% @project.custom_values.each do |custom_value| %>
--	<% if !custom_value.value.empty? %>
-+	<% if !custom_value.value.blank? %>
- 	   <li><%= custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li>
- 	<% end %>
- 	<% end %>
-Index: trunk/app/views/account/show.rhtml
-===================================================================
---- trunk/app/views/account/show.rhtml	(revision 2893)
-+++ trunk/app/views/account/show.rhtml	(revision 2894)
-@@ -10,7 +10,7 @@
- 		<li><%=l(:field_mail)%>: <%= mail_to(h(@user.mail), nil, :encode => 'javascript') %></li>
- 	<% end %>
- 	<% for custom_value in @custom_values %>
--	<% if !custom_value.value.empty? %>
-+	<% if !custom_value.value.blank? %>
-     <li><%=h custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li>
- 	<% end %>
- 	<% end %>

Modified: trunk/redmine/debian/patches/series
===================================================================
--- trunk/redmine/debian/patches/series	2009-09-22 22:56:39 UTC (rev 4193)
+++ trunk/redmine/debian/patches/series	2009-09-22 22:56:46 UTC (rev 4194)
@@ -1,7 +1,2 @@
+changeset_r2886_r2887.diff
 01_paths.patch
-changeset_r2888.diff
-changeset_r2889.diff
-changeset_r2891.diff
-changeset_r2892.diff
-changeset_r2893.diff
-changeset_r2894.diff

Modified: trunk/redmine/debian/po/fr.po
===================================================================
--- trunk/redmine/debian/po/fr.po	2009-09-22 22:56:39 UTC (rev 4193)
+++ trunk/redmine/debian/po/fr.po	2009-09-22 22:56:46 UTC (rev 4194)
@@ -2,7 +2,7 @@
 msgstr ""
 "Project-Id-Version: redmine 0.9.0-1\n"
 "Report-Msgid-Bugs-To: redmine at packages.debian.org\n"
-"POT-Creation-Date: 2009-09-20 13:26+0200\n"
+"POT-Creation-Date: 2009-09-20 14:07+0200\n"
 "PO-Revision-Date: 2009-02-26 15:56+0100\n"
 "Last-Translator: Jérémy Lal <jeremy.lal at m4x.org>\n"
 "Language-Team: French <debian-l10n-french at lists.debian.org>\n"
@@ -13,15 +13,15 @@
 #. Type: note
 #. Description
 #: ../templates:1001
-msgid "Redmine package now supports mutiple instances."
+msgid "Redmine package now supports mutiple instances"
 msgstr ""
 
 #. Type: note
 #. Description
 #: ../templates:1001
 msgid ""
-"You are migrating from an unsupported version. However, the current instance "
-"will be now called the \"default\" instance. Please check your web server "
+"You are migrating from an unsupported version. The current instance will be "
+"now called the \"default\" instance. Please check your web server "
 "configuration files, see README.Debian."
 msgstr ""
 

Modified: trunk/redmine/debian/po/templates.pot
===================================================================
--- trunk/redmine/debian/po/templates.pot	2009-09-22 22:56:39 UTC (rev 4193)
+++ trunk/redmine/debian/po/templates.pot	2009-09-22 22:56:46 UTC (rev 4194)
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: redmine at packages.debian.org\n"
-"POT-Creation-Date: 2009-09-20 13:26+0200\n"
+"POT-Creation-Date: 2009-09-20 14:07+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -19,15 +19,15 @@
 #. Type: note
 #. Description
 #: ../templates:1001
-msgid "Redmine package now supports mutiple instances."
+msgid "Redmine package now supports mutiple instances"
 msgstr ""
 
 #. Type: note
 #. Description
 #: ../templates:1001
 msgid ""
-"You are migrating from an unsupported version. However, the current instance "
-"will be now called the \"default\" instance. Please check your web server "
+"You are migrating from an unsupported version. The current instance will be "
+"now called the \"default\" instance. Please check your web server "
 "configuration files, see README.Debian."
 msgstr ""
 

Modified: trunk/redmine/debian/postinst
===================================================================
--- trunk/redmine/debian/postinst	2009-09-22 22:56:39 UTC (rev 4193)
+++ trunk/redmine/debian/postinst	2009-09-22 22:56:46 UTC (rev 4194)
@@ -10,7 +10,7 @@
 
 . /usr/share/debconf/confmodule
 
-# First, remove and purge old instances
+# remove and purge old instances each time postinst is called
 . /usr/share/dbconfig-common/dpkg/prerm
 db_get redmine/old-instances || true
 gOldInstances="${RET}"
@@ -22,6 +22,7 @@
 	dbc_go redmine/instances/$lInstance purge
 	if which ucf >/dev/null 2>&1; then
 		ucf --purge /etc/redmine/$lInstance/database.yml
+		ucf --purge /etc/redmine/$lInstance/email.yml
 	fi
 	rm -rf /etc/redmine/$lInstance
 done
@@ -35,7 +36,7 @@
 fRailsRun=/var/run/redmine
 
 case "$1" in
-	configure)
+	configure|reconfigure)
 		mkdir -p $fRailsRun/sockets
 		chown -f www-data:www-data $fRailsRun
 		chown -f www-data:www-data $fRailsRun/sockets
@@ -102,13 +103,24 @@
 	# this is for sqlite3 to be r/w for www-data
 	dbc_dbfile_perms="0660"
 	dbc_dbuser=redmine
-	dbc_dbname=redmine-$lInstance
+	# use same dbname if one has been registered in debconf before
+	# this is also needed for migration from version <= 0.9.0~svn2819
+	db_get redmine/instances/$lInstance/db/dbname || true
+	if [ -n "$RET" ]; then
+		dbc_dbname="$RET"
+	else
+		dbc_dbname=redmine-$lInstance
+	fi
+	db_get redmine/instances/$lInstance/db/basepath || true
+	if [ -n "$RET" ]; then
+		dbc_basepath="$RET"
+	fi
 	
 	dbc_go redmine/instances/$lInstance $@
 	
 	withdb=0
 	if [ -e /etc/redmine/$lInstance/database.yml ]; then
-		hasdb=$(grep -m 1 -o -E 'adapter: (mysql|pgsql|sqlite3|postgresql)' /etc/redmine/$lInstance/database.yml)
+		hasdb=$(grep -m 1 -o -E 'adapter: (mysql|pgsql|sqlite3|postgresql)' /etc/redmine/$lInstance/database.yml) || true
 		if [ -n "$hasdb" ]; then
 			hasdb=$(echo -n ${hasdb#*:})
 			withdb=1
@@ -141,7 +153,7 @@
 			savedir="`pwd`"
 			cd /usr/share/redmine
 			if [ $withdb -eq 1 ]; then
-		   	db_get redmine/instances/${lInstance}/default-language && DEFAULT_LANGUAGE="$RET"
+				db_get redmine/instances/${lInstance}/default-language && DEFAULT_LANGUAGE="$RET"
 				# handle rake install
 				rake -s db:migrate RAILS_ENV=$fRailsEnv X_DEBIAN_SITEID="${lInstance}" VERBOSE=$RAKE_VERBOSE
 				rake -s redmine:load_default_data RAILS_ENV=$fRailsEnv X_DEBIAN_SITEID="${lInstance}" REDMINE_LANG=$DEFAULT_LANGUAGE

Modified: trunk/redmine/debian/postrm
===================================================================
--- trunk/redmine/debian/postrm	2009-09-22 22:56:39 UTC (rev 4193)
+++ trunk/redmine/debian/postrm	2009-09-22 22:56:46 UTC (rev 4194)
@@ -38,19 +38,23 @@
 			gOldInstances="${RET}"
 			for lInstance in $gOldInstances; do
 				ucf --purge /etc/redmine/$lInstance/database.yml
+				ucf --purge /etc/redmine/$lInstance/email.yml
 			done
 			
 			db_get redmine/current-instances || true
 			gInstances="${RET}"
 			for lInstance in $gInstances; do
 				ucf --purge /etc/redmine/$lInstance/database.yml
+				ucf --purge /etc/redmine/$lInstance/email.yml
 			done
 		fi
 		
 		rm -rf /var/run/redmine
 		rm -rf /var/log/redmine
 		rm -rf /usr/share/redmine
+		rmdir /var/lib/redmine/*/files || true
 		rm -rf /var/lib/redmine/*/sessions
+		rmdir /var/lib/redmine/* || true
 		rm -rf /var/cache/redmine
 		rm -rf /etc/redmine
 		db_purge

Modified: trunk/redmine/debian/preinst
===================================================================
--- trunk/redmine/debian/preinst	2009-09-22 22:56:39 UTC (rev 4193)
+++ trunk/redmine/debian/preinst	2009-09-22 22:56:46 UTC (rev 4194)
@@ -4,26 +4,31 @@
 # see: dh_installdeb(1)
 
 set -e
-set -x
+#set -x
 
 . /usr/share/debconf/confmodule
 
 case "$1" in
 	upgrade)
-		dpkg --compare-versions "$2" le "0.9.0~svn2819" || true
-		db_get redmine/migrate || true
-		if [ $? -neq 0 -a "$RET" != "true" ]; then
-			break
+		fCode=0
+		dpkg --compare-versions "$2" le "0.9.0~svn2819" || fCode=$?
+		if [ $fCode -eq 0 ]; then
+			if [ -e /etc/redmine/database.yml ]; then
+				mkdir -p /etc/redmine/default
+				mv /etc/redmine/database.yml /etc/redmine/default/database.yml
+				mv /etc/redmine/email.yml /etc/redmine/default/email.yml >/dev/null 2>&1 || true
+				if which ucf >/dev/null 2>&1; then
+					ucf --purge /etc/redmine/database.yml
+					ucf --purge /etc/redmine/email.yml
+				fi
+			fi
+			if [ -e /var/lib/redmine/files ]; then
+				mkdir -p /var/lib/redmine/default/files
+				mv /var/lib/redmine/files/* /var/lib/redmine/default/files/  >/dev/null 2>&1 || true
+				#rmdir /var/lib/redmine/files || true
+				#rm -rf /var/lib/redmine/sessions
+			fi
 		fi
-		db_unregister redmine/migrate
-		if [ -e /etc/redmine/database.yml ]; then
-			mkdir -p /etc/redmine/default/database.yml
-			mv /etc/redmine/database.yml /etc/redmine/default/database.yml
-		fi
-		if [ -e /var/lib/redmine/files ]; then
-			mkdir -p /var/lib/redmine/default
-			mv /var/lib/redmine/files /var/lib/redmine/default
-		fi
 	;;
 
 	install|abort-upgrade)

Modified: trunk/redmine/debian/templates
===================================================================
--- trunk/redmine/debian/templates	2009-09-22 22:56:39 UTC (rev 4193)
+++ trunk/redmine/debian/templates	2009-09-22 22:56:46 UTC (rev 4194)
@@ -1,9 +1,8 @@
 Template: redmine/notify-migration
 Type: note
-_Description: Redmine package now supports mutiple instances.
- .
+_Description: Redmine package now supports mutiple instances
  You are migrating from an unsupported version.
- However, the current instance will be now called the "default" instance.
+ The current instance will be now called the "default" instance.
  Please check your web server configuration files, see README.Debian.
 
 Template: redmine/old-instances




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