private function renderCloneURI(PhabricatorRepository $repository, PhabricatorRepositoryURI $uri)
 {
     if ($repository->isSVN()) {
         $display = csprintf('svn checkout %R %R', (string) $uri->getDisplayURI(), $repository->getCloneName());
     } else {
         $display = csprintf('%R', (string) $uri->getDisplayURI());
     }
     $display = (string) $display;
     $viewer = $this->getViewer();
     return id(new DiffusionCloneURIView())->setViewer($viewer)->setRepository($repository)->setRepositoryURI($uri)->setDisplayURI($display);
 }
 private function renderCloneCommand(PhabricatorRepository $repository, $uri, $serve_mode = null, $manage_uri = null)
 {
     require_celerity_resource('diffusion-icons-css');
     Javelin::initBehavior('select-on-click');
     switch ($repository->getVersionControlSystem()) {
         case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
             $command = csprintf('git clone %R', $uri);
             break;
         case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL:
             $command = csprintf('hg clone %R', $uri);
             break;
         case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
             if ($repository->isHosted()) {
                 $command = csprintf('svn checkout %R %R', $uri, $repository->getCloneName());
             } else {
                 $command = csprintf('svn checkout %R', $uri);
             }
             break;
     }
     $input = javelin_tag('input', array('type' => 'text', 'value' => (string) $command, 'class' => 'diffusion-clone-uri', 'sigil' => 'select-on-click', 'readonly' => 'true'));
     $extras = array();
     if ($serve_mode) {
         if ($serve_mode === PhabricatorRepository::SERVE_READONLY) {
             $extras[] = pht('(Read Only)');
         }
     }
     if ($manage_uri) {
         if ($this->getRequest()->getUser()->isLoggedIn()) {
             $extras[] = phutil_tag('a', array('href' => $manage_uri), pht('Manage Credentials'));
         }
     }
     if ($extras) {
         $extras = phutil_implode_html(' ', $extras);
         $extras = phutil_tag('div', array('class' => 'diffusion-clone-extras'), $extras);
     }
     return array($input, $extras);
 }
 private function buildBasicProperties(PhabricatorRepository $repository, PhabricatorActionListView $actions)
 {
     $viewer = $this->getRequest()->getUser();
     $view = id(new PHUIPropertyListView())->setUser($viewer)->setActionList($actions);
     $type = PhabricatorRepositoryType::getNameForRepositoryType($repository->getVersionControlSystem());
     $view->addProperty(pht('Type'), $type);
     $view->addProperty(pht('Callsign'), $repository->getCallsign());
     $clone_name = $repository->getDetail('clone-name');
     if ($repository->isHosted()) {
         $view->addProperty(pht('Clone/Checkout As'), $clone_name ? $clone_name . '/' : phutil_tag('em', array(), $repository->getCloneName() . '/'));
     }
     $project_phids = PhabricatorEdgeQuery::loadDestinationPHIDs($repository->getPHID(), PhabricatorProjectObjectHasProjectEdgeType::EDGECONST);
     if ($project_phids) {
         $this->loadHandles($project_phids);
         $project_text = $this->renderHandlesForPHIDs($project_phids);
     } else {
         $project_text = phutil_tag('em', array(), pht('None'));
     }
     $view->addProperty(pht('Projects'), $project_text);
     $view->addProperty(pht('Status'), $this->buildRepositoryStatus($repository));
     $view->addProperty(pht('Update Frequency'), $this->buildRepositoryUpdateInterval($repository));
     $description = $repository->getDetail('description');
     $view->addSectionHeader(pht('Description'));
     if (!strlen($description)) {
         $description = phutil_tag('em', array(), pht('No description provided.'));
     } else {
         $description = PhabricatorMarkupEngine::renderOneObject($repository, 'description', $viewer);
     }
     $view->addTextContent($description);
     return $view;
 }