Skip to content

Commit bd29784

Browse files
author
epriestley
committed
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
1 parent e3a5ab1 commit bd29784

File tree

3 files changed

+89
-0
lines changed

3 files changed

+89
-0
lines changed

scripts/repository/manage_repositories.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
new PhabricatorRepositoryManagementListWorkflow(),
2222
new PhabricatorRepositoryManagementDeleteWorkflow(),
2323
new PhabricatorRepositoryManagementMarkImportedWorkflow(),
24+
new PhabricatorRepositoryManagementImportingWorkflow(),
2425
new PhutilHelpArgumentWorkflow(),
2526
);
2627

src/__phutil_library_map__.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1660,6 +1660,7 @@
16601660
'PhabricatorRepositoryListController' => 'applications/repository/controller/PhabricatorRepositoryListController.php',
16611661
'PhabricatorRepositoryManagementDeleteWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementDeleteWorkflow.php',
16621662
'PhabricatorRepositoryManagementDiscoverWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementDiscoverWorkflow.php',
1663+
'PhabricatorRepositoryManagementImportingWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementImportingWorkflow.php',
16631664
'PhabricatorRepositoryManagementListWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementListWorkflow.php',
16641665
'PhabricatorRepositoryManagementMarkImportedWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementMarkImportedWorkflow.php',
16651666
'PhabricatorRepositoryManagementPullWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementPullWorkflow.php',
@@ -4013,6 +4014,7 @@
40134014
'PhabricatorRepositoryListController' => 'PhabricatorRepositoryController',
40144015
'PhabricatorRepositoryManagementDeleteWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
40154016
'PhabricatorRepositoryManagementDiscoverWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
4017+
'PhabricatorRepositoryManagementImportingWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
40164018
'PhabricatorRepositoryManagementListWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
40174019
'PhabricatorRepositoryManagementMarkImportedWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
40184020
'PhabricatorRepositoryManagementPullWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
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+
}

0 commit comments

Comments
 (0)