Changeset View
Changeset View
Standalone View
Standalone View
src/filesystem/binary/PhutilBinaryAnalyzer.php
- This file was added.
<?php | |||||
abstract class PhutilBinaryAnalyzer | |||||
extends Phobject { | |||||
public function getBinaryName() { | |||||
return $this->getBinaryKey(); | |||||
} | |||||
public function getBinaryKey() { | |||||
return $this->getPhobjectClassConstant('BINARY'); | |||||
} | |||||
public function isBinaryAvailable() { | |||||
return Filesystem::binaryExists($this->getBinaryName()); | |||||
} | |||||
abstract protected function newBinaryVersion(); | |||||
protected function newBinaryPath() { | |||||
return Filesystem::resolveBinary($this->getBinaryName()); | |||||
} | |||||
final public function getBinaryVersion() { | |||||
return $this->newBinaryVersion(); | |||||
} | |||||
final public function requireBinaryVersion() { | |||||
$version = $this->getBinaryVersion(); | |||||
if ($version === null) { | |||||
throw new Exception( | |||||
pht( | |||||
'Unable to determine the installed version of binary "%s". This '. | |||||
'version is required.')); | |||||
} | |||||
return $version; | |||||
} | |||||
final public function getBinaryPath() { | |||||
return $this->newBinaryPath(); | |||||
} | |||||
final public static function getAllBinaries() { | |||||
return id(new PhutilClassMapQuery()) | |||||
->setAncestorClass(__CLASS__) | |||||
->setUniqueMethod('getBinaryKey') | |||||
->setSortMethod('getBinaryName') | |||||
->execute(); | |||||
} | |||||
final public static function getForBinary($binary) { | |||||
$map = self::getAllBinaries(); | |||||
$analyzer = idx($map, $binary); | |||||
if (!$analyzer) { | |||||
throw new Exception( | |||||
pht( | |||||
'No analyzer is available for binary "%s".', | |||||
$binary)); | |||||
} | |||||
return $analyzer; | |||||
} | |||||
} |