@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+89
+1
scripts/repository/manage_repositories.php
··· 21 21 new PhabricatorRepositoryManagementListWorkflow(), 22 22 new PhabricatorRepositoryManagementDeleteWorkflow(), 23 23 new PhabricatorRepositoryManagementMarkImportedWorkflow(), 24 + new PhabricatorRepositoryManagementImportingWorkflow(), 24 25 new PhutilHelpArgumentWorkflow(), 25 26 ); 26 27
+2
src/__phutil_library_map__.php
··· 1660 1660 'PhabricatorRepositoryListController' => 'applications/repository/controller/PhabricatorRepositoryListController.php', 1661 1661 'PhabricatorRepositoryManagementDeleteWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementDeleteWorkflow.php', 1662 1662 'PhabricatorRepositoryManagementDiscoverWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementDiscoverWorkflow.php', 1663 + 'PhabricatorRepositoryManagementImportingWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementImportingWorkflow.php', 1663 1664 'PhabricatorRepositoryManagementListWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementListWorkflow.php', 1664 1665 'PhabricatorRepositoryManagementMarkImportedWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementMarkImportedWorkflow.php', 1665 1666 'PhabricatorRepositoryManagementPullWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementPullWorkflow.php', ··· 4013 4014 'PhabricatorRepositoryListController' => 'PhabricatorRepositoryController', 4014 4015 'PhabricatorRepositoryManagementDeleteWorkflow' => 'PhabricatorRepositoryManagementWorkflow', 4015 4016 'PhabricatorRepositoryManagementDiscoverWorkflow' => 'PhabricatorRepositoryManagementWorkflow', 4017 + 'PhabricatorRepositoryManagementImportingWorkflow' => 'PhabricatorRepositoryManagementWorkflow', 4016 4018 'PhabricatorRepositoryManagementListWorkflow' => 'PhabricatorRepositoryManagementWorkflow', 4017 4019 'PhabricatorRepositoryManagementMarkImportedWorkflow' => 'PhabricatorRepositoryManagementWorkflow', 4018 4020 'PhabricatorRepositoryManagementPullWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
+86
src/applications/repository/management/PhabricatorRepositoryManagementImportingWorkflow.php
··· 1 + <?php 2 + 3 + final class PhabricatorRepositoryManagementImportingWorkflow 4 + extends PhabricatorRepositoryManagementWorkflow { 5 + 6 + public function didConstruct() { 7 + $this 8 + ->setName('importing') 9 + ->setExamples('**importing** __repository__ ...') 10 + ->setSynopsis( 11 + 'Show commits in __repository__, named by callsign, which are still '. 12 + 'importing.') 13 + ->setArguments( 14 + array( 15 + array( 16 + 'name' => 'simple', 17 + 'help' => 'Show simpler output.', 18 + ), 19 + array( 20 + 'name' => 'repos', 21 + 'wildcard' => true, 22 + ), 23 + )); 24 + } 25 + 26 + public function execute(PhutilArgumentParser $args) { 27 + $repos = $this->loadRepositories($args, 'repos'); 28 + 29 + if (!$repos) { 30 + throw new PhutilArgumentUsageException( 31 + "Specify one or more repositories to find importing commits for, ". 32 + "by callsign."); 33 + } 34 + 35 + $repos = mpull($repos, null, 'getID'); 36 + 37 + $table = new PhabricatorRepositoryCommit(); 38 + $conn_r = $table->establishConnection('r'); 39 + 40 + $rows = queryfx_all( 41 + $conn_r, 42 + 'SELECT repositoryID, commitIdentifier, importStatus FROM %T 43 + WHERE repositoryID IN (%Ld) AND importStatus != %d', 44 + $table->getTableName(), 45 + array_keys($repos), 46 + PhabricatorRepositoryCommit::IMPORTED_ALL); 47 + 48 + $console = PhutilConsole::getConsole(); 49 + if ($rows) { 50 + foreach ($rows as $row) { 51 + $repo = $repos[$row['repositoryID']]; 52 + $identifier = $row['commitIdentifier']; 53 + 54 + $console->writeOut("%s", 'r'.$repo->getCallsign().$identifier); 55 + 56 + if (!$args->getArg('simple')) { 57 + $status = $row['importStatus']; 58 + $need = array(); 59 + if (!($status & PhabricatorRepositoryCommit::IMPORTED_MESSAGE)) { 60 + $need[] = 'Message'; 61 + } 62 + if (!($status & PhabricatorRepositoryCommit::IMPORTED_CHANGE)) { 63 + $need[] = 'Change'; 64 + } 65 + if (!($status & PhabricatorRepositoryCommit::IMPORTED_OWNERS)) { 66 + $need[] = 'Owners'; 67 + } 68 + if (!($status & PhabricatorRepositoryCommit::IMPORTED_HERALD)) { 69 + $need[] = 'Herald'; 70 + } 71 + 72 + $console->writeOut(" %s", implode(', ', $need)); 73 + } 74 + 75 + $console->writeOut("\n"); 76 + } 77 + } else { 78 + $console->writeErr( 79 + "%s\n", 80 + pht('No importing commits found.')); 81 + } 82 + 83 + return 0; 84 + } 85 + 86 + }