def setUp(self): self.env = EnvironmentStub() repositories = self.env.config['repositories'] dbprovider = DbRepositoryProvider(self.env) dbprovider.add_repository(REPOS_NAME, self.path, 'direct-svnfs') dbprovider.modify_repository(REPOS_NAME, {'url': URL}) self.repos = self.env.get_repository(REPOS_NAME)
def setUp(self): self.env = EnvironmentStub(default_data=True, enable=('trac.*',), disable=('trac.tests.*',)) self.admin = TracAdmin() self.admin.env_set('', self.env) provider = DbRepositoryProvider(self.env) provider.add_repository('mock', '/', 'mock_type')
def setUp(self): self.env = EnvironmentStub() dbprovider = DbRepositoryProvider(self.env) dbprovider.add_repository(REPOS_NAME, self.path, 'svn') dbprovider.modify_repository(REPOS_NAME, {'url': URL}) self.repos = self.env.get_repository(REPOS_NAME) self.repos.sync()
def test_repository_providers_disabled(self): """Repository configuration is rewritten when repository providers are disabled. """ projects_list = os.path.join(self.env.path, 'projects_list') projects_base = os.path.dirname(projects_list) projects_url = 'http://localhost/%s' with open(projects_list, 'w') as f: f.write(""" repos1 user1+<*****@*****.**> repos2 """) config = self.env.config['git'] config.set('projects_list', projects_list) config.set('projects_base', projects_base) config.set('projects_url', projects_url) db_provider = DbRepositoryProvider(self.env) db_provider.add_repository('repos3', '/var/git/repos3', 'git') db_provider.add_repository('repos4', '/var/git/repos4', 'git') config = self.env.config['repositories'] config.set('repos5.dir', '/var/svn/repos4') config.set('repos5.type', 'svn') config.set('repos6.dir', '/var/svn/repos5') config.set('repos6.type', 'svn') self.env.disable_component(GitwebProjectsRepositoryProvider) self.env.disable_component(DbRepositoryProvider) self.env.disable_component(RepositoryManager) db32.do_upgrade(self.env, VERSION, None) self.env.enable_component(GitwebProjectsRepositoryProvider) self.env.enable_component(DbRepositoryProvider) self.env.enable_component(RepositoryManager) repos = RepositoryManager(self.env).get_all_repositories() config = self.env.config['gitweb-repositories'] self.assertEqual(projects_list, config.get('projects_list')) self.assertEqual(projects_base, config.get('projects_base')) self.assertEqual(projects_url, config.get('projects_url')) self.assertEqual('repos1', config.get('sync_per_request')) self.assertIn('repos1', repos) self.assertTrue(repos['repos1']['sync_per_request']) self.assertIn('repos2', repos) self.assertFalse(repos['repos2']['sync_per_request']) self.assertIn('repos3', repos) self.assertTrue(repos['repos3']['sync_per_request']) self.assertIn('repos4', repos) self.assertFalse(repos['repos4']['sync_per_request']) self.assertIn('repos5', repos) self.assertTrue(repos['repos5']['sync_per_request']) self.assertIn('repos6', repos) self.assertFalse(repos['repos6']['sync_per_request'])
def setUp(self): super().setUp(BrowserModule) provider = DbRepositoryProvider(self.env) provider.add_repository('(default)', '/', 'mock') provider.add_repository('allow', '/', 'mock') provider.add_repository('deny', '/', 'mock') provider.add_repository('raise', '/', 'mock')
def setUp(self): super(BrowserModulePermissionsTestCase, self).setUp(BrowserModule) provider = DbRepositoryProvider(self.env) provider.add_repository('(default)', '/', 'mock') provider.add_repository('allow', '/', 'mock') provider.add_repository('deny', '/', 'mock') provider.add_repository('raise', '/', 'mock')
class SubversionConnectorTestCase(unittest.TestCase): def setUp(self): self.env = EnvironmentStub() self.repos_path = tempfile.mkdtemp(prefix='trac-svnrepos-') self.dbprovider = DbRepositoryProvider(self.env) pool = core.svn_pool_create(None) repos.svn_repos_create(self.repos_path, '', '', None, None, pool) self.dbprovider.add_repository(REPOS_NAME, self.repos_path, 'svn') def tearDown(self): self.env.reset_db() # clear cached repositories to avoid TypeError on termination (#11505) RepositoryManager(self.env).reload_repositories() def _svn_version_from_system_info(self): svn_version = None for name, version in self.env.get_systeminfo(): if name == 'Subversion': svn_version = version return svn_version def test_get_system_info_repository_not_initialized(self): # SubversionConnector is not a required component when there are no # Subversion repositories configured, and the Subversion version is # not returned in system info. self.assertFalse(svn_fs.SubversionConnector(self.env).required) self.assertIsNone(self._svn_version_from_system_info()) def test_get_system_info_repository_initialized(self): # SubversionConnector is a required component when there are # Subversion repositories configured, and the Subversion version is # returned in system info. RepositoryManager(self.env).get_repository(REPOS_NAME) self.assertTrue(svn_fs.SubversionConnector(self.env).required) self.assertIsNotNone(self._svn_version_from_system_info())
def setUp(self): self._super = super(LogModuleTestCase, self) self._super.setUp(LogModule) provider = DbRepositoryProvider(self.env) provider.add_repository('mock', '/', mock_repotype)
class DbRepositoryProviderTestCase(unittest.TestCase): def setUp(self): self.env = EnvironmentStub() self.db_provider = DbRepositoryProvider(self.env) def tearDown(self): self.env.reset_db() def verify_raises(self, exc, message, func, *args, **kwargs): try: func(*args, **kwargs) self.fail('%s not raised' % exc.__name__) except exc as e: self.assertEqual(message, unicode(e)) def do_remove(self, reponame, message): self.verify_raises(TracError, message, self.db_provider.remove_repository, reponame) def do_modify(self, reponame, changes, message): self.verify_raises(TracError, message, self.db_provider.modify_repository, reponame, changes) def do_alias(self, reponame, target, message): self.verify_raises(TracError, message, self.db_provider.add_alias, reponame, target) def test_add_alias(self): self.db_provider.add_repository('', '/path/to/repos') self.db_provider.add_repository('target', '/path/to/repos') self.db_provider.add_alias('blah1', '') self.db_provider.add_alias('blah2', '(default)') self.db_provider.add_alias('blah3', 'target') repositories = RepositoryManager(self.env).get_all_repositories() self.assertEqual(['', 'blah1', 'blah2', 'blah3', 'target'], sorted(repositories)) self.assertEqual('', repositories['blah1']['alias']) self.assertEqual('', repositories['blah2']['alias']) self.assertEqual('target', repositories['blah3']['alias']) def test_add_alias_to_non_existent_repository(self): self.do_alias('', '', 'Repository "(default)" doesn\'t exist') self.do_alias('', '(default)', 'Repository "(default)" doesn\'t exist') self.do_alias('blah', '', 'Repository "(default)" doesn\'t exist') self.do_alias('blah', '(default)', 'Repository "(default)" doesn\'t exist') self.do_alias('blah', 'blah', 'Repository "blah" doesn\'t exist') self.do_alias('', 'blah', 'Repository "blah" doesn\'t exist') self.do_alias('(default)', 'blah', 'Repository "blah" doesn\'t exist') def test_add_alias_to_repository_in_tracini(self): config = self.env.config config.set('repositories', '.dir', '/path/to/repos') config.set('repositories', '.type', '') config.set('repositories', 'target.dir', '/path/to/repos') config.set('repositories', 'target.type', '') config.set('repositories', 'alias-default.alias', '') config.set('repositories', 'alias-target.alias', 'target') self.db_provider.add_alias('blah1', '') self.db_provider.add_alias('blah2', 'target') self.assertRaises(TracError, self.db_provider.add_alias, 'blah3', 'notfound') repositories = RepositoryManager(self.env).get_all_repositories() self.assertEqual( ['', 'alias-default', 'alias-target', 'blah1', 'blah2', 'target'], sorted(repositories)) self.assertEqual('', repositories['blah1']['alias']) self.assertEqual('target', repositories['blah2']['alias']) def test_add_alias_to_alias(self): config = self.env.config config.set('repositories', 'target.dir', '/path/to/repos') config.set('repositories', 'target.type', '') config.set('repositories', '.alias', 'target') config.set('repositories', 'alias.alias', 'target') self.do_alias('blah', '', 'Cannot create an alias to the alias "(default)"') self.do_alias('blah', '(default)', 'Cannot create an alias to the alias "(default)"') self.do_alias('blah', 'alias', 'Cannot create an alias to the alias "alias"') def test_remove_repository_used_in_aliases(self): self.db_provider.add_repository('', '/path/to/repos') self.db_provider.add_repository('blah', '/path/to/repos') self.db_provider.add_alias('alias-blah', 'blah') self.db_provider.add_alias('alias-default', '') self.do_remove( '', 'Cannot remove the repository "(default)" used in ' 'aliases') self.do_remove( '(default)', 'Cannot remove the repository "(default)" ' 'used in aliases') self.do_remove( 'blah', 'Cannot remove the repository "blah" used in ' 'aliases') def test_modify_repository_used_in_aliases(self): self.db_provider.add_repository('', '/path/to/repos') self.db_provider.add_repository('blah', '/path/to/repos') self.db_provider.add_alias('alias-blah', 'blah') self.db_provider.add_alias('alias-default', '') self.do_modify( '', {'name': 'new-name'}, 'Cannot rename the repository "(default)" used in ' 'aliases') self.do_modify( '(default)', {'name': 'new-name'}, 'Cannot rename the repository "(default)" used in ' 'aliases') self.do_modify('blah', {'name': 'new-name'}, 'Cannot rename the repository "blah" used in aliases') self.db_provider.modify_repository('', {'dir': '/path/to/new-path'})
def setUp(self): self._super = super(LogModuleTestCase, self) self._super.setUp(LogModule) provider = DbRepositoryProvider(self.env) provider.add_repository('mock', '/', mock_repotype)
class DbRepositoryProviderTestCase(unittest.TestCase): def setUp(self): self.env = EnvironmentStub() self.db_provider = DbRepositoryProvider(self.env) def tearDown(self): self.env.reset_db() def verify_raises(self, exc, message, func, *args, **kwargs): try: func(*args, **kwargs) self.fail('%s not raised' % exc.__name__) except exc as e: self.assertEqual(message, unicode(e)) def do_remove(self, reponame, message): self.verify_raises(TracError, message, self.db_provider.remove_repository, reponame) def do_modify(self, reponame, changes, message): self.verify_raises(TracError, message, self.db_provider.modify_repository, reponame, changes) def do_alias(self, reponame, target, message): self.verify_raises(TracError, message, self.db_provider.add_alias, reponame, target) def test_add_alias(self): self.db_provider.add_repository('', '/path/to/repos') self.db_provider.add_repository('target', '/path/to/repos') self.db_provider.add_alias('blah1', '') self.db_provider.add_alias('blah2', '(default)') self.db_provider.add_alias('blah3', 'target') repositories = RepositoryManager(self.env).get_all_repositories() self.assertEqual(['', 'blah1', 'blah2', 'blah3', 'target'], sorted(repositories)) self.assertEqual('', repositories['blah1']['alias']) self.assertEqual('', repositories['blah2']['alias']) self.assertEqual('target', repositories['blah3']['alias']) def test_add_alias_to_non_existent_repository(self): self.do_alias('', '', 'Repository "(default)" doesn\'t exist') self.do_alias('', '(default)', 'Repository "(default)" doesn\'t exist') self.do_alias('blah', '', 'Repository "(default)" doesn\'t exist') self.do_alias('blah', '(default)', 'Repository "(default)" doesn\'t exist') self.do_alias('blah', 'blah', 'Repository "blah" doesn\'t exist') self.do_alias('', 'blah', 'Repository "blah" doesn\'t exist') self.do_alias('(default)', 'blah', 'Repository "blah" doesn\'t exist') def test_add_alias_to_repository_in_tracini(self): config = self.env.config config.set('repositories', '.dir', '/path/to/repos') config.set('repositories', '.type', '') config.set('repositories', 'target.dir', '/path/to/repos') config.set('repositories', 'target.type', '') config.set('repositories', 'alias-default.alias', '') config.set('repositories', 'alias-target.alias', 'target') self.db_provider.add_alias('blah1', '') self.db_provider.add_alias('blah2', 'target') self.assertRaises(TracError, self.db_provider.add_alias, 'blah3', 'notfound') repositories = RepositoryManager(self.env).get_all_repositories() self.assertEqual(['', 'alias-default', 'alias-target', 'blah1', 'blah2', 'target'], sorted(repositories)) self.assertEqual('', repositories['blah1']['alias']) self.assertEqual('target', repositories['blah2']['alias']) def test_add_alias_to_alias(self): config = self.env.config config.set('repositories', 'target.dir', '/path/to/repos') config.set('repositories', 'target.type', '') config.set('repositories', '.alias', 'target') config.set('repositories', 'alias.alias', 'target') self.do_alias('blah', '', 'Cannot create an alias to the alias "(default)"') self.do_alias('blah', '(default)', 'Cannot create an alias to the alias "(default)"') self.do_alias('blah', 'alias', 'Cannot create an alias to the alias "alias"') def test_remove_repository_used_in_aliases(self): self.db_provider.add_repository('', '/path/to/repos') self.db_provider.add_repository('blah', '/path/to/repos') self.db_provider.add_alias('alias-blah', 'blah') self.db_provider.add_alias('alias-default', '') self.do_remove('', 'Cannot remove the repository "(default)" used in ' 'aliases') self.do_remove('(default)', 'Cannot remove the repository "(default)" ' 'used in aliases') self.do_remove('blah', 'Cannot remove the repository "blah" used in ' 'aliases') def test_modify_repository_used_in_aliases(self): self.db_provider.add_repository('', '/path/to/repos') self.db_provider.add_repository('blah', '/path/to/repos') self.db_provider.add_alias('alias-blah', 'blah') self.db_provider.add_alias('alias-default', '') self.do_modify('', {'name': 'new-name'}, 'Cannot rename the repository "(default)" used in ' 'aliases') self.do_modify('(default)', {'name': 'new-name'}, 'Cannot rename the repository "(default)" used in ' 'aliases') self.do_modify('blah', {'name': 'new-name'}, 'Cannot rename the repository "blah" used in aliases') self.db_provider.modify_repository('', {'dir': '/path/to/new-path'})
def install(self): options = self.options # create our run scripts entry_points = [('trac-admin', 'trac.admin.console', 'run'), ('tracd', 'trac.web.standalone', 'main')] zc.buildout.easy_install.scripts( entry_points, pkg_resources.working_set, options['executable'], options['bin-directory'] ) # create the trac instance location = options['location'] project_name = options.get('project-name', 'trac-project') project_name = '"%s"' % project_name project_url = options.get('project-url', 'http://example.com') if not options.has_key('db-type') or options['db-type'] == 'sqlite': db = 'sqlite:%s' % os.path.join('db', 'trac.db') elif options['db-type'] == 'postgres': db_options = { 'user': options['db-username'], 'pass': options['db-password'], 'host': options.get('db-host', 'localhost'), 'db': options.get('db-name', 'trac'), 'port': options.get('db-port', '5432') } db = 'postgres://%(user)s:%(pass)s@%(host)s:%(port)s/%(db)s' % db_options repos_type = options.get('repos-type', "") repos_path = options.get('repos-path', "") if not os.path.exists(location): os.makedirs(location) print "Creating Trac Instance in: " + location # install the eggs that we need self.egg.install() if self.metamode: # put the config file somewhere so we can inherit it self._write_ini(os.path.join(location, 'base_trac.ini'), db, {'location': location}) instances = self._get_instances() for instance, data in instances.iteritems(): # we need a new location for each project meta_location = os.path.join(self.buildout['buildout']['directory'], 'var', self.name, instance) trac = TracAdmin(meta_location) if not trac.env_check(): repos_type = data.get('repository_type', '') repos_path = data.get('repository-dir', '') # get the database dsn if not data.has_key('db-type') or data['db-type'] == 'sqlite': db = 'sqlite:%s' % os.path.join('db', 'trac.db') elif data['db-type'] == 'postgres': db_options = { 'user': data.get('db-username', 'trac'), 'pass': data.get('db-password', 'trac'), 'host': data.get('db-host', 'localhost'), 'port': data.get('db-port', '5432'), 'db': instance } db = 'postgres://%(user)s:%(pass)s@%(host)s:%(port)s/%(db)s' % db_options env = trac.do_initenv('%s %s %s %s' % (instance, db, repos_type, repos_path)) data.update({'project_name': instance, 'repository-dir': data.get('repository-dir', '')}) data['database_dsn'] = db self.write_custom_config(os.path.join(meta_location, 'conf', 'trac.ini'), os.path.join(location, 'base_trac.ini'), meta = True, meta_vars = data) # add any repositories repo_provider = DbRepositoryProvider(trac.env) repo_provider.add_repository('default', repos_path, repos_type) else: trac = TracAdmin(location) if not trac.env_check(): trac.do_initenv('%s %s %s %s' % (project_name, db, repos_type, repos_path)) self._write_ini(os.path.join(location, 'conf', 'base_trac.ini'), db, self.options) self.write_custom_config(os.path.join(location, 'conf', 'trac.ini'), os.path.join(location, 'conf', 'base_trac.ini')) if options.has_key('wsgi') and options['wsgi'].lower() == 'true': self.install_wsgi(options['location']) if options.has_key('testrunner') and options['testrunner'].lower() == 'true': self.install_testrunner() self.install_htpasswd() # buildout expects a tuple of paths, but we don't have any to add # just return an empty one for now. return tuple()