Page MenuHomePhabricator

D7410.diff
No OneTemporary

D7410.diff

Index: src/applications/repository/application/PhabricatorApplicationRepositories.php
===================================================================
--- src/applications/repository/application/PhabricatorApplicationRepositories.php
+++ src/applications/repository/application/PhabricatorApplicationRepositories.php
@@ -30,8 +30,6 @@
'/repository/' => array(
'' => 'PhabricatorRepositoryListController',
'create/' => 'PhabricatorRepositoryCreateController',
- 'edit/(?P<id>[1-9]\d*)/(?:(?P<view>\w+)/)?' =>
- 'PhabricatorRepositoryEditController',
'delete/(?P<id>[1-9]\d*)/' => 'PhabricatorRepositoryDeleteController',
'project/edit/(?P<id>[1-9]\d*)/' =>
'PhabricatorRepositoryArcanistProjectEditController',
Index: src/applications/repository/controller/PhabricatorRepositoryEditController.php
===================================================================
--- src/applications/repository/controller/PhabricatorRepositoryEditController.php
+++ /dev/null
@@ -1,696 +0,0 @@
-<?php
-
-final class PhabricatorRepositoryEditController
- extends PhabricatorRepositoryController {
-
- private $id;
- private $view;
- private $repository;
- private $sideNav;
-
- public function willProcessRequest(array $data) {
- $this->id = $data['id'];
- $this->view = idx($data, 'view');
- }
-
- public function processRequest() {
-
- $request = $this->getRequest();
- $viewer = $request->getUser();
-
- $repository = id(new PhabricatorRepositoryQuery())
- ->setViewer($viewer)
- ->withIDs(array($this->id))
- ->executeOne();
- if (!$repository) {
- return new Aphront404Response();
- }
-
- $views = array(
- 'basic' => 'Basics',
- 'tracking' => 'Tracking',
- );
-
- $this->repository = $repository;
-
- if (!isset($views[$this->view])) {
- $this->view = head_key($views);
- }
-
- $nav = new AphrontSideNavFilterView();
- $base_uri = new PhutilURI('/repository/edit/'.$repository->getID().'/');
- $nav->setBaseURI($base_uri);
- foreach ($views as $view => $name) {
- $nav->addFilter($view, $name);
- }
- $nav->selectFilter($this->view, null);
-
- $nav->appendChild($this->renderDaemonNotice());
-
- $this->sideNav = $nav;
-
- switch ($this->view) {
- case 'basic':
- return $this->processBasicRequest();
- case 'tracking':
- return $this->processTrackingRequest();
- default:
- throw new Exception("Unknown view.");
- }
- }
-
- protected function processBasicRequest() {
- $request = $this->getRequest();
- $user = $request->getUser();
- $repository = $this->repository;
- $repository_id = $repository->getID();
-
- $errors = array();
-
- $e_name = true;
-
- if ($request->isFormPost()) {
- $repository->setName($request->getStr('name'));
-
- if (!strlen($repository->getName())) {
- $e_name = 'Required';
- $errors[] = 'Repository name is required.';
- } else {
- $e_name = null;
- }
-
- $repository->setDetail('description', $request->getStr('description'));
- $repository->setDetail('encoding', $request->getStr('encoding'));
-
- if (!$errors) {
- $repository->save();
- return id(new AphrontRedirectResponse())
- ->setURI('/repository/edit/'.$repository_id.'/basic/?saved=true');
- }
- }
-
- $error_view = null;
- if ($errors) {
- $error_view = new AphrontErrorView();
- $error_view->setErrors($errors);
- $error_view->setTitle('Form Errors');
- } else if ($request->getStr('saved')) {
- $error_view = new AphrontErrorView();
- $error_view->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
- $error_view->setTitle('Changes Saved');
- $error_view->appendChild('Repository changes were saved.');
- }
-
- $encoding_doc_link = PhabricatorEnv::getDoclink(
- 'article/User_Guide_UTF-8_and_Character_Encoding.html');
-
- $form = new AphrontFormView();
- $form
- ->setUser($user)
- ->setAction('/repository/edit/'.$repository->getID().'/')
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setLabel('Name')
- ->setName('name')
- ->setValue($repository->getName())
- ->setError($e_name)
- ->setCaption('Human-readable repository name.'))
- ->appendChild(
- id(new AphrontFormTextAreaControl())
- ->setLabel('Description')
- ->setName('description')
- ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_SHORT)
- ->setValue($repository->getDetail('description')))
- ->appendChild(
- id(new AphrontFormStaticControl())
- ->setLabel('Callsign')
- ->setName('callsign')
- ->setValue($repository->getCallsign()))
- ->appendChild(hsprintf('
- <p class="aphront-form-instructions">'.
- 'If source code in this repository uses a character '.
- 'encoding other than UTF-8 (for example, ISO-8859-1), '.
- 'specify it here. You can usually leave this field blank. '.
- 'See User Guide: '.
- '<a href="%s">UTF-8 and Character Encoding</a> for more information.'.
- '</p>',
- $encoding_doc_link))
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setLabel('Encoding')
- ->setName('encoding')
- ->setValue($repository->getDetail('encoding')))
- ->appendChild(
- id(new AphrontFormStaticControl())
- ->setLabel('Type')
- ->setName('type')
- ->setValue($repository->getVersionControlSystem()))
- ->appendChild(
- id(new AphrontFormStaticControl())
- ->setLabel('ID')
- ->setValue($repository->getID()))
- ->appendChild(
- id(new AphrontFormStaticControl())
- ->setLabel('PHID')
- ->setValue($repository->getPHID()))
- ->appendChild(
- id(new AphrontFormSubmitControl())
- ->setValue('Save'));
-
- $nav = $this->sideNav;
-
- $form_box = id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Edit Repository'))
- ->setFormError($error_view)
- ->setForm($form);
-
- $nav->appendChild($form_box);
-
- return $this->buildApplicationPage(
- $nav,
- array(
- 'title' => pht('Edit Repository'),
- 'device' => true,
- ));
- }
-
- private function processTrackingRequest() {
- $request = $this->getRequest();
- $user = $request->getUser();
- $repository = $this->repository;
- $repository_id = $repository->getID();
-
- $errors = array();
-
- $e_uri = null;
- $e_path = null;
-
- $is_git = false;
- $is_svn = false;
- $is_mercurial = false;
-
- $e_ssh_key = null;
- $e_ssh_keyfile = null;
- $e_branch = null;
-
- switch ($repository->getVersionControlSystem()) {
- case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
- $is_git = true;
- break;
- case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
- $is_svn = true;
- break;
- case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL:
- $is_mercurial = true;
- break;
- default:
- throw new Exception("Unsupported VCS!");
- }
-
- $has_branches = ($is_git || $is_mercurial);
- $has_local = ($is_git || $is_mercurial);
- $has_branch_filter = ($is_git);
- $has_auth_support = $is_svn;
-
- if ($request->isFormPost()) {
- $tracking = ($request->getStr('tracking') == 'enabled' ? true : false);
- $repository->setDetail('tracking-enabled', $tracking);
- $repository->setDetail('remote-uri', $request->getStr('uri'));
- if ($has_local) {
- $repository->setDetail('local-path', $request->getStr('path'));
- }
-
- if ($has_branch_filter) {
- $branch_filter = $request->getStrList('branch-filter');
- $branch_filter = array_fill_keys($branch_filter, true);
-
- $repository->setDetail('branch-filter', $branch_filter);
-
- $close_commits_filter = $request->getStrList('close-commits-filter');
- $close_commits_filter = array_fill_keys($close_commits_filter, true);
-
- $repository->setDetail('close-commits-filter', $close_commits_filter);
- }
-
- $repository->setDetail(
- 'disable-autoclose',
- $request->getStr('autoclose') == 'disabled' ? true : false);
-
- $repository->setDetail(
- 'pull-frequency',
- max(1, $request->getInt('frequency')));
-
- if ($has_branches) {
- $repository->setDetail(
- 'default-branch',
- $request->getStr('default-branch'));
- if ($is_git) {
- $branch_name = $repository->getDetail('default-branch');
- if (strpos($branch_name, '/') !== false) {
- $e_branch = 'Invalid';
- $errors[] = "Your branch name should not specify an explicit ".
- "remote. For instance, use 'master', not ".
- "'origin/master'.";
- }
- }
- }
-
- $repository->setDetail(
- 'default-owners-path',
- $request->getStr(
- 'default-owners-path',
- '/'));
-
- $repository->setDetail('ssh-login', $request->getStr('ssh-login'));
- $repository->setDetail('ssh-key', $request->getStr('ssh-key'));
- $repository->setDetail('ssh-keyfile', $request->getStr('ssh-keyfile'));
-
- $repository->setDetail('http-login', $request->getStr('http-login'));
- $repository->setDetail('http-pass', $request->getStr('http-pass'));
-
- $repository->setDetail('show-user', $request->getInt('show-user'));
-
- if ($repository->getDetail('ssh-key') &&
- $repository->getDetail('ssh-keyfile')) {
- $errors[] =
- "Specify only one of 'SSH Private Key' and 'SSH Private Key File', ".
- "not both.";
- $e_ssh_key = 'Choose Only One';
- $e_ssh_keyfile = 'Choose Only One';
- }
-
- $repository->setDetail(
- 'herald-disabled',
- $request->getInt('herald-disabled', 0));
-
- if ($is_svn) {
- $repository->setUUID($request->getStr('uuid'));
- $subpath = ltrim($request->getStr('svn-subpath'), '/');
- if ($subpath) {
- $subpath = rtrim($subpath, '/').'/';
- }
- $repository->setDetail('svn-subpath', $subpath);
- }
-
- if ($tracking) {
- if (!$repository->getDetail('remote-uri')) {
- $e_uri = 'Required';
- $errors[] = "Repository URI is required.";
- } else if ($is_svn &&
- !preg_match('@/$@', $repository->getDetail('remote-uri'))) {
-
- $e_uri = 'Invalid';
- $errors[] = 'Subversion Repository Root must end in a slash ("/").';
- } else {
- $e_uri = null;
- }
-
- if ($has_local) {
- if (!$repository->getDetail('local-path')) {
- $e_path = 'Required';
- $errors[] = "Local path is required.";
- } else {
- $e_path = null;
- }
- }
- }
-
- if (!$errors) {
- $repository->save();
- return id(new AphrontRedirectResponse())
- ->setURI('/repository/edit/'.$repository_id.'/tracking/?saved=true');
- }
- }
-
- $error_view = null;
- if ($errors) {
- $error_view = new AphrontErrorView();
- $error_view->setErrors($errors);
- $error_view->setTitle('Form Errors');
- } else if ($request->getStr('saved')) {
- $error_view = new AphrontErrorView();
- $error_view->setSeverity(AphrontErrorView::SEVERITY_NOTICE);
- $error_view->setTitle('Changes Saved');
- $error_view->appendChild('Tracking changes were saved.');
- } else if (!$repository->isTracked()) {
- $error_view = new AphrontErrorView();
- $error_view->setSeverity(AphrontErrorView::SEVERITY_WARNING);
- $error_view->setTitle('Repository Not Tracked');
- $error_view->appendChild(
- 'Tracking is currently "Disabled" for this repository, so it will '.
- 'not be imported into Phabricator. You can enable it below.');
- }
-
- switch ($repository->getVersionControlSystem()) {
- case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
- $is_git = true;
- break;
- case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
- $is_svn = true;
- break;
- }
-
- $doc_href = PhabricatorEnv::getDoclink('article/Diffusion_User_Guide.html');
- $user_guide_link = phutil_tag(
- 'a',
- array(
- 'href' => $doc_href,
- ),
- 'Diffusion User Guide');
-
- $form = new AphrontFormView();
- $form
- ->setUser($user)
- ->setAction('/repository/edit/'.$repository->getID().'/tracking/')
- ->appendChild(hsprintf(
- '<p class="aphront-form-instructions">Phabricator can track '.
- 'repositories, importing commits as they happen and notifying '.
- 'Differential, Diffusion, Herald, and other services. To enable '.
- 'tracking for a repository, configure it here and then start (or '.
- 'restart) the daemons. More information is available in the '.
- '<strong>%s</strong>.</p>',
- $user_guide_link));
-
- $form
- ->appendChild(
- id(new AphrontFormInsetView())
- ->setTitle('Basics')
- ->appendChild(id(new AphrontFormStaticControl())
- ->setLabel('Repository Name')
- ->setValue($repository->getName()))
- ->appendChild(id(new AphrontFormSelectControl())
- ->setName('tracking')
- ->setLabel('Tracking')
- ->setOptions(array(
- 'disabled' => 'Disabled',
- 'enabled' => 'Enabled',
- ))
- ->setValue(
- $repository->isTracked()
- ? 'enabled'
- : 'disabled')));
-
- $inset = new AphrontFormInsetView();
- $inset->setTitle('Remote URI');
-
- $clone_command = null;
- $fetch_command = null;
- if ($is_git) {
- $clone_command = 'git clone';
- $fetch_command = 'git fetch';
- } else if ($is_mercurial) {
- $clone_command = 'hg clone';
- $fetch_command = 'hg pull';
- }
-
- $uri_label = 'Repository URI';
- if ($has_local) {
- if ($is_git) {
- $instructions = hsprintf(
- 'Enter the URI to clone this repository from. It should look like '.
- '<tt>git@github.com:example/example.git</tt>, '.
- '<tt>ssh://user@host.com/git/example.git</tt>, or '.
- '<tt>file:///local/path/to/repo</tt>');
- } else if ($is_mercurial) {
- $instructions = hsprintf(
- 'Enter the URI to clone this repository from. It should look '.
- 'something like <tt>ssh://user@host.com/hg/example</tt>');
- }
- $inset->appendChild(hsprintf(
- '<p class="aphront-form-instructions">%s</p>',
- $instructions));
- } else if ($is_svn) {
- $instructions = hsprintf(
- 'Enter the <strong>Repository Root</strong> for this SVN repository. '.
- 'You can figure this out by running <tt>svn info</tt> and looking at '.
- 'the value in the <tt>Repository Root</tt> field. It should be a URI '.
- 'and look like <tt>http://svn.example.org/svn/</tt>, '.
- '<tt>svn+ssh://svn.example.com/svnroot/</tt>, or '.
- '<tt>svn://svn.example.net/svn/</tt>');
- $inset->appendChild(hsprintf(
- '<p class="aphront-form-instructions">%s</p>',
- $instructions));
- $uri_label = 'Repository Root';
- }
-
- $inset
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setName('uri')
- ->setLabel($uri_label)
- ->setID('remote-uri')
- ->setValue($repository->getDetail('remote-uri'))
- ->setError($e_uri));
-
- $inset->appendChild(
- id(new AphrontFormCheckboxControl())
- ->addCheckbox(
- 'show-user',
- 1,
- pht('Permit users to view the username of this connection.'),
- $repository->getDetail('show-user') == 1));
-
- $inset->appendChild(hsprintf(
- '<div class="aphront-form-instructions">'.
- 'If you want to connect to this repository over SSH, enter the '.
- 'username and private key to use. You can leave these fields blank if '.
- 'the repository does not use SSH.'.
- '</div>'));
-
- $inset
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setName('ssh-login')
- ->setLabel('SSH User')
- ->setValue($repository->getDetail('ssh-login')))
- ->appendChild(
- id(new AphrontFormTextAreaControl())
- ->setName('ssh-key')
- ->setLabel('SSH Private Key')
- ->setHeight(AphrontFormTextAreaControl::HEIGHT_VERY_SHORT)
- ->setValue($repository->getDetail('ssh-key'))
- ->setError($e_ssh_key)
- ->setCaption(
- hsprintf('Specify the entire private key, <em>or</em>...')))
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setName('ssh-keyfile')
- ->setLabel('SSH Private Key File')
- ->setValue($repository->getDetail('ssh-keyfile'))
- ->setError($e_ssh_keyfile)
- ->setCaption(
- '...specify a path on disk where the daemon should '.
- 'look for a private key.'));
-
- if ($has_auth_support) {
- $inset
- ->appendChild(hsprintf(
- '<div class="aphront-form-instructions">'.
- 'If you want to connect to this repository with a username and '.
- 'password, such as over HTTP Basic Auth or SVN with SASL, '.
- 'enter the username and password to use. You can leave these '.
- 'fields blank if the repository does not use a username and '.
- 'password for authentication.'.
- '</div>'))
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setName('http-login')
- ->setLabel('Username')
- ->setValue($repository->getDetail('http-login')))
- ->appendChild(
- id(new AphrontFormPasswordControl())
- ->setName('http-pass')
- ->setLabel('Password')
- ->setValue($repository->getDetail('http-pass')));
- }
-
- $inset
- ->appendChild(hsprintf(
- '<div class="aphront-form-important">'.
- 'To test your authentication configuration, <strong>save this '.
- 'form</strong> and then run this script:'.
- '<code>'.
- 'phabricator/ $ ./scripts/repository/test_connection.php %s'.
- '</code>'.
- 'This will verify that your configuration is correct and the '.
- 'daemons can connect to the remote repository and pull changes '.
- 'from it.'.
- '</div>',
- $repository->getCallsign()));
-
- $form->appendChild($inset);
-
- $inset = new AphrontFormInsetView();
- $inset->setTitle('Repository Information');
-
- if ($has_local) {
- $default_local_path = '';
- $default =
- PhabricatorEnv::getEnvConfig('repository.default-local-path');
- if (!$repository->getDetail('remote-uri') && $default) {
- $default_local_path = $default.strtolower($repository->getCallsign());
- }
- $inset->appendChild(hsprintf(
- '<p class="aphront-form-instructions">Select a path on local disk '.
- 'which the daemons should <tt>%s</tt> the repository into. This must '.
- 'be readable and writable by the daemons, and readable by the '.
- 'webserver. The daemons will <tt>%s</tt> and keep this repository up '.
- 'to date.</p>',
- $clone_command,
- $fetch_command));
- $inset->appendChild(
- id(new AphrontFormTextControl())
- ->setName('path')
- ->setLabel('Local Path')
- ->setValue($repository->getDetail('local-path', $default_local_path))
- ->setError($e_path));
- } else if ($is_svn) {
- $inset->appendChild(hsprintf(
- '<p class="aphront-form-instructions">If you only want to parse one '.
- 'subpath of the repository, specify it here, relative to the '.
- 'repository root (e.g., <tt>trunk/</tt> or <tt>projects/wheel/</tt>). '.
- 'If you want to parse multiple subdirectories, create a separate '.
- 'Phabricator repository for each one.</p>'));
- $inset->appendChild(
- id(new AphrontFormTextControl())
- ->setName('svn-subpath')
- ->setLabel('Subpath')
- ->setValue($repository->getDetail('svn-subpath'))
- ->setError($e_path));
- }
-
- if ($has_branch_filter) {
- $branch_filter_str = implode(
- ', ',
- array_keys($repository->getDetail('branch-filter', array())));
- $inset
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setName('branch-filter')
- ->setLabel('Track Only')
- ->setValue($branch_filter_str)
- ->setCaption(hsprintf(
- 'Optional list of branches to track. Other branches will be '.
- 'completely ignored. If left empty, all branches are tracked. '.
- 'Example: <tt>master, release</tt>')));
- }
-
- $inset
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setName('frequency')
- ->setLabel('Pull Frequency')
- ->setValue($repository->getDetail('pull-frequency', 15))
- ->setCaption(
- 'Number of seconds daemon should sleep between requests. Larger '.
- 'numbers reduce load but also decrease responsiveness.'));
-
- $form->appendChild($inset);
-
- $inset = new AphrontFormInsetView();
- $inset->setTitle('Application Configuration');
-
- if ($has_branches) {
- $inset
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setName('default-branch')
- ->setLabel('Default Branch')
- ->setValue($repository->getDefaultBranch())
- ->setError($e_branch)
- ->setCaption(
- 'Default branch to show in Diffusion.'));
- }
-
- $inset
- ->appendChild(id(new AphrontFormSelectControl())
- ->setName('autoclose')
- ->setLabel('Autoclose')
- ->setOptions(array(
- 'enabled' => 'Enabled: Automatically Close Pushed Revisions',
- 'disabled' => 'Disabled: Ignore Pushed Revisions',
- ))
- ->setCaption(
- "Automatically close Differential revisions when associated commits ".
- "are pushed to this repository.")
- ->setValue(
- $repository->getDetail('disable-autoclose', false)
- ? 'disabled'
- : 'enabled'));
-
- if ($has_branch_filter) {
- $close_commits_filter_str = implode(
- ', ',
- array_keys($repository->getDetail('close-commits-filter', array())));
- $inset
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setName('close-commits-filter')
- ->setLabel('Autoclose Branches')
- ->setValue($close_commits_filter_str)
- ->setCaption(
- 'Optional list of branches which can trigger autoclose. '.
- 'If left empty, all branches trigger autoclose.'));
- }
-
- $inset
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setName('default-owners-path')
- ->setLabel('Default Owners Path')
- ->setValue(
- $repository->getDetail(
- 'default-owners-path',
- '/'))
- ->setCaption('Default path in Owners tool.'));
-
- $inset
- ->appendChild(
- id(new AphrontFormSelectControl())
- ->setName('herald-disabled')
- ->setLabel('Herald/Feed Enabled')
- ->setValue($repository->getDetail('herald-disabled', 0))
- ->setOptions(
- array(
- 0 => 'Enabled - Send Email and Publish Stories',
- 1 => 'Disabled - Do Not Send Email or Publish Stories',
- ))
- ->setCaption(
- 'You can disable Herald commit notifications and feed stories '.
- 'for this repository. This can be useful when initially importing '.
- 'a repository. Feed stories are never published about commits '.
- 'that are more than 24 hours old.'));
-
- if ($is_svn) {
- $inset
- ->appendChild(
- id(new AphrontFormTextControl())
- ->setName('uuid')
- ->setLabel('UUID')
- ->setValue($repository->getUUID())
- ->setCaption(hsprintf('Repository UUID from <tt>svn info</tt>.')));
- }
-
- $form->appendChild($inset);
-
- $form
- ->appendChild(
- id(new AphrontFormSubmitControl())
- ->setValue('Save Configuration'));
-
- $form_box = id(new PHUIObjectBoxView())
- ->setHeaderText(pht('Edit Repository Tracking'))
- ->setFormError($error_view)
- ->setForm($form);
-
- $nav = $this->sideNav;
- $nav->appendChild($form_box);
-
- return $this->buildApplicationPage(
- $nav,
- array(
- 'title' => pht('Edit Repository Tracking'),
- ));
- }
-
-}
Index: src/applications/repository/controller/PhabricatorRepositoryListController.php
===================================================================
--- src/applications/repository/controller/PhabricatorRepositoryListController.php
+++ src/applications/repository/controller/PhabricatorRepositoryListController.php
@@ -38,7 +38,7 @@
'a',
array(
'class' => 'button small grey',
- 'href' => '/repository/edit/'.$repo->getID().'/',
+ 'href' => '/diffusion/'.$repo->getCallsign().'/edit/',
),
'Edit'),
);

File Metadata

Mime Type
text/plain
Expires
Sat, Mar 22, 7:07 AM (4 d, 21 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7333533
Default Alt Text
D7410.diff (25 KB)

Event Timeline