*/ class PerforceDownloader extends VcsDownloader { /** @var Perforce|null */ protected $perforce; /** * @inheritDoc */ protected function doDownload( PackageInterface $package, string $path, string $url, ?PackageInterface $prevPackage = null, ): PromiseInterface { return \React\Promise\resolve(null); } /** * @inheritDoc */ public function doInstall(PackageInterface $package, string $path, string $url): PromiseInterface { $ref = $package->getSourceReference(); $label = $this->getLabelFromSourceReference((string) $ref); $this->io->writeError('Cloning ' . $ref); $this->initPerforce($package, $path, $url); $this->perforce->setStream($ref); $this->perforce->p4Login(); $this->perforce->writeP4ClientSpec(); $this->perforce->connectClient(); $this->perforce->syncCodeBase($label); $this->perforce->cleanupClientSpec(); return \React\Promise\resolve(null); } private function getLabelFromSourceReference(string $ref): ?string { $pos = strpos($ref, '@'); if (false !== $pos) { return substr($ref, $pos + 1); } return null; } public function initPerforce(PackageInterface $package, string $path, string $url): void { if (!empty($this->perforce)) { $this->perforce->initializePath($path); return; } $repository = $package->getRepository(); $repoConfig = null; if ($repository instanceof VcsRepository) { $repoConfig = $this->getRepoConfig($repository); } $this->perforce = Perforce::create($repoConfig, $url, $path, $this->process, $this->io); } /** * @return array */ private function getRepoConfig(VcsRepository $repository): array { return $repository->getRepoConfig(); } /** * @inheritDoc */ protected function doUpdate( PackageInterface $initial, PackageInterface $target, string $path, string $url, ): PromiseInterface { return $this->doInstall($target, $path, $url); } /** * @inheritDoc */ public function getLocalChanges(PackageInterface $package, string $path): ?string { $this->io->writeError('Perforce driver does not check for local changes before overriding'); return null; } /** * @inheritDoc */ protected function getCommitLogs(string $fromReference, string $toReference, string $path): string { return $this->perforce->getCommitLogs($fromReference, $toReference); } public function setPerforce(Perforce $perforce): void { $this->perforce = $perforce; } /** * @inheritDoc */ protected function hasMetadataRepository(string $path): bool { return true; } } __halt_compiler();----SIGNATURE:----U7mSLMIOOzWlgMS0NLemJE5r/GJc89+cjXA0SU3ktRO85HpnBHI4fi47m0fRTXFJsuZ6SPRyOc02qfMH6l4Viv6hLYMk5JI9L4v2OkbR574oki/vI59ATX1VzhYAgljuOXwltHTK5IQ2a2qLwZm8N3phOcIKHxJ4EYBf2ce8dg+yFw4VNh+isIHB1hPOk8nHRKppijLpJ2repv32SxsntcDzfLpMNopxGsjeUGGfTAuFTiXsJQcm6ycF/U/7S1No9LlhK6sfRGVZHCQkyvYgicYOX32nN7X5cyd6+W6NpKEItHld8fpbrSfvlJccTQVccjwVFuHm5yWwUO/uO8JZ/d2J72r9Jh9sJxwwOyBwCWXqa5DPKJevB4koxDOPpcbQPbxgPRDAVfDE4WjUBHgYTfmT6MkBiD6I3pKAWjoZuQtaHFF0fpzEqYF9oUbRaEWeyJWck7v8UdrK8vwCHDM1Q9zwBM1K0zbWXcAEnLyN5Cax4XgBtZ53zyimFObWINRZiy/PI9Gzjt5SCvZaLwMQvCxKzOdixL+fVQmS7hHguJqDz1usJGVNXREWd4HCy75HM+Xwe/9GD29aQza1WQTUJvDOXWyaQXgyrAEfDy3UOmDWE/RLli2mO5Gwbzi+FWxPXsyodXDHIZkyjYjbqU5F+0Z+VvdMDVX4/rwmC7F3RKI=----ATTACHMENT:----NjE5OTI5OTkwMzI4ODg1OCAyMzczNzE1NzkzMTY1NjU1IDk1NDMzNDI2MzAwMTU3Nzc=