|
5 | 5 | use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; |
6 | 6 | use Mopa\Bridge\Composer\Adapter\ComposerAdapter; |
7 | 7 | use Mopa\Bridge\Composer\Util\ComposerPathFinder; |
| 8 | +use Symfony\Component\Config\ConfigCache; |
| 9 | +use Symfony\Component\Config\Resource\FileResource; |
8 | 10 |
|
9 | 11 |
|
10 | 12 | class VersionPass implements CompilerPassInterface |
11 | 13 | { |
| 14 | + /** |
| 15 | + * Fetch bootstrap version from composer and cache result! |
| 16 | + */ |
12 | 17 | public function process(ContainerBuilder $container) |
13 | 18 | { |
14 | 19 | if (!$container->hasParameter('mopa_bootstrap.version') || is_null($container->hasParameter('mopa_bootstrap.version'))) { |
15 | | - /*if (false !== $composer = ComposerAdapter::getComposer()) { |
16 | | - $util = new ComposerPathFinder($composer); |
17 | | - $package = $util->findPackage("twbs/bootstrap"); |
18 | | - $version = split("-", $package->getVersion()); |
19 | | - $container->setParameter('mopa_bootstrap.version', floatVal($version[0])); |
20 | | - } else { |
21 | | - throw new \RuntimeException("Could not find composer and mopa_bootstrap.version not set in config!!"); |
22 | | - }*/ |
| 20 | + |
| 21 | + |
| 22 | + $cachePath = $container->getParameter('kernel.cache_dir').'/mopa_bootstrap_version.cache'; |
| 23 | + |
| 24 | + // the second argument indicates whether or not you want to use debug mode |
| 25 | + $versionCache = new ConfigCache($cachePath, $container->getParameter("kernel.debug")); |
| 26 | + |
| 27 | + if (!$versionCache->isFresh()) { |
| 28 | + // make sure this also works for we requests ! |
| 29 | + $oldWorkingDir = getcwd(); |
| 30 | + $split = explode(DIRECTORY_SEPARATOR, $oldWorkingDir); |
| 31 | + if ( $split[count($split)-1] == "web") { |
| 32 | + array_pop($split); |
| 33 | + chdir(implode(DIRECTORY_SEPARATOR, $split)); |
| 34 | + } |
| 35 | + putenv("COMPOSER_HOME=".getcwd()); |
| 36 | + |
| 37 | + if (false !== $composer = ComposerAdapter::getComposer()) { |
| 38 | + $util = new ComposerPathFinder($composer); |
| 39 | + $package = $util->findPackage("twbs/bootstrap"); |
| 40 | + $version = split("-", $package->getVersion()); |
| 41 | + $targetPackagePath = $composer->getInstallationManager()->getInstallPath($package); |
| 42 | + $twbscomposer = $targetPackagePath ."/composer.json"; |
| 43 | + |
| 44 | + $resources = array(new FileResource($twbscomposer)); |
| 45 | + |
| 46 | + $versionCache->write($version[0], $resources); |
| 47 | + } else { |
| 48 | + throw new \RuntimeException("Could not find composer and mopa_bootstrap.version not set in config!!"); |
| 49 | + } |
| 50 | + } |
| 51 | + $version = file_get_contents($cachePath); |
| 52 | + $container->setParameter('mopa_bootstrap.version', floatVal($version)); |
23 | 53 | } |
24 | 54 | } |
25 | 55 | } |
0 commit comments