@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 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

+70
+1
scripts/repository/manage_repositories.php
··· 20 20 new PhabricatorRepositoryManagementDiscoverWorkflow(), 21 21 new PhabricatorRepositoryManagementListWorkflow(), 22 22 new PhabricatorRepositoryManagementDeleteWorkflow(), 23 + new PhabricatorRepositoryManagementMarkImportedWorkflow(), 23 24 new PhutilHelpArgumentWorkflow(), 24 25 ); 25 26
+2
src/__phutil_library_map__.php
··· 1661 1661 'PhabricatorRepositoryManagementDeleteWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementDeleteWorkflow.php', 1662 1662 'PhabricatorRepositoryManagementDiscoverWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementDiscoverWorkflow.php', 1663 1663 'PhabricatorRepositoryManagementListWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementListWorkflow.php', 1664 + 'PhabricatorRepositoryManagementMarkImportedWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementMarkImportedWorkflow.php', 1664 1665 'PhabricatorRepositoryManagementPullWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementPullWorkflow.php', 1665 1666 'PhabricatorRepositoryManagementWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementWorkflow.php', 1666 1667 'PhabricatorRepositoryMercurialCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositoryMercurialCommitChangeParserWorker.php', ··· 4013 4014 'PhabricatorRepositoryManagementDeleteWorkflow' => 'PhabricatorRepositoryManagementWorkflow', 4014 4015 'PhabricatorRepositoryManagementDiscoverWorkflow' => 'PhabricatorRepositoryManagementWorkflow', 4015 4016 'PhabricatorRepositoryManagementListWorkflow' => 'PhabricatorRepositoryManagementWorkflow', 4017 + 'PhabricatorRepositoryManagementMarkImportedWorkflow' => 'PhabricatorRepositoryManagementWorkflow', 4016 4018 'PhabricatorRepositoryManagementPullWorkflow' => 'PhabricatorRepositoryManagementWorkflow', 4017 4019 'PhabricatorRepositoryManagementWorkflow' => 'PhutilArgumentWorkflow', 4018 4020 'PhabricatorRepositoryMercurialCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
+67
src/applications/repository/management/PhabricatorRepositoryManagementMarkImportedWorkflow.php
··· 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 + }