예제 #1
0
    def test_local_merge_source_is_fast_forward(self, vcsbackend_hg):
        target_repo = vcsbackend_hg.create_repo(number_of_commits=1)
        source_repo = vcsbackend_hg.clone_repo(target_repo)
        target_rev = target_repo.branches['default']
        target_ref = Reference(type='branch',
                               name='default',
                               commit_id=target_rev)
        vcsbackend_hg.add_file(source_repo, 'README_MERGE2', 'Version 2')
        source_repo = MercurialRepository(source_repo.path)
        source_rev = source_repo.branches['default']
        source_ref = Reference(type='branch',
                               name='default',
                               commit_id=source_rev)

        target_repo._local_pull(source_repo.path, source_ref)

        merge_message = 'Merge message\n\nDescription:...'
        user_name = 'Albert Einstein'
        user_email = '*****@*****.**'
        merge_commit_id, needs_push = target_repo._local_merge(
            target_ref, merge_message, user_name, user_email, source_ref)
        assert merge_commit_id == source_rev
        assert needs_push

        target_repo = MercurialRepository(target_repo.path)
        assert target_repo.commit_ids[-2] == target_rev
        assert target_repo.commit_ids[-1] == source_rev

        assert not os.path.exists(
            os.path.join(target_repo.path, '.hg', 'merge', 'state'))
예제 #2
0
 def test_repo_clone_without_update(self):
     repo = MercurialRepository(TEST_HG_REPO)
     repo_clone = MercurialRepository(TEST_HG_REPO_CLONE + '_wo_update',
                                      src_url=TEST_HG_REPO,
                                      update_after_clone=False)
     assert len(repo.commit_ids) == len(repo_clone.commit_ids)
     assert not os.path.isfile(
         os.path.join(TEST_HG_REPO_CLONE + '_wo_update', 'MANIFEST.in'))
예제 #3
0
 def test_repo_clone_without_update(self):
     repo = MercurialRepository(TEST_HG_REPO)
     repo_clone = MercurialRepository(TEST_HG_REPO_CLONE + '_wo_update',
                                      src_url=TEST_HG_REPO,
                                      update_after_clone=False)
     self.assertEqual(len(repo.revisions), len(repo_clone.revisions))
     self.assertEqual(os.path.isfile(os.path.join(TEST_HG_REPO_CLONE \
                                                 + '_wo_update',
                                                 'MANIFEST.in')), False,)
예제 #4
0
    def test_repo_clone_with_update(self):
        repo = MercurialRepository(TEST_HG_REPO)
        repo_clone = MercurialRepository(TEST_HG_REPO_CLONE + '_w_update',
                                         src_url=TEST_HG_REPO,
                                         update_after_clone=True)
        assert len(repo.commit_ids) == len(repo_clone.commit_ids)

        # check if current workdir was updated
        assert os.path.isfile(
            os.path.join(TEST_HG_REPO_CLONE + '_w_update', 'MANIFEST.in'))
예제 #5
0
 def test_repo_clone(self):
     self.__check_for_existing_repo()
     repo = MercurialRepository(TEST_HG_REPO)
     repo_clone = MercurialRepository(TEST_HG_REPO_CLONE,
                                      src_url=TEST_HG_REPO,
                                      update_after_clone=True)
     self.assertEqual(len(repo.revisions), len(repo_clone.revisions))
     # Checking hashes of changesets should be enough
     for changeset in repo.get_changesets():
         raw_id = changeset.raw_id
         self.assertEqual(raw_id, repo_clone.get_changeset(raw_id).raw_id)
예제 #6
0
    def test_repo_clone_with_update(self):
        repo = MercurialRepository(TEST_HG_REPO)
        repo_clone = MercurialRepository(TEST_HG_REPO_CLONE + '_w_update',
                                         src_url=TEST_HG_REPO,
                                         update_after_clone=True)
        self.assertEqual(len(repo.revisions), len(repo_clone.revisions))

        #check if current workdir was updated
        self.assertEqual(os.path.isfile(os.path.join(TEST_HG_REPO_CLONE \
                                                    + '_w_update',
                                                    'MANIFEST.in')), True,)
예제 #7
0
    def test_pull(self):
        if os.path.exists(TEST_HG_REPO_PULL):
            self.fail('Cannot test mercurial pull command as location %s '
                      'already exists. You should manually remove it first' %
                      TEST_HG_REPO_PULL)
        repo_new = MercurialRepository(TEST_HG_REPO_PULL, create=True)
        self.assertTrue(len(self.repo.revisions) > len(repo_new.revisions))

        repo_new.pull(self.repo.path)
        repo_new = MercurialRepository(TEST_HG_REPO_PULL)
        self.assertTrue(len(self.repo.revisions) == len(repo_new.revisions))
예제 #8
0
    def test_local_pull_branch(self):
        target_repo = self.get_empty_repo()
        source_repo = self.get_clone_repo()

        default = Reference('branch', 'default',
                            source_repo.branches['default'])
        target_repo._local_pull(source_repo.path, default)
        target_repo = MercurialRepository(target_repo.path)
        assert (
            target_repo.branches['default'] == source_repo.branches['default'])

        stable = Reference('branch', 'stable', source_repo.branches['stable'])
        target_repo._local_pull(source_repo.path, stable)
        target_repo = MercurialRepository(target_repo.path)
        assert target_repo.branches['stable'] == source_repo.branches['stable']
예제 #9
0
    def test_repo_clone(self):
        if os.path.exists(TEST_HG_REPO_CLONE):
            self.fail(
                'Cannot test mercurial clone repo as location %s already '
                'exists. You should manually remove it first.' %
                TEST_HG_REPO_CLONE)

        repo = MercurialRepository(TEST_HG_REPO)
        repo_clone = MercurialRepository(TEST_HG_REPO_CLONE,
                                         src_url=TEST_HG_REPO)
        assert len(repo.commit_ids) == len(repo_clone.commit_ids)
        # Checking hashes of commits should be enough
        for commit in repo.get_commits():
            raw_id = commit.raw_id
            assert raw_id == repo_clone.get_commit(raw_id).raw_id
예제 #10
0
    def test_local_pull_commit(self):
        target_repo = self.get_empty_repo()
        source_repo = self.get_clone_repo()

        commits = list(source_repo.get_commits(branch_name='default'))
        commit_id = commits[-5].raw_id
        commit = Reference('rev', commit_id, commit_id)
        target_repo._local_pull(source_repo.path, commit)
        target_repo = MercurialRepository(target_repo.path)
        assert target_repo.branches['default'] == commit_id

        commit_id = commits[-3].raw_id
        commit = Reference('rev', commit_id, commit_id)
        target_repo._local_pull(source_repo.path, commit)
        target_repo = MercurialRepository(target_repo.path)
        assert target_repo.branches['default'] == commit_id
예제 #11
0
    def get_clone_repo(self):
        """
        Return a clone of the base repo.
        """
        clone_path = next(REPO_PATH_GENERATOR)
        repo_clone = MercurialRepository(clone_path,
                                         create=True,
                                         src_url=self.repo.path)

        return repo_clone
예제 #12
0
    def test_maybe_prepare_merge_workspace(self):
        workspace = self.repo._maybe_prepare_merge_workspace('pr2', 'unused')

        assert os.path.isdir(workspace)
        workspace_repo = MercurialRepository(workspace)
        assert workspace_repo.branches == self.repo.branches

        # Calling it a second time should also succeed
        workspace = self.repo._maybe_prepare_merge_workspace('pr2', 'unused')
        assert os.path.isdir(workspace)
예제 #13
0
    def test_local_push(self):
        target_repo = self.get_empty_repo()

        revisions = list(self.repo.get_commits(branch_name='default'))
        revision = revisions[-5].raw_id
        self.repo._local_push(revision, target_repo.path)

        target_repo = MercurialRepository(target_repo.path)

        assert target_repo.branches['default'] == revision
예제 #14
0
    def test_local_pull_bookmark(self):
        target_repo = self.get_empty_repo()
        source_repo = self.get_clone_repo()

        commits = list(source_repo.get_commits(branch_name='default'))
        foo1_id = commits[-5].raw_id
        foo1 = Reference('book', 'foo1', foo1_id)
        source_repo._update(foo1_id)
        source_repo.bookmark('foo1')

        foo2_id = commits[-3].raw_id
        foo2 = Reference('book', 'foo2', foo2_id)
        source_repo._update(foo2_id)
        source_repo.bookmark('foo2')

        target_repo._local_pull(source_repo.path, foo1)
        target_repo = MercurialRepository(target_repo.path)
        assert target_repo.branches['default'] == commits[-5].raw_id

        target_repo._local_pull(source_repo.path, foo2)
        target_repo = MercurialRepository(target_repo.path)
        assert target_repo.branches['default'] == commits[-3].raw_id
예제 #15
0
    def test_local_merge_raises_exception_on_conflict(self, vcsbackend_hg):
        target_repo = vcsbackend_hg.create_repo(number_of_commits=1)
        source_repo = vcsbackend_hg.clone_repo(target_repo)
        vcsbackend_hg.add_file(target_repo, 'README_MERGE', 'Version 1')
        target_repo = MercurialRepository(target_repo.path)
        target_rev = target_repo.branches['default']
        target_ref = Reference(type='branch',
                               name='default',
                               commit_id=target_rev)
        vcsbackend_hg.add_file(source_repo, 'README_MERGE', 'Version 2')
        source_repo = MercurialRepository(source_repo.path)
        source_rev = source_repo.branches['default']
        source_ref = Reference(type='branch',
                               name='default',
                               commit_id=source_rev)

        target_repo._local_pull(source_repo.path, source_ref)
        with pytest.raises(RepositoryError):
            target_repo._local_merge(target_ref, 'merge_message', 'user name',
                                     '*****@*****.**', source_ref)

        # Check we are not left in an intermediate merge state
        assert not os.path.exists(
            os.path.join(target_repo.path, '.hg', 'merge', 'state'))
예제 #16
0
    def test_local_merge_source_is_integrated(self, vcsbackend_hg):
        target_repo = vcsbackend_hg.create_repo(number_of_commits=1)
        target_rev = target_repo.branches['default']
        target_ref = Reference(type='branch',
                               name='default',
                               commit_id=target_rev)

        merge_message = 'Merge message\n\nDescription:...'
        user_name = 'Albert Einstein'
        user_email = '*****@*****.**'
        merge_commit_id, needs_push = target_repo._local_merge(
            target_ref, merge_message, user_name, user_email, target_ref)
        assert merge_commit_id == target_rev
        assert not needs_push

        target_repo = MercurialRepository(target_repo.path)
        assert target_repo.commit_ids[-1] == target_rev

        assert not os.path.exists(
            os.path.join(target_repo.path, '.hg', 'merge', 'state'))
예제 #17
0
def repo(request, pylonsapp):
    repo = MercurialRepository(TEST_HG_REPO)
    if request.cls:
        request.cls.repo = repo
    return repo
예제 #18
0
    def test_local_clone(self):
        clone_path = next(REPO_PATH_GENERATOR)
        self.repo._local_clone(clone_path)
        repo_clone = MercurialRepository(clone_path)

        assert self.repo.commit_ids == repo_clone.commit_ids
예제 #19
0
 def test_unicode_path_repo(self):
     self.assertRaises(VCSError,
                       lambda: MercurialRepository(u'iShouldFail'))
예제 #20
0
 def setUp(self):
     self.repo = MercurialRepository(TEST_HG_REPO)
예제 #21
0
 def test_unicode_path_repo(self):
     with pytest.raises(VCSError):
         MercurialRepository(u'iShouldFail')
예제 #22
0
 def test_wrong_repo_path(self):
     wrong_repo_path = '/tmp/errorrepo'
     with pytest.raises(RepositoryError):
         MercurialRepository(wrong_repo_path)
예제 #23
0
 def get_empty_repo(self):
     """
     Return an empty repo.
     """
     return MercurialRepository(next(REPO_PATH_GENERATOR), create=True)