com web/rmtools: Parallel build for snaps, basic changes: include/Branch.php script/snap.php
| From: | Anatol Belski | Date: | Fri, 15 Sep 2017 17:12:04 +0000 |
| Subject: | com web/rmtools: Parallel build for snaps, basic changes: include/Branch.php script/snap.php | ||
| Groups: | php.webmaster | ||
| Request: | Send a blank email to php-webmaster+get-26401@lists.php.net to get a copy of this message | ||
Commit: 89296f7a9eaecd03fe4c62737f6ba10bd5e1271c
Author: Anatol Belski <ab@php.net> Fri, 15 Sep 2017 19:12:04 +0200
Parents: 311b929c81d58a3e5e446d39bff4447a7ecc3651
Branches: master
Link: http://git.php.net/?p=web/rmtools.git;a=commitdiff;h=89296f7a9eaecd03fe4c62737f6ba10bd5e1271c
Log:
Parallel build for snaps, basic changes
Changed paths:
M include/Branch.php
M script/snap.php
Diff:
diff --git a/include/Branch.php b/include/Branch.php
index fd9edd2..31e5be1 100644
--- a/include/Branch.php
+++ b/include/Branch.php
@@ -6,6 +6,7 @@ include __DIR__ . '/Repository.php';
include __DIR__ .. '/BuildVC.php';
class Branch {
+ const REQUIRED_BUILDS_NUM = 4;
public $last_revision;
public $last_revision_has_snap;
public $config;
@@ -47,6 +48,8 @@ class Branch {
$data->revision_last = NULL;
$data->revision_previous = NULL;
$data->revision_last_exported = NULL;
+ $data->build_num = 0;
+ $data->builds = array();
}
return $data;
@@ -63,13 +66,27 @@ class Branch {
$builds = $this->config->getBuildList();
if (!empty($builds)) {
- foreach ($builds as $n => $v) {
- if (in_array($n, $this->data->builds) && $this->hasUnfinishedBuild()) {
+ if ($build_name) {
+ if (in_array($build_name, $this->data->builds) && $this->hasUnfinishedBuild())
{
throw new \Exception("Builds for '$n' are already done or in progress");
}
- $this->data->builds[] = $n;
- if ($build_name && $n == $build_name) {
- break;
+ $found = 0;
+ foreach ($builds as $n => $v) {
+ if ($n == $build_name) {
+ $found = 1;
+ $this->data->builds[] = $n;
+ break;
+ }
+ }
+ if (!$found) {
+ throw new \Exception("Build name '$build_name' is not on the supported build
list.");
+ }
+ } else {
+ 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 {
@@ -85,19 +102,20 @@ class Branch {
throw new \Exception("last revision id is empty");
}
- if ($this->requiredBuildRunsReached() && $this->hasNewRevision()) {
+ if ($this->requiredBuildRunsReached() && $this->hasNewRevision() || NULL ==
$this->data->revision_last) {
$this->data->revision_previous = $this->data->revision_last;
$this->data->revision_last = $last_id;
}
if ($this->requiredBuildRunsReached()) {
$this->data->builds = array();
+ $this->data->build_num = 0;
}
if ($this->hasUnfinishedBuild()) {
$this->addBuildList($build_name);
}
-
+
$this->writeData();
return true;
@@ -110,19 +128,16 @@ class Branch {
public function requiredBuildRunsReached()
{
- /* XXX 4 stands for all the combinations, scan the files to get this number from there instead of
hardcoding. */
- if (!isset($this->data->builds) || empty($this->data->builds)) {
- return true;
- }
-
- return count($this->data->builds) == 4;
+ $data = $this->readdata();
+ $this->data->build_num = $data->build_num;
+ return $this->data->build_num == self::REQUIRED_BUILDS_NUM;
}
public function hasNewRevision()
{
$last = $this->repo->getLastCommitId();
- return $last && !$this->isLastRevisionExported($last);
+ return $last && !$this->isLastRevisionExported($last) ||
is_null($data->revision_last);
}
public function export($revision = false, $build_type = false, $zip = false, $is_zip = false)
@@ -249,4 +264,16 @@ class Branch {
return $build;
}
+
+ function buildFinished()
+ {
+ $this->data = $this->readdata();
+ $this->data->build_num++;
+ $this->writeData();
+ }
+
+ function numBuildsRunning()
+ {
+ return count($this->data->builds);
+ }
}
diff --git a/script/snap.php b/script/snap.php
index fab95a2...35c089d 100644
--- a/script/snap.php
+++ b/script/snap.php
@@ -28,6 +28,11 @@ try {
goto out_here;
}
+if (!$branch->requiredBuildRunsReached() && rm\Branch::REQUIRED_BUILDS_NUM ==
$branch->numBuildsRunning()) {
+ $err_msg = "Waiting for " . $branch->getLastRevisionId() . " builds to
finish.";
+ goto out_here;
+}
+
$branch_name = $branch->config->getName();
$branch_name_short = $branch->config->getBranch();
@@ -35,17 +40,6 @@ echo "Running <" . realpath($config_path) . ">\n";
echo "\t$branch_name\n";
if ($branch->hasNewRevision() || $branch->hasUnfinishedBuild() || $force) {
-
-
-/* Prepared rewritten part, which might be helpful for PGO integration later. */
-/*$builds_top = $branch->getBuildList('windows');
-for ($i = 0; $i < count($builds_top) && ($force || $branch->hasNewRevision()); $i++)
{
- if (preg_match(",(ts|nts),", $builds_top[$i], $m)) {
- $build_type = $m[0];
- } else {
- echo "Unknown build type '{$builds_top[$i]}', skip\n";
- continue;
- }*/
try {
if (!$branch->update("all" == $build_type ? NULL : $build_type)) {
@@ -215,8 +209,11 @@ for ($i = 0; $i < count($builds_top) && ($force ||
$branch->hasNewRevision()); $
// $build->clean();
rmdir($build_src_path);
+
+ $branch->buildFinished();
}
+
/* Only upload once, and then cleanup. */
if ($branch->requiredBuildRunsReached()) {
$src_dir = $branch_name . '/r' . $last_rev;