* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Fxp\Composer\AssetPlugin\Util; use Composer\IO\IOInterface; use Composer\Util\Perforce as BasePerforce; use Composer\Util\ProcessExecutor; /** * Helper for perforce driver. * * @author François Pluchino */ class Perforce extends BasePerforce { /** * @var string */ protected $filename; /** * @param array $repoConfig */ public function initialize($repoConfig) { parent::initialize($repoConfig); $this->filename = (string) $repoConfig['filename']; } /** * @param string $identifier * * @return array|string */ public function getComposerInformation($identifier) { $index = strpos($identifier, '@'); if ($index === false) { $composerJson = $identifier.'/'.$this->filename; return $this->getComposerInformationFromPath($composerJson); } return $this->getComposerInformationFromLabel($identifier, $index); } /** * @param string $identifier * @param string $index * * @return array|string */ public function getComposerInformationFromLabel($identifier, $index) { $composerJsonPath = substr($identifier, 0, $index).'/'.$this->filename.substr($identifier, $index); $command = $this->generateP4Command(' files '.$composerJsonPath, false); $this->executeCommand($command); $result = $this->commandResult; $index2 = strpos($result, 'no such file(s).'); if ($index2 === false) { $index3 = strpos($result, 'change'); if (!($index3 === false)) { $phrase = trim(substr($result, $index3)); $fields = explode(' ', $phrase); $id = $fields[1]; $composerJson = substr($identifier, 0, $index).'/'.$this->filename.'@'.$id; return $this->getComposerInformationFromPath($composerJson); } } return ''; } /** * Create perforce helper. * * @param array $repoConfig * @param int|string $port * @param string $path * @param ProcessExecutor $process * @param IOInterface $io * * @return Perforce */ public static function create($repoConfig, $port, $path, ProcessExecutor $process, IOInterface $io) { $isWindows = defined('PHP_WINDOWS_VERSION_BUILD'); $perforce = new self($repoConfig, $port, $path, $process, $isWindows, $io); return $perforce; } }