コード例 #1
0
 public function testGetMailHookConfig()
 {
     $prj = new MockProject($this);
     $prj->setReturnValue('getUnixName', 'project1');
     $prj->setReturnValue('getId', 101);
     // ShowRev
     $repo = new GitRepository();
     $repo->setId(5);
     $repo->setProject($prj);
     $repo->setName('test_default');
     $this->assertIdentical(file_get_contents($this->_fixDir . '/gitolite-mail-config/mailhook-rev.txt'), $this->project_serializer->fetchMailHookConfig($prj, $repo));
     // ShowRev + Mail
     $repo = new GitRepository();
     $repo->setId(5);
     $repo->setProject($prj);
     $repo->setName('test_default');
     $repo->setNotifiedMails(array('*****@*****.**', '*****@*****.**'));
     $this->assertIdentical(file_get_contents($this->_fixDir . '/gitolite-mail-config/mailhook-rev-mail.txt'), $this->project_serializer->fetchMailHookConfig($prj, $repo));
     // ShowRev + Mailprefix
     $repo = new GitRepository();
     $repo->setId(5);
     $repo->setProject($prj);
     $repo->setName('test_default');
     $repo->setNotifiedMails(array('*****@*****.**', '*****@*****.**'));
     $repo->setMailPrefix('[KOIN] ');
     $this->assertIdentical(file_get_contents($this->_fixDir . '/gitolite-mail-config/mailhook-rev-mail-prefix.txt'), $this->project_serializer->fetchMailHookConfig($prj, $repo));
     // ShowRev + Mailprefix
     $repo = new GitRepository();
     $repo->setId(5);
     $repo->setProject($prj);
     $repo->setName('test_default');
     $repo->setNotifiedMails(array('*****@*****.**', '*****@*****.**'));
     $repo->setMailPrefix('["\\_o<"] \\t');
     $this->assertIdentical(file_get_contents($this->_fixDir . '/gitolite-mail-config/mailhook-rev-mail-prefix-quote.txt'), $this->project_serializer->fetchMailHookConfig($prj, $repo));
 }
コード例 #2
0
 public function process()
 {
     global $sys_allow_restricted_users;
     $parameters = $this->getParametersAsArray();
     $project = null;
     if (!empty($parameters[0])) {
         $project = $this->getProject($parameters[0]);
     } else {
         $this->error('Missing argument project id');
         return false;
     }
     $repositoryName = '';
     if (!empty($parameters[1])) {
         $repositoryName = $parameters[1];
     } else {
         $this->error('Missing argument repository name');
         return false;
     }
     $userId = 0;
     if (!empty($parameters[2])) {
         $userId = $parameters[2];
     } else {
         $this->error('Missing argument user id');
         return false;
     }
     try {
         $repository = new GitRepository();
         $repository->setBackend(Backend::instance('Git', 'GitBackend'));
         $repository->setDescription('-- Default description --');
         //default access is private when restricted users are allowed
         if ($sys_allow_restricted_users == 1) {
             $repository->setAccess(GitRepository::PRIVATE_ACCESS);
         } else {
             $repository->setAccess(GitRepository::PUBLIC_ACCESS);
         }
         $user = null;
         if (!empty($userId)) {
             $user = UserManager::instance()->getUserById($userId);
         }
         if (!empty($user)) {
             $repository->setCreator($user);
         }
         $repository->setProject($project);
         $repository->setName($repositoryName);
         $repository->create();
         $this->done();
     } catch (GitDaoException $e) {
         $this->error($e->getMessage());
         return false;
     } catch (GitDriverException $e) {
         $this->error($e->getMessage());
         return false;
     } catch (GitBackendException $e) {
         $this->error($e->getMessage());
         return false;
     } catch (Exception $e) {
         $this->error($e->getMessage());
         return false;
     }
 }
コード例 #3
0
 public function _itCallsTheRealThing()
 {
     $r = new GitRepository();
     $r->setName('dusse');
     $r->setNamespace('jean_claude');
     //$p = new Project(array('unix_group_name' => 'LesBronzes', 'group_id' => 50));
     $p = stub('Project')->getUnixName()->returns('LesBronzes');
     $r->setProject($p);
     $driver = new Git_Driver_Gerrit(new Git_Driver_Gerrit_RemoteSSHCommand(new BackendLogger()), new BackendLogger());
     $driver->createProject($r);
 }
コード例 #4
0
 protected function _GivenAGitRepoWithNameAndNamespace($name, $namespace)
 {
     $repository = new GitRepository();
     $repository->setName($name);
     $repository->setNamespace($namespace);
     $project = new MockProject();
     $project->setReturnValue('getUnixName', 'gpig');
     $project->setReturnValue('getId', 123);
     $repository->setProject($project);
     return $repository;
 }
コード例 #5
0
 public function __construct(GitPlugin $plugin)
 {
     parent::__construct();
     $this->userManager = UserManager::instance();
     $this->projectManager = ProjectManager::instance();
     $this->factory = new GitRepositoryFactory(new GitDao(), $this->projectManager);
     $matches = array();
     if (preg_match_all('/^\\/plugins\\/git\\/index.php\\/(\\d+)\\/([^\\/][a-zA-Z]+)\\/([a-zA-Z\\-\\_0-9]+)\\/\\?{0,1}.*/', $_SERVER['REQUEST_URI'], $matches)) {
         $this->request->set('group_id', $matches[1][0]);
         $this->request->set('action', $matches[2][0]);
         $repo_id = 0;
         //repository id is passed
         if (preg_match('/^([0-9]+)$/', $matches[3][0]) === 1) {
             $repo_id = $matches[3][0];
         } else {
             //get repository by name and group id to retrieve repo id
             $repo = new GitRepository();
             $repo->setName($matches[3][0]);
             $repo->setProject($this->projectManager->getProject($matches[1][0]));
             try {
                 $repo->load();
             } catch (Exception $e) {
                 $this->addError('Bad request');
                 $this->redirect('/');
             }
             $repo_id = $repo->getId();
         }
         $this->request->set('repo_id', $repo_id);
     }
     $this->plugin = $plugin;
     $valid = new Valid_GroupId('group_id');
     $valid->required();
     if ($this->request->valid($valid)) {
         $this->groupId = (int) $this->request->get('group_id');
     }
     $valid = new Valid_String('action');
     $valid->required();
     if ($this->request->valid($valid)) {
         $this->action = $this->request->get('action');
     }
     if (empty($this->action)) {
         $this->action = 'index';
     }
     if (empty($this->groupId)) {
         $this->addError('Bad request');
         $this->redirect('/');
     }
     $this->projectName = $this->projectManager->getProject($this->groupId)->getUnixName();
     if (!PluginManager::instance()->isPluginAllowedForProject($this->plugin, $this->groupId)) {
         $this->addError($this->getText('project_service_not_available'));
         $this->redirect('/projects/' . $this->projectName . '/');
     }
     $this->permittedActions = array();
 }
コード例 #6
0
ファイル: GitDataBuilder.php プロジェクト: blestab/tuleap
 public function generateGitRepository()
 {
     echo "Create Git repo\n";
     $repository_factory = new GitRepositoryFactory(new GitDao(), $this->project_manager);
     $git_system_event_manager = new Git_SystemEventManager($this->system_event_manager, $repository_factory);
     $manager = $this->getGitRepositoryManager($repository_factory, $git_system_event_manager);
     $backend = $this->getGitBackendGitolite($git_system_event_manager);
     $repository = new GitRepository();
     $repository->setBackend($backend);
     $repository->setDescription("Git repository");
     $repository->setCreator($this->user_manager->getUserByUserName(self::TEST_USER_1_NAME));
     $repository->setProject($this->project_manager->getProjectByUnixName(self::PROJECT_TEST_GIT_SHORTNAME));
     $repository->setName('repo01');
     $manager->create($repository, $backend, array());
     return $this;
 }
コード例 #7
0
ファイル: GitBackendTest.php プロジェクト: pombredanne/tuleap
 public function testAddMailingShowRev()
 {
     $GLOBALS['sys_https_host'] = 'codendi.org';
     $prj = new MockProject($this);
     $prj->setReturnValue('getId', 1750);
     $repo = new GitRepository();
     $repo->setPath('prj/repo.git');
     $repo->setName('repo');
     $repo->setProject($prj);
     $repo->setId(290);
     $driver = new MockGitDriver($this);
     $driver->expectOnce('setConfig', array('/var/lib/codendi/gitroot/prj/repo.git', 'hooks.showrev', "t=%s; git show --name-status --pretty='format:URL:    https://codendi.org/plugins/git/index.php/1750/view/290/?p=repo.git&a=commitdiff&h=%%H%%nAuthor: %%an <%%ae>%%nDate:   %%aD%%n%%n%%s%%n%%b' \$t"));
     $backend = new GitBackendTestVersion($this);
     $backend->setUp($this->url_manager);
     $backend->setGitRootPath(Git_Backend_Interface::GIT_ROOT_PATH);
     $backend->setReturnValue('getDriver', $driver);
     $backend->setUpMailingHook($repo);
 }
コード例 #8
0
ファイル: GitDao.class.php プロジェクト: blestab/tuleap
 /**
  * @deprecated Should use GitRepository::getInstanceFrom row instead.
  * @param GitRepository $repository
  * @param type $result
  */
 public function hydrateRepositoryObject(GitRepository $repository, $result)
 {
     $repository->setName($result[self::REPOSITORY_NAME]);
     $repository->setPath($result[self::REPOSITORY_PATH]);
     $repository->setId($result[self::REPOSITORY_ID]);
     $repository->setDescription($result[self::REPOSITORY_DESCRIPTION]);
     $repository->setParentId($result[self::REPOSITORY_PARENT]);
     $project = ProjectManager::instance()->getProject($result[self::FK_PROJECT_ID]);
     $repository->setProject($project);
     $repository->setCreationDate($result[self::REPOSITORY_CREATION_DATE]);
     $user = UserManager::instance()->getUserById($result[self::REPOSITORY_CREATION_USER_ID]);
     $repository->setCreator($user);
     $repository->setIsInitialized($result[self::REPOSITORY_IS_INITIALIZED]);
     $repository->setDeletionDate($result[self::REPOSITORY_DELETION_DATE]);
     $repository->setAccess($result[self::REPOSITORY_ACCESS]);
     $repository->setMailPrefix($result[self::REPOSITORY_MAIL_PREFIX]);
     $repository->setBackendType($result[self::REPOSITORY_BACKEND_TYPE]);
     $repository->setNamespace($result[self::REPOSITORY_NAMESPACE]);
     $repository->setBackupPath($result[self::REPOSITORY_BACKUP_PATH]);
     $repository->setScope($result[self::REPOSITORY_SCOPE]);
     $repository->setRemoteServerId($result[self::REMOTE_SERVER_ID]);
     $repository->setRemoteServerDisconnectDate($result[self::REMOTE_SERVER_DISCONNECT_DATE]);
     $repository->setRemoteProjectDeletionDate($result[self::REMOTE_SERVER_DELETE_DATE]);
     $repository->setRemoteServerMigrationStatus($result[self::REMOTE_SERVER_MIGRATION_STATUS]);
     $repository->loadNotifiedMails();
     /* Here just for reviewer test, will be replaced by real DB data in a future changeset*/
     $result[self::ENABLE_ONLINE_EDIT] = false;
     if ($result[self::ENABLE_ONLINE_EDIT] && GitConfig::instance()->isOnlineEditEnabled()) {
         $repository->enableOnlineEdit();
     }
 }
コード例 #9
0
 protected function buildRepositoryFromRow($row, $project, $notification_manager = null)
 {
     $repository_id = $row[GitDao::REPOSITORY_ID];
     $repository = new GitRepository();
     $repository->setId($repository_id);
     $repository->setName($row[GitDao::REPOSITORY_NAME]);
     $repository->setProject($project);
     if (!$notification_manager) {
         $notification_manager = $this->getPostReceiveMailManager();
     }
     $notified_mails = $notification_manager->getNotificationMailsByRepositoryId($repository_id);
     $repository->setNotifiedMails($notified_mails);
     $repository->setMailPrefix($row[GitDao::REPOSITORY_MAIL_PREFIX]);
     $repository->setNamespace($row[GitDao::REPOSITORY_NAMESPACE]);
     return $repository;
 }
コード例 #10
0
 public function process()
 {
     $parameters = $this->getParametersAsArray();
     //print_r($parameters);
     $project = null;
     if (!empty($parameters[0])) {
         $project = $this->getProject($parameters[0]);
     } else {
         $this->error('Missing argument project id');
         return false;
     }
     $repositoryName = '';
     if (!empty($parameters[1])) {
         $repositoryName = $parameters[1];
     } else {
         $this->error('Missing argument repository name');
         return false;
     }
     $parentId = '';
     if (!empty($parameters[2])) {
         $parentId = $parameters[2];
     } else {
         $this->error('Missing argument parent id');
         return false;
     }
     $userId = 0;
     if (!empty($parameters[3])) {
         $userId = $parameters[3];
     } else {
         $this->error('Missing argument user id');
         return false;
     }
     try {
         $repository = new GitRepository();
         $repository->setProject($project);
         $repository->setId($parentId);
         //load before setting creator
         $repository->load();
         $user = null;
         if (!empty($userId)) {
             $user = UserManager::instance()->getUserById($userId);
         }
         if (!empty($user)) {
             $repository->setCreator($user);
         }
         $repository->forkShell($repositoryName);
         $this->done();
     } catch (GitDaoException $e1) {
         $this->error($e1->getMessage());
         return false;
     } catch (GitDriverException $e2) {
         $this->error($e2->getMessage());
         return false;
     } catch (GitBackendException $e3) {
         $this->error($e3->getMessage());
         return false;
     } catch (Exception $e4) {
         $this->error($e4->getMessage());
         return false;
     }
 }
コード例 #11
0
 /**
  * Clone a repository, it inherits access
  * @param String forkName
  */
 public function forkShell($forkName)
 {
     $clone = new GitRepository();
     $clone->setName($forkName);
     $clone->setProject($this->getProject());
     $clone->setParent($this);
     $clone->setCreationDate(date('Y-m-d H:i:s'));
     $clone->setCreator($this->getCreator());
     $clone->setAccess($this->getAccess());
     $clone->setIsInitialized(1);
     $clone->setDescription('-- Default description --');
     $this->getBackend()->createFork($clone);
 }
コード例 #12
0
ファイル: GitDao.class.php プロジェクト: nterray/tuleap
 public function hydrateRepositoryObject(GitRepository $repository, $result)
 {
     $repository->setName($result[self::REPOSITORY_NAME]);
     $repository->setPath($result[self::REPOSITORY_PATH]);
     $repository->setId($result[self::REPOSITORY_ID]);
     $repository->setDescription($result[self::REPOSITORY_DESCRIPTION]);
     $repository->setParentId($result[self::REPOSITORY_PARENT]);
     $project = ProjectManager::instance()->getProject($result[self::FK_PROJECT_ID]);
     $repository->setProject($project);
     $repository->setCreationDate($result[self::REPOSITORY_CREATION_DATE]);
     $user = UserManager::instance()->getUserById($result[self::REPOSITORY_CREATION_USER_ID]);
     $repository->setCreator($user);
     $repository->setIsInitialized($result[self::REPOSITORY_IS_INITIALIZED]);
     $repository->setDeletionDate($result[self::REPOSITORY_DELETION_DATE]);
     $repository->setAccess($result[self::REPOSITORY_ACCESS]);
     $repository->setMailPrefix($result[self::REPOSITORY_MAIL_PREFIX]);
     $repository->setBackendType($result[self::REPOSITORY_BACKEND_TYPE]);
     $repository->setNamespace($result[self::REPOSITORY_NAMESPACE]);
     $repository->setScope($result[self::REPOSITORY_SCOPE]);
     $repository->loadNotifiedMails();
 }
コード例 #13
0
ファイル: GitRepositoryTest.php プロジェクト: nterray/tuleap
 public function testForkCrossProjectClonesByChangingTheProjectAndPath()
 {
     $user = $this->_newUser("sandra");
     $backend = new MockGit_Backend_Gitolite();
     $project = new Mockproject();
     $project->setReturnValue('getUnixName', 'tulip');
     $to_project = new Mockproject();
     $to_project->setReturnValue('getUnixName', 'blabla');
     $repo = new GitRepository();
     $repo->setBackend($backend);
     $repo->setProject($project);
     $expectedRepo = $this->_aGitRepoWith($user, $repo, '', $backend, GitRepository::REPO_SCOPE_PROJECT);
     $expectedRepo->setProject($to_project);
     $expectedRepo->setPath(unixPathJoin(array($to_project->getUnixName(), '', $repo->getName())) . '.git');
     $backend->expectOnce('fork', array(new EqualExpectation($repo), new EqualExpectation($expectedRepo)));
     $repo->fork($user, '', GitRepository::REPO_SCOPE_PROJECT, $to_project);
 }
コード例 #14
0
 public function createReference($projectId, $repositoryName)
 {
     // Uncomment the following line only for debug prupose if you ever need to
     // create a gitshell repo (good luck, luke, may the force be with you).
     //$this->createGitshellReference($projectId, $repositoryName);
     $c = $this->getController();
     $projectId = intval($projectId);
     $repository = new GitRepository();
     $repository->setBackend(new Git_Backend_Gitolite(new Git_GitoliteDriver()));
     if ($repository->isNameValid($repositoryName) === false) {
         $c->addError($this->getText('actions_input_format_error', array($repository->getBackend()->getAllowedCharsInNamePattern(), GitDao::REPO_NAME_MAX_LENGTH)));
         $c->redirect('/plugins/git/?action=index&group_id=' . $projectId);
         return false;
     }
     $project = ProjectManager::instance()->getProject($projectId);
     $repository->setDescription('-- Default description --');
     $repository->setCreator(UserManager::instance()->getCurrentUser());
     $repository->setProject($project);
     $repository->setName($repositoryName);
     if (!$this->factory->isRepositoryExistingByName($project, $repositoryName)) {
         $repository->create();
     } else {
         $c->addError($this->getText('actions_create_repo_exists', array($repositoryName)));
     }
     $c->redirect('/plugins/git/?action=index&group_id=' . $projectId);
     return;
 }
コード例 #15
0
ファイル: GitBackendTest.php プロジェクト: rinodung/tuleap
 /**
  * This is almost the same test than testAddMailingShowRev but
  * through the higher level setUpRepository.
  * What we want to be sure it that the right repository id is set.
  */
 public function testSetUpRepositoryConfigWithRightRepoId()
 {
     $GLOBALS['sys_https_host'] = 'codendi.org';
     $prj = new MockProject($this);
     $prj->setReturnValue('getId', 1750);
     // Use real git object because we need to store values (id)
     $repo = new GitRepository();
     $repo->setPath('prj/repo.git');
     $repo->setName('repo');
     $repo->setProject($prj);
     $repo->setId(290);
     $dao = new MockGitDao($this);
     $dao->expectOnce('save');
     $dao->setReturnValue('save', 290);
     // The id we expect below
     $driver = new MockGitDriver($this);
     $driver->expectOnce('setConfig', array('/var/lib/codendi/gitroot/prj/repo.git', 'hooks.showrev', "t=%s; git show --name-status --pretty='format:URL:    https://codendi.org/plugins/git/index.php/1750/view/290/?p=repo.git&a=commitdiff&h=%%H%%nAuthor: %%an <%%ae>%%nDate:   %%aD%%n%%n%%s%%n%%b' \$t"));
     $backend = new GitBackend4SetUp($this);
     $backend->setUp($this->url_manager);
     $backend->setGitRootPath(Git_Backend_Interface::GIT_ROOT_PATH);
     $backend->setReturnValue('getDriver', $driver);
     $backend->setReturnValue('getDao', $dao);
     $backend->setUpRepository($repo);
 }
コード例 #16
0
ファイル: GitActions.class.php プロジェクト: nickl-/tuleap
 public function createReference($projectId, $repositoryName)
 {
     // Uncomment the following line only for debug prupose if you ever need to
     // create a gitshell repo (good luck, luke, may the force be with you).
     //$this->createGitshellReference($projectId, $repositoryName);
     $c = $this->getController();
     $projectId = intval($projectId);
     try {
         $repository = new GitRepository();
         $repository->setBackend(new Git_Backend_Gitolite(new Git_GitoliteDriver()));
         $repository->setDescription('-- Default description --');
         $repository->setCreator(UserManager::instance()->getCurrentUser());
         $repository->setProject(ProjectManager::instance()->getProject($projectId));
         $repository->setName($repositoryName);
         $this->manager->create($repository);
     } catch (Exception $exception) {
         $c->addError($exception->getMessage());
     }
     $c->redirect('/plugins/git/?action=index&group_id=' . $projectId);
     return;
 }
コード例 #17
0
 public function createReference($projectId, $repositoryName)
 {
     $controller = $this->getController();
     $projectId = intval($projectId);
     try {
         $creator = UserManager::instance()->getCurrentUser();
         $repository = new GitRepository();
         $repository->setBackend($this->backend_gitolite);
         $repository->setDescription(GitRepository::DEFAULT_DESCRIPTION);
         $repository->setCreator($creator);
         $repository->setProject(ProjectManager::instance()->getProject($projectId));
         $repository->setName($repositoryName);
         $this->manager->create($repository, $this->backend_gitolite);
         $this->history_dao->groupAddHistory("git_repo_create", $repositoryName, $projectId);
         $this->redirectToRepo($repository);
     } catch (Exception $exception) {
         $controller->addError($exception->getMessage());
     }
     $controller->redirect('/plugins/git/?action=index&group_id=' . $projectId);
     return;
 }
コード例 #18
0
 /**
  * Returns a default-value-filled repository
  * @return GitRepository
  */
 public function buildRepository(Project $project, $repository_name, PFUser $creator, Git_Backend_Interface $backend, $description = GitRepository::DEFAULT_DESCRIPTION)
 {
     $repository = new GitRepository();
     $repository->setBackend($backend);
     $repository->setDescription($description);
     $repository->setCreator($creator);
     $repository->setProject($project);
     $repository->setName($repository_name);
     return $repository;
 }