 adb7f9ed1c
			
		
	
	adb7f9ed1c
	
	
	
		
			
			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
		
			
				
	
	
		
			100 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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";
 |