From c1c8ac7d7f2358b7cef492fec7e74336548cea84 Mon Sep 17 00:00:00 2001
From: Antony Lesuisse <al@openerp.com>
Date: Mon, 19 Jan 2015 02:42:34 +0100
Subject: [PATCH] [FIX] dbmanager: backup allow pg_dump custom dump to be
 larger than diskspace

- delete a forgotten print
- allow pg_dump custom dumps to be larger than the available disk size, the
  previous commit allowed dumps to be larger than memory, this one remove this
  limitation. zip dumps are still limited to by the disk size.
---
 addons/web/controllers/main.py |  2 +-
 openerp/service/db.py          | 27 +++++++++++++++------------
 2 files changed, 16 insertions(+), 13 deletions(-)

diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py
index 8bf395dc59b3..59e69c36b16e 100644
--- a/addons/web/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -733,7 +733,7 @@ class Database(http.Controller):
                 ('Content-Type', 'application/octet-stream; charset=binary'),
                 ('Content-Disposition', content_disposition(filename)),
             ]
-            dump_stream = openerp.service.db.dump_db_stream(backup_db, backup_format)
+            dump_stream = openerp.service.db.dump_db(backup_db, None, backup_format)
             response = werkzeug.wrappers.Response(dump_stream, headers=headers, direct_passthrough=True)
             response.set_cookie('fileToken', token)
             return response
diff --git a/openerp/service/db.py b/openerp/service/db.py
index a0a4b5e2707b..0dbc50e27471 100644
--- a/openerp/service/db.py
+++ b/openerp/service/db.py
@@ -168,7 +168,10 @@ def dump_db_manifest(cr):
     return manifest
 
 def dump_db(db_name, stream, backup_format='zip'):
-    """Dump database `db` into file-like object `stream`"""
+    """Dump database `db` into file-like object `stream` if stream is None
+    return a file object with the dump """
+
+    _logger.info('DUMP DB: %s format %s', db_name, backup_format)
 
     cmd = ['pg_dump', '--no-owner']
     if openerp.tools.config['db_user']:
@@ -191,20 +194,20 @@ def dump_db(db_name, stream, backup_format='zip'):
                     json.dump(manifest, fh, indent=4)
             cmd.insert(-1, '--file=' + os.path.join(dump_dir, 'dump.sql'))
             openerp.tools.exec_pg_command(*cmd)
-            openerp.tools.osutil.zip_dir(dump_dir, stream, include_dir=False)
+            if stream:
+                openerp.tools.osutil.zip_dir(dump_dir, stream, include_dir=False)
+            else:
+                t=tempfile.TemporaryFile()
+                openerp.tools.osutil.zip_dir(dump_dir, t, include_dir=False)
+                t.seek(0)
+                return t
     else:
         cmd.insert(-1, '--format=c')
-        print cmd
         stdin, stdout = openerp.tools.exec_pg_command_pipe(*cmd)
-        shutil.copyfileobj(stdout, stream)
-
-    _logger.info('DUMP DB successful: %s', db_name)
-
-def dump_db_stream(db_name, backup_format='zip'):
-    t=tempfile.TemporaryFile()
-    dump_db(db_name, t, backup_format)
-    t.seek(0)
-    return t
+        if stream:
+            shutil.copyfileobj(stdout, stream)
+        else:
+            return stdout
 
 def exp_restore(db_name, data, copy=False):
     data_file = tempfile.NamedTemporaryFile(delete=False)
-- 
GitLab