split up work into multiple processes

This commit is contained in:
mappu 2014-05-10 14:47:26 +12:00
parent 1a0251071d
commit 4d37930689
2 changed files with 78 additions and 24 deletions

View File

@ -1,5 +1,7 @@
@echo off @echo off
set PHP=C:\bin\php54\php.exe
echo Cleaning target directory... echo Cleaning target directory...
echo. echo.
rmdir /s /q wwwroot rmdir /s /q wwwroot
@ -9,6 +11,10 @@ copy static\* wwwroot
echo Building pages... echo Building pages...
echo. echo.
C:\bin\php54\php.exe rebuild.php %PHP% rebuild.php 4 0
%PHP% rebuild.php 4 1
%PHP% rebuild.php 4 2
%PHP% rebuild.php 4 3
%PHP% rebuild.php 4 4
pause pause

View File

@ -112,6 +112,17 @@ function text2html($sz) {
return nl2br($base); return nl2br($base);
} }
function array_decimate($array, $total, $partno) {
$ct = 0;
$ret = [];
foreach($array as $k => $v) {
if (++$ct % $total == ($partno - 1)) {
$ret[$k] = $v;
}
}
return $ret;
}
/** /**
* *
*/ */
@ -149,7 +160,8 @@ class CProject {
$this->tags = array_map('trim', explode(',', $matches[1])); $this->tags = array_map('trim', explode(',', $matches[1]));
} }
$this->shortdesc = array_shift(explode("\n", $this->longdesc)); $parts = explode("\n", $this->longdesc);
$this->shortdesc = array_shift($parts);
$this->shortdesc[0] = strtolower($this->shortdesc[0]); // cosmetic lowercase $this->shortdesc[0] = strtolower($this->shortdesc[0]); // cosmetic lowercase
continue; continue;
} }
@ -162,6 +174,18 @@ class CProject {
} }
} }
public function genHomeImage() {
if (count($this->images)) {
$this->homeimage = mkthumbnail(
$this->dir.$this->images[0], //BASEDIR.'wwwroot/srv/'.$this->projname.'_0.'.str_ext($this->images[0]),
null, // raw handle
INDEX_THUMB_W, INDEX_THUMB_H
);
}
}
public function write() { public function write() {
// Generate image thumbnails // Generate image thumbnails
@ -173,14 +197,6 @@ class CProject {
mkthumbnail($outfile.'.'.str_ext($image), $outfile.'_thumb.jpg', PAGE_THUMB_W, PAGE_THUMB_H); mkthumbnail($outfile.'.'.str_ext($image), $outfile.'_thumb.jpg', PAGE_THUMB_W, PAGE_THUMB_H);
} }
if (count($this->images)) {
$this->homeimage = mkthumbnail(
BASEDIR.'wwwroot/srv/'.$this->projname.'_0.'.str_ext($this->images[0]),
null, // raw handle
INDEX_THUMB_W, INDEX_THUMB_H
);
}
// Copy downloads to wwwroot // Copy downloads to wwwroot
foreach($this->downloads as $idx => $filename) { foreach($this->downloads as $idx => $filename) {
@ -276,8 +292,7 @@ function template($title, $content) {
return ob_get_clean(); return ob_get_clean();
} }
function buildall() { function listprojects() {
// List projects // List projects
$ls = scandir(BASEDIR.'data'); $ls = scandir(BASEDIR.'data');
@ -291,21 +306,40 @@ function buildall() {
$projects[$dirname] = $matches[1]; $projects[$dirname] = $matches[1];
} }
} }
return $projects;
}
function buildprojects($id, $projects) {
$count = 0;
foreach($projects as $dirname => $projectname) {
echo sprintf("@%1d [%3d/%3d] ".$projectname."...\n", $id, ++$count, count($projects));
$pr = new CProject($dirname, $projectname);
$pr->write();
}
}
function buildcommon() {
echo "@0 [ 0/ ?] Common files...\n";
$projects = listprojects();
// Build all projects // Build all projects
$plist = array(); $plist = array();
$count = 0;
$handles = array(); $handles = array();
$handle_lookup = array(); $handle_lookup = array();
foreach($projects as $dirname => $projectname) { foreach($projects as $dirname => $projectname) {
echo sprintf("[%3d/%3d] ".$projectname."...", ++$count, count($projects)); $pr = new CProject($dirname, $projectname);
$pr->genHomeImage(); // thumbnail
$pr = new CProject($dirname, $projectname);
$pr->write();
$plist[] = $pr; $plist[] = $pr;
if (is_null($pr->homeimage)) { if (is_null($pr->homeimage)) {
@ -314,9 +348,7 @@ function buildall() {
$handle_lookup[$projectname] = count($handles); $handle_lookup[$projectname] = count($handles);
$handles[] = $pr->homeimage; $handles[] = $pr->homeimage;
} }
}
echo " done\n";
}
// Build homepage spritesheet // Build homepage spritesheet
@ -364,9 +396,25 @@ function buildall() {
$index = template(SITE_TITLE, ob_get_clean()); $index = template(SITE_TITLE, ob_get_clean());
file_put_contents(BASEDIR.'wwwroot/index.html', $index); file_put_contents(BASEDIR.'wwwroot/index.html', $index);
echo "All processes complete.\n"; // Done
} }
buildall(); function main($args) {
$total = $args[0];
$pos = $args[1];
if ($pos == 0) {
buildcommon();
} else {
buildprojects($pos, array_decimate(listprojects(), $total, $pos));
}
}
// Entry point
//
ini_set('display_errors', 'On');
error_reporting(E_ALL);
main(array_slice($_SERVER['argv'], 1));