示例#1
0
 private function getView()
 {
     if (empty($_REQUEST['a'])) {
         $_REQUEST['a'] = 'summary';
     } else {
         if ($_REQUEST['a'] === 'blobdiff' && isset($_REQUEST['jenkins']) && $_REQUEST['jenkins'] === 'true') {
             $this->inverseURLArgumentsForGitPhpDiff();
         }
     }
     set_time_limit(300);
     $_GET['a'] = $_REQUEST['a'];
     $_REQUEST['group_id'] = $this->repository->getProjectId();
     $_REQUEST['repo_id'] = $this->repository->getId();
     $_REQUEST['repo_name'] = $this->repository->getFullName();
     $_GET['p'] = $_REQUEST['repo_name'] . '.git';
     $_REQUEST['repo_path'] = $this->repository->getPath();
     $_REQUEST['project_dir'] = $this->repository->getProject()->getUnixName();
     $_REQUEST['git_root_path'] = $this->repository->getGitRootPath();
     $_REQUEST['action'] = 'view';
     $this->preSanitizeRequestForGitphp();
     if (empty($_REQUEST['noheader'])) {
         echo '<div id="gitphp" class="plugin_git_gitphp">';
     }
     include $this->getGitPhpIndexPath();
     if (empty($_REQUEST['noheader'])) {
         echo '</div>';
     }
 }
 /**
  * Display access control management for gitolite backend
  *
  * @param Integer $project_id Project Id, to manage permissions when performing a cross project fork
  *
  * @return String
  */
 public function displayAccessControl($project_id = null)
 {
     $project = $project_id ? ProjectManager::instance()->getProject($project_id) : $this->repository->getProject();
     $renderer = TemplateRendererFactory::build()->getRenderer(dirname(GIT_BASE_DIR) . '/templates');
     $presenter = new GitPresenters_AccessControlPresenter($this->repository->isMigratedToGerrit() ? true : false, 'repo_access[' . Git::PERM_READ . ']', 'repo_access[' . Git::PERM_WRITE . ']', 'repo_access[' . Git::PERM_WPLUS . ']', $this->getOptions($project, Git::PERM_READ), $this->getOptions($project, Git::PERM_WRITE), $this->getOptions($project, Git::PERM_WPLUS));
     return $renderer->renderToString('access-control', $presenter);
 }
 /**
  * @param GitRepository $repository
  * @return string the base url to access the git repository regarding plugin configuration
  */
 public function getRepositoryBaseUrl(GitRepository $repository)
 {
     if ($this->git_plugin->areFriendlyUrlsActivated()) {
         return GIT_BASE_URL . '/' . $repository->getProject()->getUnixName() . '/' . $repository->getFullName();
     } else {
         return GIT_BASE_URL . '/index.php/' . $repository->getProjectId() . '/view/' . $repository->getId() . '/';
     }
 }
示例#4
0
 /**
  * @return Project|null
  */
 public function getProject()
 {
     if (!$this->repository) {
         if (!preg_match($this->standard_index_pattern, $this->uri, $matches)) {
             return null;
         }
         return $this->project_manager->getProject($matches['project_id']);
     }
     return $this->repository->getProject();
 }
 public function getForRepository(GitRepository $repository)
 {
     $project = $repository->getProject();
     $repo_config = '';
     $repo_config .= $this->fetchConfigPermissions($project, $repository, Git::PERM_READ);
     $repo_config .= $this->formatPermission(Git::PERM_READ, $this->getMirrorUserNames($repository));
     if ($repository->isMigratedToGerrit()) {
         $key = new Git_RemoteServer_Gerrit_ReplicationSSHKey();
         $key->setGerritHostId($repository->getRemoteServerId());
         $repo_config .= $this->formatPermission(Git::PERM_WPLUS, array($key->getUserName()));
     } else {
         $repo_config .= $this->fetchConfigPermissions($project, $repository, Git::PERM_WRITE);
         $repo_config .= $this->fetchConfigPermissions($project, $repository, Git::PERM_WPLUS);
     }
     return $repo_config;
 }
 /**
  * @return array
  */
 private function buildPanes(GitRepository $repository)
 {
     $panes = array(new GitViews_RepoManagement_Pane_GeneralSettings($repository, $this->request));
     if ($repository->getBackendType() == GitDao::BACKEND_GITOLITE) {
         $panes[] = new GitViews_RepoManagement_Pane_Gerrit($repository, $this->request, $this->driver_factory, $this->gerrit_servers, $this->gerrit_config_templates);
     }
     $panes[] = new GitViews_RepoManagement_Pane_AccessControl($repository, $this->request);
     $mirrors = $this->mirror_data_mapper->fetchAllForProject($repository->getProject());
     if (count($mirrors) > 0) {
         $repository_mirrors = $this->mirror_data_mapper->fetchAllRepositoryMirrors($repository);
         $panes[] = new GitViews_RepoManagement_Pane_Mirroring($repository, $this->request, $mirrors, $repository_mirrors);
     }
     $panes[] = new GitViews_RepoManagement_Pane_Notification($repository, $this->request);
     $panes[] = new GitViews_RepoManagement_Pane_Delete($repository, $this->request);
     $indexed_panes = array();
     foreach ($panes as $pane) {
         if ($pane->canBeDisplayed()) {
             $indexed_panes[$pane->getIdentifier()] = $pane;
         }
     }
     return $indexed_panes;
 }
 private function shouldAddRegisteredUsersToGroup(GitRepository $repository, $permission, $group)
 {
     return array_intersect(array(ProjectUGroup::ANONYMOUS, ProjectUGroup::REGISTERED, ProjectUGroup::AUTHENTICATED), $group) && $repository->getProject()->isPublic() && $this->user_finder->areRegisteredUsersAllowedTo($permission, $repository);
 }
 private function inSameProject(GitRepository $repository1, GitRepository $repository2)
 {
     return $repository1->getProject()->getId() == $repository2->getProject()->getId();
 }
示例#9
0
 private function isInPrivateProject(GitRepository $repository)
 {
     return $repository->getProject()->isPublic() == false;
 }
示例#10
0
 /**
  * Return URL to access the respository for remote git commands
  *
  * @param  GitRepository $repository
  * @return String
  */
 public function getAccessURL(GitRepository $repository)
 {
     $serverName = $_SERVER['SERVER_NAME'];
     $user = UserManager::instance()->getCurrentUser();
     return array('ssh' => $user->getUserName() . '@' . $serverName . ':/gitroot/' . $repository->getProject()->getUnixName() . '/' . $repository->getName() . '.git');
 }
示例#11
0
 public function delete(GitRepository $repository)
 {
     $id = $repository->getId();
     $projectId = $repository->getProjectId();
     $id = $this->da->escapeInt($id);
     $projectId = $this->da->escapeInt($projectId);
     if (empty($id) || empty($projectId)) {
         throw new GitDaoException($GLOBALS['Language']->getText('plugin_git', 'dao_delete_params'));
     }
     $deletionDate = $repository->getDeletionDate();
     $projectName = $repository->getProject()->getUnixName();
     $backup_path = str_replace('/', '_', $repository->getFullName());
     $backup_path .= '_' . strtotime($deletionDate);
     $backup_path = $projectName . '_' . $backup_path;
     $backup_path = $this->da->quoteSmart($backup_path);
     $deletionDate = $this->da->quoteSmart($deletionDate);
     $query = ' UPDATE ' . $this->getTable() . ' SET ' . self::REPOSITORY_DELETION_DATE . '=' . $deletionDate . ', ' . self::REPOSITORY_BACKUP_PATH . '=' . $backup_path . ' WHERE ' . self::REPOSITORY_ID . '=' . $id . ' AND ' . self::FK_PROJECT_ID . '=' . $projectId;
     $r = $this->update($query);
     $ar = $this->da->affectedRows();
     if ($r === false || $ar == 0) {
         throw new GitDaoException($GLOBALS['Language']->getText('plugin_git', 'dao_delete_error') . ' ' . $this->da->isError());
     }
     if ($ar == 1) {
         return true;
     }
     return false;
 }
示例#12
0
 /**
  * Configure gitphp output
  * 
  * @param GitRepository $repository
  */
 public function getView($repository)
 {
     include_once 'common/include/Codendi_HTMLPurifier.class.php';
     if (empty($_REQUEST['a'])) {
         $_REQUEST['a'] = 'summary';
     }
     set_time_limit(300);
     $_GET['a'] = $_REQUEST['a'];
     $_REQUEST['group_id'] = $this->groupId;
     $_REQUEST['repo_id'] = $repository->getId();
     $_REQUEST['repo_name'] = $repository->getFullName();
     $_GET['p'] = $_REQUEST['repo_name'] . '.git';
     $_REQUEST['repo_path'] = $repository->getPath();
     $_REQUEST['project_dir'] = $repository->getProject()->getUnixName();
     $_REQUEST['git_root_path'] = $repository->getGitRootPath();
     $_REQUEST['action'] = 'view';
     if (empty($_REQUEST['noheader'])) {
         //echo '<hr>';
         echo '<div id="gitphp">';
     }
     include $this->getGitPhpIndexPath();
     if (empty($_REQUEST['noheader'])) {
         echo '</div>';
     }
 }
示例#13
0
 /**
  * Trigger jobs corresponding to the Git repository
  *
  * @param GitRepository $repository_location Name of the git repository
  */
 public function executeForRepository(GitRepository $repository)
 {
     if ($repository->getProject()->usesService('hudson')) {
         $this->launchForRepository($repository);
     }
 }
 public function getGerritProjectName(GitRepository $repository)
 {
     $project = $repository->getProject()->getUnixName();
     $repo = $repository->getFullName();
     return "{$project}/{$repo}";
 }
 /**
  * Return true if proposed name already exists as a repository path
  *
  * @param Project $project
  * @param String  $name
  *
  * @return Boolean
  */
 public function isRepositoryNameAlreadyUsed(GitRepository $new_repository)
 {
     $repositories = $this->repository_factory->getAllRepositories($new_repository->getProject());
     foreach ($repositories as $existing_repo) {
         $new_repo_path = $new_repository->getPathWithoutLazyLoading();
         $existing_repo_path = $existing_repo->getPathWithoutLazyLoading();
         if ($new_repo_path == $existing_repo_path) {
             return true;
         }
         if ($this->nameIsSubPathOfExistingRepository($existing_repo_path, $new_repo_path)) {
             return true;
         }
         if ($this->nameAlreadyExistsAsPath($existing_repo_path, $new_repo_path)) {
             return true;
         }
     }
 }
 private function sendErrorNotification(GitRepository $repository)
 {
     $user = $this->getRequester();
     if (!$user->isAnonymous()) {
         $factory = new BaseLanguageFactory();
         $language = $factory->getBaseLanguage($user->getLocale());
         $url = get_server_url() . GIT_BASE_URL . '/?action=repo_management&group_id=' . $repository->getProjectId() . '&repo_id=' . $repository->getId() . '&pane=gerrit';
         $notification = new Notification(array($user->getEmail()), $language->getText('plugin_git', 'delegated_to_gerrit_error_mail_subject', array($repository->getFullName())), $language->getText('plugin_git', 'delegated_to_gerrit_error_mail_body', array($repository->getFullName(), $url)), $language->getText('plugin_git', 'delegated_to_gerrit_error_mail_body', array($repository->getFullName(), $url)), $url, 'git');
         $this->mail_builder->buildAndSendEmail($repository->getProject(), $notification, new MailEnhancer());
     }
 }
 /**
  * Get All templates for a repository
  *
  * @param GitRepository the concerned repo
  *
  * @return Git_Driver_Gerrit_Template_Template[] the templates
  */
 public function getTemplatesAvailableForRepository(GitRepository $repository)
 {
     $current_project = $repository->getProject();
     return $this->getTemplatesAvailableForProject($current_project);
 }
示例#18
0
 /**
  * @return bool
  */
 private function sendMail(GitRepository $repository, MailBuilder $mail_builder, $oldrev, $newrev, $refname)
 {
     $mail_raw_output = array();
     exec('/usr/share/codendi/plugins/git/hooks/post-receive-email ' . escapeshellarg($oldrev) . ' ' . escapeshellarg($newrev) . ' ' . escapeshellarg($refname), $mail_raw_output);
     $subject = isset($mail_raw_output[0]) ? $mail_raw_output[0] : self::DEFAULT_MAIL_SUBJECT;
     $mail_enhancer = new MailEnhancer();
     $this->addAdditionalMailHeaders($mail_enhancer, $mail_raw_output);
     $this->setFrom($mail_enhancer);
     $body = $this->createMailBody($mail_raw_output);
     $access_link = $repository->getDiffLink($this->repository_url_manager, $newrev);
     $notification = new Notification($repository->getNotifiedMails(), $subject, '', $body, $access_link, 'Git');
     return $mail_builder->buildAndSendEmail($repository->getProject(), $notification, $mail_enhancer);
 }
 private function getLinkToRepositoryManagement(GitRepository $repository)
 {
     $project = $repository->getProject();
     return '<a href="/plugins/git/?action=repo_management&group_id=' . $project->getId() . '&repo_id=' . $repository->getId() . '">' . $project->getUnixName() . '/' . $repository->getFullName() . '</a>';
 }