c55e785d1f0530d8e5d287f3caa5c7028801445d
[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 "redirect" => 1,
16 "connecttimeout" => 6
17 ]);
18
19 while (!feof(STDIN)) {
20 if (strlen($line = rtrim(fgets(STDIN)))) {
21 if (list($pkg, $ver, $url) = explode("\t", $line)) {
22 $url = new Url($url, null, 0);
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
42 while (count($client)) {
43 try {
44 $client->send();
45 } catch (Exception $e) {
46 error_log($e->getMessage());
47 }
48 }