Exemplo n.º 1
0
 /**
  * Mirror a directory if the two directories don't match.
  *
  * @param string       $source
  * @param string       $dest
  * @param PackageEvent $event
  */
 public static function mirror($source, $dest, PackageEvent $event)
 {
     if (realpath($source) === realpath($dest)) {
         return;
     }
     $fs = new Filesystem();
     try {
         $fs->mirror($source, $dest);
     } catch (IOException $e) {
         $event->getIO()->writeError(sprintf('Mirroring %s to %s failed:', $source, $dest));
         $event->getIO()->writeError($e->getMessage());
     }
 }
Exemplo n.º 2
0
    /**
     * Auto registers the "pbj-schema-store" repos with the SchemaStore.
     *
     * @param PackageEvent $event
     */
    public static function writePbjSchemaStoresFile(PackageEvent $event)
    {
        if (!$event->isDevMode()) {
            return;
        }
        $dirs = [];
        /** @var PackageInterface $package */
        foreach ($event->getInstalledRepo()->getPackages() as $package) {
            if (!$package instanceof PackageInterface) {
                continue;
            }
            if ('pbj-schema-store' !== $package->getType()) {
                continue;
            }
            $dir = sprintf('$vendorDir.\'/%s/schemas/\'', $package->getName());
            // override for current package
            if ($event->getComposer()->getPackage()->getName() == $package->getName()) {
                $dir = '__DIR__.\'/schemas/\'';
            }
            $dirs[] = sprintf('%s    %s', PHP_EOL, $dir);
        }
        if (empty($dirs)) {
            return;
        }
        $dirs = implode(',', $dirs);
        $event->getIO()->write('<info>Writing "pbj-schema-store" locations to "pbj-schema-stores.php"</info>');
        $text = <<<TEXT
<?php

/**
 * DO NOT EDIT THIS FILE as it will be overwritten by Composer as part of
 * the installation/update process.
 *
 * Registers all directories from all required packages which are of
 * of the type "pbj-schema-store".
 *
 * This file has been auto-generated by the Pbj Compiler.
 */

\$vendorDir = realpath(__DIR__.'/vendor');

\\Gdbots\\Pbjc\\SchemaStore::addDirs([{$dirs}
]);

TEXT;
        $fs = new Filesystem();
        $fs->dumpFile('pbj-schema-stores.php', $text);
    }
Exemplo n.º 3
0
 /**
  * Remove possibly problematic test files from vendored projects.
  *
  * @param \Composer\Installer\PackageEvent $event
  *   A PackageEvent object to get the configured composer vendor directories
  *   from.
  */
 public static function vendorTestCodeCleanup(PackageEvent $event)
 {
     $vendor_dir = $event->getComposer()->getConfig()->get('vendor-dir');
     $io = $event->getIO();
     $op = $event->getOperation();
     if ($op->getJobType() == 'update') {
         $package = $op->getTargetPackage();
     } else {
         $package = $op->getPackage();
     }
     $package_key = static::findPackageKey($package->getName());
     $message = sprintf("    Processing <comment>%s</comment>", $package->getPrettyName());
     if ($io->isVeryVerbose()) {
         $io->write($message);
     }
     if ($package_key) {
         foreach (static::$packageToCleanup[$package_key] as $path) {
             $dir_to_remove = $vendor_dir . '/' . $package_key . '/' . $path;
             $print_message = $io->isVeryVerbose();
             if (is_dir($dir_to_remove)) {
                 if (static::deleteRecursive($dir_to_remove)) {
                     $message = sprintf("      <info>Removing directory '%s'</info>", $path);
                 } else {
                     // Always display a message if this fails as it means something has
                     // gone wrong. Therefore the message has to include the package name
                     // as the first informational message might not exist.
                     $print_message = TRUE;
                     $message = sprintf("      <error>Failure removing directory '%s'</error> in package <comment>%s</comment>.", $path, $package->getPrettyName());
                 }
             } else {
                 // If the package has changed or the --prefer-dist version does not
                 // include the directory this is not an error.
                 $message = sprintf("      Directory '%s' does not exist", $path);
             }
             if ($print_message) {
                 $io->write($message);
             }
         }
         if ($io->isVeryVerbose()) {
             // Add a new line to separate this output from the next package.
             $io->write("");
         }
     }
 }
 /**
  * @param PackageEvent $event
  */
 public function postPackageInstall(PackageEvent $event)
 {
     $operation = $event->getOperation();
     if (!$operation instanceof InstallOperation) {
         return;
     }
     $package = $operation->getPackage();
     if ($package->getName() !== static::$packageName) {
         return;
     }
     $extra = $event->getComposer()->getPackage()->getExtra();
     if (!isset($extra['connect-packages']) || !count($extra['connect-packages'])) {
         return;
     }
     //skip if we are installing from lock file
     if ($event->getComposer()->getLocker()->isLocked()) {
         return;
     }
     $packages = implode('", "', array_keys($extra['connect-packages']));
     $message = '<comment>The package(s): "%s" will be installed the next time you run ';
     $message .= 'composer update</comment>';
     $event->getIO()->write(sprintf($message, $packages));
 }
Exemplo n.º 5
0
 /**
  * @param PackageEvent $event
  * @return bool|void
  */
 public function installBinary(PackageEvent $event)
 {
     $binLocation = $event->getComposer()->getConfig()->get('bin-dir');
     $binaries = $event->getOperation()->getPackage()->getBinaries();
     if (count($binaries) === 0) {
         return;
     }
     $binary = basename(array_values($binaries)[0]);
     $binaryLocation = sprintf('%s/%s', $binLocation, $binary);
     $target = $this->getInstallLocation($binary);
     //if target exists and is symlink then we just remove it
     if (is_link($target)) {
         unlink($target);
     }
     if (is_writable(dirname($target))) {
         return symlink($binaryLocation, $target);
     }
     $event->getIO()->write(sprintf('<error>The directory: %s is not writeable. The workshop %s cannot be installed.</error>', dirname($target), $binary));
     $event->getIO()->write("");
     $event->getIO()->write(sprintf('You have two options now:'));
     $event->getIO()->write(sprintf(' 1. Add the composer global bin dir: <info>%s</info> to your PATH variable', $binLocation));
     $event->getIO()->write(sprintf(' 2. Run <info>%s</info> directly with <info>%s</info>', $binary, $binaryLocation));
     $event->getIO()->write("");
 }
Exemplo n.º 6
0
 /**
  * Composer post-package action events.
  *
  * @param PackageEvent $event
  */
 public function onPostPackage(PackageEvent $event)
 {
     if ($event->getIO() instanceof BufferIO) {
         $this->logger->debug($event->getIO()->getOutput(), ['event' => 'extensions']);
     }
 }
Exemplo n.º 7
0
 /**
  * Composer post-package action events.
  *
  * @param PackageEvent $event
  */
 public function onPostPackage(PackageEvent $event)
 {
     if ($event->getIO() instanceof BufferIO) {
         $this->manager->setOutput($event->getIO()->getOutput());
     }
 }
Exemplo n.º 8
0
 /**
  * @param PackageEvent $event
  */
 public function __construct(PackageEvent $event)
 {
     $this->aliasOf = $event;
     parent::__construct($event->getName(), $event->getComposer(), $event->getIO(), $event->isDevMode(), $event->getArguments(), $event->getFlags());
 }