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() . '/'; } }
/** * @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(); }
private function isInPrivateProject(GitRepository $repository) { return $repository->getProject()->isPublic() == false; }
/** * 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'); }
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; }
/** * 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>'; } }
/** * 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); }
/** * @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>'; }