1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-22 06:42:42 +01:00

Add a script to close all open audits in a repository

Summary: If you import a repository you may trigger a large number of irrelevant audits. Provide a tool to nuke them.

Test Plan: Ran "audit.php Q" (does not exist), "audit.php P" (phabricator) from various repository states.

Reviewers: btrahan

Reviewed By: btrahan

CC: aran, epriestley

Maniphest Tasks: T904, T940

Differential Revision: https://secure.phabricator.com/D1791
This commit is contained in:
epriestley 2012-03-06 15:10:25 -08:00
parent df361a0761
commit adb7f9ed1c

99
scripts/repository/audit.php Executable file
View file

@ -0,0 +1,99 @@
#!/usr/bin/env php
<?php
/*
* Copyright 2012 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
$root = dirname(dirname(dirname(__FILE__)));
require_once $root.'/scripts/__init_script__.php';
$args = new PhutilArgumentParser($argv);
$args->setTagline('manage open Audit requests');
$args->setSynopsis(<<<EOSYNOPSIS
**audit.php** __repository_callsign__
Close all open audit requests in a repository. This is intended to
reset the state of an imported repository which triggered a bunch of
spurious audit requests during import.
EOSYNOPSIS
);
$args->parseStandardArguments();
$args->parse(
array(
array(
'name' => 'more',
'wildcard' => true,
),
));
$more = $args->getArg('more');
if (count($more) !== 1) {
$args->printHelpAndExit();
}
$callsign = reset($more);
$repository = id(new PhabricatorRepository())->loadOneWhere(
'callsign = %s',
$callsign);
if (!$repository) {
throw new Exception("No repository exists with callsign '{$callsign}'!");
}
$ok = phutil_console_confirm(
'This will reset all open audit requests ("Audit Required" or "Concern '.
'Raised") for commits in this repository to "Audit Not Required". This '.
'operation destroys information and can not be undone! Are you sure '.
'you want to proceed?');
if (!$ok) {
echo "OK, aborting.\n";
die(1);
}
echo "Loading commits...\n";
$all_commits = id(new PhabricatorRepositoryCommit())->loadAllWhere(
'repositoryID = %d',
$repository->getID());
echo "Clearing audit requests...\n";
foreach ($all_commits as $commit) {
$query = id(new PhabricatorAuditQuery())
->withStatus(PhabricatorAuditQuery::STATUS_OPEN)
->withCommitPHIDs(array($commit->getPHID()));
$requests = $query->execute();
echo "Clearing ".$commit->getPHID()."... ";
if (!$requests) {
echo "nothing to do.\n";
continue;
} else {
echo count($requests)." requests to clear";
}
foreach ($requests as $request) {
$request->setAuditStatus(
PhabricatorAuditStatusConstants::AUDIT_NOT_REQUIRED);
$request->save();
echo ".";
}
$commit->setAuditStatus(PhabricatorAuditCommitStatusConstants::NONE);
$commit->save();
echo "\n";
}
echo "Done.\n";