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'))
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'))
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,)
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'))
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)
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,)
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))
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']
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
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
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
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)
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
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
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'))
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'))
def repo(request, pylonsapp): repo = MercurialRepository(TEST_HG_REPO) if request.cls: request.cls.repo = repo return repo
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
def test_unicode_path_repo(self): self.assertRaises(VCSError, lambda: MercurialRepository(u'iShouldFail'))
def setUp(self): self.repo = MercurialRepository(TEST_HG_REPO)
def test_unicode_path_repo(self): with pytest.raises(VCSError): MercurialRepository(u'iShouldFail')
def test_wrong_repo_path(self): wrong_repo_path = '/tmp/errorrepo' with pytest.raises(RepositoryError): MercurialRepository(wrong_repo_path)
def get_empty_repo(self): """ Return an empty repo. """ return MercurialRepository(next(REPO_PATH_GENERATOR), create=True)