public function testGetProcessedReplacementsSet()
 {
     touch('test');
     exec('git init');
     exec('git config user.name "Test User"');
     exec('git config user.email test@test.test');
     exec('git add test');
     exec('git commit -m "Adding test file."');
     exec('git tag 1.0.0');
     $this->setConfig(array('git-commit' => 'git_commit', 'git-commit-short' => 'git_commit_short', 'git-tag' => 'git_tag', 'git-version' => 'git_version', 'replacements' => array('rand' => $rand = rand())));
     $values = $this->config->getProcessedReplacements();
     $this->assertRegExp('/^[a-f0-9]{40}$/', $values['@git_commit@']);
     $this->assertRegExp('/^[a-f0-9]{7}$/', $values['@git_commit_short@']);
     $this->assertEquals('1.0.0', $values['@git_tag@']);
     $this->assertEquals('1.0.0', $values['@git_version@']);
     $this->assertEquals($rand, $values['@rand@']);
     // some process does not release the git files
     if ($this->isWindows()) {
         exec('rd /S /Q .git');
     }
 }
Example #2
0
 /**
  * @override
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $this->config = $this->getConfig($input);
     $path = $this->config->getOutputPath();
     // load bootstrap file
     if (null !== ($bootstrap = $this->config->getBootstrapFile())) {
         $this->config->loadBootstrap();
         $this->putln('?', "Loading bootstrap file: {$bootstrap}");
         unset($bootstrap);
     }
     // remove any previous work
     if (file_exists($path)) {
         $this->putln('?', 'Removing previously built Phar...');
         unlink($path);
     }
     // set up Box
     if ($this->isVerbose()) {
         $this->putln('*', 'Building...');
     } else {
         $output->writeln('Building...');
     }
     $this->putln('?', "Output path: {$path}");
     $this->box = Box::create($path);
     // set replacement values, if any
     if (array() !== ($values = $this->config->getProcessedReplacements())) {
         $this->putln('?', 'Setting replacement values...');
         if ($this->isVerbose()) {
             foreach ($values as $key => $value) {
                 $this->putln('+', "{$key}: {$value}");
             }
         }
         $this->box->setValues($values);
         unset($values, $key, $value);
     }
     // register configured compactors
     if (array() !== ($compactors = $this->config->getCompactors())) {
         $this->putln('?', 'Registering compactors...');
         foreach ($compactors as $compactor) {
             $this->putln('+', get_class($compactor));
             $this->box->addCompactor($compactor);
         }
     }
     // alert about mapped paths
     if (array() !== ($map = $this->config->getMap())) {
         $this->putln('?', 'Mapping paths:');
         foreach ($map as $item) {
             foreach ($item as $match => $replace) {
                 if (empty($match)) {
                     $match = "(all)";
                 }
                 $this->putln('-', "{$match} <info>></info> {$replace}");
             }
         }
     }
     // start adding files
     if (array() !== ($iterators = $this->config->getFinders())) {
         $this->putln('?', 'Adding Finder files...');
         foreach ($iterators as $iterator) {
             $this->add($iterator, null);
         }
     }
     if (array() !== ($iterators = $this->config->getBinaryFinders())) {
         $this->putln('?', 'Adding binary Finder files...');
         foreach ($iterators as $iterator) {
             $this->add($iterator, null, true);
         }
     }
     $this->add($this->config->getDirectoriesIterator(), 'Adding directories...');
     $this->add($this->config->getBinaryDirectoriesIterator(), 'Adding binary directories...', true);
     $this->add($this->config->getFilesIterator(), 'Adding files...');
     $this->add($this->config->getBinaryFilesIterator(), 'Adding binary files...', true);
     if (null !== ($main = $this->config->getMainScriptPath())) {
         $this->putln('?', 'Adding main file: ' . $this->config->getBasePath() . DIRECTORY_SEPARATOR . $main);
         $mapper = $this->config->getMapper();
         $pharPath = $mapper($main);
         if (null !== $pharPath) {
             $this->putln('>', $pharPath);
             $main = $pharPath;
         }
         $this->box->addFromString($main, $this->config->getMainScriptContents());
     }
     // set the appropriate stub
     if (true === $this->config->isStubGenerated()) {
         $this->putln('?', 'Generating new stub...');
         $stub = StubGenerator::create()->alias($this->config->getAlias())->extract($this->config->isExtractable())->index($main)->intercept($this->config->isInterceptFileFuncs())->mimetypes($this->config->getMimetypeMapping())->mung($this->config->getMungVariables())->notFound($this->config->getNotFoundScriptPath())->web($this->config->isWebPhar());
         if (null !== ($shebang = $this->config->getShebang())) {
             $this->putln('-', 'Using custom shebang line: ' . $shebang);
             $stub->shebang($shebang);
         }
         if (null !== ($banner = $this->config->getStubBanner())) {
             $this->putln('-', 'Using custom banner.');
             $stub->banner($banner);
         } elseif (null !== ($banner = $this->config->getStubBannerFromFile())) {
             $this->putln('-', 'Using custom banner from file: ' . $this->config->getBasePath() . DIRECTORY_SEPARATOR . $this->config->getStubBannerPath());
             $stub->banner($banner);
         }
         $this->box->getPhar()->setStub($stub->generate());
     } elseif (null !== ($stub = $this->config->getStubPath())) {
         $stub = $this->config->getBasePath() . DIRECTORY_SEPARATOR . $stub;
         $this->putln('?', "Using stub file: {$stub}");
         $this->box->setStubUsingFile($stub);
     } else {
         $this->putln('?', 'Using default stub.');
     }
     // set metadata, if any
     if (null !== ($metadata = $this->config->getMetadata())) {
         $this->putln('?', 'Setting metadata...');
         $this->box->getPhar()->setMetadata($metadata);
     }
     // compress, if algorithm set
     if (null !== ($algorithm = $this->config->getCompressionAlgorithm())) {
         $this->putln('?', 'Compressing...');
         $this->box->getPhar()->compressFiles($algorithm);
     }
     $this->box->getPhar()->stopBuffering();
     // sign using private key, if applicable
     if (file_exists($path . '.pubkey')) {
         unlink($path . '.pubkey');
     }
     if (null !== ($key = $this->config->getPrivateKeyPath())) {
         $this->putln('?', 'Signing using a private key...');
         $passphrase = $this->config->getPrivateKeyPassphrase();
         if ($this->config->isPrivateKeyPrompt()) {
             /** @var $dialog DialogHelper */
             $dialog = $this->getHelper('dialog');
             $passphrase = $dialog->askHiddenResponse($output, 'Private key passphrase:');
         }
         $this->box->signUsingFile($key, $passphrase);
         // set the signature algorithm if no key is used
     } elseif (null !== ($algorithm = $this->config->getSigningAlgorithm())) {
         $this->box->getPhar()->setSignatureAlgorithm($algorithm);
     }
     unset($this->box);
     // chmod, if configured
     if (null !== ($chmod = $this->config->getFileMode())) {
         $this->putln('?', 'Setting file permissions...');
         chmod($path, $chmod);
     }
     $this->putln('*', 'Done.');
 }
Example #3
0
 /**
  * @override
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     if (false === $input->getOption('stub') && null === $input->getArgument('local')) {
         $output->writeln('<error>The <info>local</info> argument is required.</error>');
         return 1;
     }
     $this->config = $this->getConfig($input);
     $phar = $input->getArgument('phar');
     $file = $input->getArgument('file');
     // load bootstrap file
     if (null !== ($bootstrap = $this->config->getBootstrapFile())) {
         $this->config->loadBootstrap();
         $this->putln('?', "Loading bootstrap file: {$bootstrap}");
         unset($bootstrap);
     }
     $this->putln('*', 'Adding to the Phar...');
     if (false === is_file($phar)) {
         $output->writeln(sprintf('<error>The path "%s" is not a file or does not exist.</error>', $phar));
         return 1;
     }
     if (false === is_file($file)) {
         $output->writeln(sprintf('<error>The path "%s" is not a file or does not exist.</error>', $file));
         return 1;
     }
     if (false == preg_match('/^\\w+:\\/\\//', $file)) {
         $file = realpath($file);
     }
     $this->box = Box::create($phar);
     // set replacement values, if any
     if (array() !== ($values = $this->config->getProcessedReplacements())) {
         $this->putln('?', 'Setting replacement values...');
         if ($this->isVerbose()) {
             foreach ($values as $key => $value) {
                 $this->putln('+', "{$key}: {$value}");
             }
         }
         $this->box->setValues($values);
         unset($values, $key, $value);
     }
     // register configured compactors
     if (array() !== ($compactors = $this->config->getCompactors())) {
         $this->putln('?', 'Registering compactors...');
         foreach ($compactors as $compactor) {
             $this->putln('+', get_class($compactor));
             $this->box->addCompactor($compactor);
         }
     }
     // add the file
     $phar = $this->box->getPhar();
     $local = str_replace('\\', '/', Path::canonical($input->getArgument('local')));
     if (isset($phar[$local]) && false === $input->getOption('replace')) {
         $output->writeln(sprintf('<error>The file "%s" already exists in the Phar.</error>', $local));
         return 1;
     }
     if ($input->getOption('binary')) {
         $this->putln('?', "Adding binary file: {$file}");
         $phar->addFile($file, $local);
     } elseif ($input->getOption('stub')) {
         $this->putln('?', "Using stub file: {$file}");
         $this->box->setStubUsingFile($file);
     } elseif ($input->getOption('main')) {
         $this->putln('?', "Adding main file: {$file}");
         if (false === ($contents = @file_get_contents($file))) {
             $error = error_get_last();
             throw new RuntimeException($error['message']);
         }
         $this->box->addFromString($local, preg_replace('/^#!.*\\s*/', '', $contents));
     } else {
         $this->putln('?', "Adding file: {$file}");
         $this->box->addFile($file, $local);
     }
     unset($this->box, $phar);
     $this->putln('*', 'Done.');
     return 0;
 }