Pipe improvements, misc cleanup
* Pipe improvements; better filter code, pipeline etc. * Moved commands in PDO plugin to dedicated namespace
This commit is contained in:
		@@ -4,6 +4,8 @@ namespace Spark\Commands;
 | 
			
		||||
 | 
			
		||||
use Symfony\Component\Console\Attribute\AsCommand;
 | 
			
		||||
use Spark\Commands\Command;
 | 
			
		||||
use Spark\Pipe\Filters\ProgressFilter;
 | 
			
		||||
use Spark\Pipe\Pipeline;
 | 
			
		||||
use Symfony\Component\Console\Input\InputArgument;
 | 
			
		||||
use Symfony\Component\Console\Input\InputInterface;
 | 
			
		||||
use Symfony\Component\Console\Input\InputOption;
 | 
			
		||||
@@ -17,9 +19,9 @@ class PipeCommand extends Command
 | 
			
		||||
    protected function configure()
 | 
			
		||||
    {
 | 
			
		||||
        $this->addOption("list-filters", null, InputOption::VALUE_NONE, "List the defined filters");
 | 
			
		||||
        $this->addOption("fdin", null, InputOption::VALUE_REQUIRED, "Input fd, for reading from", 0);
 | 
			
		||||
        $this->addOption("fdout", null, InputOption::VALUE_REQUIRED, "Output fd, for writing to", 1);
 | 
			
		||||
        $this->addOption("fderr", null, InputOption::VALUE_REQUIRED, "Error fd, for progress report and status", 2);
 | 
			
		||||
        $this->addOption("input", "i", InputOption::VALUE_REQUIRED, "Input file or fd, for reading from", 0);
 | 
			
		||||
        $this->addOption("output", "o", InputOption::VALUE_REQUIRED, "Output file or fd, for writing to", 1);
 | 
			
		||||
        $this->addOption("error", "e", InputOption::VALUE_REQUIRED, "Error file or fd, for progress report and status", 2);
 | 
			
		||||
        $this->addArgument("filter", InputArgument::OPTIONAL, "Pipe filter");
 | 
			
		||||
        $this->addArgument("args", InputArgument::OPTIONAL|InputArgument::IS_ARRAY, "Arguments to the script");
 | 
			
		||||
        $this->registerDefaultFilters();
 | 
			
		||||
@@ -35,6 +37,7 @@ class PipeCommand extends Command
 | 
			
		||||
            $hashed = password_hash($trimmed, PASSWORD_BCRYPT);
 | 
			
		||||
            return str_replace($trimmed, $hashed, $in);
 | 
			
		||||
        });
 | 
			
		||||
        register_filter("progress", ProgressFilter::class);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function execute(InputInterface $input, OutputInterface $output)
 | 
			
		||||
@@ -46,17 +49,44 @@ class PipeCommand extends Command
 | 
			
		||||
            return Command::SUCCESS;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $fdin = "php://fd/".$input->getOption("fdin");
 | 
			
		||||
        $fdout = "php://fd/".$input->getOption("fdout");
 | 
			
		||||
        $fderr = "php://fd/".$input->getOption("fderr");
 | 
			
		||||
        $fdin = $input->getOption("input");
 | 
			
		||||
        $fdout = $input->getOption("output");
 | 
			
		||||
        $fderr = $input->getOption("error");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        $filterargs = $input->getArgument('args');
 | 
			
		||||
        $args = [];
 | 
			
		||||
        foreach ($filterargs as $arg) {
 | 
			
		||||
            if (str_contains($arg, '=')) {
 | 
			
		||||
                [$k,$v] = explode("=", $arg, 2);
 | 
			
		||||
                $args[$k] = $v;
 | 
			
		||||
            } else {
 | 
			
		||||
                if (str_starts_with($arg, 'no-')) {
 | 
			
		||||
                    $args[substr($arg,3)] = false;
 | 
			
		||||
                } else {
 | 
			
		||||
                    $args[$arg] = true;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $filtername = $input->getArgument("filter");
 | 
			
		||||
        if ($filtername) {
 | 
			
		||||
            $filter = get_filter($filtername);
 | 
			
		||||
            $filter = get_filter($filtername, $args);
 | 
			
		||||
        } else {
 | 
			
		||||
            $filter = null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        $pipeline = new Pipeline();
 | 
			
		||||
        $pipeline->setInputFile($fdin);
 | 
			
		||||
        $pipeline->setOutputFile($fdout);
 | 
			
		||||
        if ($filter) {
 | 
			
		||||
            $pipeline->addFilter($filter);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        $pipeline->run();
 | 
			
		||||
 | 
			
		||||
        /*
 | 
			
		||||
        $fin = fopen($fdin, "rb");
 | 
			
		||||
        $fout = fopen($fdout, "wb");
 | 
			
		||||
        while (!feof($fin)) {
 | 
			
		||||
@@ -64,6 +94,7 @@ class PipeCommand extends Command
 | 
			
		||||
            if (is_callable($filter)) $buf = $filter($buf);
 | 
			
		||||
            fputs($fout, $buf);
 | 
			
		||||
        }
 | 
			
		||||
        */
 | 
			
		||||
 | 
			
		||||
        return Command::SUCCESS;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user