 c728e4f7da
			
		
	
	c728e4f7da
	
	
	
		
			
			Summary: there are several places we open an 'r' connection but use it for writing. Fix them. Test Plan: ran parse_one_commit.php against one revision which executes the code with problem. It used to throw exception. Now it works fine. Reviewed By: Girish Reviewers: tuomaspelkonen, Girish Commenters: aran CC: aran, Girish Differential Revision: 213
		
			
				
	
	
		
			75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env php
 | |
| <?php
 | |
| 
 | |
| /*
 | |
|  * Copyright 2011 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';
 | |
| require_once $root.'/scripts/__init_env__.php';
 | |
| 
 | |
| phutil_require_module('phutil', 'symbols');
 | |
| PhutilSymbolLoader::loadClass('PhabricatorRepository');
 | |
| PhutilSymbolLoader::loadClass('PhabricatorRepositoryCommit');
 | |
| 
 | |
| $commit = new PhabricatorRepositoryCommit();
 | |
| 
 | |
| $conn_w = id(new PhabricatorRepository())->establishConnection('w');
 | |
| $sizes = queryfx_all(
 | |
|   $conn_w,
 | |
|   'SELECT repositoryID, count(*) N FROM %T GROUP BY repositoryID',
 | |
|   $commit->getTableName());
 | |
| $sizes = ipull($sizes, 'N', 'repositoryID');
 | |
| 
 | |
| $maxes = queryfx_all(
 | |
|   $conn_w,
 | |
|   'SELECT repositoryID, max(epoch) maxEpoch FROM %T GROUP BY repositoryID',
 | |
|   $commit->getTableName());
 | |
| $maxes = ipull($maxes, 'maxEpoch', 'repositoryID');
 | |
| 
 | |
| 
 | |
| $repository_ids = array_keys($sizes + $maxes);
 | |
| 
 | |
| echo "Updating ".count($repository_ids)." repositories";
 | |
| 
 | |
| foreach ($repository_ids as $repository_id) {
 | |
|   $last_commit = queryfx_one(
 | |
|     $conn_w,
 | |
|     'SELECT id FROM %T WHERE repositoryID = %d AND epoch = %d LIMIT 1',
 | |
|     $commit->getTableName(),
 | |
|     $repository_id,
 | |
|     idx($maxes, $repository_id, 0));
 | |
|   if ($last_commit) {
 | |
|     $last_commit = $last_commit['id'];
 | |
|   } else {
 | |
|     $last_commit = 0;
 | |
|   }
 | |
|   queryfx(
 | |
|     $conn_w,
 | |
|     'INSERT INTO %T (repositoryID, lastCommitID, size, epoch)
 | |
|       VALUES (%d, %d, %d, %d) ON DUPLICATE KEY UPDATE
 | |
|         lastCommitID = VALUES(lastCommitID),
 | |
|         size = VALUES(size),
 | |
|         epoch = VALUES(epoch)',
 | |
|     PhabricatorRepository::TABLE_SUMMARY,
 | |
|     $repository_id,
 | |
|     $last_commit,
 | |
|     idx($sizes, $repository_id, 0),
 | |
|     idx($maxes, $repository_id, 0));
 | |
|   echo ".";
 | |
| }
 | |
| echo "\ndone.\n";
 |