Exemplo n.º 1
0
    def merge(self, merger, message_header, message_body):
        import shutil
        from vilya.models.git import make_git_env

        # TODO: Use User only
        if merger and isinstance(merger, basestring):
            merger = User(merger)
        if not isinstance(merger, User):
            raise Exception("User is needed to merge pull")
        env = make_git_env(merger)

        worktree = self.temp_dir
        merge_commit_sha = None
        try:
            if self.pull.is_up_to_date():
                return ''

            from_sha = self.from_sha
            to_sha = self.to_sha
            repo = self.pull.pull_clone(worktree)
            ref = self.pull.pull_fetch(repo)
            result = repo.merge(ref, message_header, message_body, no_ff=True,
                                _env=env)
            errcode = result['returncode']
            if errcode != 0:
                raise RepoMergeError()
            result = repo.push('origin', self.pull.to_ref,
                               _env=dict(CODE_REMOTE_USER=merger.name))
            errcode = result['returncode']
            if errcode != 0:
                raise RepoPushError
            merge_commit_sha = self.sha(self.pull.to_ref)
        except RepoMergeError:
            # FIXME: error msg
            pass
        except RepoPushError:
            # FIXME: error msg
            pass
        else:
            if merge_commit_sha and self.pull.ticket:
                self.pull._save_merged(merger.name,
                                       from_sha,
                                       to_sha,
                                       merge_commit_sha)
        finally:
            shutil.rmtree(worktree)
        return merge_commit_sha
Exemplo n.º 2
0
 def test_removed_page_not_indexd(self):
     raise SkipTest("advanced index way doesn't exist now.")
     prj = self._prj()
     self._add(prj, 'docs/index.rst', base_index_rst)
     self._add(prj, 'docs/doc1.rst', 'aaa')
     _el.CodeSearch.index_a_project_docs(prj.id)
     res = _el.CodeSearch.search_a_phrase('aaa', from_=0, size=100)
     res = _el.CodeSearch.format_search_result(res)
     assert len(res) == 1
     prj.git.call('read-tree HEAD')
     temp_dir = get_tmpdir()
     env = make_git_env(is_anonymous=True)
     prj.git.call('--work-tree %s checkout-index --force -a' % temp_dir)
     prj.git.call(['--work-tree', temp_dir, 'rm', 'docs/doc1.rst'])
     prj.git.call(['--work-tree', temp_dir, 'commit', '-m', 'm'], _env=env)
     _el.CodeSearch.index_a_project_docs(prj.id)
     res = _el.CodeSearch.search_a_phrase('aaa', from_=0, size=100)
     res = _el.CodeSearch.format_search_result(res)
     assert len(res) == 0, \
         "Should find no results after removing and reindexing"
     _el.CodeSearch.delete_a_project_docs(prj.id)
     shutil.rmtree(temp_dir)
Exemplo n.º 3
0
 def test_removed_page_not_indexd(self):
     raise SkipTest("advanced index way doesn't exist now.")
     prj = self._prj()
     self._add(prj, 'docs/index.rst', base_index_rst)
     self._add(prj, 'docs/doc1.rst', 'aaa')
     _el.CodeSearch.index_a_project_docs(prj.id)
     res = _el.CodeSearch.search_a_phrase('aaa', from_=0, size=100)
     res = _el.CodeSearch.format_search_result(res)
     assert len(res) == 1
     prj.git.call('read-tree HEAD')
     temp_dir = get_tmpdir()
     env = make_git_env(is_anonymous=True)
     prj.git.call('--work-tree %s checkout-index --force -a' % temp_dir)
     prj.git.call(['--work-tree', temp_dir, 'rm', 'docs/doc1.rst'])
     prj.git.call(['--work-tree', temp_dir, 'commit', '-m', 'm'], _env=env)
     _el.CodeSearch.index_a_project_docs(prj.id)
     res = _el.CodeSearch.search_a_phrase('aaa', from_=0, size=100)
     res = _el.CodeSearch.format_search_result(res)
     assert len(res) == 0, \
         "Should find no results after removing and reindexing"
     _el.CodeSearch.delete_a_project_docs(prj.id)
     shutil.rmtree(temp_dir)