ca90de27da8d273c82ebabc488a24e45eb5196bb
[m6w6/replicator] / bin / package
1 #!/usr/bin/php
2 <?php
3
4 ini_set("display_errors", 0);
5 ini_set("log_errors", 1);
6
7 $procs = [];
8
9 function check(&$procs) {
10 foreach ($procs as $dir => list($prc, $fds, $pkg, $src, $dst)) {
11 $status = proc_get_status($prc);
12 if (!$status["running"]) {
13 array_map("fclose", $fds);
14 proc_close($prc);
15 if ($status["exitcode"] || !is_file("$dst/$dir.ext.phar")) {
16 touch("$src.skip");
17 } else {
18 printf("%s\t%s.ext.phar\n", $pkg, $dir);
19 }
20 system("rm -r $src.tgz $src");
21 unset($procs[$dir]);
22 }
23 }
24 return count($procs);
25 }
26
27 while (!feof(STDIN)) {
28 if (strlen($line = rtrim(fgets(STDIN)))) {
29 if (list($pkg, $dir) = explode("\t", $line)) {
30 $src = __DIR__."/../build/$dir";
31 $dst = __DIR__."/../public/phars/$pkg";
32
33 if (!is_dir($dst) && !mkdir($dst, 0777, true)) {
34 continue;
35 }
36
37 $prc = proc_open(__DIR__."/../vendor/bin/pharext -qps $src -zZd $dst 2>&1", [
38 ["pipe","r"],STDERR
39 ], $fds
40 );
41 $procs[$dir] = [$prc, $fds, $pkg, $src, $dst];
42 check($procs);
43 }
44 }
45 }
46
47 while (check($procs)) {
48 usleep(1000);
49 }