use pharext\Cli\Args as CliArgs;
-require_once "pharext/Version.php";
+use Phar;
+
+if (!function_exists("array_column")) {
+ function array_column(array $array, $col, $idx = null) {
+ $result = [];
+ foreach ($array as $el) {
+ if (isset($idx)) {
+ $result[$el[$idx]] = $el[$col];
+ } else {
+ $result[] = $el[$col];
+ }
+ }
+ return $result;
+ }
+}
trait Command
{
return $this->args;
}
+ /**
+ * Retrieve metadata of the currently running phar
+ * @param string $key
+ * @return mixed
+ */
+ public function metadata($key = null) {
+ $running = new Phar(Phar::running(false));
+
+ if ($key === "signature") {
+ $sig = $running->getSignature();
+ return sprintf("%s signature of %s\n%s",
+ $sig["hash_type"],
+ $this->metadata("name"),
+ chunk_split($sig["hash"], 64, "\n"));
+ }
+
+ $metadata = $running->getMetadata();
+ if (isset($key)) {
+ return $metadata[$key];
+ }
+ return $metadata;
+ }
+
/**
* Output pharext vX.Y.Z header
*/
- function header() {
- printf("pharext v%s (c) Michael Wallner <mike@php.net>\n\n",
- \pharext\VERSION);
+ public function header() {
+ if (!headers_sent()) {
+ /* only display header, if we didn't generate any output yet */
+ printf("%s\n\n", $this->metadata("header"));
+ }
}
/**
/**
* @inheritdoc
- * @see \pharext\Command::error()
+ * @see \pharext\Command::warn()
*/
- public function error($fmt) {
+ public function warn($fmt) {
if (!$this->args->quiet) {
if (!isset($fmt)) {
$fmt = "%s\n";
} else {
$arg = array_slice(func_get_args(), 1);
}
- vfprintf(STDERR, "ERROR: $fmt", $arg);
+ vfprintf(STDERR, "Warning: $fmt", $arg);
+ }
+ }
+
+ /**
+ * @inheritdoc
+ * @see \pharext\Command::error()
+ */
+ public function error($fmt) {
+ if (!isset($fmt)) {
+ $fmt = "%s\n";
+ $arg = error_get_last()["message"];
+ } else {
+ $arg = array_slice(func_get_args(), 1);
}
+ vfprintf(STDERR, "ERROR: $fmt", $arg);
}
/**
}
/**
- * rm -r
- * @param string $dir
+ * Verbosity
+ * @return boolean
*/
- private function rm($dir) {
- foreach (scandir($dir) as $entry) {
- if ($entry === "." || $entry === "..") {
- continue;
- } elseif (is_dir("$dir/$entry")) {
- $this->rm("$dir/$entry");
- } elseif (!unlink("$dir/$entry")) {
- $this->error(null);
- }
- }
- if (!rmdir($dir)) {
- $this->error(null);
+ public function verbosity() {
+ if ($this->args->verbose) {
+ return true;
+ } elseif ($this->args->quiet) {
+ return false;
+ } else {
+ return null;
}
}
}