Commit: 33efad48308cdc8c9e92449557bca3b60001e945 Author: Anatol Belski <[email protected]> Tue, 12 May 2015 15:22:28 +0200 Parents: 5c6479d2383365ecff2d97f82ee632de196f3757 Branches: master pecl_legacy
Link: http://git.php.net/?p=web/rmtools.git;a=commitdiff;h=33efad48308cdc8c9e92449557bca3b60001e945 Log: simplify data structs, give flat arrays for tags and providers all the necessary data is contained in a tag array itself, so there's no real need to return the 1:1 data fro mjson Changed paths: M client/include/PickleDb.php M client/include/PickleWeb.php Diff: diff --git a/client/include/PickleDb.php b/client/include/PickleDb.php index 600cd01..59c9358 100644 --- a/client/include/PickleDb.php +++ b/client/include/PickleDb.php @@ -45,7 +45,7 @@ class PickleDb extends \SQLite3 public function saveUriJson($uri, $data) { - $json = json_encode($data); + $json = json_encode($data, JSON_PRETTY_PRINT); return $this->saveUri($uri, $json); } diff --git a/client/include/PickleWeb.php b/client/include/PickleWeb.php index a6b0ca6..b9217a7 100644 --- a/client/include/PickleWeb.php +++ b/client/include/PickleWeb.php @@ -98,10 +98,10 @@ class PickleWeb { $ret = array(); - if (empty($remote)) { + if (!isset($remote["providers"]) || !is_array($remote["providers"]) || empty($remote["providers"])) { return array(); - } else if (empty($local)) { - return $remote; + } else if (!isset($llocal["providers"]) || !is_array($local["providers"]) || empty($local["providers"])) { + return $remote["providers"]; } foreach ($remote as $vendor => $sha) { @@ -118,42 +118,59 @@ class PickleWeb $ret = array(); foreach ($this->info["provider-includes"] as $uri => $hash) { - $pkgs_new = $this->fetchUriJson($uri); - if (!is_array($pkgs_new) || !isset($pkgs_new["providers"]) || !is_array($pkgs_new["providers"]) || empty($pkgs_new["providers"])) { - continue; - } - - $pkgs = $this->db->getUriJson($uri); - if (!is_array($pkgs) || !isset($pkgs["providers"]) || !is_array($pkgs["providers"]) || empty($pkgs["providers"])) { - /* local doesn't exist, just take the remote version*/ - $this->db->saveUriJson($uri, $pkgs_new); - $ret = array_merge($ret, $pkgs_new["providers"]); - continue; - } + $pkgs_new = (array)$this->fetchUriJson($uri); + $pkgs = (array)$this->db->getUriJson($uri); if (!$this->db->saveUriJson($uri, $pkgs_new)) { throw new \Exception("Failed to save '$uri'"); } - $ret = array_merge($ret, $this->diffProviders($pkgs_new["providers"], $pkgs["providers"])); + $ret = array_merge($ret, $this->diffProviders($pkgs_new, $pkgs)); } return $ret; } + protected function isUniqueTag($name, $version, array $tags) + { + foreach ($tags as $tag) { + if ($tag["name"] == $name && $tag["version"] == $version) { + return false; + } + } + + return true; + } + public function diffTags(array $remote, array $local) { $ret = array(); - if (empty($remote)) { + if (empty($remote) || !isset($remote["packages"])) { return array(); - } else if (empty($local)) { - return $remote; + } else if (empty($local) || !isset($local["packages"])) { + foreach ($remote["packages"] as $name => $tags) { + foreach ($tags as $version => $data) { + /* $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; + } + } + } + + return $ret; } - foreach ($remote as $tag => $data) { - if (!isset($local[$tag])) { - $ret[$tag] = $data; + foreach ($remote["packages"] as $name => $tags) { + if (!isset($local["packages"][$name])) { + $ret[$name] = $data; + break; + } + + foreach ($tags as $version => $data) { + if (!isset($local["packages"][$name][$version]) && $this->isUniqueTag($name, $data["version"], $ret)) { + $ret[] = $data; + } } } -- PHP Webmaster List Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
