summaryrefslogtreecommitdiff
path: root/tools/rebuild2.php
diff options
context:
space:
mode:
authorSimon McFarlane <simon@piston.pw>2015-05-26 23:31:47 -0700
committerSimon McFarlane <simon@piston.pw>2015-05-29 01:34:53 -0700
commit4b40f69a4e6d190f6d342875bd084c2a6c9d8b0f (patch)
treefcc5dc9efa24afcb0bda3740b59f0c4e81c42f62 /tools/rebuild2.php
parent2ac451ecb7aaae1ed1402425b8df6a5cb9831f2b (diff)
parentd20149b57929c27da87a7d9603d85717da15c5bc (diff)
Merge remote-tracking branch 'upstream/master' into vichan-merge
Diffstat (limited to 'tools/rebuild2.php')
-rwxr-xr-xtools/rebuild2.php140
1 files changed, 140 insertions, 0 deletions
diff --git a/tools/rebuild2.php b/tools/rebuild2.php
new file mode 100755
index 00000000..2945460c
--- /dev/null
+++ b/tools/rebuild2.php
@@ -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');