protected function checkFiles(LocalRepo $repo, array $names, $verbose) { if (!count($names)) { return; } $dbr = $repo->getSlaveDB(); $imgIN = array(); $oiWheres = array(); foreach ($names as $name) { if (strpos($name, '!') !== false) { if ($verbose) { $this->output("Checking old file {$name}\n"); } list(, $base) = explode('!', $name); // <TS_MW>!<img_name> $oiWheres[] = $dbr->makeList(array('oi_name' => $base, 'oi_archive_name' => $name), LIST_AND); } else { if ($verbose) { $this->output("Checking current file {$name}\n"); } $imgIN[] = $name; } } $res = $dbr->query($dbr->unionQueries(array($dbr->selectSQLText('image', array('name' => 'img_name'), array('img_name' => $imgIN)), $dbr->selectSQLText('oldimage', array('name' => 'oi_archive_name'), $dbr->makeList($oiWheres, LIST_OR))), true), __METHOD__); $namesFound = array(); foreach ($res as $row) { $namesFound[] = $row->name; } $namesOrphans = array_diff($names, $namesFound); foreach ($namesOrphans as $name) { // Print name and public URL to ease recovery if (strpos($name, '!') !== false) { list(, $base) = explode('!', $name); // <TS_MW>!<img_name> $file = $repo->newFromArchiveName(Title::makeTitle(NS_FILE, $base), $name); } else { $file = $repo->newFile($name); } $this->output($name . "\n" . $file->getUrl() . "\n\n"); } }
protected function checkFiles(LocalRepo $repo, array $paths, $verbose) { if (!count($paths)) { return; } $dbr = $repo->getSlaveDB(); $curNames = []; $oldNames = []; $imgIN = []; $oiWheres = []; foreach ($paths as $path) { $name = basename($path); if (preg_match('#^archive/#', $path)) { if ($verbose) { $this->output("Checking old file {$name}\n"); } $oldNames[] = $name; list(, $base) = explode('!', $name, 2); // <TS_MW>!<img_name> $oiWheres[] = $dbr->makeList(['oi_name' => $base, 'oi_archive_name' => $name], LIST_AND); } else { if ($verbose) { $this->output("Checking current file {$name}\n"); } $curNames[] = $name; $imgIN[] = $name; } } $res = $dbr->query($dbr->unionQueries([$dbr->selectSQLText('image', ['name' => 'img_name', 'old' => 0], $imgIN ? ['img_name' => $imgIN] : '1=0'), $dbr->selectSQLText('oldimage', ['name' => 'oi_archive_name', 'old' => 1], $oiWheres ? $dbr->makeList($oiWheres, LIST_OR) : '1=0')], true), __METHOD__); $curNamesFound = []; $oldNamesFound = []; foreach ($res as $row) { if ($row->old) { $oldNamesFound[] = $row->name; } else { $curNamesFound[] = $row->name; } } foreach (array_diff($curNames, $curNamesFound) as $name) { $file = $repo->newFile($name); // Print name and public URL to ease recovery if ($file) { $this->output($name . "\n" . $file->getCanonicalUrl() . "\n\n"); } else { $this->error("Cannot get URL for bad file title '{$name}'"); } } foreach (array_diff($oldNames, $oldNamesFound) as $name) { list(, $base) = explode('!', $name, 2); // <TS_MW>!<img_name> $file = $repo->newFromArchiveName(Title::makeTitle(NS_FILE, $base), $name); // Print name and public URL to ease recovery $this->output($name . "\n" . $file->getCanonicalUrl() . "\n\n"); } }
function newFile( $title, $time = false ) { if ( empty( $title ) ) { return null; } return parent::newFile( $title, $time ); }