From bd29784a32cfb9ddb95aa75807e79444e1e7dce6 Mon Sep 17 00:00:00 2001 From: epriestley Date: Wed, 6 Nov 2013 11:26:41 -0800 Subject: [PATCH] Add an administrative `bin/repository importing` command to list importing commits Summary: Ref T4068. Adds a command to list all commits in an "importing" status. This will allow users to use `reparse.php` to diagnose and repair issues. Test Plan: - Ran `bin/repository importing P`, etc. - Used `reparse.php` to reparse some commit stages and saw status update correctly. - Ran on a repo with no importing commits. - Ran with `... --simple | xargs`, which saves us having to put an `awk` or something in there for users. Reviewers: btrahan Reviewed By: btrahan CC: aran Maniphest Tasks: T4068 Differential Revision: https://secure.phabricator.com/D7515 --- scripts/repository/manage_repositories.php | 1 + src/__phutil_library_map__.php | 2 + ...rRepositoryManagementImportingWorkflow.php | 86 +++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 src/applications/repository/management/PhabricatorRepositoryManagementImportingWorkflow.php diff --git a/scripts/repository/manage_repositories.php b/scripts/repository/manage_repositories.php index e41bac6ab9..359186f9dd 100755 --- a/scripts/repository/manage_repositories.php +++ b/scripts/repository/manage_repositories.php @@ -21,6 +21,7 @@ $workflows = array( new PhabricatorRepositoryManagementListWorkflow(), new PhabricatorRepositoryManagementDeleteWorkflow(), new PhabricatorRepositoryManagementMarkImportedWorkflow(), + new PhabricatorRepositoryManagementImportingWorkflow(), new PhutilHelpArgumentWorkflow(), ); diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 7063139b22..bd09f8da62 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -1660,6 +1660,7 @@ phutil_register_library_map(array( 'PhabricatorRepositoryListController' => 'applications/repository/controller/PhabricatorRepositoryListController.php', 'PhabricatorRepositoryManagementDeleteWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementDeleteWorkflow.php', 'PhabricatorRepositoryManagementDiscoverWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementDiscoverWorkflow.php', + 'PhabricatorRepositoryManagementImportingWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementImportingWorkflow.php', 'PhabricatorRepositoryManagementListWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementListWorkflow.php', 'PhabricatorRepositoryManagementMarkImportedWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementMarkImportedWorkflow.php', 'PhabricatorRepositoryManagementPullWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementPullWorkflow.php', @@ -4013,6 +4014,7 @@ phutil_register_library_map(array( 'PhabricatorRepositoryListController' => 'PhabricatorRepositoryController', 'PhabricatorRepositoryManagementDeleteWorkflow' => 'PhabricatorRepositoryManagementWorkflow', 'PhabricatorRepositoryManagementDiscoverWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementImportingWorkflow' => 'PhabricatorRepositoryManagementWorkflow', 'PhabricatorRepositoryManagementListWorkflow' => 'PhabricatorRepositoryManagementWorkflow', 'PhabricatorRepositoryManagementMarkImportedWorkflow' => 'PhabricatorRepositoryManagementWorkflow', 'PhabricatorRepositoryManagementPullWorkflow' => 'PhabricatorRepositoryManagementWorkflow', diff --git a/src/applications/repository/management/PhabricatorRepositoryManagementImportingWorkflow.php b/src/applications/repository/management/PhabricatorRepositoryManagementImportingWorkflow.php new file mode 100644 index 0000000000..dab8252ae6 --- /dev/null +++ b/src/applications/repository/management/PhabricatorRepositoryManagementImportingWorkflow.php @@ -0,0 +1,86 @@ +setName('importing') + ->setExamples('**importing** __repository__ ...') + ->setSynopsis( + 'Show commits in __repository__, named by callsign, which are still '. + 'importing.') + ->setArguments( + array( + array( + 'name' => 'simple', + 'help' => 'Show simpler output.', + ), + array( + 'name' => 'repos', + 'wildcard' => true, + ), + )); + } + + public function execute(PhutilArgumentParser $args) { + $repos = $this->loadRepositories($args, 'repos'); + + if (!$repos) { + throw new PhutilArgumentUsageException( + "Specify one or more repositories to find importing commits for, ". + "by callsign."); + } + + $repos = mpull($repos, null, 'getID'); + + $table = new PhabricatorRepositoryCommit(); + $conn_r = $table->establishConnection('r'); + + $rows = queryfx_all( + $conn_r, + 'SELECT repositoryID, commitIdentifier, importStatus FROM %T + WHERE repositoryID IN (%Ld) AND importStatus != %d', + $table->getTableName(), + array_keys($repos), + PhabricatorRepositoryCommit::IMPORTED_ALL); + + $console = PhutilConsole::getConsole(); + if ($rows) { + foreach ($rows as $row) { + $repo = $repos[$row['repositoryID']]; + $identifier = $row['commitIdentifier']; + + $console->writeOut("%s", 'r'.$repo->getCallsign().$identifier); + + if (!$args->getArg('simple')) { + $status = $row['importStatus']; + $need = array(); + if (!($status & PhabricatorRepositoryCommit::IMPORTED_MESSAGE)) { + $need[] = 'Message'; + } + if (!($status & PhabricatorRepositoryCommit::IMPORTED_CHANGE)) { + $need[] = 'Change'; + } + if (!($status & PhabricatorRepositoryCommit::IMPORTED_OWNERS)) { + $need[] = 'Owners'; + } + if (!($status & PhabricatorRepositoryCommit::IMPORTED_HERALD)) { + $need[] = 'Herald'; + } + + $console->writeOut(" %s", implode(', ', $need)); + } + + $console->writeOut("\n"); + } + } else { + $console->writeErr( + "%s\n", + pht('No importing commits found.')); + } + + return 0; + } + +}