[ticket/14257] Add reparse_lock to CLI command

PHPBB3-14257
This commit is contained in:
Oliver Schramm 2015-10-24 20:10:16 +02:00
parent 8376c6552a
commit c7ecb1310f
3 changed files with 36 additions and 16 deletions

View file

@ -189,6 +189,7 @@ services:
- @user - @user
- @text_reparser_collection - @text_reparser_collection
- @config_text - @config_text
- @text_reparser.lock
tags: tags:
- { name: console.command } - { name: console.command }

View file

@ -289,6 +289,7 @@ $lang = array_merge($lang, array(
'PROCEED_TO_ACP' => '%sProceed to the ACP%s', 'PROCEED_TO_ACP' => '%sProceed to the ACP%s',
'REMIND' => 'Remind', 'REMIND' => 'Remind',
'REPARSE_LOCK_ERROR' => 'Could not obtain reparse lock.',
'RESYNC' => 'Resynchronise', 'RESYNC' => 'Resynchronise',
'RUNNING_TASK' => 'Running task: %s.', 'RUNNING_TASK' => 'Running task: %s.',

View file

@ -13,6 +13,7 @@
namespace phpbb\console\command\reparser; namespace phpbb\console\command\reparser;
use phpbb\exception\runtime_exception;
use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputOption;
@ -41,6 +42,11 @@ class reparse extends \phpbb\console\command\command
*/ */
protected $output; protected $output;
/**
* @var \phpbb\lock\db
*/
protected $reparse_lock;
/** /**
* @var \phpbb\di\service_collection * @var \phpbb\di\service_collection
*/ */
@ -57,13 +63,15 @@ class reparse extends \phpbb\console\command\command
* @param \phpbb\user $user * @param \phpbb\user $user
* @param \phpbb\di\service_collection $reparsers * @param \phpbb\di\service_collection $reparsers
* @param \phpbb\config\db_text $config_text * @param \phpbb\config\db_text $config_text
* @param \phpbb\lock\db $reparse_lock
*/ */
public function __construct(\phpbb\user $user, \phpbb\di\service_collection $reparsers, \phpbb\config\db_text $config_text) public function __construct(\phpbb\user $user, \phpbb\di\service_collection $reparsers, \phpbb\config\db_text $config_text, \phpbb\lock\db $reparse_lock)
{ {
require_once __DIR__ . '/../../../../includes/functions_content.php'; require_once __DIR__ . '/../../../../includes/functions_content.php';
$this->config_text = $config_text; $this->config_text = $config_text;
$this->reparsers = $reparsers; $this->reparsers = $reparsers;
$this->reparse_lock = $reparse_lock;
parent::__construct($user); parent::__construct($user);
} }
@ -163,29 +171,39 @@ class reparse extends \phpbb\console\command\command
$this->input = $input; $this->input = $input;
$this->output = $output; $this->output = $output;
$this->io = new SymfonyStyle($input, $output); $this->io = new SymfonyStyle($input, $output);
$this->load_resume_data();
$name = $input->getArgument('reparser-name'); if (!$this->reparse_lock->acquire())
if (isset($name))
{ {
// Allow "post_text" to be an alias for "text_reparser.post_text" $this->load_resume_data();
if (!isset($this->reparsers[$name]))
$name = $input->getArgument('reparser-name');
if (isset($name))
{ {
$name = 'text_reparser.' . $name; // Allow "post_text" to be an alias for "text_reparser.post_text"
if (!isset($this->reparsers[$name]))
{
$name = 'text_reparser.' . $name;
}
$this->reparse($name);
} }
$this->reparse($name); else
{
foreach ($this->reparsers as $name => $service)
{
$this->reparse($name);
}
}
$this->io->success($this->user->lang('CLI_REPARSER_REPARSE_SUCCESS'));
$this->reparse_lock->release();
return 0;
} }
else else
{ {
foreach ($this->reparsers as $name => $service) throw new runtime_exception('REPARSE_LOCK_ERROR', array(), null, 1);
{
$this->reparse($name);
}
} }
$this->io->success($this->user->lang('CLI_REPARSER_REPARSE_SUCCESS'));
return 0;
} }
/** /**