mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-19 12:00:55 +01:00
Remove "repository.create" Conduit API method
Summary: Ref T10748. This has had many problems for a long time, can't create hosted repositories, can't create cluster repositories, etc. It is obsoleted by `diffusion.repository.edit`. Remove it. (Right now `diffusion.repository.edit` isn't a strict replacement, but it will be as soon as the URI stuff cuts over.) Test Plan: Grepped for `repository.create`. Reviewers: chad Reviewed By: chad Maniphest Tasks: T10748 Differential Revision: https://secure.phabricator.com/D15838
This commit is contained in:
parent
dd2b10b8f8
commit
b8b700c179
2 changed files with 0 additions and 143 deletions
|
@ -4105,7 +4105,6 @@ phutil_register_library_map(array(
|
|||
'ReleephWorkRecordPickStatusConduitAPIMethod' => 'applications/releeph/conduit/work/ReleephWorkRecordPickStatusConduitAPIMethod.php',
|
||||
'RemarkupProcessConduitAPIMethod' => 'applications/remarkup/conduit/RemarkupProcessConduitAPIMethod.php',
|
||||
'RepositoryConduitAPIMethod' => 'applications/repository/conduit/RepositoryConduitAPIMethod.php',
|
||||
'RepositoryCreateConduitAPIMethod' => 'applications/repository/conduit/RepositoryCreateConduitAPIMethod.php',
|
||||
'RepositoryQueryConduitAPIMethod' => 'applications/repository/conduit/RepositoryQueryConduitAPIMethod.php',
|
||||
'ShellLogView' => 'applications/harbormaster/view/ShellLogView.php',
|
||||
'SlowvoteConduitAPIMethod' => 'applications/slowvote/conduit/SlowvoteConduitAPIMethod.php',
|
||||
|
@ -8988,7 +8987,6 @@ phutil_register_library_map(array(
|
|||
'ReleephWorkRecordPickStatusConduitAPIMethod' => 'ReleephConduitAPIMethod',
|
||||
'RemarkupProcessConduitAPIMethod' => 'ConduitAPIMethod',
|
||||
'RepositoryConduitAPIMethod' => 'ConduitAPIMethod',
|
||||
'RepositoryCreateConduitAPIMethod' => 'RepositoryConduitAPIMethod',
|
||||
'RepositoryQueryConduitAPIMethod' => 'RepositoryConduitAPIMethod',
|
||||
'ShellLogView' => 'AphrontView',
|
||||
'SlowvoteConduitAPIMethod' => 'ConduitAPIMethod',
|
||||
|
|
|
@ -1,141 +0,0 @@
|
|||
<?php
|
||||
|
||||
final class RepositoryCreateConduitAPIMethod
|
||||
extends RepositoryConduitAPIMethod {
|
||||
|
||||
public function getAPIMethodName() {
|
||||
return 'repository.create';
|
||||
}
|
||||
|
||||
public function getMethodStatus() {
|
||||
return self::METHOD_STATUS_UNSTABLE;
|
||||
}
|
||||
|
||||
public function getMethodStatusDescription() {
|
||||
return pht('Repository methods are new and subject to change.');
|
||||
}
|
||||
|
||||
public function getMethodDescription() {
|
||||
return pht('Create a new repository.');
|
||||
}
|
||||
|
||||
protected function defineParamTypes() {
|
||||
$vcs_const = $this->formatStringConstants(array('git', 'hg', 'svn'));
|
||||
|
||||
return array(
|
||||
'name' => 'required string',
|
||||
'vcs' => 'required '.$vcs_const,
|
||||
'callsign' => 'required string',
|
||||
'description' => 'optional string',
|
||||
'encoding' => 'optional string',
|
||||
'tracking' => 'optional bool',
|
||||
'uri' => 'required string',
|
||||
'credentialPHID' => 'optional string',
|
||||
'svnSubpath' => 'optional string',
|
||||
'branchFilter' => 'optional list<string>',
|
||||
'closeCommitsFilter' => 'optional list<string>',
|
||||
'pullFrequency' => 'optional int',
|
||||
'defaultBranch' => 'optional string',
|
||||
'heraldEnabled' => 'optional bool, default = true',
|
||||
'autocloseEnabled' => 'optional bool, default = true',
|
||||
'svnUUID' => 'optional string',
|
||||
);
|
||||
}
|
||||
|
||||
protected function defineReturnType() {
|
||||
return 'nonempty dict';
|
||||
}
|
||||
|
||||
protected function defineErrorTypes() {
|
||||
return array(
|
||||
'ERR-DUPLICATE' => pht('Duplicate repository callsign.'),
|
||||
'ERR-BAD-CALLSIGN' => pht(
|
||||
'Callsign is required and must be ALL UPPERCASE LETTERS.'),
|
||||
'ERR-UNKNOWN-REPOSITORY-VCS' => pht('Unknown repository VCS type.'),
|
||||
);
|
||||
}
|
||||
|
||||
protected function execute(ConduitAPIRequest $request) {
|
||||
$application = id(new PhabricatorApplicationQuery())
|
||||
->setViewer($request->getUser())
|
||||
->withClasses(array('PhabricatorDiffusionApplication'))
|
||||
->executeOne();
|
||||
|
||||
PhabricatorPolicyFilter::requireCapability(
|
||||
$request->getUser(),
|
||||
$application,
|
||||
DiffusionCreateRepositoriesCapability::CAPABILITY);
|
||||
|
||||
// TODO: This has some duplication with (and lacks some of the validation
|
||||
// of) the web workflow; refactor things so they can share more code as this
|
||||
// stabilizes. Specifically, this should move to transactions since they
|
||||
// work properly now.
|
||||
|
||||
$repository = PhabricatorRepository::initializeNewRepository(
|
||||
$request->getUser());
|
||||
|
||||
$repository->setName($request->getValue('name'));
|
||||
|
||||
$callsign = $request->getValue('callsign');
|
||||
if (!preg_match('/^[A-Z]+\z/', $callsign)) {
|
||||
throw new ConduitException('ERR-BAD-CALLSIGN');
|
||||
}
|
||||
$repository->setCallsign($callsign);
|
||||
|
||||
$local_path = PhabricatorEnv::getEnvConfig(
|
||||
'repository.default-local-path');
|
||||
|
||||
$local_path = rtrim($local_path, '/');
|
||||
$local_path = $local_path.'/'.$callsign.'/';
|
||||
|
||||
$vcs = $request->getValue('vcs');
|
||||
|
||||
$map = array(
|
||||
'git' => PhabricatorRepositoryType::REPOSITORY_TYPE_GIT,
|
||||
'hg' => PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL,
|
||||
'svn' => PhabricatorRepositoryType::REPOSITORY_TYPE_SVN,
|
||||
);
|
||||
if (empty($map[$vcs])) {
|
||||
throw new ConduitException('ERR-UNKNOWN-REPOSITORY-VCS');
|
||||
}
|
||||
$repository->setVersionControlSystem($map[$vcs]);
|
||||
|
||||
$repository->setCredentialPHID($request->getValue('credentialPHID'));
|
||||
|
||||
$remote_uri = $request->getValue('uri');
|
||||
PhabricatorRepository::assertValidRemoteURI($remote_uri);
|
||||
|
||||
$details = array(
|
||||
'encoding' => $request->getValue('encoding'),
|
||||
'description' => $request->getValue('description'),
|
||||
'tracking-enabled' => (bool)$request->getValue('tracking', true),
|
||||
'remote-uri' => $remote_uri,
|
||||
'branch-filter' => array_fill_keys(
|
||||
$request->getValue('branchFilter', array()),
|
||||
true),
|
||||
'close-commits-filter' => array_fill_keys(
|
||||
$request->getValue('closeCommitsFilter', array()),
|
||||
true),
|
||||
'pull-frequency' => $request->getValue('pullFrequency'),
|
||||
'default-branch' => $request->getValue('defaultBranch'),
|
||||
'herald-disabled' => !$request->getValue('heraldEnabled', true),
|
||||
'svn-subpath' => $request->getValue('svnSubpath'),
|
||||
'disable-autoclose' => !$request->getValue('autocloseEnabled', true),
|
||||
);
|
||||
|
||||
foreach ($details as $key => $value) {
|
||||
$repository->setDetail($key, $value);
|
||||
}
|
||||
|
||||
$repository->setLocalPath($local_path);
|
||||
|
||||
try {
|
||||
$repository->save();
|
||||
} catch (AphrontDuplicateKeyQueryException $ex) {
|
||||
throw new ConduitException('ERR-DUPLICATE');
|
||||
}
|
||||
|
||||
return $repository->toDictionary();
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue