diff --git a/rhodecode/controllers/compare.py b/rhodecode/controllers/compare.py --- a/rhodecode/controllers/compare.py +++ b/rhodecode/controllers/compare.py @@ -25,7 +25,6 @@ # along with this program. If not, see . import logging import traceback -import binascii from webob.exc import HTTPNotFound from pylons import request, response, session, tmpl_context as c, url @@ -37,6 +36,7 @@ from rhodecode.lib.auth import LoginRequ from rhodecode.lib import diffs from rhodecode.model.db import Repository +from rhodecode.model.pull_request import PullRequestModel log = logging.getLogger(__name__) @@ -49,46 +49,6 @@ class CompareController(BaseRepoControll def __before__(self): super(CompareController, self).__before__() - def _get_discovery(self, org_repo, org_ref, other_repo, other_ref): - from mercurial import discovery - other = org_repo._repo - repo = other_repo._repo - tip = other[org_ref[1]] - log.debug('Doing discovery for %s@%s vs %s@%s' % ( - org_repo, org_ref, other_repo, other_ref) - ) - log.debug('Filter heads are %s[%s]' % (tip, org_ref[1])) - tmp = discovery.findcommonincoming( - repo=repo, # other_repo we check for incoming - remote=other, # org_repo source for incoming - heads=[tip.node()], - force=False - ) - return tmp - - def _get_changesets(self, org_repo, org_ref, other_repo, other_ref, tmp): - changesets = [] - #case two independent repos - if org_repo != other_repo: - common, incoming, rheads = tmp - - if not incoming: - revs = [] - else: - revs = org_repo._repo.changelog.findmissing(common, rheads) - - for cs in reversed(map(binascii.hexlify, revs)): - changesets.append(org_repo.get_changeset(cs)) - else: - revs = ['ancestors(%s) and not ancestors(%s)' % (org_ref[1], - other_ref[1])] - from mercurial import scmutil - out = scmutil.revrange(org_repo._repo, revs) - for cs in reversed(out): - changesets.append(org_repo.get_changeset(cs)) - - return changesets - def index(self, org_ref_type, org_ref, other_ref_type, other_ref): org_repo = c.rhodecode_db_repo.repo_name @@ -108,15 +68,9 @@ class CompareController(BaseRepoControll log.error('Could not found repo %s or %s' % (org_repo, other_repo)) raise HTTPNotFound - discovery_data = self._get_discovery(org_repo.scm_instance, - org_ref, - other_repo.scm_instance, - other_ref) - c.cs_ranges = self._get_changesets(org_repo.scm_instance, - org_ref, - other_repo.scm_instance, - other_ref, - discovery_data) + c.cs_ranges, discovery_data = PullRequestModel().get_compare_data( + org_repo, org_ref, other_repo, other_ref + ) c.statuses = c.rhodecode_db_repo.statuses([x.raw_id for x in c.cs_ranges])