Esempio n. 1
0
 def test_repo_clone_into_bare_repo(self):
     repo = GitRepository(TEST_GIT_REPO)
     clone_path = TEST_GIT_REPO_CLONE + '_bare.git'
     repo_clone = GitRepository(clone_path,
                                create=True,
                                src_url=repo.path,
                                bare=True)
     self.assertTrue(repo_clone._repo.bare)
Esempio n. 2
0
    def test_repo_clone_with_update(self):
        repo = GitRepository(TEST_GIT_REPO)
        clone_path = TEST_GIT_REPO_CLONE + '_with_update'
        repo_clone = GitRepository(
            clone_path,
            create=True, src_url=TEST_GIT_REPO, update_after_clone=True)
        assert len(repo.commit_ids) == len(repo_clone.commit_ids)

        # check if current workdir was updated
        fpath = os.path.join(clone_path, 'MANIFEST.in')
        assert os.path.isfile(fpath)
Esempio n. 3
0
 def test_repo_clone(self):
     self.__check_for_existing_repo()
     repo = GitRepository(TEST_GIT_REPO)
     repo_clone = GitRepository(
         TEST_GIT_REPO_CLONE,
         src_url=TEST_GIT_REPO, create=True, update_after_clone=True)
     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
Esempio n. 4
0
 def test_repo_clone_without_update(self):
     repo = GitRepository(TEST_GIT_REPO)
     clone_path = TEST_GIT_REPO_CLONE + '_without_update'
     repo_clone = GitRepository(
         clone_path,
         create=True, src_url=TEST_GIT_REPO, update_after_clone=False)
     assert len(repo.commit_ids) == len(repo_clone.commit_ids)
     # check if current workdir was *NOT* updated
     fpath = os.path.join(clone_path, 'MANIFEST.in')
     # Make sure it's not bare repo
     assert not repo_clone.bare
     assert not os.path.isfile(fpath)
Esempio n. 5
0
 def test_repo_clone(self):
     self.__check_for_existing_repo()
     repo = GitRepository(TEST_GIT_REPO)
     repo_clone = GitRepository(TEST_GIT_REPO_CLONE,
                                src_url=TEST_GIT_REPO,
                                create=True,
                                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)
Esempio n. 6
0
 def test_repo_clone_without_update(self):
     repo = GitRepository(TEST_GIT_REPO)
     clone_path = TEST_GIT_REPO_CLONE + '_without_update'
     repo_clone = GitRepository(clone_path,
                                create=True,
                                src_url=TEST_GIT_REPO,
                                update_after_clone=False)
     self.assertEqual(len(repo.revisions), len(repo_clone.revisions))
     #check if current workdir was *NOT* updated
     fpath = os.path.join(clone_path, 'MANIFEST.in')
     # Make sure it's not bare repo
     self.assertFalse(repo_clone._repo.bare)
     self.assertEqual(
         False, os.path.isfile(fpath),
         'Repo was cloned and updated but file %s was found' % fpath)
Esempio n. 7
0
    def test_repo_clone_with_update(self):
        repo = GitRepository(TEST_GIT_REPO)
        clone_path = TEST_GIT_REPO_CLONE + '_with_update'
        repo_clone = GitRepository(clone_path,
                                   create=True,
                                   src_url=TEST_GIT_REPO,
                                   update_after_clone=True)
        self.assertEqual(len(repo.revisions), len(repo_clone.revisions))

        #check if current workdir was updated
        fpath = os.path.join(clone_path, 'MANIFEST.in')
        self.assertEqual(
            True, os.path.isfile(fpath),
            'Repo was cloned and updated but file %s could not be found' %
            fpath)
Esempio n. 8
0
    def test_local_merge(self):
        target_repo = self.get_empty_repo()
        source_repo = self.get_clone_repo()

        # Create a new branch in source repo
        master_commit = source_repo.commit_ids[-1]
        new_branch_commit = source_repo.commit_ids[-3]
        source_repo._checkout(new_branch_commit)
        source_repo._checkout('new_branch', create=True)

        # This is required as one cannot do a -ff-only merge in an empty repo.
        target_repo._local_pull(source_repo.path, 'new_branch')

        target_repo._local_fetch(source_repo.path, 'master')
        merge_message = 'Merge message\n\nDescription:...'
        user_name = 'Albert Einstein'
        user_email = '*****@*****.**'
        target_repo._local_merge(merge_message, user_name, user_email,
                                 target_repo._last_fetch_heads())

        target_repo = GitRepository(target_repo.path)
        assert target_repo.commit_ids[-2] == master_commit
        last_commit = target_repo.get_commit(target_repo.head)
        assert last_commit.message.strip() == merge_message
        assert last_commit.author == '%s <%s>' % (user_name, user_email)

        assert not os.path.exists(
            os.path.join(target_repo.path, '.git', 'MERGE_HEAD'))
Esempio n. 9
0
    def test_local_pull(self):
        target_repo = self.get_empty_repo()
        source_repo = self.get_clone_repo()

        # Create a new branch in source repo
        master_commit = source_repo.commit_ids[-1]
        new_branch_commit = source_repo.commit_ids[-3]
        source_repo._checkout(new_branch_commit)
        source_repo._checkout('new_branch', create=True)

        target_repo._local_pull(source_repo.path, 'new_branch')
        target_repo = GitRepository(target_repo.path)
        assert target_repo.head == new_branch_commit

        target_repo._local_pull(source_repo.path, 'master')
        target_repo = GitRepository(target_repo.path)
        assert target_repo.head == master_commit
Esempio n. 10
0
    def get_clone_repo(self):
        """
        Return a non bare clone of the base repo.
        """
        clone_path = next(REPO_PATH_GENERATOR)
        repo_clone = GitRepository(
            clone_path, create=True, src_url=self.repo.path, bare=False)

        return repo_clone
Esempio n. 11
0
    def test_local_clone_with_specific_branch(self):
        source_repo = self.get_clone_repo()

        # Create a new branch in source repo
        new_branch_commit = source_repo.commit_ids[-3]
        source_repo._checkout(new_branch_commit)
        source_repo._checkout('new_branch', create=True)

        clone_path = next(REPO_PATH_GENERATOR)
        source_repo._local_clone(clone_path, 'new_branch')
        repo_clone = GitRepository(clone_path)

        assert source_repo.commit_ids[:-3 + 1] == repo_clone.commit_ids

        clone_path = next(REPO_PATH_GENERATOR)
        source_repo._local_clone(clone_path, 'master')
        repo_clone = GitRepository(clone_path)

        assert source_repo.commit_ids == repo_clone.commit_ids
Esempio n. 12
0
    def test_maybe_prepare_merge_workspace(self):
        workspace = self.repo._maybe_prepare_merge_workspace(
            'pr2', Reference('branch', 'master', 'unused'))

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

        # Calling it a second time should also succeed
        workspace = self.repo._maybe_prepare_merge_workspace(
            'pr2', Reference('branch', 'master', 'unused'))
        assert os.path.isdir(workspace)
Esempio n. 13
0
    def test_checkout_with_create(self):
        repo_clone = self.get_clone_repo()

        new_branch = 'new_branch'
        assert repo_clone._current_branch() == 'master'
        assert set(repo_clone.branches) == set(('master',))
        repo_clone._checkout(new_branch, create=True)

        # Branches is a lazy property so we need to recrete the Repo object.
        repo_clone = GitRepository(repo_clone.path)
        assert set(repo_clone.branches) == set(('master', new_branch))
        assert repo_clone._current_branch() == new_branch
Esempio n. 14
0
    def test_local_push_bare(self):
        target_repo = self.get_empty_repo(bare=True)

        pushed_branch = 'pushed_branch'
        self.repo._local_push('master', target_repo.path, pushed_branch)
        # Fix the HEAD of the target repo, or otherwise GitRepository won't
        # report any branches.
        with open(os.path.join(target_repo.path, 'HEAD'), 'w') as f:
            f.write('ref: refs/heads/%s' % pushed_branch)

        target_repo = GitRepository(target_repo.path)

        assert (target_repo.branches[pushed_branch] ==
                self.repo.branches['master'])
Esempio n. 15
0
    def test_local_push_does_not_execute_hook(self):
        target_repo = self.get_empty_repo()

        pushed_branch = 'pushed_branch'
        self._add_failing_hook(target_repo.path, 'pre-receive')
        self.repo._local_push('master', target_repo.path, pushed_branch)
        # Fix the HEAD of the target repo, or otherwise GitRepository won't
        # report any branches.
        with open(os.path.join(target_repo.path, '.git', 'HEAD'), 'w') as f:
            f.write('ref: refs/heads/%s' % pushed_branch)

        target_repo = GitRepository(target_repo.path)

        assert (target_repo.branches[pushed_branch] ==
                self.repo.branches['master'])
Esempio n. 16
0
    def test_local_push_non_bare_target_branch_is_checked_out(self):
        target_repo = self.get_clone_repo()

        pushed_branch = 'pushed_branch'
        # Create a new branch in source repo
        new_branch_commit = target_repo.commit_ids[-3]
        target_repo._checkout(new_branch_commit)
        target_repo._checkout(pushed_branch, create=True)

        self.repo._local_push('master', target_repo.path, pushed_branch)

        target_repo = GitRepository(target_repo.path)

        assert (target_repo.branches[pushed_branch] ==
                self.repo.branches['master'])
Esempio n. 17
0
 def setUp(self):
     self.repo = GitRepository(TEST_GIT_REPO)
Esempio n. 18
0
 def test_wrong_repo_path(self):
     wrong_repo_path = '/tmp/errorrepo'
     with pytest.raises(RepositoryError):
         GitRepository(wrong_repo_path)
Esempio n. 19
0
 def get_empty_repo(self, bare=False):
     """
     Return a non bare empty repo.
     """
     return GitRepository(next(REPO_PATH_GENERATOR), create=True, bare=bare)
Esempio n. 20
0
 def test_repo_clone_without_create(self):
     with pytest.raises(RepositoryError):
         GitRepository(
             TEST_GIT_REPO_CLONE + '_wo_create', src_url=TEST_GIT_REPO)
Esempio n. 21
0
 def prepare(self, request, pylonsapp):
     self.repo = GitRepository(TEST_GIT_REPO, bare=True)
Esempio n. 22
0
 def prepare(self):
     self.repo = GitRepository(TEST_GIT_REPO)
Esempio n. 23
0
 def test_create_repo_is_not_bare_by_default(self):
     repo = GitRepository(get_new_dir('not-bare-by-default'), create=True)
     assert not repo.bare
Esempio n. 24
0
 def test_create_bare_repo(self):
     repo = GitRepository(get_new_dir('bare-repo'), create=True, bare=True)
     assert repo.bare
Esempio n. 25
0
    def test_local_clone(self):
        clone_path = next(REPO_PATH_GENERATOR)
        self.repo._local_clone(clone_path, 'master')
        repo_clone = GitRepository(clone_path)

        assert self.repo.commit_ids == repo_clone.commit_ids