diff --git a/lib/Cake/Console/Command/Task/ExtractTask.php b/lib/Cake/Console/Command/Task/ExtractTask.php index fb7102787a6..46ce5b18aff 100644 --- a/lib/Cake/Console/Command/Task/ExtractTask.php +++ b/lib/Cake/Console/Command/Task/ExtractTask.php @@ -302,6 +302,11 @@ public function getOptionParser() { ->addOption('exclude', array( 'help' => __d('cake_console', 'Comma separated list of directories to exclude.' . ' Any path containing a path segment with the provided values will be skipped. E.g. test,vendors') + )) + ->addOption('overwrite', array( + 'boolean' => true, + 'default' => false, + 'help' => __d('cake_console', 'Always overwrite existing .pot files.') )); } @@ -537,6 +542,10 @@ protected function _store($domain, $header, $sentence) { */ protected function _writeFiles() { $overwriteAll = false; + if (!empty($this->params['overwrite'])) { + $overwriteAll = true; + } + foreach ($this->_storage as $domain => $sentences) { $output = $this->_writeHeader(); foreach ($sentences as $sentence => $header) { diff --git a/lib/Cake/Test/Case/Console/Command/Task/ExtractTaskTest.php b/lib/Cake/Test/Case/Console/Command/Task/ExtractTaskTest.php index b144e37b99a..a7f893c2559 100644 --- a/lib/Cake/Test/Case/Console/Command/Task/ExtractTaskTest.php +++ b/lib/Cake/Test/Case/Console/Command/Task/ExtractTaskTest.php @@ -399,4 +399,26 @@ public function testExtractModelValidationInPlugin() { $pattern = '#Plugin/TestPlugin/Model/TestPluginPost.php:validation for field title#'; $this->assertNotRegExp($pattern, $result); } + + +/** + * Test that the extract shell overwrites existing files with the overwrite parameter + * + * @return void + */ + public function testExtractOverwrite() { + $this->Task->interactive = false; + + $this->Task->params['paths'] = CAKE . 'Test' . DS . 'test_app' . DS; + $this->Task->params['output'] = $this->path . DS; + $this->Task->params['overwrite'] = true; + + file_put_contents($this->path . DS . 'default.pot', 'will be overwritten'); + $this->assertTrue(file_exists($this->path . DS . 'default.pot')); + $original = file_get_contents($this->path . DS . 'default.pot'); + + $this->Task->execute(); + $result = file_get_contents($this->path . DS . 'default.pot'); + $this->assertNotEquals($original, $result); + } }