Using getopt for CLI arguments (#5446)
authorPhilipp <admin+Github@philipp.info>
Mon, 23 Jul 2018 11:40:52 +0000 (13:40 +0200)
committerHypolite Petovan <mrpetovan@eml.cc>
Mon, 23 Jul 2018 11:40:52 +0000 (07:40 -0400)
* Adding Argument class to Friendica

* Adding Argument class to Friendica

* Adding Argument class to Friendica

* fixing arguments for `spawnWorker`

* Adding `use Friendica\BaseObject` to `ApiTest.php`

* Refactoring the argument-usages of Friendica

* Refactoring the argument-usages of Friendica

* removing superfluous []

bin/daemon.php
bin/worker.php
src/App.php
src/Core/Worker.php
tests/ApiTest.php

index 449f92d..bf82912 100755 (executable)
@@ -12,6 +12,12 @@ use Friendica\Core\Config;
 use Friendica\Core\Worker;
 use Friendica\Database\DBA;
 
+// Get options
+$shortopts  = '';
+$shortopts .= 'f';
+$longopts = [ 'foreground' ];
+$options = getopt($shortopts, $longopts);
+
 // Ensure that daemon.php is executed from the base path of the installation
 if (!file_exists("boot.php") && (sizeof($_SERVER["argv"]) != 0)) {
        $directory = dirname($_SERVER["argv"][0]);
@@ -55,7 +61,7 @@ if (in_array("status", $_SERVER["argv"])) {
        $mode = "status";
 }
 
-$foreground = in_array("--foreground", $_SERVER["argv"]);
+$foreground = array_key_exists('f', $options) || array_key_exists('foreground', $options);
 
 if (!isset($mode)) {
        die("Please use either 'start', 'stop' or 'status'.\n");
index 2abfa0a..0f8dd98 100755 (executable)
@@ -6,11 +6,16 @@
  */
 
 use Friendica\App;
-use Friendica\BaseObject;
 use Friendica\Core\Addon;
 use Friendica\Core\Config;
 use Friendica\Core\Worker;
 
+// Get options
+$shortopts  = '';
+$shortopts .= 'sc';
+$longopts = [ 'spawn', 'cron' ];
+$options = getopt($shortopts, $longopts);
+
 // Ensure that worker.php is executed from the base path of the installation
 if (!file_exists("boot.php") && (sizeof($_SERVER["argv"]) != 0)) {
        $directory = dirname($_SERVER["argv"][0]);
@@ -41,14 +46,14 @@ $a->set_baseurl(Config::get('system', 'url'));
 
 Addon::loadHooks();
 
-$spawn = (($_SERVER["argc"] == 2) && ($_SERVER["argv"][1] == "spawn"));
+$spawn = array_key_exists('s', $options) || array_key_exists('spawn', $options);
 
 if ($spawn) {
        Worker::spawnWorker();
        killme();
 }
 
-$run_cron = (($_SERVER["argc"] <= 1) || ($_SERVER["argv"][1] != "no_cron"));
+$run_cron = array_key_exists('c', $options) || array_key_exists('cron', $options);
 
 Worker::processQueue($run_cron);
 
index 1e24c32..66bec51 100644 (file)
@@ -1116,19 +1116,32 @@ class App
                return false;
        }
 
-       public function proc_run($args)
+       /**
+        * Executes a child process with 'proc_open'
+        *
+        * @param string $command The command to execute
+        * @param array  $args    Arguments to pass to the command ( [ 'key' => value, 'key2' => value2, ... ]
+        */
+       public function proc_run($command, $args)
        {
                if (!function_exists('proc_open')) {
                        return;
                }
 
-               array_unshift($args, $this->getConfigValue('config', 'php_path', 'php'));
+               $cmdline = $this->getConfigValue('config', 'php_path', 'php') . $command;
 
-               for ($x = 0; $x < count($args); $x ++) {
-                       $args[$x] = escapeshellarg($args[$x]);
+               foreach ($args as $key => $value) {
+                       if (!is_null($value) && is_bool($value) && !$value) {
+                               continue;
+                       }
+
+                       $cmdline .= ' --' . $key;
+                       if (!is_null($value) && !is_bool($value)) {
+                               $cmdline .= ' ' . $value;
+                       }
                }
 
-               $cmdline = implode(' ', $args);
+               $cmdline = escapeshellarg($cmdline);
 
                if ($this->min_memory_reached()) {
                        return;
index 633b8e1..bbcda7d 100644 (file)
@@ -1010,13 +1010,11 @@ class Worker
         */
        public static function spawnWorker($do_cron = false)
        {
-               $args = ["bin/worker.php"];
+               $command = 'bin/worker.php';
 
-               if (!$do_cron) {
-                       $args[] = "no_cron";
-               }
+               $args = [ 'cron' => $do_cron ];
 
-               get_app()->proc_run($args);
+               get_app()->proc_run($command, $args);
 
                // after spawning we have to remove the flag.
                if (Config::get('system', 'worker_daemon_mode', false)) {
index 4d19994..a3e1ced 100644 (file)
@@ -5,6 +5,7 @@
 
 namespace Friendica\Test;
 
+use Friendica\BaseObject;
 use Friendica\Core\Config;
 use Friendica\Core\PConfig;
 use Friendica\Core\Protocol;
@@ -28,7 +29,7 @@ class ApiTest extends DatabaseTest
                parent::setUp();
 
                // Reusable App object
-               $this->app = \Friendica\BaseObject::getApp();
+               $this->app = BaseObject::getApp();
 
                // User data that the test database is populated with
                $this->selfUser = [