#!/usr/bin/env php
<?php declare(strict_types=1);
namespace Jawira\PhingVisualizer;
use Exception;
use Jawira\MiniGetopt\MiniGetopt;
use Throwable;
/**
* Finds and loads autoload file
*
* @see https://www.tomasvotruba.cz/blog/2018/08/02/5-gotchas-of-the-bin-file-in-php-cli-applications/
* @return void
* @throws \Exception
*/
function loadAutoload(): void
{
$candidates = [
__DIR__ . '/../vendor/autoload.php', // production
__DIR__ . '/../../../autoload.php', // development
];
$eureka = false;
foreach ($candidates as $c) {
if (file_exists($c)) {
/** @noinspection PhpIncludeInspection */
require_once $c;
$eureka = true;
break;
}
}
if (!$eureka) {
throw new Exception("autoload.php not found; try 'composer dump-autoload' first.");
}
}
/**
* Run cli command to generate Phing diagrams
*
* @throws \Jawira\PhingVisualizer\DiagramException
* @throws \Exception
*/
function runPhingVisualizer(): void
{
$mg = new MiniGetopt();
$mg->addRequired('i', 'input');
$mg->addRequired('o', 'output');
$mg->addRequired('f', 'format');
$mg->addNoValue('h', 'help');
$input = $mg->getOption('i', 'input', Diagram::BUILDFILE_DEFAULT);
$output = $mg->getOption('o', 'output');
$format = $mg->getOption('f', 'format', Diagram::FORMAT_PNG);
$help = $mg->getOption('h', 'help');
if (false === $help) {
help();
exit(0);
}
$diagram = new Diagram($input);
$diagram->save($format, $output);
}
/**
* Show binary help
*/
function help(): void
{
echo <<<'HELP'
NAME
phing-visualizer - visualize Phing's buildfile
SYNOPSIS
phing-visualizer [-i <buildfile>] [-f <png|svg|puml|eps>] [-o <path>]
DESCRIPTION
With phing-visualizer you can generate a diagram that
represents Phing's targets, calls, and dependencies.
OPTIONS
-i, --input <buildfile>
The buildfile location. It could be an absolute or
relative path.
-f, --format <png|svg|puml|eps>
The format of the diagram to generate.
-o, --output <path>
The location for the diagram to be generated, it could
be a filepath or dirpath. It defaults to same location
as --input.
-h, --help
Shows this message.
EXAMPLES
$ phing-visualizer
$ phing-visualizer -i build.xml -f png -o images/
$ phing-visualizer --input /projects/build.xml --format svg
AUTHOR
Jawira Portugal
HELP;
}
/**
* Main function
*/
function main(): void
{
try {
loadAutoload();
runPhingVisualizer();
} catch (Throwable $th) {
exit('? ' . $th->getMessage() . PHP_EOL);
}
}
main();
|