mirror of
https://we.phorge.it/source/phorge.git
synced 2025-01-03 11:21:01 +01:00
Delete stale fixtures with bin/storage destroy
Summary: When a PhabricatorTestCase dies after creating storage fixtures, it leaves those storage fixtures around. This doesn't happen often, but when it does happen it's a pain to cleanup. The --unittest-fixtures option helps automate that cleanup. Test Plan: Ran it with --dryrun, then for real. Became overwhelmed with a Zen like peace after regarding the tidiness and beauty of SHOW DATABASES. Reviewers: epriestley Reviewed By: epriestley CC: aran, Korvin Differential Revision: https://secure.phabricator.com/D3858
This commit is contained in:
parent
ae616e82d3
commit
fe8351c930
2 changed files with 24 additions and 4 deletions
|
@ -23,7 +23,14 @@ final class PhabricatorStorageManagementDestroyWorkflow
|
||||||
$this
|
$this
|
||||||
->setName('destroy')
|
->setName('destroy')
|
||||||
->setExamples('**destroy** [__options__]')
|
->setExamples('**destroy** [__options__]')
|
||||||
->setSynopsis('Permanently destroy all storage and data.');
|
->setSynopsis('Permanently destroy all storage and data.')
|
||||||
|
->setArguments(
|
||||||
|
array(
|
||||||
|
array(
|
||||||
|
'name' => 'unittest-fixtures',
|
||||||
|
'help' => "Restrict **destroy** operations to databases created ".
|
||||||
|
"by PhabricatorTestCase test fixtures.",
|
||||||
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function execute(PhutilArgumentParser $args) {
|
public function execute(PhutilArgumentParser $args) {
|
||||||
|
@ -50,8 +57,20 @@ final class PhabricatorStorageManagementDestroyWorkflow
|
||||||
$api = $this->getAPI();
|
$api = $this->getAPI();
|
||||||
$patches = $this->getPatches();
|
$patches = $this->getPatches();
|
||||||
|
|
||||||
$databases = $api->getDatabaseList($patches);
|
if ($args->getArg('unittest-fixtures')) {
|
||||||
$databases[] = $api->getDatabaseName('meta_data');
|
$conn = $api->getConn(null, false);
|
||||||
|
$databases = queryfx_all(
|
||||||
|
$conn,
|
||||||
|
'SELECT DISTINCT(TABLE_SCHEMA) AS db '.
|
||||||
|
'FROM INFORMATION_SCHEMA.TABLES '.
|
||||||
|
'WHERE TABLE_SCHEMA LIKE %>',
|
||||||
|
PhabricatorTestCase::NAMESPACE_PREFIX);
|
||||||
|
$databases = ipull($databases, 'db');
|
||||||
|
} else {
|
||||||
|
$databases = $api->getDatabaseList($patches);
|
||||||
|
$databases[] = $api->getDatabaseName('meta_data');
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($databases as $database) {
|
foreach ($databases as $database) {
|
||||||
if ($is_dry) {
|
if ($is_dry) {
|
||||||
echo "DRYRUN: Would drop database '{$database}'.\n";
|
echo "DRYRUN: Would drop database '{$database}'.\n";
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
|
|
||||||
abstract class PhabricatorTestCase extends ArcanistPhutilTestCase {
|
abstract class PhabricatorTestCase extends ArcanistPhutilTestCase {
|
||||||
|
|
||||||
|
const NAMESPACE_PREFIX = 'phabricator_unittest_';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If true, put Lisk in process-isolated mode for the duration of the tests so
|
* If true, put Lisk in process-isolated mode for the duration of the tests so
|
||||||
|
@ -132,7 +133,7 @@ abstract class PhabricatorTestCase extends ArcanistPhutilTestCase {
|
||||||
|
|
||||||
protected function newStorageFixture() {
|
protected function newStorageFixture() {
|
||||||
$bytes = Filesystem::readRandomCharacters(24);
|
$bytes = Filesystem::readRandomCharacters(24);
|
||||||
$name = 'phabricator_unittest_'.$bytes;
|
$name = self::NAMESPACE_PREFIX.$bytes;
|
||||||
|
|
||||||
return new PhabricatorStorageFixtureScopeGuard($name);
|
return new PhabricatorStorageFixtureScopeGuard($name);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue