예제 #1
0
파일: config.py 프로젝트: tpn/enversion
 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
     ]
예제 #2
0
파일: hook.py 프로젝트: smapjb/enversion
    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()
예제 #3
0
 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
     ]
예제 #4
0
    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()
예제 #5
0
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)
예제 #6
0
파일: __init__.py 프로젝트: tpn/enversion
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)
예제 #7
0
파일: config.py 프로젝트: tpn/enversion
    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()
예제 #8
0
    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()
예제 #9
0
    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.')
예제 #11
0
    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.')
예제 #12
0
파일: debug.py 프로젝트: smapjb/enversion
    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.')
예제 #14
0
    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
예제 #15
0
    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.')
예제 #16
0
파일: config.py 프로젝트: tpn/enversion
 def default_repo_conf_filename(self):
     if not self.repo_path:
         raise RepositoryNotSet()
     return join_path(self.repo_path, 'conf/evn.conf')
예제 #17
0
 def default_repo_conf_filename(self):
     if not self.repo_path:
         raise RepositoryNotSet()
     return join_path(self.repo_path, "conf/evn.conf")
예제 #18
0
    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.')
예제 #19
0
파일: hook.py 프로젝트: smapjb/enversion
 def __init__(self, repo):
     name = repo.conf.evn_hook_file_name
     path = join_path(repo.hook_dir, name)
     HookFile.__init__(self, repo, name, path)