1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-22 13:30:55 +01:00

Ignore unreachable commits when testing if a repository has imported

Summary:
Fixes T11309. When checking if a repository was fully imported, we incorrectly allow unreachable, un-imported commits to prevent the repository from moving to "Imported".

This can happen if you delete branches from a repository while it is importing.

Instead, ignore unreachable commits when checking for remaining imports, and when reporting status via `bin/repository importing`.

Test Plan:
  - Stopped daemons.
  - Created a new repository and activated it.
  - Ran `bin/repository update Rxx`.
  - Deleted a branch in the repository.
  - Ran `bin/repository update Rxx`.
  - Ran daemons to flush queue.

Now:

  - Ran `bin/repository importing`. Old behavior: showed unreachable commits as importing. New behavior: does not show unreachable commits.
  - Ran `bin/repository update`. Old behavior: failed to move repository to "imported" status. New behavior: correctly moves repository to "imported" status.

Reviewers: chad

Reviewed By: chad

Maniphest Tasks: T11309

Differential Revision: https://secure.phabricator.com/D16269
This commit is contained in:
epriestley 2016-07-11 08:05:57 -07:00
parent 4068ee2a75
commit 553c335fbd
2 changed files with 13 additions and 5 deletions

View file

@ -40,11 +40,15 @@ final class PhabricatorRepositoryManagementImportingWorkflow
$rows = queryfx_all( $rows = queryfx_all(
$conn_r, $conn_r,
'SELECT repositoryID, commitIdentifier, importStatus FROM %T 'SELECT repositoryID, commitIdentifier, importStatus FROM %T
WHERE repositoryID IN (%Ld) AND (importStatus & %d) != %d', WHERE repositoryID IN (%Ld)
AND (importStatus & %d) != %d
AND (importStatus & %d) != %d',
$table->getTableName(), $table->getTableName(),
array_keys($repos), array_keys($repos),
PhabricatorRepositoryCommit::IMPORTED_ALL, PhabricatorRepositoryCommit::IMPORTED_ALL,
PhabricatorRepositoryCommit::IMPORTED_ALL); PhabricatorRepositoryCommit::IMPORTED_ALL,
PhabricatorRepositoryCommit::IMPORTED_UNREACHABLE,
PhabricatorRepositoryCommit::IMPORTED_UNREACHABLE);
$console = PhutilConsole::getConsole(); $console = PhutilConsole::getConsole();
if ($rows) { if ($rows) {

View file

@ -152,15 +152,19 @@ final class PhabricatorRepositoryManagementUpdateWorkflow
return; return;
} }
// Look for any commit which hasn't imported. // Look for any commit which is reachable and hasn't imported.
$unparsed_commit = queryfx_one( $unparsed_commit = queryfx_one(
$repository->establishConnection('r'), $repository->establishConnection('r'),
'SELECT * FROM %T WHERE repositoryID = %d AND (importStatus & %d) != %d 'SELECT * FROM %T WHERE repositoryID = %d
AND (importStatus & %d) != %d
AND (importStatus & %d) != %d
LIMIT 1', LIMIT 1',
id(new PhabricatorRepositoryCommit())->getTableName(), id(new PhabricatorRepositoryCommit())->getTableName(),
$repository->getID(), $repository->getID(),
PhabricatorRepositoryCommit::IMPORTED_ALL, PhabricatorRepositoryCommit::IMPORTED_ALL,
PhabricatorRepositoryCommit::IMPORTED_ALL); PhabricatorRepositoryCommit::IMPORTED_ALL,
PhabricatorRepositoryCommit::IMPORTED_UNREACHABLE,
PhabricatorRepositoryCommit::IMPORTED_UNREACHABLE);
if ($unparsed_commit) { if ($unparsed_commit) {
// We found a commit which still needs to import, so we can't clear the // We found a commit which still needs to import, so we can't clear the
// flag. // flag.