mirror of
https://github.com/vichan-devel/vichan.git
synced 2024-11-27 17:00:52 +01:00
rebuild2 - multithreaded rebuild script
This commit is contained in:
parent
e35d261ff4
commit
61371f77ce
140
tools/rebuild2.php
Executable file
140
tools/rebuild2.php
Executable file
@ -0,0 +1,140 @@
|
||||
#!/usr/bin/php
|
||||
<?php
|
||||
|
||||
/*
|
||||
* rebuild.php - rebuilds all static files
|
||||
* This is much different than the one in vichan because we have way more static files. It will not work without pcntl_fork.
|
||||
* You must specify the things you want to rebuild. By default the script does nothing.
|
||||
* Example of how to use:
|
||||
* php rebuild.php --cache --js --indexes --processes 5
|
||||
* That will clear the cache, rebuild all JS files and all indexes, and fork 5 processes to do it faster.
|
||||
* I removed the quiet option, it's useless. Just use output redirection.
|
||||
*/
|
||||
|
||||
require dirname(__FILE__) . '/inc/cli.php';
|
||||
|
||||
$start = microtime(true);
|
||||
|
||||
// parse command line
|
||||
$opts = getopt('', Array('board:', 'themes', 'js', 'indexes', 'threads', 'processes:', 'cache', 'postmarkup', 'api'));
|
||||
$options = Array();
|
||||
$global_locale = $config['locale'];
|
||||
|
||||
// Do only one board?
|
||||
$options['board'] = isset($opts['board']) ? $opts['board'] : (isset($opts['b']) ? $opts['b'] : false);
|
||||
// Clear the cache?
|
||||
$options['cache'] = isset($opts['cache']);
|
||||
// Rebuild themes (catalogs)?
|
||||
$options['themes'] = isset($opts['themes']);
|
||||
// Rebuild JS?
|
||||
$options['js'] = isset($opts['js']);
|
||||
// Rebuild indexes? (e.g. /b/index.html)
|
||||
$options['indexes'] = isset($opts['indexes']);
|
||||
// Rebuild threads? (e.g. /b/res/1.html)
|
||||
$options['threads'] = isset($opts['threads']);
|
||||
// Rebuild all post markup? (e.g. /b/res/1.html#2)
|
||||
$options['postmarkup'] = isset($opts['postmarkup']);
|
||||
// Rebuild API pages? (e.g. /b/res/1.json')
|
||||
$options['api'] = isset($opts['api']);
|
||||
// How many processes?
|
||||
$options['processes'] = isset($opts['processes']) ? $opts['processes'] : 1;
|
||||
|
||||
echo "== Tinyboard + vichan {$config['version']} ==\n";
|
||||
|
||||
if ($options['cache']) {
|
||||
echo "Clearing template cache...\n";
|
||||
load_twig();
|
||||
$twig->clearCacheFiles();
|
||||
}
|
||||
|
||||
if($options['themes']) {
|
||||
echo "Regenerating theme files...\n";
|
||||
rebuildThemes('all');
|
||||
}
|
||||
|
||||
if($options['js']) {
|
||||
echo "Generating Javascript file...\n";
|
||||
buildJavascript();
|
||||
}
|
||||
|
||||
$main_js = $config['file_script'];
|
||||
|
||||
$boards = listBoards();
|
||||
//$boards = array(array('uri'=>'test'), array('uri'=>'tester'), array('uri'=>'testing'));
|
||||
$boards_m = array_chunk($boards, floor(sizeof($boards)/$options['processes']));
|
||||
|
||||
function doboard($board) {
|
||||
global $global_locale, $config, $main_js, $options;
|
||||
$config['mask_db_error'] = false;
|
||||
if (!$options['api']) $config['api']['enabled'] = false;
|
||||
|
||||
echo "Opening board /{$board['uri']}/...\n";
|
||||
// Reset locale to global locale
|
||||
$config['locale'] = $global_locale;
|
||||
init_locale($config['locale'], 'error');
|
||||
openBoard($board['uri']);
|
||||
$config['try_smarter'] = false;
|
||||
|
||||
if($config['file_script'] != $main_js && $options['js']) {
|
||||
// different javascript file
|
||||
echo "(/{$board['uri']}/) Generating Javascript file...\n";
|
||||
buildJavascript();
|
||||
}
|
||||
|
||||
|
||||
if ($options['indexes']) {
|
||||
echo "(/{$board['uri']}/) Creating index pages...\n";
|
||||
buildIndex();
|
||||
}
|
||||
|
||||
if($options['postmarkup']) {
|
||||
$query = query(sprintf("SELECT `id` FROM ``posts_%s``", $board['uri'])) or error(db_error());
|
||||
while($post = $query->fetch()) {
|
||||
echo "(/{$board['uri']}/) Rebuilding #{$post['id']}...\n";
|
||||
rebuildPost($post['id']);
|
||||
}
|
||||
}
|
||||
|
||||
if ($options['threads']) {
|
||||
$query = query(sprintf("SELECT `id` FROM ``posts_%s`` WHERE `thread` IS NULL", $board['uri'])) or error(db_error());
|
||||
while($post = $query->fetch()) {
|
||||
echo "(/{$board['uri']}/) Rebuilding #{$post['id']}...\n";
|
||||
@buildThread($post['id']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$children = array();
|
||||
foreach ($boards_m as $i => $bb) {
|
||||
$pid = pcntl_fork();
|
||||
|
||||
if ($pid == -1) {
|
||||
die('Fork failed?');
|
||||
} else if ($pid) {
|
||||
echo "Started PID #$pid...\n";
|
||||
$children[] = $pid;
|
||||
} else {
|
||||
unset($pdo);
|
||||
$i = 0;
|
||||
$total = sizeof($bb);
|
||||
sql_open();
|
||||
foreach ($bb as $i => $b) {
|
||||
$i++;
|
||||
doboard($b);
|
||||
echo "I'm on board $i/$total\n";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
printf("Complete! Took %g seconds\n", microtime(true) - $start);
|
||||
|
||||
unset($board);
|
||||
|
||||
foreach ($children as $child) {
|
||||
pcntl_waitpid($child, $status);
|
||||
unset($children[$child]);
|
||||
}
|
||||
|
||||
//modLog('Rebuilt everything using tools/rebuild.php');
|
Loading…
Reference in New Issue
Block a user