summaryrefslogtreecommitdiff
path: root/vendor/symfony/console/Command/LockableTrait.php
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2024-08-13 23:45:21 +0200
committerpolo <ordipolo@gmx.fr>2024-08-13 23:45:21 +0200
commitbf6655a534a6775d30cafa67bd801276bda1d98d (patch)
treec6381e3f6c81c33eab72508f410b165ba05f7e9c /vendor/symfony/console/Command/LockableTrait.php
parent94d67a4b51f8e62e7d518cce26a526ae1ec48278 (diff)
downloadAppliGestionPHP-bf6655a534a6775d30cafa67bd801276bda1d98d.zip
VERSION 0.2 doctrine ORM et entités
Diffstat (limited to 'vendor/symfony/console/Command/LockableTrait.php')
-rw-r--r--vendor/symfony/console/Command/LockableTrait.php74
1 files changed, 74 insertions, 0 deletions
diff --git a/vendor/symfony/console/Command/LockableTrait.php b/vendor/symfony/console/Command/LockableTrait.php
new file mode 100644
index 0000000..f0001cc
--- /dev/null
+++ b/vendor/symfony/console/Command/LockableTrait.php
@@ -0,0 +1,74 @@
1<?php
2
3/*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12namespace Symfony\Component\Console\Command;
13
14use Symfony\Component\Console\Exception\LogicException;
15use Symfony\Component\Lock\LockFactory;
16use Symfony\Component\Lock\LockInterface;
17use Symfony\Component\Lock\Store\FlockStore;
18use Symfony\Component\Lock\Store\SemaphoreStore;
19
20/**
21 * Basic lock feature for commands.
22 *
23 * @author Geoffrey Brier <geoffrey.brier@gmail.com>
24 */
25trait LockableTrait
26{
27 private ?LockInterface $lock = null;
28
29 private ?LockFactory $lockFactory = null;
30
31 /**
32 * Locks a command.
33 */
34 private function lock(?string $name = null, bool $blocking = false): bool
35 {
36 if (!class_exists(SemaphoreStore::class)) {
37 throw new LogicException('To enable the locking feature you must install the symfony/lock component. Try running "composer require symfony/lock".');
38 }
39
40 if (null !== $this->lock) {
41 throw new LogicException('A lock is already in place.');
42 }
43
44 if (null === $this->lockFactory) {
45 if (SemaphoreStore::isSupported()) {
46 $store = new SemaphoreStore();
47 } else {
48 $store = new FlockStore();
49 }
50
51 $this->lockFactory = (new LockFactory($store));
52 }
53
54 $this->lock = $this->lockFactory->createLock($name ?: $this->getName());
55 if (!$this->lock->acquire($blocking)) {
56 $this->lock = null;
57
58 return false;
59 }
60
61 return true;
62 }
63
64 /**
65 * Releases the command lock if there is one.
66 */
67 private function release(): void
68 {
69 if ($this->lock) {
70 $this->lock->release();
71 $this->lock = null;
72 }
73 }
74}