com web/rmtools: implementation cleanups and jobs creation implementation: client/include/PickleDb.php client/include/PickleJob.php
client/include/PickleWeb.php client/script/pickle_ctl.php
| From: | Anatol Belski | Date: | Tue, 12 May 2015 14:15:35 +0000 |
| Subject: | com web/rmtools: implementation cleanups and jobs creation implementation: client/include/PickleDb.php client/include/PickleJob.php client/include/PickleWeb.php client/script/pickle_ctl.php |
||
| Groups: | php.webmaster | ||
| Request: | Send a blank email to php-webmaster+get-25974@lists.php.net to get a copy of this message | ||
Commit: 0d9375dff4ce3313c6e90a78ebfc5ad79b3c5f57
Author: Anatol Belski <ab@php.net> Tue, 12 May 2015 16:15:35 +0200
Parents: 33efad48308cdc8c9e92449557bca3b60001e945
Branches: master pecl_legacy
Link: http://git.php.net/?p=web/rmtools.git;a=commitdiff;h=0d9375dff4ce3313c6e90a78ebfc5ad79b3c5f57
Log:
implementation cleanups and jobs creation implementation
Changed paths:
M client/include/PickleDb.php
M client/include/PickleJob.php
M client/include/PickleWeb.php
M client/script/pickle_ctl.php
Diff:
diff --git a/client/include/PickleDb.php b/client/include/PickleDb.php
index 59c9358..b30b03b 100644
--- a/client/include/PickleDb.php
+++ b/client/include/PickleDb.php
@@ -59,7 +59,7 @@ class PickleDb extends \SQLite3
$this->createDir($dir);
}
- return strlen($data) == file_put_contents($fname, $data);
+ return strlen($data) == file_put_contents($fname, $data, LOCK_EX);
}
public function getUriJson($uri)
diff --git a/client/include/PickleJob.php b/client/include/PickleJob.php
index 506fcac..3b2b328 100644
--- a/client/include/PickleJob.php
+++ b/client/include/PickleJob.php
@@ -16,16 +16,30 @@ class PickleJob
$this->job_dir = $job_dir;
}
- public function add($sha, $name, $uri)
+ public function add(array $tag)
{
- $fn = "{$this->job_dir}/$sha.job";
+ if (!isset($tag["support"]["source"])) {
+ throw new \Exception("Tag source location isn't set, no jub created for
'$tag[name]-$tag[version]'");
+ }
+
$data = array(
- "name" => $name,
- "hash" => $sha,
- "uri" => $uri,
+ "name" => $tag["name"],
+ "version" => $tag["version"],
+ "src" => $tag["support"]["source"],
"status" => "new",
);
+ $tmp = tempnam($this->job_dir, $tag["name"]);
+ if (false === $tmp) {
+ throw new \Exception("Failed to create temporary job file");
+ }
+
+ $fn = "$tmp.job";
+
+ if (!rename($tmp, $fn)) {
+ throw new \Exception("Failed to create job file");
+ }
+
$this->save($fn, $data);
}
@@ -33,7 +47,7 @@ class PickleJob
{
$json = json_encode($data, JSON_PRETTY_PRINT);
- if (strlen($json) != file_put_contents($fn, $json)) {
+ if (strlen($json) != file_put_contents($fn, $json, LOCK_EX)) {
throw new \Exception("Error while writing data to '$fn'");
}
}
diff --git a/client/include/PickleWeb..php b/client/include/PickleWeb.php
index b9217a7..2eace71 100644
--- a/client/include/PickleWeb.php
+++ b/client/include/PickleWeb.php
@@ -142,6 +142,17 @@ class PickleWeb
return true;
}
+ protected function isValidTag(array $tag)
+ {
+ /* XXX raise some errors on this, or be more verbose at least ??? */
+ return isset($tag["name"]) &&
+ !empty($tag["name"]) &&
+ isset($tag["version"]) &&
+ !empty($tag["version"]) &&
+ isset($tag["support"]["source"]) &&
+ !empty($tag["support"]["source"]) /* XXX might check at least the URL format
*/;
+ }
+
public function diffTags(array $remote, array $local)
{
$ret = array();
@@ -151,6 +162,9 @@ class PickleWeb
} else if (empty($local) || !isset($local["packages"])) {
foreach ($remote["packages"] as $name => $tags) {
foreach ($tags as $version => $data) {
+ if (preg_match(",master,", $version) || !$this->isValidTag($data)) {
+ continue;
+ }
/* $version is from the tag name, be strict and use the oone from the actual tag data*/
if ($this->isUniqueTag($name, $data["version"], $ret)) {
$ret[] = $data;
@@ -168,6 +182,9 @@ class PickleWeb
}
foreach ($tags as $version => $data) {
+ if (preg_match(",master,", $version) || !$this->isValidTag($data)) {
+ continue;
+ }
if (!isset($local["packages"][$name][$version]) &&
$this->isUniqueTag($name, $data["version"], $ret)) {
$ret[] = $data;
}
diff --git a/client/script/pickle_ctl.php b/client/script/pickle_ctl.php
index 1a27a8c..7040eab 100644
--- a/client/script/pickle_ctl.php
+++ b/client/script/pickle_ctl.php
@@ -34,12 +34,13 @@ if ($_SERVER['argc'] <= 1 || $help_cmd) {
if ($sync_cmd) {
- $jobs = new rm\PickleJob($job_dir);
-
- /* XXX handle the finished jobs first. */
try {
+ $aa = new rm\PickleJob($job_dir);
+ /* XXX handle the finished jobs first. */
+ // $aa->cleanup();
+
$pw = new rm\PickleWeb($sync_host, new rm\PickleDb($db_dir));
if (!$pw->updatesAvailable()) {
@@ -48,13 +49,15 @@ if ($sync_cmd) {
}
$news = (array)$pw->getNewTags();
+
+ foreach ($news as $job) {
+ $aa->add($job);
+ }
} catch (Exception $e) {
echo $e->getMessage() . "\n";
exit(3);
}
- var_dump($news);
-
}