* @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;
* @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';
$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
$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':