diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index 3cd15189496..f9bc7999256 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -37,6 +37,7 @@ from openerp.modules import get_resource_path from openerp.tools import topological_sort from openerp.tools.translate import _ from openerp.tools import ustr +from openerp.tools.misc import str2bool from openerp import http from openerp.http import request, serialize_exception as _serialize_exception from openerp.exceptions import AccessError @@ -708,7 +709,7 @@ class Database(http.Controller): def restore(self, master_pwd, backup_file, name, copy=False): try: data = base64.b64encode(backup_file.read()) - request.session.proxy("db").restore(master_pwd, name, data, copy) + request.session.proxy("db").restore(master_pwd, name, data, str2bool(copy)) return http.local_redirect('/web/database/manager') except Exception, e: error = "Database restore error: %s" % e diff --git a/addons/web/views/database_manager.html b/addons/web/views/database_manager.html index ad7076313ae..8b6fd4f09e7 100644 --- a/addons/web/views/database_manager.html +++ b/addons/web/views/database_manager.html @@ -208,10 +208,19 @@
-
+ +

In order to avoid conflicts between databases, Odoo needs to know if this database was moved or copied. + If you don't know, answer "This database is a copy".

+
+
+
+
diff --git a/openerp/service/db.py b/openerp/service/db.py index f0527f0ac44..ed7a6e410d3 100644 --- a/openerp/service/db.py +++ b/openerp/service/db.py @@ -102,6 +102,11 @@ def exp_duplicate_database(db_original_name, db_name): _drop_conn(cr, db_original_name) cr.execute("""CREATE DATABASE "%s" ENCODING 'unicode' TEMPLATE "%s" """ % (db_name, db_original_name)) + registry = openerp.modules.registry.RegistryManager.new(db_name) + with registry.cursor() as cr: + # if it's a copy of a database, force generation of a new dbuuid + registry['ir.config_parameter'].init(cr, force=True) + from_fs = openerp.tools.config.filestore(db_original_name) to_fs = openerp.tools.config.filestore(db_name) if os.path.exists(from_fs) and not os.path.exists(to_fs): diff --git a/openerp/tools/misc.py b/openerp/tools/misc.py index 1e61c2323ee..7f11ad82222 100644 --- a/openerp/tools/misc.py +++ b/openerp/tools/misc.py @@ -566,6 +566,15 @@ def mod10r(number): report = codec[ (int(digit) + report) % 10 ] return result + str((10 - report) % 10) +def str2bool(s, default=None): + s = ustr(s).lower() + y = 'y yes 1 true t on'.split() + n = 'n no 0 false f off'.split() + if s not in (y + n): + if default is None: + raise ValueError('Use 0/1/yes/no/true/false/on/off') + return bool(default) + return s in y def human_size(sz): """