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
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)