com web/rmtools: more refactoring for core snap scripts: include/Branch.php script/snap.php
| From: | Anatol Belski | Date: | Mon, 12 Dec 2016 11:07:24 +0000 |
| Subject: | com web/rmtools: more refactoring for core snap scripts: include/Branch.php script/snap.php | ||
| Groups: | php.webmaster | ||
| Request: | Send a blank email to php-webmaster+get-25879@lists.php.net to get a copy of this message | ||
Commit: 59cb95745c74df2cafb2fba72d7ce6db677db37a
Author: Anatol Belski <ab@php.net> Mon, 12 Dec 2016 12:07:24 +0100
Parents: 68598445eb4e7050c66d4cb690ac3f90fd056c91
Branches: master
Link: http://git.php.net/?p=web/rmtools.git;a=commitdiff;h=59cb95745c74df2cafb2fba72d7ce6db677db37a
Log:
more refactoring for core snap scripts
Changed paths:
M include/Branch.php
M script/snap.php
Diff:
diff --git a/include/Branch.php b/include/Branch.php
index 506a430..b0a754f 100644
--- a/include/Branch.php
+++ b/include/Branch.php
@@ -12,7 +12,6 @@ class Branch {
private $repo;
public $db_path;
public $data = NULL;
- private $required_build_runs = 2;
public function __construct($config_path)
{
@@ -26,11 +25,6 @@ class Branch {
$this->db_path = __DIR__ . '/../data/db/' .. $this->config->getName() .
'.json';
$this->data = $this->readdata();
- /*if ($this->requiredBuldRunsReached()) {
- $this->data->build_run = 0;
- }*/
-
- $this->addBuildList();
}
protected function readData()
@@ -42,7 +36,6 @@ class Branch {
$data->revision_last = NULL;
$data->revision_previous = NULL;
$data->revision_last_exported = NULL;
- $data->build_run = 0;
}
return $data;
@@ -51,7 +44,7 @@ class Branch {
protected function writeData()
{
$json = json_encode($this->data, JSON_PRETTY_PRINT);
- return file_put_contents($this->db_path, $json);
+ return file_put_contents($this->db_path, $json, LOCK_EX);
}
private function addBuildList()
@@ -59,12 +52,14 @@ class Branch {
$builds = $this->config->getBuildList();
if (!empty($builds)) {
- $this->data->builds = array();
foreach ($builds as $n => $v) {
+ if (in_array($n, $this->data->builds) && $this->hasUnfinishedBuild()) {
+ throw new \Exception("Builds for '$n' are already done or in progress");
+ }
$this->data->builds[] = $n;
}
} else {
- $this->data->builds = NULL;
+ throw new \Exception("No build configuration");
}
}
@@ -73,19 +68,20 @@ class Branch {
$last_id = $this->repo->getLastCommitId();
if (!$last_id) {
- // XXX throw here
- echo "last revision id is empty\n";
- return false;
+ throw new \Exception("last revision id is empty");
}
-
- if ($this->data->build_run > 0 && $this->hasUnfinishedBuild()) {
- $this->data->build_run++;
- } else if ($this->hasNewRevision()) {
+
+ if ($this->requiredBuildRunsReached() && $this->hasNewRevision()) {
$this->data->revision_previous = $this->data->revision_last;
$this->data->revision_last = $last_id;
- $this->data->build_run = 1;
- } else {
- return false;
+ }
+
+ if ($this->requiredBuildRunsReached()) {
+ $this->data->builds = array();
+ }
+
+ if ($this->hasUnfinishedBuild()) {
+ $this->addBuildList();
}
$this->writeData();
@@ -95,17 +91,19 @@ class Branch {
public function hasUnfinishedBuild()
{
- $exported = $this->getLastRevisionExported();
- $last = $this->getLastRevisionId();
-
- return !$this->requiredBuldRunsReached() || substr_compare($last, $exported, 0,
strlen($exported)) != 0;
+ return !$this->requiredBuildRunsReached() || $this->hasNewRevision();
}
- public function requiredBuldRunsReached()
+ public function requiredBuildRunsReached()
{
- return $this->data->build_run >= $this->required_build_runs;
+ /* XXX 4 stands for all the combinations, scan the files to get this number from there instead of
hardcoding. */
+ if (!$this->data->builds || empty($this->data->builds)) {
+ return true;
+ }
+
+ return count($this->data->builds) == 4;
}
-
+
public function hasNewRevision()
{
$last = $this->repo->getLastCommitId();
@@ -161,7 +159,7 @@ class Branch {
{
/* Basically, we need two runs for x64 and x86, every run covers ts and nts.
Only set the revision exported, if we're on last required build run. */
- if ($this->requiredBuldRunsReached()) {
+ if ($this->requiredBuildRunsReached()) {
$this->data->revision_last_exported = $last_rev;
$this->writeData();
}
@@ -194,6 +192,8 @@ class Branch {
function getBuildList($platform)
{
+ /* XXX this might need to be changed, if the builds have to be done single at run. Then
it'll
+ need to check the thread safety argument as well. */
$builds = array();
foreach ($this->data->builds as $build_name) {
$build = $this->config->getBuildFromName($build_name);
@@ -214,6 +214,7 @@ class Branch {
$compiler = strtolower($build['compiler']);
switch ($compiler) {
+ /* XXX scan the configs for compatible compiler list*/
case 'vc14':
case 'vc12':
case 'vc11':
diff --git a/script/snap.php b/script/snap.php
index 69f2343..0f9a834 100644
--- a/script/snap.php
+++ b/script/snap.php
@@ -20,7 +20,13 @@ if (!$sdk_arch) {
}
$config_path = __DIR__ . '/../data/config/branch/' . $sdk_arch . '/' .
$branch_name . '.ini';
-$branch = new rm\Branch($config_path);
+$err_msg = NULL;
+try {
+ $branch = new rm\Branch($config_path);
+} catch (\Exception $e) {
+ $err_msg = $e->getMessage();
+ goto out_here;
+}
$branch_name = $branch->config->getName();
$branch_name_short = $branch->config->getBranch();
@@ -41,7 +47,12 @@ for ($i = 0; $i < count($builds_top) && ($force ||
$branch->hasNewRevision()); $
continue;
}*/
- if (!$branch->update()) {
+ try {
+ if (!$branch->update()) {
+ goto out_here;
+ }
+ } catch (\Exception $e) {
+ $err_msg = $e->getMessage();
goto out_here;
}
@@ -218,24 +229,32 @@ for ($i = 0; $i < count($builds_top) && ($force ||
$branch->hasNewRevision()); $
rmdir($build_src_path);
}
- $src_dir = $branch_name . '/r' . $last_rev;
- rm\upload_build_result_ftp_curl($toupload_dir, $src_dir);
+ /* Only upload once, and then cleanup. */
+ if ($branch->requiredBuildRunsReached()) {
+ $src_dir = $branch_name . '/r' . $last_rev;
+ rm\upload_build_result_ftp_curl($toupload_dir, $src_dir);
+ rm\rmdir_rf($toupload_dir);
+ }
$branch->setLastRevisionExported($last_rev);
}
out_here:
-if (!$have_build_run) {
+if ($err_msg) {
+ echo "$err_msg\n";
+} else if (!$have_build_run) {
echo "no new revision.\n";
}
-/*Upload the branch DB */
-$try = 0;
-do {
- $status = rm\upload_file_curl($branch->db_path, $branch_name . '/' .
basename($branch->db_path));
- $try++;
-} while ( $status === false && $try < 10 );
+if ($have_build_run) {
+ /*Upload the branch DB */
+ $try = 0;
+ do {
+ $status = rm\upload_file_curl($branch->db_path, $branch_name . '/' .
basename($branch->db_path));
+ $try++;
+ } while ( $status === false && $try < 10 );
+}
//if ($has_build_errors) {
// rm\send_error_notification($branch_name, $build_errors, $branch->getPreviousRevision(),
$last_rev, 'http://windows.php.net/downloads/snaps/'
. $branch_name . '/r' . $last_rev);