From c7ecb1310f7663e5fdaafb655381663b9410c31a Mon Sep 17 00:00:00 2001
From: Oliver Schramm <oliver.schramm97@gmail.com>
Date: Sat, 24 Oct 2015 20:10:16 +0200
Subject: [ticket/14257] Add reparse_lock to CLI command

PHPBB3-14257
---
 phpBB/phpbb/console/command/reparser/reparse.php | 50 ++++++++++++++++--------
 1 file changed, 34 insertions(+), 16 deletions(-)

(limited to 'phpBB/phpbb/console/command')

diff --git a/phpBB/phpbb/console/command/reparser/reparse.php b/phpBB/phpbb/console/command/reparser/reparse.php
index 63124b4b8c..e77b384d8e 100644
--- a/phpBB/phpbb/console/command/reparser/reparse.php
+++ b/phpBB/phpbb/console/command/reparser/reparse.php
@@ -13,6 +13,7 @@
 
 namespace phpbb\console\command\reparser;
 
+use phpbb\exception\runtime_exception;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputOption;
@@ -41,6 +42,11 @@ class reparse extends \phpbb\console\command\command
 	*/
 	protected $output;
 
+	/**
+	 * @var \phpbb\lock\db
+	 */
+	protected $reparse_lock;
+
 	/**
 	* @var \phpbb\di\service_collection
 	*/
@@ -57,13 +63,15 @@ class reparse extends \phpbb\console\command\command
 	* @param \phpbb\user $user
 	* @param \phpbb\di\service_collection $reparsers
 	* @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';
 
 		$this->config_text = $config_text;
 		$this->reparsers = $reparsers;
+		$this->reparse_lock = $reparse_lock;
 		parent::__construct($user);
 	}
 
@@ -163,29 +171,39 @@ class reparse extends \phpbb\console\command\command
 		$this->input = $input;
 		$this->output = $output;
 		$this->io = new SymfonyStyle($input, $output);
-		$this->load_resume_data();
 
-		$name = $input->getArgument('reparser-name');
-		if (isset($name))
+		if (!$this->reparse_lock->acquire())
 		{
-			// Allow "post_text" to be an alias for "text_reparser.post_text"
-			if (!isset($this->reparsers[$name]))
+			$this->load_resume_data();
+
+			$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)
+			else
 			{
-				$this->reparse($name);
+				foreach ($this->reparsers as $name => $service)
+				{
+					$this->reparse($name);
+				}
 			}
-		}
 
-		$this->io->success($this->user->lang('CLI_REPARSER_REPARSE_SUCCESS'));
+			$this->io->success($this->user->lang('CLI_REPARSER_REPARSE_SUCCESS'));
 
-		return 0;
+			$this->reparse_lock->release();
+
+			return 0;
+		}
+		else
+		{
+			throw new runtime_exception('REPARSE_LOCK_ERROR', array(), null, 1);
+		}
 	}
 
 	/**
-- 
cgit v1.2.1