| 
<?php
 /*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <[email protected]>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
 
 namespace Symfony\Component\Console\Command;
 
 use Symfony\Component\Console\Exception\LogicException;
 use Symfony\Component\Console\Exception\RuntimeException;
 use Symfony\Component\Filesystem\LockHandler;
 
 /**
 * Basic lock feature for commands.
 *
 * @author Geoffrey Brier <[email protected]>
 */
 trait LockableTrait
 {
 private $lockHandler;
 
 /**
 * Locks a command.
 *
 * @return bool
 */
 private function lock($name = null, $blocking = false)
 {
 if (!class_exists(LockHandler::class)) {
 throw new RuntimeException('To enable the locking feature you must install the symfony/filesystem component.');
 }
 
 if (null !== $this->lockHandler) {
 throw new LogicException('A lock is already in place.');
 }
 
 $this->lockHandler = new LockHandler($name ?: $this->getName());
 
 if (!$this->lockHandler->lock($blocking)) {
 $this->lockHandler = null;
 
 return false;
 }
 
 return true;
 }
 
 /**
 * Releases the command lock if there is one.
 */
 private function release()
 {
 if ($this->lockHandler) {
 $this->lockHandler->release();
 $this->lockHandler = null;
 }
 }
 }
 
 |