X-Git-Url: https://git.m6w6.name/?p=m6w6%2Freplicator;a=blobdiff_plain;f=bin%2Fpecl;h=ef215add671c24c72e7486423bb10ff559f1c64e;hp=d6d5e9e9f33564bbb2ac84c67dafc6b961a0628d;hb=4b2d3b750ceede9838bcf04040db6a7eacb253fe;hpb=4d0c5f64eda5d12198adb61845bc68e2e921d87a diff --git a/bin/pecl b/bin/pecl index d6d5e9e..ef215ad 100755 --- a/bin/pecl +++ b/bin/pecl @@ -1,14 +1,81 @@ -#!/usr/bin/php +#!/usr/bin/php -dphar.readonly=0 0; +}; + +function work($url, $dir) { + is_dir($dir) || mkdir($dir, 0777, true); + require_once __DIR__."/../vendor/autoload.php"; + $packager = new pharext\Packager; + $packager->run(5, [ + $_SERVER["argv"][0], + "-qps", + $url, + "-Zzd", + $dir + ]); +}; if (($sxe = simplexml_load_file("http://pecl.php.net/feeds/$what.rss"))) { foreach ($sxe->item as $item) { $url = (string) $item->link; - printf("%s\t%s\t%s\n", basename(dirname($url)), basename($url), $url); + $pkg = basename(dirname($url)); + $ver = basename($url); + $skp = sprintf("%s/../build/%s-%s.skip", __DIR__, $pkg, $ver); + $ext = sprintf("%s/../public/phars/%s/%s-%s.ext.phar", __DIR__, $pkg, $pkg, $ver); + $dir = dirname($ext); + + if (!is_file($skp) && !is_file($ext)) { + switch ($pid = pcntl_fork()) { + case -1: + exit; + case 0: + work($url, $dir); + exit; + default: + $pids[$pid] = compact("url", "pkg", "ver", "skp", "ext", "dir"); + break; + } + } + + if (count($pids) > 5) { + wait($pids); + } } + while (wait($pids)) + ; + } + +