]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blob - maintenance/deleteOrphanedRevisions.php
MediaWiki 1.14.0
[autoinstalls/mediawiki.git] / maintenance / deleteOrphanedRevisions.php
1 <?php
2
3 /**
4  * Maintenance script to delete revisions which refer to a nonexisting page
5  * Sometimes manual deletion done in a rush leaves crap in the database
6  *
7  * @file
8  * @ingroup Maintenance
9  * @author Rob Church <robchur@gmail.com>
10  * @todo More efficient cleanup of text records
11  */
12  
13 $options = array( 'report', 'help' );
14 require_once( 'commandLine.inc' );
15 require_once( 'deleteOrphanedRevisions.inc.php' );
16 echo( "Delete Orphaned Revisions\n" );
17
18 if( isset( $options['help'] ) )
19         showUsage();
20
21 $report = isset( $options['report'] );
22
23 $dbw = wfGetDB( DB_MASTER );
24 $dbw->immediateBegin();
25 extract( $dbw->tableNames( 'page', 'revision' ) );
26
27 # Find all the orphaned revisions
28 echo( "Checking for orphaned revisions..." );
29 $sql = "SELECT rev_id FROM {$revision} LEFT JOIN {$page} ON rev_page = page_id WHERE page_namespace IS NULL";
30 $res = $dbw->query( $sql, 'deleteOrphanedRevisions' );
31
32 # Stash 'em all up for deletion (if needed)
33 while( $row = $dbw->fetchObject( $res ) )
34         $revisions[] = $row->rev_id;
35 $dbw->freeResult( $res );
36 $count = count( $revisions );
37 echo( "found {$count}.\n" );
38
39 # Nothing to do?
40 if( $report || $count == 0 ) {
41         $dbw->immediateCommit();
42         exit();
43 }
44
45 # Delete each revision
46 echo( "Deleting..." );
47 deleteRevisions( $revisions, $dbw );
48 echo( "done.\n" );
49
50 # Close the transaction and call the script to purge unused text records
51 $dbw->immediateCommit();
52 require_once( 'purgeOldText.inc' );
53 PurgeRedundantText( true );
54