Ejemplo n.º 1
0
 public function testGetModules()
 {
     $filesystemTmp = CM_Service_Manager::getInstance()->getFilesystems()->getTmp();
     $dirRoot = $filesystemTmp->getAdapter()->getPathPrefix() . '/foo-app/';
     $composerFile = new \Composer\Json\JsonFile($dirRoot . 'composer.json');
     $composerFile->write(array('name' => 'foo/bar', 'require' => array('cargomedia/cm' => '*'), 'extra' => ['cm-modules' => ['Package' => ['path' => 'package/']]]));
     $filesystemTmp->ensureDirectory('foo-app/vendor/composer/');
     $installedFile = new \Composer\Json\JsonFile($dirRoot . 'vendor/composer/installed.json');
     $installedFile->write([['name' => 'cargomedia/cm', 'version' => '1.3.10', 'type' => 'library', 'extra' => ['cm-modules' => ['CM' => ['path' => '']]], 'autoload' => ['psr-0' => ['CM_' => 'library/']]]]);
     $installation = new CM_App_Installation($dirRoot);
     $expectedModules = [new CM_App_Module('CM', 'vendor/cargomedia/cm/'), new CM_App_Module('Package', 'package/')];
     $this->assertEquals($expectedModules, $installation->getModules());
 }
#!/usr/bin/env php
<?php 
require_once __DIR__ . '/vendor/autoload.php';
$args = array_reverse($argv);
$version = array_shift($args);
$package_name = array_shift($args);
print 'Update: ' . $package_name . ' - ' . $version . PHP_EOL;
if (empty($package_name) || empty($version)) {
    return;
}
$filepath = $_SERVER['PWD'] . '/composer.lock';
$composer_lock = json_decode(file_get_contents($filepath), TRUE);
$write = FALSE;
if (isset($composer_lock['packages'])) {
    foreach ($composer_lock['packages'] as &$package) {
        if ($package['name'] == $package_name) {
            $git_url = $package['source']['url'];
            $output = shell_exec('git ls-remote ' . $git_url . ' ' . $version);
            $hash = substr($output, 0, 40);
            print $hash . PHP_EOL;
            $package['source']['reference'] = $hash;
            $package['time'] = date('Y-m-d H:i:s');
            $write = TRUE;
        }
    }
}
if ($write) {
    file_put_contents($filepath, json_encode($composer_lock, 448 & 128));
    $file = new \Composer\Json\JsonFile($filepath);
    $file->write($composer_lock);
}
Ejemplo n.º 3
0
 /**
  * @param array $hash
  */
 private function _writeToComposerFile(array $hash)
 {
     $composerFile = new Composer\Json\JsonFile($this->_installation->getDirRoot() . 'composer.json');
     $configCurrent = $composerFile->read();
     $this->_filesystemHelper->notify('modify', 'composer.json');
     $configMerged = $this->_mergeConfigs($configCurrent, $hash);
     $composerFile->write($configMerged);
     $this->_installation->reload();
 }
Ejemplo n.º 4
0
 /**
  * @param \Symfony\Component\Console\Input\InputInterface $input
  * @param \Symfony\Component\Console\Output\OutputInterface $output
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $processExecutor = new \Composer\Util\ProcessExecutor();
     $composerUrl = $input->getArgument('composerUrl');
     $repositoryName = $input->getArgument('name');
     $repositoryUrl = rtrim($input->getOption('base-url'), '/') . '/' . $repositoryName;
     $targetDir = rtrim($input->getOption('base-dir'), '/') . '/' . $repositoryName;
     $cacheDir = rtrim($input->getOption('cache-dir'), '/') . '/' . $repositoryName;
     if ($input->getOption('clean-cache')) {
         $output->writeln('Cleaning cached sources');
         $processExecutor->execute('rm -rf ' . escapeshellarg($cacheDir));
     }
     $output->writeln(sprintf('Creating repository "%s"', $repositoryName));
     if (!is_dir($cacheDir)) {
         mkdir($cacheDir, 0777, true);
     }
     putenv('COMPOSER_VENDOR_DIR=' . $cacheDir);
     putenv('COMPOSER_BIN_DIR=' . $cacheDir . '/bin');
     $output->writeln(sprintf('Loading composer file "%s"', $composerUrl));
     $json = new \Composer\Json\JsonFile($composerUrl);
     $jsonData = $originalJsonData = $json->read();
     // if 'require-only-dependencies-of' is found, rewrite json data to composer format
     if (isset($originalJsonData['require-only-dependencies-of'])) {
         $jsonData['require'] += $jsonData['require-only-dependencies-of'];
         unset($jsonData['require-only-dependencies-of']);
         $composerUrl = $cacheDir . '/broker.json';
         $composerJson = new \Composer\Json\JsonFile($composerUrl);
         $composerJson->write($jsonData);
     }
     $io = new \Composer\IO\ConsoleIO($input, $output, $this->getHelperSet());
     $composer = \Composer\Factory::create($io, $composerUrl);
     /*
      * add custom pear installer to fix binary and setup issues
      */
     $customPearInstaller = new \rg\broker\customizations\PearInstaller($io, $composer, 'pear-library');
     $composer->getInstallationManager()->addInstaller($customPearInstaller);
     $composer->setLocker(new \rg\broker\customizations\Locker());
     $installer = \Composer\Installer::create($io, $composer);
     $installer->setRunScripts(false);
     $installer->setPreferDist(true);
     $installer->setUpdate(true);
     if (!$installer->run()) {
         $output->writeln('Composer installer failed!');
         return 1;
     }
     if (file_exists($targetDir)) {
         $processExecutor->execute('rm -rf ' . $targetDir);
     }
     mkdir($targetDir, 0777, true);
     mkdir($targetDir . '/dists');
     $packages = array('packages' => array());
     $dumper = new \Composer\Package\Dumper\ArrayDumper();
     $installedPackages = $this->getInstalledPackages($cacheDir);
     $localRepo = $composer->getRepositoryManager()->getLocalRepository();
     $output->writeln('Creating dists for packages');
     foreach ($installedPackages as $installedPackage) {
         /** @var \Composer\Package\PackageInterface $package  */
         $package = $localRepo->findPackage($installedPackage['name'], $installedPackage['version']);
         // skip if package was in 'require-only-dependencies-of' section
         if (isset($originalJsonData['require-only-dependencies-of'][$package->getName()]) || isset($originalJsonData['require-only-dependencies-of'][$package->getPrettyName()])) {
             continue;
         }
         $zipfileName = $this->createZipFile($cacheDir, $targetDir, $package, $output, $processExecutor);
         $packageArray = $this->getPackageArray($targetDir, $repositoryUrl, $dumper, $package, $zipfileName);
         $packages['packages'][$package->getPrettyName()][$package->getPrettyVersion()] = $packageArray;
     }
     ksort($packages['packages'], SORT_STRING);
     $output->writeln('Writing packages.json');
     $repoJson = new \Composer\Json\JsonFile($targetDir . '/packages.json');
     $repoJson->write($packages);
 }
Ejemplo n.º 5
0
 /**
  * @throws CM_Exception_Invalid
  * @throws Exception
  * @throws \Mocka\Exception
  * @return CM_Tools_AppInstallation|\Mocka\AbstractClassTrait
  */
 private function _mockAppInstallation()
 {
     $appName = uniqid('foo-app-');
     $filesystemTmp = CM_Service_Manager::getInstance()->getFilesystems()->getTmp();
     $dirRoot = $filesystemTmp->getAdapter()->getPathPrefix() . '/' . $appName . '/';
     $frameworkLocal = DIR_ROOT . CM_Bootloader::getInstance()->getModulePath('CM');
     $frameworkTest = $dirRoot . 'vendor/cargomedia/cm';
     $filesystemTmp->ensureDirectory("{$appName}/vendor/cargomedia");
     if (false === symlink($frameworkLocal, $frameworkTest)) {
         throw new CM_Exception_Invalid('Symlink failed to be created');
     }
     $composerFile = new \Composer\Json\JsonFile($dirRoot . 'composer.json');
     $composerFile->write(array('name' => 'foo/bar', 'require' => array('cargomedia/cm' => '*')));
     $filesystemTmp->ensureDirectory("{$appName}/vendor/composer/");
     $installedFile = new \Composer\Json\JsonFile($dirRoot . 'vendor/composer/installed.json');
     $installedFile->write([['name' => 'cargomedia/cm', 'version' => '1.3.10', 'type' => 'library', 'extra' => ['cm-modules' => ['CM' => ['path' => '']]], 'autoload' => ['psr-0' => ['CM_' => 'library/']]]]);
     return $this->mockObject('CM_Tools_AppInstallation', [$dirRoot]);
 }