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:
		
							
								
								
									
										99
									
								
								scripts/repository/audit.php
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										99
									
								
								scripts/repository/audit.php
									
									
									
									
									
										Executable 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"; | ||||||
		Reference in New Issue
	
	Block a user
	 epriestley
					epriestley