Mercurial > kallithea
changeset 3303:ae5ac36cdf83 beta
pull request: use unionrepo instead of outgoing
This makes it possible to look the 'moving target' symbols up in the right repo.
Using a revset with the right revisions also removes the need for pruning
changesets that are outside the requested range.
It will also not be confused by changesets that for some reason has been pulled
to the repo but haven't been merged yet. They are going to be 'merged' by the
'pull' request and should thus be a part of what is reviewed.
author | Mads Kiilerich <madski@unity3d.com> |
---|---|
date | Thu, 03 Jan 2013 18:05:18 +0100 |
parents | ead7a902998c |
children | 70309536c143 |
files | rhodecode/model/pull_request.py |
diffstat | 1 files changed, 11 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/model/pull_request.py Tue Jan 22 14:08:08 2013 +0100 +++ b/rhodecode/model/pull_request.py Thu Jan 03 18:05:18 2013 +0100 @@ -24,22 +24,20 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. import logging -import binascii import datetime import re from pylons.i18n.translation import _ from rhodecode.model.meta import Session -from rhodecode.lib import helpers as h +from rhodecode.lib import helpers as h, unionrepo 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 discovery, localrepo, scmutil, \ - findcommonoutgoing +from rhodecode.lib.vcs.utils.hgcompat import scmutil from rhodecode.lib.vcs.utils import safe_str log = logging.getLogger(__name__) @@ -192,35 +190,21 @@ #case two independent repos if org_repo != other_repo: - revs = [ - org_repo._repo.lookup(org_ref[1]), - org_repo._repo.lookup(other_ref[1]), # lookup up in the wrong repo! - ] - - obj = findcommonoutgoing(org_repo._repo, - localrepo.locallegacypeer(other_repo._repo.local()), - revs, - force=True) - revs = obj.missing - - for cs in map(binascii.hexlify, revs): - _cs = org_repo.get_changeset(cs) - changesets.append(_cs) - # in case we have revisions filter out the ones not in given range - if org_ref[0] == 'rev' and other_ref[0] == 'rev': - revs = [x.raw_id for x in changesets] - start = org_ref[1] - stop = other_ref[1] - changesets = changesets[revs.index(start):revs.index(stop) + 1] + hgrepo = unionrepo.unionrepository(org_repo.baseui, + org_repo.path, + other_repo.path) + revs = ["ancestors(id('%s')) and not ancestors(id('%s'))" % + (org_rev, other_rev)] #no remote compare do it on the same repository else: + hgrepo = org_repo._repo revs = ["ancestors(id('%s')) and not ancestors(id('%s'))" % (other_rev, org_rev)] - out = scmutil.revrange(org_repo._repo, revs) - for cs in (out): - changesets.append(org_repo.get_changeset(cs)) + out = scmutil.revrange(hgrepo, revs) + for cs in (out): + changesets.append(org_repo.get_changeset(cs)) elif alias == 'git': assert org_repo == other_repo, (org_repo, other_repo) # no git support for different repos