def possible_conf_filenames(self): return [ f for f in ( os.path.expanduser('~/.evnrc'), join_path(sys.exec_prefix, 'etc', 'evn.conf'), join_path(sys.exec_prefix, 'evn.conf'), '/etc/evn.conf', '/usr/local/etc/evn.conf', '/opt/etc/evn.conf', '/opt/local/etc/evn.conf', os.environ.get('EVN_CONF') or None, self.__filename or None, ) if f ]
def __init__(self, repo, name): method = name.replace('-', '_') + '_hook' path = getattr(svn.repos, method)(repo.repo, repo.pool) name = os.path.basename(path) HookFile.__init__(self, repo, name, path) dirname = os.path.dirname(self.path) prefix = self.conf.svn_hook_enabled_prefix p = join_path(dirname, '%s-%s' % (prefix, name)) self.__enabler_path = p suffix = self.conf.svn_hook_remote_debug_suffix p = join_path(dirname, '%s-%s-%s' % (prefix, name, suffix)) self.__remote_debug_path = p self.__remote_debug_session_glob = '%s-*.*' % p self._refresh_remote_debug_status()
def possible_conf_filenames(self): return [ f for f in ( os.path.expanduser("~/.evnrc"), join_path(sys.exec_prefix, "etc", "evn.conf"), join_path(sys.exec_prefix, "evn.conf"), "/etc/evn.conf", "/usr/local/etc/evn.conf", "/opt/etc/evn.conf", "/opt/local/etc/evn.conf", os.environ.get("EVN_CONF") or None, self.__filename or None, ) if f ]
def __init__(self, repo_name=None): RawConfigParser.__init__(self) if repo_name is not None: assert isinstance(repo_name, str) self.__repo_name = repo_name d = dirname(abspath(__file__)) f = join_path(d, 'admin', 'cli.py') self.__python_evn_module_dir = d self.__python_evn_admin_cli_file_fullpath = f self.__load_defaults() self.__multiline_pattern = re.compile(r'([^\s].*?)([\s]+\\)?') self.__validate()
def main(quiet=None): import evn.test.dot if quiet: stream = open('/dev/null', 'w') else: stream = sys.stdout evn.test.dot.stream = stream verbosity = 2 if not quiet else 0 runner = unittest.TextTestRunner( stream=stream, verbosity=verbosity, ) failed = 0 single = None if len(sys.argv) == 3: arg = sys.argv[-1] if arg.endswith('.py') or arg.startswith('test') or arg.lower() == arg: if not arg.endswith('.py'): arg += '.py' path = join_path(dirname(abspath(__file__)), arg) if not os.path.exists(path): sys.stderr.write('no such file: %s...\n' % path) sys.exit(1) sys.stdout.write("Running tests in %s...\n" % path) sys.exit(os.system('"%s" "%s"' % (sys.executable, path))) single = arg TestRepo.keep = True else: sys.stdout.write("Running all unit tests...\n") all_suites = [s for s in suites(stream, single)] if not all_suites: sys.stderr.write('error: no such test: %s\n' % single) sys.exit(1) for suite in all_suites: result = runner.run(suite) if not result.wasSuccessful(): failed += 1 if failed: sys.stderr.write('\n*** FAILURES: %d ***\n' % failed) sys.exit(1)
def main(quiet=None): import evn.test.dot if quiet: stream = open('/dev/null', 'w') else: stream = sys.stdout evn.test.dot.stream = stream verbosity = 2 if not quiet else 0 runner = unittest.TextTestRunner( stream=stream, verbosity=verbosity, ) failed = 0 single = None if len(sys.argv) == 3: arg = sys.argv[-1] if arg.endswith('.py') or arg.startswith('test') or arg.lower() == arg: if not arg.endswith('.py'): arg += '.py' path = join_path(dirname(abspath(__file__)), arg) if not os.path.exists(path): sys.stderr.write('no such file: %s...\n' % path) sys.exit(1) sys.stdout.write("Running tests in %s...\n" % path) sys.exit(os.system('"%s" "%s"' % (sys.executable, path))) single = arg TestRepo.keep = True else: sys.stdout.write("Running all unit tests...\n") all_suites = [ s for s in suites(stream, single) ] if not all_suites: sys.stderr.write('error: no such test: %s\n' % single) sys.exit(1) for suite in all_suites: result = runner.run(suite) if not result.wasSuccessful(): failed += 1 if failed: sys.stderr.write('\n*** FAILURES: %d ***\n' % failed) sys.exit(1)
def __init__(self): RawConfigParser.__init__(self) self.__repo_path = None self._repo_name = None self._repo_admins = None self._admins = None d = dirname(abspath(__file__)) f = join_path(d, 'admin', 'cli.py') self.__python_evn_module_dir = d self.__python_evn_admin_cli_file_fullpath = f self.__load_defaults() self._default_sections_copy = copy.deepcopy(self._sections) self.__multiline_pattern = re.compile(r'([^\s].*?)([\s]+\\)?') self.__validate()
def __init__(self): RawConfigParser.__init__(self) self.__repo_path = None self._repo_name = None self._repo_admins = None self._admins = None d = dirname(abspath(__file__)) f = join_path(d, "admin", "cli.py") self.__python_evn_module_dir = d self.__python_evn_admin_cli_file_fullpath = f self.__load_defaults() self._default_sections_copy = copy.deepcopy(self._sections) self.__multiline_pattern = re.compile(r"([^\s].*?)([\s]+\\)?") self.__validate()
def test_02_non_exempt(self): repo = self.create_repo() conf = repo.conf conf.set('main', 'exempt-symlinks-from-blocked-file-extensions', '0') conf.save() svn = repo.svn dot() self.assertFalse(conf.exempt_symlinks_from_blocked_file_extensions) dot() tree = {'target': bulk_chargen(100)} repo.build(tree, prefix='trunk') trunk = join_path(repo.wc, 'trunk') error = e.BlockedFileExtension with chdir(trunk): dot() os.symlink('target', 'target.so') svn.add('target.so') with ensure_blocked(self, error): svn.ci('target.so', m='Adding symlink.')
def test_02_non_exempt(self): repo = self.create_repo() conf = repo.conf conf.set('main', 'exempt-symlinks-from-blocked-file-extensions', '0') conf.save() svn = repo.svn dot() self.assertFalse(conf.exempt_symlinks_from_blocked_file_extensions) dot() tree = { 'target': bulk_chargen(100) } repo.build(tree, prefix='trunk') trunk = join_path(repo.wc, 'trunk') error = e.BlockedFileExtension with chdir(trunk): dot() os.symlink('target', 'target.so') svn.add('target.so') with ensure_blocked(self, error): svn.ci('target.so', m='Adding symlink.')
def test_01_exempt(self): repo = self.create_repo() conf = repo.conf svn = repo.svn dot() self.assertTrue(conf.exempt_symlinks_from_blocked_file_extensions) #evnadmin = repo.evnadmin #evnadmin.enable_remote_debug(repo.path, hook='pre-commit') dot() tree = {'target': bulk_chargen(100)} repo.build(tree, prefix='trunk') trunk = join_path(repo.wc, 'trunk') error = e.BlockedFileExtension with chdir(trunk): dot() os.symlink('target', 'target.so') self.assertTrue(os.path.islink('target.so')) svn.add('target') svn.add('target.so') svn.ci('.', m='Adding target + symlink.') dot() svn.mv('target', 'target.dll') with ensure_blocked(self, error): svn.ci('.', m='Renaming target...') dot() svn.revert('target', 'target.dll') dot() os.rename('target.so', 'target.exe') self.assertTrue(os.path.islink('target.exe')) #evnadmin = repo.evnadmin #evnadmin.enable_remote_debug(repo.path, hook='pre-commit') svn.rm('target.so') svn.add('target.exe') svn.ci('.', m='Renaming target.so to target.exe.')
def __init__(self, host, port, hook_name, hook_dir, options, conf): assert os.path.isdir(hook_dir) timestamp = timestamp_string() self.pid = os.getpid() fn = '%s-%s-%s-%s.%d' % ( conf.svn_hook_enabled_prefix, hook_name, conf.svn_hook_remote_debug_suffix, timestamp_string(), self.pid, ) path = join_path(hook_dir, fn) assert not os.path.exists(path) touch_file(path) try_remove_file_atexit(path) self.path = self.session_file = path self.conf = conf self.hook_name = hook_name self.options = options self.old_stdout = sys.stdout self.old_stdin = sys.stdin self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.sock.bind((host, port)) (self.host, self.port) = self.sock.getsockname() self.dst_host = '' self.dst_port = 0 self.state = 'listening' self._dump_state() self.sock.listen(1) (clientsocket, address) = self.sock.accept() (self.dst_host, self.dst_port) = address self.state = 'connected' self._dump_state() handle = clientsocket.makefile('rw') k = self.conf.remote_debug_complete_key pdb.Pdb.__init__(self, completekey=k, stdin=handle, stdout=handle) sys.stdout = sys.stdin = handle
def test_01_exempt(self): repo = self.create_repo() conf = repo.conf svn = repo.svn dot() self.assertTrue(conf.exempt_symlinks_from_blocked_file_extensions) #evnadmin = repo.evnadmin #evnadmin.enable_remote_debug(repo.path, hook='pre-commit') dot() tree = { 'target': bulk_chargen(100) } repo.build(tree, prefix='trunk') trunk = join_path(repo.wc, 'trunk') error = e.BlockedFileExtension with chdir(trunk): dot() os.symlink('target', 'target.so') self.assertTrue(os.path.islink('target.so')) svn.add('target') svn.add('target.so') svn.ci('.', m='Adding target + symlink.') dot() svn.mv('target', 'target.dll') with ensure_blocked(self, error): svn.ci('.', m='Renaming target...') dot() svn.revert('target', 'target.dll') dot() os.rename('target.so', 'target.exe') self.assertTrue(os.path.islink('target.exe')) #evnadmin = repo.evnadmin #evnadmin.enable_remote_debug(repo.path, hook='pre-commit') svn.rm('target.so') svn.add('target.exe') svn.ci('.', m='Renaming target.so to target.exe.')
def test_01(self): repo = self.create_repo() svn = repo.svn evnadmin = repo.evnadmin dot() error = e.TagDirectoryCreatedManually with ensure_blocked(self, error): svn.mkdir(repo.ra('/tags/1.x/'), m='Create tag manually') dot() evnadmin.disable(repo.name) svn.mkdir(repo.ra('/tags/1.x/'), m='Create tag manually2') dot() evn_props_r2_expected = { 'errors': { '/tags/1.x/': [ e.TagDirectoryCreatedManually ], }, 'roots': { '/trunk/': { 'created': 1 }, }, } evnadmin.enable(repo.name) self.assertEqual(repo.revprops_at(2)['evn'], evn_props_r2_expected) dot() evnadmin.set_repo_readonly(repo.name) dot() evnadmin.add_root_hint( repo.name, path='/tags/1.x/', revision='2', root_type='tag', ) evnadmin.analyze(repo.name) dot() evnadmin.unset_repo_readonly(repo.name) dot() evn_props_r2_expected = { 'roots': { '/trunk/': { 'created': 1 }, '/tags/1.x/': { 'created': 2, 'copies': {}, 'creation_method': 'created', }, }, } self.assertEqual(repo.revprops_at(2)['evn'], evn_props_r2_expected) dot() svn.up(repo.wc) dot() error = e.TagModified tagdir = join_path(repo.wc, 'tags/1.x') with chdir(tagdir): tree = { 'test.txt': bulk_chargen(100) } repo.build(tree, prefix='tags/1.x') dot() svn.add('test.txt') with ensure_blocked(self, error): dot() svn.ci('test.txt', m='Modifying tag') dot() error = e.TagRemoved with ensure_blocked(self, error): svn.rm(repo.ra('tags/1.x'), m='Deleting tag.') dot() error = e.TagRenamed with ensure_blocked(self, error): svn.mv(repo.ra('tags/1.x'), repo.ra('tags/2.x'), m='Renaming tag.') dot() error = e.TagCopied with ensure_blocked(self, error): svn.copy(repo.ra('tags/1.x'), repo.ra('tags/2.x'), m='Copying tag.')
def default_repo_conf_filename(self): if not self.repo_path: raise RepositoryNotSet() return join_path(self.repo_path, 'conf/evn.conf')
def default_repo_conf_filename(self): if not self.repo_path: raise RepositoryNotSet() return join_path(self.repo_path, "conf/evn.conf")
def test_01(self): repo = self.create_repo() svn = repo.svn evnadmin = repo.evnadmin dot() error = e.TagDirectoryCreatedManually with ensure_blocked(self, error): svn.mkdir(repo.ra('/tags/1.x/'), m='Create tag manually') dot() evnadmin.disable(repo.name) svn.mkdir(repo.ra('/tags/1.x/'), m='Create tag manually2') dot() evn_props_r2_expected = { 'errors': { '/tags/1.x/': [e.TagDirectoryCreatedManually], }, 'roots': { '/trunk/': { 'created': 1 }, }, } evnadmin.enable(repo.name) self.assertEqual(repo.revprops_at(2)['evn'], evn_props_r2_expected) dot() evnadmin.set_repo_readonly(repo.name) dot() evnadmin.add_root_hint( repo.name, path='/tags/1.x/', revision='2', root_type='tag', ) evnadmin.analyze(repo.name) dot() evnadmin.unset_repo_readonly(repo.name) dot() evn_props_r2_expected = { 'roots': { '/trunk/': { 'created': 1 }, '/tags/1.x/': { 'created': 2, 'copies': {}, 'creation_method': 'created', }, }, } self.assertEqual(repo.revprops_at(2)['evn'], evn_props_r2_expected) dot() svn.up(repo.wc) dot() error = e.TagModified tagdir = join_path(repo.wc, 'tags/1.x') with chdir(tagdir): tree = {'test.txt': bulk_chargen(100)} repo.build(tree, prefix='tags/1.x') dot() svn.add('test.txt') with ensure_blocked(self, error): dot() svn.ci('test.txt', m='Modifying tag') dot() error = e.TagRemoved with ensure_blocked(self, error): svn.rm(repo.ra('tags/1.x'), m='Deleting tag.') dot() error = e.TagRenamed with ensure_blocked(self, error): svn.mv(repo.ra('tags/1.x'), repo.ra('tags/2.x'), m='Renaming tag.') dot() error = e.TagCopied with ensure_blocked(self, error): svn.copy(repo.ra('tags/1.x'), repo.ra('tags/2.x'), m='Copying tag.')
def __init__(self, repo): name = repo.conf.evn_hook_file_name path = join_path(repo.hook_dir, name) HookFile.__init__(self, repo, name, path)