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