带有git clone的Symfony Process Progressbar

时间:2018-10-18 11:28:12

标签: php git symfony symfony-process

我正在使用Symfonie的Process组件,正在运行git clone命令,并希望显示它的进度条 到目前为止,我已经做到了:

protected function cloneRepo(String $name)
{
    $process = new Process(
        "git clone {$this->getGitUrl(true)} {$name}" // does clone the repo works
    );

    $output = new ConsoleOutput();
    // creates a new progress bar (100 units)
    $progressBar = new ProgressBar($output, 100);

    $process->run();
    // starts and displays the progress bar
    $progressBar->start();

    $files = array_filter(explode("\n", $process->getOutput()), 'strlen');

    for ($i = 0; $i < count($files); $i++) {
        $progressBar->advance();
    }

    // ensures that the progress bar is at 100%
    $progressBar->finish();

    // executes after the command finishes
    if (!$process->isSuccessful()) {
        throw new ProcessFailedException($process);
    }

    echo $process->getOutput();
}

但这只显示克隆完成后的进度条

1 个答案:

答案 0 :(得分:0)

我认为没有一种简单的方法可以绘制进度条,因为据我所知,没有办法知道处理了多少数据。一般来说,您可以启动该过程,然后在streams.home[index]中使用回调来尝试获取当前输出并从中计算进度。因此您的代码可能看起来像这样。您仍然需要用实际的逻辑替换TODO以确定要提前多少。

wait()