Path: blob/master/src/applications/diffusion/controller/DiffusionCloneController.php
12242 views
<?php12final class DiffusionCloneController extends DiffusionController {34public function shouldAllowPublic() {5return true;6}78public function handleRequest(AphrontRequest $request) {9$viewer = $request->getViewer();10$response = $this->loadDiffusionContext();11if ($response) {12return $response;13}1415$drequest = $this->getDiffusionRequest();16$repository = $drequest->getRepository();1718$view = id(new PHUIPropertyListView())19->setUser($viewer);2021$display_never = PhabricatorRepositoryURI::DISPLAY_NEVER;22$warning = null;2324$uris = $repository->getURIs();25foreach ($uris as $uri) {26if ($uri->getIsDisabled()) {27continue;28}2930if ($uri->getEffectiveDisplayType() == $display_never) {31continue;32}3334if ($repository->isSVN()) {35$label = phutil_tag_div('diffusion-clone-label', pht('Checkout'));36} else {37$label = phutil_tag_div('diffusion-clone-label', pht('Clone'));38}3940$view->addProperty(41$label,42$this->renderCloneURI($repository, $uri));43}4445if (!$view->hasAnyProperties()) {46$view = id(new PHUIInfoView())47->setSeverity(PHUIInfoView::SEVERITY_NOTICE)48->appendChild(pht('Repository has no URIs set.'));49}5051$info = null;5253// Try to load alternatives. This may fail for repositories which have not54// cloned yet. If it does, just ignore it and continue.55try {56$alternatives = $drequest->getRefAlternatives();57} catch (ConduitClientException $ex) {58$alternatives = array();59}6061if ($alternatives) {62$message = array(63pht(64'The ref "%s" is ambiguous in this repository.',65$drequest->getBranch()),66' ',67phutil_tag(68'a',69array(70'href' => $drequest->generateURI(71array(72'action' => 'refs',73)),74),75pht('View Alternatives')),76);7778$messages = array($message);7980$warning = id(new PHUIInfoView())81->setSeverity(PHUIInfoView::SEVERITY_WARNING)82->setErrors(array($message));83}8485$cancel_uri = $drequest->generateURI(86array(87'action' => 'branch',88'path' => '/',89));9091return $this->newDialog()92->setTitle(pht('Clone Repository'))93->setWidth(AphrontDialogView::WIDTH_FORM)94->addCancelButton($cancel_uri, pht('Close'))95->appendChild(array($view, $warning));96}9798private function renderCloneURI(99PhabricatorRepository $repository,100PhabricatorRepositoryURI $uri) {101102if ($repository->isSVN()) {103$display = csprintf(104'svn checkout %R %R',105(string)$uri->getDisplayURI(),106$repository->getCloneName());107} else {108$display = csprintf('%R', (string)$uri->getDisplayURI());109}110111$display = (string)$display;112$viewer = $this->getViewer();113114return id(new DiffusionCloneURIView())115->setViewer($viewer)116->setRepository($repository)117->setRepositoryURI($uri)118->setDisplayURI($display);119}120121}122123124