Skip to content

Commit e3a5ab1

Browse files
author
epriestley
committed
Add an administrative bin/repository mark-imported command
Summary: Ref T4068. In some cases like that one, I anticipate a repository not fully importing when a handful of random commits are broken. In the long run we should just deal with that properly, but in the meantime provide an administrative escape hatch so you can mark the repository as imported and get it running normally. The major reason to do this is that Herald, Feed, Harbormaster, etc., won't activate until a repository is "imported". Test Plan: - Tried to mark an imported repository as imported, got an "already imported" message. - Same for not-imported. - Marked a repository not-imported. - Marked a repository imported. - Marked a repository not-imported, then waited for the daemons to mark it imported again automatically. Reviewers: btrahan Reviewed By: btrahan CC: aran, kbrownlees Maniphest Tasks: T4068 Differential Revision: https://secure.phabricator.com/D7514
1 parent 377742c commit e3a5ab1

File tree

3 files changed

+70
-0
lines changed

3 files changed

+70
-0
lines changed

scripts/repository/manage_repositories.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
new PhabricatorRepositoryManagementDiscoverWorkflow(),
2121
new PhabricatorRepositoryManagementListWorkflow(),
2222
new PhabricatorRepositoryManagementDeleteWorkflow(),
23+
new PhabricatorRepositoryManagementMarkImportedWorkflow(),
2324
new PhutilHelpArgumentWorkflow(),
2425
);
2526

src/__phutil_library_map__.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1661,6 +1661,7 @@
16611661
'PhabricatorRepositoryManagementDeleteWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementDeleteWorkflow.php',
16621662
'PhabricatorRepositoryManagementDiscoverWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementDiscoverWorkflow.php',
16631663
'PhabricatorRepositoryManagementListWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementListWorkflow.php',
1664+
'PhabricatorRepositoryManagementMarkImportedWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementMarkImportedWorkflow.php',
16641665
'PhabricatorRepositoryManagementPullWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementPullWorkflow.php',
16651666
'PhabricatorRepositoryManagementWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementWorkflow.php',
16661667
'PhabricatorRepositoryMercurialCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositoryMercurialCommitChangeParserWorker.php',
@@ -4013,6 +4014,7 @@
40134014
'PhabricatorRepositoryManagementDeleteWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
40144015
'PhabricatorRepositoryManagementDiscoverWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
40154016
'PhabricatorRepositoryManagementListWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
4017+
'PhabricatorRepositoryManagementMarkImportedWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
40164018
'PhabricatorRepositoryManagementPullWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
40174019
'PhabricatorRepositoryManagementWorkflow' => 'PhutilArgumentWorkflow',
40184020
'PhabricatorRepositoryMercurialCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<?php
2+
3+
final class PhabricatorRepositoryManagementMarkImportedWorkflow
4+
extends PhabricatorRepositoryManagementWorkflow {
5+
6+
public function didConstruct() {
7+
$this
8+
->setName('mark-imported')
9+
->setExamples('**mark-imported** __repository__ ...')
10+
->setSynopsis('Mark __repository__, named by callsign, as imported.')
11+
->setArguments(
12+
array(
13+
array(
14+
'name' => 'mark-not-imported',
15+
'help' => 'Instead, mark repositories as NOT imported.',
16+
),
17+
array(
18+
'name' => 'repos',
19+
'wildcard' => true,
20+
),
21+
));
22+
}
23+
24+
public function execute(PhutilArgumentParser $args) {
25+
$repos = $this->loadRepositories($args, 'repos');
26+
27+
if (!$repos) {
28+
throw new PhutilArgumentUsageException(
29+
"Specify one or more repositories to mark imported, by callsign.");
30+
}
31+
32+
$new_importing_value = (bool)$args->getArg('mark-not-imported');
33+
34+
$console = PhutilConsole::getConsole();
35+
foreach ($repos as $repo) {
36+
$callsign = $repo->getCallsign();
37+
38+
if ($repo->isImporting() && $new_importing_value) {
39+
$console->writeOut(
40+
"%s\n",
41+
pht("Repository '%s' is already importing.", $callsign));
42+
} else if (!$repo->isImporting() && !$new_importing_value) {
43+
$console->writeOut(
44+
"%s\n",
45+
pht("Repository '%s' is already imported.", $callsign));
46+
} else {
47+
if ($new_importing_value) {
48+
$console->writeOut(
49+
"%s\n",
50+
pht("Marking repository '%s' as importing.", $callsign));
51+
} else {
52+
$console->writeOut(
53+
"%s\n",
54+
pht("Marking repository '%s' as imported.", $callsign));
55+
}
56+
57+
$repo->setDetail('importing', $new_importing_value);
58+
$repo->save();
59+
}
60+
}
61+
62+
$console->writeOut("Done.\n");
63+
64+
return 0;
65+
}
66+
67+
}

0 commit comments

Comments
 (0)