Page MenuHomePhabricator

D7579.diff
No OneTemporary

D7579.diff

Index: scripts/repository/manage_repositories.php
===================================================================
--- scripts/repository/manage_repositories.php
+++ scripts/repository/manage_repositories.php
@@ -18,6 +18,7 @@
$workflows = array(
new PhabricatorRepositoryManagementPullWorkflow(),
new PhabricatorRepositoryManagementDiscoverWorkflow(),
+ new PhabricatorRepositoryManagementEditWorkflow(),
new PhabricatorRepositoryManagementListWorkflow(),
new PhabricatorRepositoryManagementDeleteWorkflow(),
new PhabricatorRepositoryManagementMarkImportedWorkflow(),
Index: src/__phutil_library_map__.php
===================================================================
--- src/__phutil_library_map__.php
+++ src/__phutil_library_map__.php
@@ -1731,6 +1731,7 @@
'PhabricatorRepositoryListController' => 'applications/repository/controller/PhabricatorRepositoryListController.php',
'PhabricatorRepositoryManagementDeleteWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementDeleteWorkflow.php',
'PhabricatorRepositoryManagementDiscoverWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementDiscoverWorkflow.php',
+ 'PhabricatorRepositoryManagementEditWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementEditWorkflow.php',
'PhabricatorRepositoryManagementImportingWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementImportingWorkflow.php',
'PhabricatorRepositoryManagementListWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementListWorkflow.php',
'PhabricatorRepositoryManagementMarkImportedWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementMarkImportedWorkflow.php',
@@ -4174,6 +4175,7 @@
'PhabricatorRepositoryListController' => 'PhabricatorRepositoryController',
'PhabricatorRepositoryManagementDeleteWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementDiscoverWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
+ 'PhabricatorRepositoryManagementEditWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementImportingWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementListWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
'PhabricatorRepositoryManagementMarkImportedWorkflow' => 'PhabricatorRepositoryManagementWorkflow',
Index: src/applications/metamta/contentsource/PhabricatorContentSource.php
===================================================================
--- src/applications/metamta/contentsource/PhabricatorContentSource.php
+++ src/applications/metamta/contentsource/PhabricatorContentSource.php
@@ -9,6 +9,7 @@
const SOURCE_MOBILE = 'mobile';
const SOURCE_TABLET = 'tablet';
const SOURCE_FAX = 'fax';
+ const SOURCE_CONSOLE = 'console';
const SOURCE_LEGACY = 'legacy';
private $source;
@@ -39,6 +40,12 @@
return $obj;
}
+ public static function newConsoleSource() {
+ return self::newForSource(
+ PhabricatorContentSource::SOURCE_CONSOLE,
+ array());
+ }
+
public static function newFromRequest(AphrontRequest $request) {
return self::newForSource(
PhabricatorContentSource::SOURCE_WEB,
@@ -61,6 +68,7 @@
self::SOURCE_MOBILE => pht('Mobile'),
self::SOURCE_TABLET => pht('Tablet'),
self::SOURCE_FAX => pht('Fax'),
+ self::SOURCE_CONSOLE => pht('Console'),
self::SOURCE_LEGACY => pht('Legacy'),
self::SOURCE_UNKNOWN => pht('Other'),
);
Index: src/applications/repository/management/PhabricatorRepositoryManagementDeleteWorkflow.php
===================================================================
--- src/applications/repository/management/PhabricatorRepositoryManagementDeleteWorkflow.php
+++ src/applications/repository/management/PhabricatorRepositoryManagementDeleteWorkflow.php
@@ -15,6 +15,10 @@
'help' => 'Show additional debugging information.',
),
array(
+ 'name' => 'force',
+ 'help' => 'Do not prompt for confirmation.',
+ ),
+ array(
'name' => 'repos',
'wildcard' => true,
),
@@ -30,9 +34,25 @@
}
$console = PhutilConsole::getConsole();
+
+ if (!$args->getArg('force')) {
+ $console->writeOut("%s\n\n", pht('These repositories will be deleted:'));
+
+ foreach ($repos as $repo) {
+ $console->writeOut(
+ " %s %s\n",
+ 'r'.$repo->getCallsign(),
+ $repo->getName());
+ }
+
+ $prompt = pht('Permanently delete these repositories?');
+ if (!$console->confirm($prompt)) {
+ return 1;
+ }
+ }
+
foreach ($repos as $repo) {
$console->writeOut("Deleting '%s'...\n", $repo->getCallsign());
-
$repo->delete();
}
Index: src/applications/repository/management/PhabricatorRepositoryManagementEditWorkflow.php
===================================================================
--- /dev/null
+++ src/applications/repository/management/PhabricatorRepositoryManagementEditWorkflow.php
@@ -0,0 +1,96 @@
+<?php
+
+final class PhabricatorRepositoryManagementEditWorkflow
+ extends PhabricatorRepositoryManagementWorkflow {
+
+ public function didConstruct() {
+ $this
+ ->setName('edit')
+ ->setExamples('**edit** --as __username__ __repository__ ...')
+ ->setSynopsis('Edit __repository__, named by callsign.')
+ ->setArguments(
+ array(
+ array(
+ 'name' => 'repos',
+ 'wildcard' => true,
+ ),
+ array(
+ 'name' => 'as',
+ 'param' => 'user',
+ 'help' => 'Edit as user.',
+ ),
+ array(
+ 'name' => 'local-path',
+ 'param' => 'path',
+ 'help' => 'Edit the local path.',
+ ),
+ ));
+ }
+
+ public function execute(PhutilArgumentParser $args) {
+ $repos = $this->loadRepositories($args, 'repos');
+
+ if (!$repos) {
+ throw new PhutilArgumentUsageException(
+ "Specify one or more repositories to edit, by callsign.");
+ }
+
+ $console = PhutilConsole::getConsole();
+
+ // TODO: It would be nice to just take this action as "Administrator" or
+ // similar, since that would make it easier to use this script, harder to
+ // impersonate users, and more clear to viewers what happened. However,
+ // the omnipotent user doesn't have a PHID right now, can't be loaded,
+ // doesn't have a handle, etc. Adding all of that is fairly involved, and
+ // I want to wait for stronger use cases first.
+
+ $username = $args->getArg('as');
+ if (!$username) {
+ throw new PhutilArgumentUsageException(
+ pht("Specify a user to edit as with --as <username>."));
+ }
+
+ $actor = id(new PhabricatorPeopleQuery())
+ ->setViewer(PhabricatorUser::getOmnipotentUser())
+ ->withUsernames(array($username))
+ ->executeOne();
+
+ if (!$actor) {
+ throw new PhutilArgumentUsageException(
+ pht("No such user '%s'!", $username));
+ }
+
+ foreach ($repos as $repo) {
+ $console->writeOut("Editing '%s'...\n", $repo->getCallsign());
+
+ $xactions = array();
+
+ $type_local_path = PhabricatorRepositoryTransaction::TYPE_LOCAL_PATH;
+
+ if ($args->getArg('local-path')) {
+ $xactions[] = id(new PhabricatorRepositoryTransaction())
+ ->setTransactionType($type_local_path)
+ ->setNewValue($args->getArg('local-path'));
+ }
+
+ if (!$xactions) {
+ throw new PhutilArgumentUsageException(
+ pht("Specify one or more fields to edit!"));
+ }
+
+ $content_source = PhabricatorContentSource::newConsoleSource();
+
+ $editor = id(new PhabricatorRepositoryEditor())
+ ->setActor($actor)
+ ->setContentSource($content_source)
+ ->setContinueOnNoEffect(true)
+ ->setContinueOnMissingFields(true)
+ ->applyTransactions($repo, $xactions);
+ }
+
+ $console->writeOut("Done.\n");
+
+ return 0;
+ }
+
+}

File Metadata

Mime Type
text/plain
Expires
Wed, Dec 25, 7:44 PM (11 h, 15 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6927540
Default Alt Text
D7579.diff (8 KB)

Event Timeline