# HG changeset patch # User Mads Kiilerich # Date 2013-04-04 22:40:58 # Node ID 8beaaea70a896171cca1eca33d0780bf398b4705 # Parent 7b5bf8e013255a9d46569582cad1e9b26a176d90 compare: move get_changesets to compare controller where it is used - 2nd half that was lost in 6c79bfcd3b54 That is a better location than the pull request model. It should probably be split up and moved to the backend specific Repository classes. diff --git a/rhodecode/model/pull_request.py b/rhodecode/model/pull_request.py --- a/rhodecode/model/pull_request.py +++ b/rhodecode/model/pull_request.py @@ -25,20 +25,17 @@ import logging import datetime -import re from pylons.i18n.translation import _ from rhodecode.model.meta import Session -from rhodecode.lib import helpers as h, unionrepo +from rhodecode.lib import helpers as h from rhodecode.model import BaseModel from rhodecode.model.db import PullRequest, PullRequestReviewers, Notification,\ ChangesetStatus from rhodecode.model.notification import NotificationModel from rhodecode.lib.utils2 import safe_unicode -from rhodecode.lib.vcs.utils.hgcompat import scmutil -from rhodecode.lib.vcs.utils import safe_str log = logging.getLogger(__name__) @@ -159,98 +156,3 @@ class PullRequestModel(BaseModel): pull_request.status = PullRequest.STATUS_CLOSED pull_request.updated_on = datetime.datetime.now() Session().add(pull_request) - - def _get_changesets(self, alias, org_repo, org_ref, other_repo, other_ref, merge): - """ - Returns a list of changesets that can be merged from org_repo@org_ref - to other_repo@other_ref ... and the ancestor that would be used for merge - - :param org_repo: - :param org_ref: - :param other_repo: - :param other_ref: - :param tmp: - """ - - ancestor = None - - if alias == 'hg': - # lookup up the exact node id - _revset_predicates = { - 'branch': 'branch', - 'book': 'bookmark', - 'tag': 'tag', - 'rev': 'id', - } - - org_rev_spec = "max(%s('%s'))" % (_revset_predicates[org_ref[0]], - safe_str(org_ref[1])) - org_revs = scmutil.revrange(org_repo._repo, [org_rev_spec]) - org_rev = org_repo._repo[org_revs[-1] if org_revs else -1].hex() - - other_rev_spec = "max(%s('%s'))" % (_revset_predicates[other_ref[0]], - safe_str(other_ref[1])) - other_revs = scmutil.revrange(other_repo._repo, [other_rev_spec]) - other_rev = other_repo._repo[other_revs[-1] if other_revs else -1].hex() - - #case two independent repos - if org_repo != other_repo: - hgrepo = unionrepo.unionrepository(other_repo.baseui, - other_repo.path, - org_repo.path) - # all the changesets we are looking for will be in other_repo, - # so rev numbers from hgrepo can be used in other_repo - - #no remote compare do it on the same repository - else: - hgrepo = other_repo._repo - - if merge: - revs = ["ancestors(id('%s')) and not ancestors(id('%s')) and not id('%s')" % - (other_rev, org_rev, org_rev)] - - ancestors = scmutil.revrange(hgrepo, - ["ancestor(id('%s'), id('%s'))" % (org_rev, other_rev)]) - if ancestors: - # pick arbitrary ancestor - but there is usually only one - ancestor = hgrepo[ancestors[0]].hex() - else: - # TODO: have both + and - changesets - revs = ["id('%s') :: id('%s') - id('%s')" % - (org_rev, other_rev, org_rev)] - - changesets = [other_repo.get_changeset(cs) - for cs in scmutil.revrange(hgrepo, revs)] - - elif alias == 'git': - assert org_repo == other_repo, (org_repo, other_repo) # no git support for different repos - so, se = org_repo.run_git_command( - 'log --reverse --pretty="format: %%H" -s -p %s..%s' % (org_ref[1], - other_ref[1]) - ) - changesets = [org_repo.get_changeset(cs) - for cs in re.findall(r'[0-9a-fA-F]{40}', so)] - - return changesets, ancestor - - def get_compare_data(self, org_repo, org_ref, other_repo, other_ref, merge): - """ - Returns incoming changesets for mercurial repositories - - :param org_repo: - :param org_ref: - :param other_repo: - :param other_ref: - """ - - if len(org_ref) != 2 or not isinstance(org_ref, (list, tuple)): - raise Exception('org_ref must be a two element list/tuple') - - if len(other_ref) != 2 or not isinstance(org_ref, (list, tuple)): - raise Exception('other_ref must be a two element list/tuple') - - cs_ranges, ancestor = self._get_changesets(org_repo.scm_instance.alias, - org_repo.scm_instance, org_ref, - other_repo.scm_instance, other_ref, - merge) - return cs_ranges, ancestor