0523c96a944c56f1e336950169a04966ed20e53b
[m6w6/replicator] / bin / fetch
1 #!/usr/bin/php
2 <?php
3
4 ini_set("display_errors", 0);
5 ini_set("log_errors", 1);
6
7 use http\Url;
8 use http\Client;
9 use http\Client\Request;
10
11 $procs = [];
12 $client = new Client;
13 $client->setOptions([
14 "timetout" => 60,
15 "connecttimeout" => 6
16 ]);
17
18 while (!feof(STDIN)) {
19 if (strlen($url = rtrim(fgets(STDIN)))) {
20 $url = new Url($url, null, 0);
21 $ver = basename($url->path);
22 $pkg = basename(dirname($url->path));
23 $skp = sprintf("%s/../build/%s-%s.skip", __DIR__, $pkg, $ver);
24 $tgz = sprintf("%s/../build/%s-%s.tgz", __DIR__, $pkg, $ver);
25 $ext = sprintf("%s/../public/phars/%s/%s-%s.ext.phar", __DIR__, $pkg, $pkg, $ver);
26
27 if (is_file($skp)) {
28 // skip
29 } elseif (is_file($tgz) || is_file($ext)) {
30 printf("%s\t%s\t%s\n", $pkg, $ver, $tgz);
31 } else {
32 $client->enqueue(new Request("GET", $url), function($res) use($tgz, $pkg, $ver) {
33 $res->getBody()->toStream(fopen($tgz, "w"));
34 printf("%s\t%s\t%s\n", $pkg, $ver, $tgz);
35 return true;
36 });
37 }
38 }
39 }
40
41 while (count($client)) {
42 try {
43 $client->send();
44 } catch (Exception $e) {
45 error_log($e->getMessage());
46 }
47 }