コード例 #1
0
ファイル: UpgradeTaskTest.php プロジェクト: tenside/core
 /**
  * Test that the base functionality works.
  *
  * @return void
  */
 public function testAll()
 {
     // Redirect composer config and cache into the test temp dir.
     putenv('COMPOSER_HOME=' . $this->getTempDir() . DIRECTORY_SEPARATOR . '.composer');
     $this->createFixture('.composer' . DIRECTORY_SEPARATOR . 'config.json', str_replace('##URL##', str_replace('\\', '/', $this->getTempDir() . DIRECTORY_SEPARATOR . 'test-repository' . DIRECTORY_SEPARATOR), $this->readFixture('composer' . DIRECTORY_SEPARATOR . 'config.json')));
     $this->createFixture('test-repository' . DIRECTORY_SEPARATOR . 'packages.json', str_replace('##URL##', str_replace('\\', '/', $this->getTempDir() . DIRECTORY_SEPARATOR . 'test-repository' . DIRECTORY_SEPARATOR), $this->readFixture('test-repository' . DIRECTORY_SEPARATOR . 'packages.json')));
     $this->provideFixture('test-repository' . DIRECTORY_SEPARATOR . 'vendor-package-name-1.0.0.zip');
     $this->provideFixture('test-repository' . DIRECTORY_SEPARATOR . 'vendor-dependency-name-1.0.0.zip');
     $this->provideFixture($newZip = 'test-repository' . DIRECTORY_SEPARATOR . 'vendor-dependency-name-1.1.0.zip');
     // First we need a proper installation.
     $task = new InstallTask(new JsonArray([InstallTask::SETTING_TYPE => 'install', InstallTask::SETTING_ID => 'install-task-id', InstallTask::SETTING_PACKAGE => 'vendor/package-name', InstallTask::SETTING_VERSION => '1.0.0', InstallTask::SETTING_DESTINATION_DIR => $this->getTempDir(), 'status' => InstallTask::STATE_PENDING]));
     $task->perform($this->getTempFile('logs/install-task.log'));
     if ($task->getStatus() !== InstallTask::STATE_FINISHED) {
         $this->markTestSkipped('Upgrade task can not be tested, test installation failed.');
         return;
     }
     // Now the upgrade.
     $file = new JsonFile($this->getTempDir() . DIRECTORY_SEPARATOR . 'composer.json');
     $file->set('repositories', ['packagist' => false]);
     $file->set('require/' . $file->escape('vendor/dependency-name'), '~1.0');
     unset($file);
     $task = new UpgradeTask(new JsonArray([UpgradeTask::SETTING_TYPE => 'upgrade', UpgradeTask::SETTING_ID => 'upgrade-task-id', UpgradeTask::SETTING_HOME => $this->getTempDir(), UpgradeTask::SETTING_PACKAGES => ['vendor/dependency-name'], 'status' => UpgradeTask::STATE_PENDING]));
     $task->perform($this->getTempFile('logs/task.log'));
     $this->assertEquals('upgrade-task-id', $task->getId());
     $this->assertEquals(UpgradeTask::STATE_FINISHED, $task->getStatus());
     $this->assertContains('Installing vendor/dependency-name (1.1.0)', $task->getOutput());
     $this->assertZipHasBeenUnpackedTo($this->getFixturesDirectory() . DIRECTORY_SEPARATOR . $newZip, 'vendor' . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'dependency-name');
 }
コード例 #2
0
ファイル: TaskList.php プロジェクト: tenside/core
 /**
  * Add the task to the list.
  *
  * @param string         $type     The type name.
  *
  * @param JsonArray|null $metaData The (optional) meta data.
  *
  * @return string
  *
  * @throws \InvalidArgumentException When no task instance can be created from the meta data.
  */
 public function queue($type, JsonArray $metaData = null)
 {
     $taskId = $this->generateId();
     if (null === $metaData) {
         $metaData = new JsonArray();
     }
     $metaData->set(Task::SETTING_ID, $taskId)->set(Task::SETTING_TYPE, $type)->set('status', Task::STATE_PENDING)->set(Task::SETTING_CREATED_AT, date('c'));
     $taskFile = new JsonFile($this->taskIdToFileName($taskId), null);
     $taskFile->setData($metaData->getData());
     $taskFile->save();
     if (!$this->createTaskFromMetaData($taskFile)) {
         unlink($taskFile->getFilename());
         throw new \InvalidArgumentException('Could not create task of type "' . $metaData->get('type') . '"');
     }
     $this->getConfig()->set($taskId, $metaData->getData());
     return $taskId;
 }
コード例 #3
0
 /**
  * Load a repository containing available upgrades.
  *
  * @return null|RepositoryInterface
  */
 private function getUpgradeRepository()
 {
     $upgradeFile = $this->getTensideDataDir() . DIRECTORY_SEPARATOR . 'upgrades.json';
     if (!file_exists($upgradeFile)) {
         return null;
     }
     $packageLoader = new ArrayLoader();
     $packageChanges = new WritableArrayRepository();
     $upgrades = new JsonFile($upgradeFile, null);
     foreach ($upgrades->getEntries('/') as $packageName) {
         if ($pkgData = $upgrades->get($packageName . '/target')) {
             $packageChanges->addPackage($packageLoader->load($pkgData));
         }
     }
     return $packageChanges;
 }