diff options
Diffstat (limited to 'src/phorkie/SetupCheck.php')
| -rw-r--r-- | src/phorkie/SetupCheck.php | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/phorkie/SetupCheck.php b/src/phorkie/SetupCheck.php new file mode 100644 index 0000000..959ff42 --- /dev/null +++ b/src/phorkie/SetupCheck.php @@ -0,0 +1,58 @@ +<?php +namespace phorkie; + +class SetupCheck +{ + protected $deps = array( + 'pear.php.net/VersionControl_Git' => 'VersionControl_Git', + 'pear.twig-project.org/Twig' => 'Twig_Autoloader', + 'pear.php.net/Date_HumanDiff' => 'Date_HumanDiff', + ); + + protected $writableDirs; + + + public function __construct() + { + $cfg = $GLOBALS['phorkie']['cfg']; + $this->writableDirs = array( + 'gitdir' => $cfg['gitdir'], + 'workdir' => $cfg['workdir'], + ); + } + + public static function run() + { + $sc = new self(); + $sc->checkDeps(); + $sc->checkDirs(); + } + + public function checkDeps() + { + foreach ($this->deps as $package => $class) { + if (!class_exists($class, true)) { + $this->fail('PEAR package not installed: ' . $package); + } + } + } + + public function checkDirs() + { + foreach ($this->writableDirs as $name => $dir) { + if (!is_dir($dir)) { + $this->fail($name . ' directory does not exist at ' . $dir); + } + if (!is_writable($dir)) { + $this->fail($name . ' directory is not writable at ' . $dir); + } + } + } + + public function fail($msg) + { + throw new Exception($msg); + } +} + +?> |
