<?php
# This code is distributed under GNU GPL 2
$nightlyDir = "/var/www/mw-nightly";
$nightlyUrl = "http://download.wikimedia.org/mw-nightly";
$poolDir = $nightlyDir . "/pool";
$poolUrl = $nightlyUrl . "/pool";
$svnDir = "/home/wikipedia/mediawiki/trunk";
$phase3Dir = $svnDir . "/phase3";
$extensionsDir = $svnDir . "/extensions";
$svnRevPrefix = "http://svn.wikimedia.org/viewvc/mediawiki/?view=rev&revision=";
$svnPathPrefix = "http://svn.wikimedia.org/viewvc/mediawiki";
function getExtensionsList() {
global $extensionsDir;
$files = scandir( $extensionsDir );
if( !$files ) return array();
$list = array();
foreach( $files as $file ) {
$path = $extensionsDir . '/' . $file;
$blacklist = array( '.', '..', '.svn' );
if( is_dir( $path ) && !in_array( $file, $blacklist ) )
$list[$file] = $path;
}
return $list;
}
function getSvnRev( $dir ) {
if( !is_file( $dir . '/.svn/entries' ) ) return 0;
$entries = file_get_contents( $dir . '/.svn/entries' );
$lines = split( "\n", $entries );
return intval( $lines[3] );
}
function dumpDir( $dir, $targetdir, $targettag ) {
global $rev;
$base = dirname( $dir );
$name = basename( $dir );
chdir( $base );
$dumppathShell = escapeshellarg( $targetdir . '/' . $targettag . '-nightly-r' . $rev . '.tar' );
shell_exec( 'tar -c --exclude .svn --exclude testsuite --exclude mediawiki-large.xcf --exclude mediawiki-largesquare.xcf -f ' . $dumppathShell . ' ' . $name );
shell_exec( 'gzip -f9 ' . $dumppathShell );
}
function outln($s) {
echo $s . "\n";
}
function out($s) {
echo $s;
}
function formatSize( $size ) {
if( $size < 2048 ) {
return "{$size} bytes";
} elseif( $size >= 2048 && $size < 1048576 ) { // < 1 Mb
return round( $size / 1024, 1 ) . " Kb";
} else {
return round( $size / 1048576, 2 ) . " Mb";
}
}
function outputModuleRow( $title, $dumpmodule, $svnpath ) {
global $poolUrl, $poolDir, $rev, $svnPathPrefix;
$fpath = $poolDir . "/{$dumpmodule}-nightly-r{$rev}.tar.gz";
echo "<tr>";
echo "<td><a href=\"{$poolUrl}/{$dumpmodule}-nightly-r{$rev}.tar.gz\" title=\"{$dumpmodule}\">{$title}</a></td>";
echo "<td>" . formatSize( filesize( $fpath ) ) . "</td>";
echo "<td>";
echo "<p>SHA1: " . sha1_file( $fpath ) . "</p>";
echo "<p>MD5: " . md5_file( $fpath ) . "</p>";
echo "</td>";
echo "<td><a href=\"{$svnPathPrefix}{$svnpath}\">{$svnpath}</a></td>";
echo "</tr>";
}
$extensions = getExtensionsList();
$extensionList = array_keys( $extensions );
outln( "MediaWiki nightly build started: " . date( 'Y-m-d G:i:s (e)' ) );
out( "Deleting old files... " );
shell_exec( 'rm -rf ' . $poolDir . "/*.gz" );
shell_exec( 'rm -rf ' . $poolDir . "/*.tar" );
outln( "Deleted" );
out( "Updating local copies... " );
svn_update( $phase3Dir );
svn_update( $extensionsDir );
$rev = getSvnRev( $extensionsDir );
outln( "Upadated at revision " . $rev );
out( "Dumping phase3... " );
dumpDir( $phase3Dir, $poolDir, 'phase3' );
outln( "Dupmed" );
out( "Dumping all extensions... " );
dumpDir( $extensionsDir, $poolDir, 'extensions' );
out( "Dumped\nNow dumping extensions in seperate tarballs... " );
foreach( $extensions as $ext => $extpath ) {
dumpDir( $extpath, $poolDir, 'ext-' . $ext );
}
outln( "Dumping finished" );
out( "Copying release notes... " );
copy( $phase3Dir . "/RELEASE-NOTES", $nightlyDir . "/RELEASE-NOTES" );
outln( "Copied" );
# HTML page
out( "Generating HTML page... " );
ob_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="shortcut icon" href="http://mediawiki.org/favicon.ico" />
<link rel="apple-touch-icon" href="http://mediawiki.wikipedia.org/apple-touch-icon.png" />
<link rel="copyright" href="http://www.gnu.org/copyleft/fdl.html" />
<title>MediaWiki nightly dumps</title>
<style type="text/css" media="screen, projection">/*<![CDATA[*/
@import "http://mediawiki.org/skins-1.5/common/shared.css?125";
@import "http://mediawiki.org/skins-1.5/monobook/main.css?125";
/*]]>*/</style>
<link rel="stylesheet" type="text/css" media="print" href="http://mediawiki.org/skins-1.5/common/commonPrint.css?125" />
<!--[if lt IE 5.5000]><style type="text/css">@import "http://mediawiki.org/skins-1.5/monobook/IE50Fixes.css?125";</style><![endif]-->
<!--[if IE 5.5000]><style type="text/css">@import "http://mediawiki.org/skins-1.5/monobook/IE55Fixes.css?125";</style><![endif]-->
<!--[if IE 6]><style type="text/css">@import "http://mediawiki.org/skins-1.5/monobook/IE60Fixes.css?125";</style><![endif]-->
<!--[if IE 7]><style type="text/css">@import "http://mediawiki.org/skins-1.5/monobook/IE70Fixes.css?125";</style><![endif]-->
<!--[if lt IE 7]><script type="text/javascript" src="http://mediawiki.org/skins-1.5/common/IEFixes.js?125"></script>
<meta http-equiv="imagetoolbar" content="no" /><![endif]-->
<style type="text/css">/*<![CDATA[*/
@import "http://mediawiki.org/w/index.php?title=MediaWiki:Common.css&usemsgcache=yes&action=raw&ctype=text/css&smaxage=2678400";
@import "http://mediawiki.org/w/index.php?title=MediaWiki:Monobook.css&usemsgcache=yes&action=raw&ctype=text/css&smaxage=2678400";
@import "http://mediawiki.org/w/index.php?title=-&action=raw&gen=css&maxage=2678400";
.wikitable th, td{
text-align: center;
}
/*]]>*/</style>
</head>
<body class="mediawiki ltr">
<div id="globalWrapper">
<div id="column-content">
<div id="content">
<a name="top" id="top"></a>
<h1 class="firstHeading">MediaWiki nightly dumps</h1>
<div id="bodyContent">
<p>Here you can find latest MediaWiki dump and all extensions that are in Wikimedia subversion</p>
<p>Dumped on: <?=date( 'G:i, d F Y' )?></p>
<p><a href="http://en.wikipedia.org/wiki/Subverson" title="Subversion">Subversion</a> revision:
<a href="<?=htmlspecialchars("{$svnRevPrefix}{$rev}")?>"> r<?=$rev?> </a></p>
<table class="wikitable" style="width: 100%">
<tr><th>File</th><th>Size</th><th>Hashes</th><th>Subversion path</th></tr>
<?php
outputModuleRow( "MediaWiki 1.13alpha", "phase3", "/trunk/phase3" );
outputModuleRow( "All MediaWiki extensions", "extensions", "/trunk/extensions" );
foreach( $extensionList as $ext ) {
outputModuleRow( "{$ext} extension", "ext-{$ext}", "/trunk/extensions/{$ext}" );
}
?>
</table>
<div class="visualClear"></div>
</div>
</div>
</div>
<div id="column-one">
<div class="portlet" id="p-logo">
<a style="background-image: url(http://upload.wikimedia.org/wikipedia/mediawiki/b/bc/Wiki.png);" href="http://mediawiki.org//wiki/MediaWiki" title="Visit the Main Page [z]" accesskey="z"></a>
</div>
<script type="text/javascript"> if (window.isMSIE55) fixalpha(); </script>
<div class='generated-sidebar portlet' id='p-site'>
<div class='pBody'>
<ul>
<li><a href="<?=$nightlyUrl?>">Dumps</a></li>
<li><a href="<?=$nightlyUrl?>/RELEASE-NOTES">Release notes</a></li>
<li><a href="http://mediawiki.org/">MediaWiki site</a></li>
</ul>
</div>
</div>
</div><!-- end of the left (by default at least) column -->
<div class="visualClear"></div>
<div id="footer">
<div id="f-poweredbyico"><a href="http://tools.wikimedia.de/"><img src="http://tools.wikimedia.de/images/wikimedia-toolserver-button.png" alt="Toolserver project" /></a></div>
<div id="f-copyrightico"><a href="http://validator.w3.org/check?uri=referer"><img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0 Strict" height="31" width="88" /></a></div>
<ul id="f-list">
<li id="lastmod"> This page was automatically generated at <?=date( 'G:i, d F Y' )?>.</li>
<li id="copyright">MediaWiki is available under the <a href="http://www.gnu.org/copyleft/gpl.html">GNU General Public License</a>. <br /></li>
<li id="privacy"><a href="http://wikimediafoundation.org/wiki/Privacy_policy" title="wikimedia:Privacy policy">Privacy policy</a></li>
<li id="about"><a href="http://mediawiki.org" title="About this site">MediaWiki site</a></li>
<li id="disclaimer"><a href="http://mediawiki.org/wiki/Project:General_disclaimer" title="Project:General disclaimer">Disclaimers</a></li>
</ul>
</div>
</div>
</body></html>
<?php
$html = ob_get_contents(); ob_end_clean();
file_put_contents( $nightlyDir . "/index.html", $html );
outln( "Done" );
outln( "Finished at: " . date( 'Y-m-d G:i:s (e)' ) );