예제 #1
0
 def test_hooks_are_installed_for_svn_repo(self, backend_svn):
     repo = backend_svn.create_repo()
     scm_repo = repo.scm_instance()
     model = scm.ScmModel()
     with patch.object(scm.ScmModel, 'install_svn_hooks') as hooks_mock:
         model.install_hooks(scm_repo, repo_type='svn')
     hooks_mock.assert_called_once_with(scm_repo)
예제 #2
0
def test_strip_with_multiple_heads(backend_hg):
    commits = [
        {
            'message': 'A'
        },
        {
            'message': 'a'
        },
        {
            'message': 'b'
        },
        {
            'message': 'B',
            'parents': ['A']
        },
        {
            'message': 'a1'
        },
    ]
    repo = backend_hg.create_repo(commits=commits)
    commit_ids = backend_hg.commit_ids

    model = scm.ScmModel()
    model.strip(repo, commit_ids['b'], branch=None)

    vcs_repo = repo.scm_instance()
    rest_commit_ids = [c.raw_id for c in vcs_repo.get_changesets()]
    assert len(rest_commit_ids) == 4
    assert commit_ids['b'] not in rest_commit_ids
예제 #3
0
 def test_mercurial_doesnt_trigger_hooks(self, backend_hg, hook_method):
     repo = backend_hg.create_repo()
     scm_repo = repo.scm_instance()
     model = scm.ScmModel()
     with patch.object(scm.ScmModel, hook_method) as hooks_mock:
         model.install_hooks(scm_repo, repo_type='hg')
     assert hooks_mock.call_count == 0
예제 #4
0
def test_get_nodes_returns_unicode_non_flat(backend_random):
    repo = backend_random.repo
    directories, files = scm.ScmModel().get_nodes(
        repo.repo_name, repo.get_commit(commit_idx=0).raw_id, flat=False)
    # johbo: Checking only the names for now, since that is the critical
    # part.
    assert_contains_only_unicode([d['name'] for d in directories])
    assert_contains_only_unicode([f['name'] for f in files])
예제 #5
0
    def test_new_hooks_are_created(self, backend_svn):
        model = scm.ScmModel()
        repo = backend_svn.create_repo()
        vcs_repo = repo.scm_instance()
        model.install_svn_hooks(vcs_repo)

        hooks_path = os.path.join(vcs_repo.path, 'hooks')
        assert os.path.isdir(hooks_path)
        for file_name in self.HOOK_FILES:
            file_path = os.path.join(hooks_path, file_name)
            self._check_hook_file_mode(file_path)
            self._check_hook_file_content(file_path)
예제 #6
0
    def test_non_rc_hooks_are_replaced_with_force_create(self, backend_svn):
        model = scm.ScmModel()
        repo = backend_svn.create_repo()
        vcs_repo = repo.scm_instance()
        hooks_path = os.path.join(vcs_repo.path, 'hooks')
        file_paths = [os.path.join(hooks_path, f) for f in self.HOOK_FILES]
        non_rc_content = "exit 0\n"

        for file_path in file_paths:
            self._create_fake_hook(file_path, content=non_rc_content)

        model.install_svn_hooks(vcs_repo, force_create=True)

        for file_path in file_paths:
            self._check_hook_file_content(file_path)
예제 #7
0
    def test_rc_hooks_are_replaced(self, backend_svn):
        model = scm.ScmModel()
        repo = backend_svn.create_repo()
        vcs_repo = repo.scm_instance()
        hooks_path = os.path.join(vcs_repo.path, 'hooks')
        file_paths = [os.path.join(hooks_path, f) for f in self.HOOK_FILES]

        for file_path in file_paths:
            self._create_fake_hook(file_path,
                                   content="RC_HOOK_VER = 'abcde'\n")

        model.install_svn_hooks(vcs_repo)

        for file_path in file_paths:
            self._check_hook_file_content(file_path)
예제 #8
0
    def test_non_rc_hooks_are_not_replaced_without_force_create(
            self, backend_svn):
        model = scm.ScmModel()
        repo = backend_svn.create_repo()
        vcs_repo = repo.scm_instance()
        hooks_path = os.path.join(vcs_repo.path, 'hooks')
        file_paths = [os.path.join(hooks_path, f) for f in self.HOOK_FILES]
        non_rc_content = "exit 0\n"

        for file_path in file_paths:
            self._create_fake_hook(file_path, content=non_rc_content)

        model.install_svn_hooks(vcs_repo)

        for file_path in file_paths:
            with open(file_path, 'rt') as hook_file:
                content = hook_file.read()
            assert content == non_rc_content
예제 #9
0
def test_get_non_unicode_reference(backend):
    model = scm.ScmModel()
    non_unicode_list = ["Adını".decode("cp1254")]

    def scm_instance():
        return Mock(branches=non_unicode_list,
                    bookmarks=non_unicode_list,
                    tags=non_unicode_list,
                    alias=backend.alias)

    repo = Mock(__class__=db.Repository, scm_instance=scm_instance)
    choices, __ = model.get_repo_landing_revs(repo=repo)
    if backend.alias == 'hg':
        valid_choices = [
            'rev:tip', u'branch:Ad\xc4\xb1n\xc4\xb1',
            u'book:Ad\xc4\xb1n\xc4\xb1', u'tag:Ad\xc4\xb1n\xc4\xb1'
        ]
    else:
        valid_choices = [
            'rev:tip', u'branch:Ad\xc4\xb1n\xc4\xb1',
            u'tag:Ad\xc4\xb1n\xc4\xb1'
        ]

    assert choices == valid_choices
예제 #10
0
def test_mark_for_invalidation_config(backend):
    repo = backend.create_repo()
    with patch('rhodecode.model.db.Repository.update_commit_cache') as _mock:
        scm.ScmModel().mark_for_invalidation(repo.repo_name)
        _, kwargs = _mock.call_args
        assert kwargs['config'].__dict__ == repo._config.__dict__
예제 #11
0
def test_get_nodes_returns_unicode_flat(backend_random):
    repo = backend_random.repo
    directories, files = scm.ScmModel().get_nodes(
        repo.repo_name, repo.get_commit(commit_idx=0).raw_id, flat=True)
    assert_contains_only_unicode(directories)
    assert_contains_only_unicode(files)