[DRE-commits] [redmine] 01/39: Refresh patches

Antonio Terceiro terceiro at moszumanska.debian.org
Tue Dec 8 12:56:44 UTC 2015


This is an automated email from the git hooks/post-receive script.

terceiro pushed a commit to branch master
in repository redmine.

commit 0d38579e15d4f46b62a5dfa472265d5047df31e5
Author: Antonio Terceiro <terceiro at debian.org>
Date:   Mon Sep 21 18:54:47 2015 -0300

    Refresh patches
---
 debian/changelog                                   |   8 +-
 .../0002-Force-table-encoding-in-mysql.patch       |  36 ++
 ...003-Use-production-environment-by-default.patch |  20 +
 .../patches/0004-Add-multi-tenancy-support.patch   | 553 +++++++++++++++++++++
 debian/patches/series                              |   3 +
 5 files changed, 617 insertions(+), 3 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 17a5908..791f460 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -5,10 +5,12 @@ redmine (3.1.0-1) UNRELEASED; urgency=medium
   * Bump debhelper compatibility level to 9
   * Move from cdbs to dh
   * Stop builing fonts, upstream redmine doesn't rely on them anymore
-  * Drop all patches, let's start from scratch
-  * New patches:
+  * Dropped all patches already applied upstream and reworked all others.
+    Remaining patches:
     - 0001-Gemfile-relax-some-dependencies.patch: adapt Gemfile
-    - TODO: redo the support for multiple instances in a single patch
+    - 0002-Force-table-encoding-in-mysql.patch
+    - 0003-Use-production-environment-by-default.patch
+    - 0004-Add-multi-tenancy-support.patch
 
  -- Antonio Terceiro <terceiro at debian.org>  Tue, 25 Aug 2015 17:33:17 -0300
 
diff --git a/debian/patches/0002-Force-table-encoding-in-mysql.patch b/debian/patches/0002-Force-table-encoding-in-mysql.patch
new file mode 100644
index 0000000..2e4b41c
--- /dev/null
+++ b/debian/patches/0002-Force-table-encoding-in-mysql.patch
@@ -0,0 +1,36 @@
+From: =?utf-8?q?J=C3=A9r=C3=A9my_Lal?= <kapouer at melix.org>
+Date: Sat, 19 Sep 2015 17:42:05 -0300
+Subject: Force table encoding in mysql
+
+mysql default encoding is not UTF8, but forcing table encoding is
+possible. dbconfig-common does not provide appropriate configuration
+variable, so here the mysql adapter is modified to respect encoding set
+in database.yml Forwarded: not-needed
+---
+ config/initializers/10-patches.rb | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+diff --git a/config/initializers/10-patches.rb b/config/initializers/10-patches.rb
+index dae04fc..7837223 100644
+--- a/config/initializers/10-patches.rb
++++ b/config/initializers/10-patches.rb
+@@ -1,4 +1,19 @@
+ require 'active_record'
++require 'active_record/connection_adapters/abstract_mysql_adapter'
++
++module ActiveRecord
++  module ConnectionAdapters
++    class MysqlAdapter < AbstractMysqlAdapter
++      def create_table(table_name, options = {}) #:nodoc:
++        encoding = @config[:encoding]
++        if encoding
++          options = options.reverse_merge(:options => "DEFAULT CHARSET=#{encoding}")
++        end
++        super(table_name, options.reverse_merge(:options => "ENGINE=InnoDB"))
++      end
++    end
++  end
++end
+ 
+ module ActiveRecord
+   class Base
diff --git a/debian/patches/0003-Use-production-environment-by-default.patch b/debian/patches/0003-Use-production-environment-by-default.patch
new file mode 100644
index 0000000..f7630b8
--- /dev/null
+++ b/debian/patches/0003-Use-production-environment-by-default.patch
@@ -0,0 +1,20 @@
+From: Antonio Terceiro <terceiro at debian.org>
+Date: Sun, 20 Sep 2015 12:26:00 -0300
+Subject: Use production environment by default
+
+This patch is Debian-specific
+---
+ config/boot.rb | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/config/boot.rb b/config/boot.rb
+index 3596736..24ddc4e 100644
+--- a/config/boot.rb
++++ b/config/boot.rb
+@@ -1,4 +1,6 @@
+ # Set up gems listed in the Gemfile.
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
+ 
++ENV['RAILS_ENV'] ||= 'production'
++
+ require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
diff --git a/debian/patches/0004-Add-multi-tenancy-support.patch b/debian/patches/0004-Add-multi-tenancy-support.patch
new file mode 100644
index 0000000..7b1e666
--- /dev/null
+++ b/debian/patches/0004-Add-multi-tenancy-support.patch
@@ -0,0 +1,553 @@
+From: Antonio Terceiro <terceiro at debian.org>
+Date: Mon, 21 Sep 2015 12:31:42 -0300
+Subject: Add multi-tenancy support
+MIME-Version: 1.0
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: 8bit
+
+This is an improved version of the combination of a few patches that
+were carried in the Redmine package for Debian GNU/Linux for a few
+years.
+
+Documentation is provided as a man page produced by
+`./bin/redmine-instances help`
+
+Signed-off-by: Antonio Terceiro <terceiro at debian.org>
+Signed-off-by: Jérémy Lal <kapouer at melix.org>
+Signed-off-by: Ondřej Surý <ondrej at sury.org>
+---
+ .gitignore                                         |   1 +
+ Gemfile                                            |   9 +-
+ app/models/attachment.rb                           |   4 +-
+ bin/redmine-instances                              | 280 +++++++++++++++++++++
+ config/application.rb                              |   1 +
+ config/multitenancy_environment.rb                 |  42 ++++
+ .../lib/open_id_authentication.rb                  |   2 +-
+ lib/redmine/configuration.rb                       |   4 +-
+ lib/redmine/export/pdf.rb                          |   2 +-
+ lib/redmine/multi_tenancy.rb                       |  43 ++++
+ lib/redmine/scm/adapters/abstract_adapter.rb       |   2 +-
+ lib/tasks/initializers.rake                        |   2 +-
+ 12 files changed, 383 insertions(+), 9 deletions(-)
+ create mode 100755 bin/redmine-instances
+ create mode 100644 config/multitenancy_environment.rb
+ create mode 100644 lib/redmine/multi_tenancy.rb
+
+diff --git a/.gitignore b/.gitignore
+index 173b030..d9e39ef 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -14,6 +14,7 @@
+ /db/*.sqlite3
+ /db/schema.rb
+ /files/*
++/instances
+ /lib/redmine/scm/adapters/mercurial/redminehelper.pyc
+ /lib/redmine/scm/adapters/mercurial/redminehelper.pyo
+ /log/*.log*
+diff --git a/Gemfile b/Gemfile
+index 3e45286..5c14776 100644
+--- a/Gemfile
++++ b/Gemfile
+@@ -52,7 +52,14 @@ end
+ # configuration file
+ require 'erb'
+ require 'yaml'
+-database_file = File.join(File.dirname(__FILE__), "config/database.yml")
++
++# XXX this duplicates logic in lib/redmine/multi_tenancy.rb, but we can't load
++# XXX that at this point. X_DEBIAN_SITEID is kept for compatibility with
++# existing XXX Debian installations.
++instance = ENV['X_DEBIAN_SITEID'] || ENV['REDMINE_INSTANCE']
++root = instance && File.join(File.dirname(__FILE__), 'instances', instance) || File.dirname(__FILE__)
++database_file = File.join(root, "config/database.yml")
++
+ if File.exist?(database_file)
+   database_config = YAML::load(ERB.new(IO.read(database_file)).result)
+   adapters = database_config.values.map {|c| c['adapter']}.compact.uniq
+diff --git a/app/models/attachment.rb b/app/models/attachment.rb
+index 8e3d578..9d8363f 100644
+--- a/app/models/attachment.rb
++++ b/app/models/attachment.rb
+@@ -47,10 +47,10 @@ class Attachment < ActiveRecord::Base
+                                             "LEFT JOIN #{Project.table_name} ON #{Document.table_name}.project_id = #{Project.table_name}.id")
+ 
+   cattr_accessor :storage_path
+-  @@storage_path = Redmine::Configuration['attachments_storage_path'] || File.join(Rails.root, "files")
++  @@storage_path = Redmine::Configuration['attachments_storage_path'] || File.join(Redmine.root, "files")
+ 
+   cattr_accessor :thumbnails_storage_path
+-  @@thumbnails_storage_path = File.join(Rails.root, "tmp", "thumbnails")
++  @@thumbnails_storage_path = File.join(Redmine.root, "tmp", "thumbnails")
+ 
+   before_create :files_to_final_location
+   after_destroy :delete_from_disk
+diff --git a/bin/redmine-instances b/bin/redmine-instances
+new file mode 100755
+index 0000000..3c414a1
+--- /dev/null
++++ b/bin/redmine-instances
+@@ -0,0 +1,280 @@
++#!/bin/sh
++
++# Copyright (C) 2015 Antonio Terceiro
++#
++# 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.
++
++set -eu
++
++if [ -r /etc/default/redmine ]; then
++  . /etc/defaut/redmine
++fi
++
++REDMINE_INSTANCES_OWNERSHIP=$(stat -c %U:%G $(dirname $0/..))
++REDMINE_INSTANCES_FOLLOW_FHS=""
++REDMINE_INSTANCES_ROOT="$(readlink -f $(dirname $0)/..)/instances"
++
++usage() {
++  local rc="${1:-0}"
++  local program="$(basename $0)"
++  echo "usage: $program list"
++  echo "usage: $program create INSTANCE"
++  echo "usage: $program remove INSTANCE"
++  echo "usage: $program help"
++  exit $rc
++}
++
++# map directories support for placing the files in the correct locations
++# according to the FHS (http://www.pathname.com/fhs/). Required for official
++# Debian packages.
++fhs_directory_mapping() {
++  if [ -n "$REDMINE_INSTANCES_FOLLOW_FHS" ]; then
++    local instance="$1"
++    local dir="$2"
++    case "$dir" in
++      config)
++        echo "/etc/redmine/$instance"
++        ;;
++      log)
++        echo "/var/log/redmine/$instance"
++        ;;
++      files)
++        echo "/var/lib/redmine/$instance/files"
++        ;;
++      tmp)
++        echo "/var/cache/redmine/$instance"
++        ;;
++    esac
++  fi
++}
++
++make_instance_directory() {
++  local instance="$1"
++  local dirname="$2"
++  local target="$REDMINE_INSTANCES_ROOT/$instance/$dirname"
++  local dir=$(fhs_directory_mapping "$instance" "$dirname")
++  if [ -z "$dir" ]; then
++    dir="$target"
++  fi
++
++  mkdir -p "$dir"
++  chown -R "$REDMINE_INSTANCES_OWNERSHIP" "$dir"
++
++  if [ "$dir" != $target ]; then
++    mkdir -p $(dirname "$target")
++    ln -sfT "$dir" "$target"
++  fi
++}
++
++call_pager() {
++  if [ -t 1 ]; then
++    man -l -
++  else
++    cat
++  fi
++}
++
++if [ $# -lt 1 ]; then
++  usage 1
++fi
++cmd="$1"
++shift
++
++case "$cmd" in
++  list)
++    if [ -d "$REDMINE_INSTANCES_ROOT" ]; then
++      ls -1 "$REDMINE_INSTANCES_ROOT"
++    fi
++    ;;
++
++  create)
++    instance="${1:-}"
++    [ -n "$instance" ] || usage 1
++
++    make_instance_directory "$instance" config
++    make_instance_directory "$instance" log
++    make_instance_directory "$instance" files
++    make_instance_directory "$instance" tmp
++    ;;
++
++  remove)
++    instance="${1:-}"
++    [ -n "$instance" ] || usage 1
++
++    printf "Are you sure you want to remove instance $instance? There is no going back [y/N] "
++    read confirm
++    if [ "$comfirm" = 'y' -o "$config" = 'Y' ]; then
++      rm -rf "$REDMINE_INSTANCES_ROOT/$instance"
++    else
++      echo "Aborted."
++    fi
++    ;;
++
++  help)
++    sed -e '1,/<<DOCUMENTATION$/d; /^DOCUMENTATION/d' "$0" \
++      | pod2man --name='redmine-instances' --center "" --release "" - \
++      | call_pager
++    ;;
++
++  *)
++    if [ -n "$cmd" ]; then
++      echo "E: invalid command: $command"
++    fi
++    usage 1
++    ;;
++esac
++
++exit
++: <<DOCUMENTATION
++=encoding UTF-8
++
++=head1 redmine-instances
++
++redmine-instances - manage multiple instances in a single Redmine install
++
++=head1 SYNOPSIS
++
++B<redmine-instances> I<COMMAND> [I<INSTANCE>]
++
++See "I<THE REDMINE MULTITENANCY SYSTEM>" below for a description of how it all
++works.
++
++=head1 COMMANDS
++
++=head2 list
++
++Lists the existing instances.
++
++=head2 create INSTANCE
++
++Creates an instance. This command is idempotent, so calling it multiple times
++is not a problem. Not only that, but existing instances will also be repaired
++and gain the expected directory structure.
++
++=head2 remove INSTANCE
++
++Removes an instance. After this command finished, all files in the instance
++directory will be removed. Any MySQL/PostgreSQL databases will I<not> be
++removed, and must be removed manually.
++
++=head2 help
++
++Displays this documentation.
++
++=head1 THE REDMINE MULTITENANCY SYSTEM
++
++The Redmine multitenancy system is implemented in such a way that it is
++unobstrusive: if you don't do anything to configure multiple instances, Redmine
++will just work as it normally does.
++
++To run redmine against a specific instance, you must set the
++I<REDMINE_INSTANCE> environment variable for Redmine processes. Since such
++environment variable is queried at compile times in some parts of the Redmine
++codebase, this means that multiple Redmine instances must be handled as
++I<separate processes>.
++
++When Redmine is started with the I<REDMINE_INSTANCE> environment variable set
++to an instance name, then a few parameters will be adjusted:
++
++I<Logs> will be stored in /path/to/redmine/instances/I<$REDMINE_INSTANCE>/log/
++
++I<Database configuration> will be read from
++/path/to/redmine/instances/I<$REDMINE_INSTANCE>/config/database.yml
++
++I<Temporary files>, such as caches, will be stored in
++/path/to/redmine/instances/I<$REDMINE_INSTANCE>/tmp/
++
++I<File attachments> will be stored in
++/path/to/redmine/instances/I<$REDMINE_INSTANCE>/files/
++
++=head1 NOTES FOR DEBIAN GNU/LINUX
++
++When using the official redmine Debian package, the directories mentioned above
++will actually be symbolic links to the expected locations according to FHS,
++namely:
++
++I<config> will be a link to /etc/redmine/I<$REDMINE_INSTANCE>/
++
++I<log> will be a link /var/log/redmine/I<$REDMINE_INSTANCE>/
++
++I<tmp> will be a link /var/cache/redmine/I<$REDMINE_INSTANCE>/
++
++I<files> will be stored directly in /var/lib/redmine/I<$REDMINE_INSTANCE>/files/
++
++Users of the Debian package can also find B<redmine-instances> in I<$PATH>,
++and can call it directly (as root) from any directory.
++
++=head1 EXAMPLE: CREATING AND USING A NEW INSTANCE
++
++=head2 Creating the directory structure
++
++  $ cd /path/to/redmine
++  $ ./bin/redmine-instances create myinstance
++  $ edit instances/myinstance/config/database.yml
++  [...]
++  $ export REDMINE_INSTANCE=myinstance
++  $ bundle exec rake db:migrate
++  $ bundle exec rake redmine:load_default_data
++  $ bundle exec rake generate_secret_token
++
++=head2 Web server configuration
++
++For Passenger with Apache, you will want something like the example below. Note
++the I<PassengerAppGroupName>: it must be set to a different value for each of
++your Redmine instances, and PassengerAppGroupName will make sure that all your
++instances are isolated from each other.
++
++  <VirtualHost *:80>
++    ServerName my.domain.name
++    RailsEnv production
++    SetEnv REDMINE_INSTANCE "myinstance"
++    PassengerAppGroupName redmine_myinstance
++    PassengerDefaultUser www-data
++    DocumentRoot /path/to/redmine/public
++    <Directory "/path/to/redmine/public">
++      Allow from all
++      Options -MultiViews
++      Require all granted
++    </Directory>
++  </VirtualHost>
++
++=head1 SEE ALSO
++
++Filesystem Hierarchy Standard (FHS), I<http://www.pathname.com/fhs/>.
++
++=head1 COPYRIGHT AND AUTHORS
++
++B<redmine-instances> is Copyright (C) 2015, Antonio Terceiro.
++
++The Multi-Tenancy support for Redmine was originally developed for Debian
++GNU/Linux, and is Copyright (C) 2014-2015 Antonio Terceiro, 2011-2014 Jérémy
++Lal, 2011-2014 Ondrej Surý.
++
++B<Redmine> is Copyright (C) 2006-2015, 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.
++
++DOCUMENTATION
+diff --git a/config/application.rb b/config/application.rb
+index 0f75247..b659f30 100644
+--- a/config/application.rb
++++ b/config/application.rb
+@@ -65,6 +65,7 @@ module RedmineApp
+ 
+     config.session_store :cookie_store, :key => '_redmine_session'
+ 
++    instance_eval File.read(File.join(File.dirname(__FILE__), 'multitenancy_environment.rb'))
+     if File.exists?(File.join(File.dirname(__FILE__), 'additional_environment.rb'))
+       instance_eval File.read(File.join(File.dirname(__FILE__), 'additional_environment.rb'))
+     end
+diff --git a/config/multitenancy_environment.rb b/config/multitenancy_environment.rb
+new file mode 100644
+index 0000000..f3d9248
+--- /dev/null
++++ b/config/multitenancy_environment.rb
+@@ -0,0 +1,42 @@
++# Copyright (C) 2014-2015 Antonio Terceiro
++# Copyright (C) 2011-2014 Jérémy Lal
++# Copyright (C) 2011-2014 Ondřej Surý
++#
++# 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 'redmine/multi_tenancy'
++
++if Redmine.tenant?
++
++  # per-instance tmp/local cache directories
++  config.paths['tmp'] = Redmine.root.join('tmp').to_s
++  config.cache_store = :file_store, Redmine.root.join('tmp', 'cache').to_s
++
++  # per-instance logs
++  config.paths['log'] = Redmine.root.join('log', Rails.env + '.log').to_s
++
++  # per-instance database configuration
++  config.paths['config/database'] = Redmine.root.join('config', 'database.yml').to_s
++
++  # per-instance session cookie
++  path = ENV.fetch('RAILS_RELATIVE_URL_ROOT', '/')
++  key = Redmine.name || '_redmine_session'
++  config.session_store :cookie_store, :key => key, :path => path
++  secret_file = Redmine.root.join('config', 'secret_key.txt')
++  if File.exists?(secret_file)
++    config.secret_key_base = File.read(secret_file).strip
++  end
++
++end
+diff --git a/lib/plugins/open_id_authentication/lib/open_id_authentication.rb b/lib/plugins/open_id_authentication/lib/open_id_authentication.rb
+index 48be8dd..1bcbbe4 100644
+--- a/lib/plugins/open_id_authentication/lib/open_id_authentication.rb
++++ b/lib/plugins/open_id_authentication/lib/open_id_authentication.rb
+@@ -25,7 +25,7 @@ module OpenIdAuthentication
+       OpenID::Store::Memory.new
+     when :file
+       require 'openid/store/filesystem'
+-      OpenID::Store::Filesystem.new(Rails.root.join('tmp/openids'))
++      OpenID::Store::Filesystem.new(Redmine.root.join('tmp/openids'))
+     when :memcache
+       require 'memcache'
+       require 'openid/store/memcache'
+diff --git a/lib/redmine/configuration.rb b/lib/redmine/configuration.rb
+index 9109a00..3d93ff7 100644
+--- a/lib/redmine/configuration.rb
++++ b/lib/redmine/configuration.rb
+@@ -32,7 +32,7 @@ module Redmine
+       # * <tt>:file</tt>: the configuration file to load (default: config/configuration.yml)
+       # * <tt>:env</tt>: the environment to load the configuration for (default: Rails.env)
+       def load(options={})
+-        filename = options[:file] || File.join(Rails.root, 'config', 'configuration.yml')
++        filename = options[:file] || File.join(Redmine.root, 'config', 'configuration.yml')
+         env = options[:env] || Rails.env
+ 
+         @config = @defaults.dup
+@@ -104,7 +104,7 @@ module Redmine
+       end
+ 
+       def load_deprecated_email_configuration(env)
+-        deprecated_email_conf = File.join(Rails.root, 'config', 'email.yml')
++        deprecated_email_conf = File.join(Redmine.root, 'config', 'email.yml')
+         if File.file?(deprecated_email_conf)
+           warn "Storing outgoing emails configuration in config/email.yml is deprecated. You should now store it in config/configuration.yml using the email_delivery setting."
+           @config.merge!({'email_delivery' => load_from_yaml(deprecated_email_conf, env)})
+diff --git a/lib/redmine/export/pdf.rb b/lib/redmine/export/pdf.rb
+index e3861b6..31ee580 100644
+--- a/lib/redmine/export/pdf.rb
++++ b/lib/redmine/export/pdf.rb
+@@ -27,7 +27,7 @@ module Redmine
+         attr_accessor :footer_date
+ 
+         def initialize(lang, orientation='P')
+-          @@k_path_cache = Rails.root.join('tmp', 'pdf')
++          @@k_path_cache = Redmine.root.join('tmp', 'pdf')
+           FileUtils.mkdir_p @@k_path_cache unless File::exist?(@@k_path_cache)
+           set_language_if_valid lang
+           super(orientation, 'mm', 'A4')
+diff --git a/lib/redmine/multi_tenancy.rb b/lib/redmine/multi_tenancy.rb
+new file mode 100644
+index 0000000..0d100f7
+--- /dev/null
++++ b/lib/redmine/multi_tenancy.rb
+@@ -0,0 +1,43 @@
++# Copyright (C) 2014-2015 Antonio Terceiro
++# Copyright (C) 2011-2014 Jérémy Lal
++# Copyright (C) 2011-2014 Ondřej Surý
++#
++# 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.
++
++module Redmine
++
++  class << self
++
++    def tenant
++      # X_DEBIAN_SITEID is kept here for backwards compatibility with existing
++      # Debian installations.
++      ENV['X_DEBIAN_SITEID'] || ENV['REDMINE_INSTANCE']
++    end
++
++    def tenant?
++      !tenant.nil?
++    end
++
++    def root
++      if tenant
++        Pathname.new(File.join(Rails.root, 'instances', tenant))
++      else
++        Rails.root
++      end
++    end
++
++  end
++
++end
+diff --git a/lib/redmine/scm/adapters/abstract_adapter.rb b/lib/redmine/scm/adapters/abstract_adapter.rb
+index 98683b0..f525bb7 100644
+--- a/lib/redmine/scm/adapters/abstract_adapter.rb
++++ b/lib/redmine/scm/adapters/abstract_adapter.rb
+@@ -218,7 +218,7 @@ module Redmine
+           if @stderr_log_file.nil?
+             writable = false
+             path = Redmine::Configuration['scm_stderr_log_file'].presence
+-            path ||= Rails.root.join("log/#{Rails.env}.scm.stderr.log").to_s
++            path ||= Redmine.root.join("log/#{Rails.env}.scm.stderr.log").to_s
+             if File.exists?(path)
+               if File.file?(path) && File.writable?(path) 
+                 writable = true
+diff --git a/lib/tasks/initializers.rake b/lib/tasks/initializers.rake
+index 6da60c1..eb96177 100644
+--- a/lib/tasks/initializers.rake
++++ b/lib/tasks/initializers.rake
+@@ -15,7 +15,7 @@ file 'config/initializers/secret_token.rb' do
+ # change this key, all old sessions will become invalid! Make sure the
+ # secret is at least 30 characters and all random, no regular words or
+ # you'll be exposed to dictionary attacks.
+-RedmineApp::Application.config.secret_key_base = '#{secret}'
++RedmineApp::Application.config.secret_key_base = [Redmine.tenant, '#{secret}'].compact.join(':')
+ EOF
+   end
+ end
diff --git a/debian/patches/series b/debian/patches/series
index 5e3a3e6..73ab562 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1,4 @@
 0001-Gemfile-relax-some-dependencies.patch
+0002-Force-table-encoding-in-mysql.patch
+0003-Use-production-environment-by-default.patch
+0004-Add-multi-tenancy-support.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ruby-extras/redmine.git



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