Add 7zip compression level param to BackupDumper
authorAndrew H <crazy4sb@gmail.com>
Thu, 31 Dec 2015 02:11:21 +0000 (02:11 +0000)
committerUnicornisaurous <crazy4sb@gmail.com>
Thu, 31 Dec 2015 18:18:18 +0000 (18:18 +0000)
Adds a --7ziplevel param to dumpBackup.php and dumpTextPass.php,
used when an --output of type '7zip' is specified.

Bug: T78669
Change-Id: I9ee8169daf30b4d8251c7a344b593c29c81eb799

includes/export/Dump7ZipOutput.php
maintenance/backup.inc

index c299166..31c945c 100644 (file)
  * @ingroup Dump
  */
 class Dump7ZipOutput extends DumpPipeOutput {
+       /**
+        * @var int
+        */
+       protected $compressionLevel;
+
        /**
         * @param string $file
+        * @param int $cmpLevel Compression level passed to 7za command's -mx
         */
-       function __construct( $file ) {
+       function __construct( $file, $cmpLevel = 4 ) {
+               $this->compressionLevel = $cmpLevel;
                $command = $this->setup7zCommand( $file );
                parent::__construct( $command );
                $this->filename = $file;
@@ -41,7 +48,9 @@ class Dump7ZipOutput extends DumpPipeOutput {
         * @return string
         */
        function setup7zCommand( $file ) {
-               $command = "7za a -bd -si -mx=4 " . wfEscapeShellArg( $file );
+               $command = "7za a -bd -si -mx=";
+               $command .= wfEscapeShellArg( $this->compressionLevel ) . ' ';
+               $command .= wfEscapeShellArg( $file );
                // Suppress annoying useless crap from p7zip
                // Unfortunately this could suppress real error messages too
                $command .= ' >' . wfGetNull() . ' 2>&1';
index ec59c60..9af9604 100644 (file)
@@ -99,6 +99,8 @@ class BackupDumper extends Maintenance {
                $this->addOption( 'report', 'Report position and speed after every n pages processed. ' .
                        'Default: 100.', false, true );
                $this->addOption( 'server', 'Force reading from MySQL server', false, true );
+               $this->addOption( '7ziplevel', '7zip compression level for all 7zip outputs. Used for ' .
+                       '-mx option to 7za command.', false, true );
 
                if ( $args ) {
                        // Args should be loaded and processed so that dump() can be called directly
@@ -182,7 +184,11 @@ class BackupDumper extends Maintenance {
                                                $this->fatalError( "Unrecognized output sink type '$type'" );
                                        }
                                        $class = $this->outputTypes[$type];
-                                       $sink = new $class( $file );
+                                       if ( $type === "7zip" ) {
+                                               $sink = new $class( $file, intval( $this->getOption( '7ziplevel' ) ) );
+                                       } else {
+                                               $sink = new $class( $file );
+                                       }
 
                                        break;
                                case 'filter':