Comments
Patch
@@ -9,6 +9,25 @@
from mercurial.i18n import _
import server
+def nodestorevs(repo, nodes):
+ return [repo[n].rev() for n in nodes if repo.changelog.hasnode(n)]
+
+class metapeer(object):
+ """Class that encapsulates communication details with the metadata server.
+
+ Its responsibilities:
+ - delegating the query to the server
+ - translating node ids from server to revision numbers
+ """
+
+ def __init__(self, server, repo):
+ self._server = server
+ self._repo = repo
+
+ def author(self, x):
+ resp = self._server.author(x)
+ return nodestorevs(self._repo, resp)
+
def patchedauthor(metapeer, repo, subset, x):
"""Return the revisions commited by user whose name match x
@@ -28,12 +47,14 @@
serverrepo = localrepo.localrepository(ui, path=repo.root)
mserver = server.makeserver(serverrepo)
+ mpeer = metapeer(mserver, repo)
+
def wrapwithpeer(fun, peer):
def wrapper(*args, **kwargs):
return fun(peer, *args, **kwargs)
return wrapper
- revset.symbols['author'] = wrapwithpeer(patchedauthor, mserver)
+ revset.symbols['author'] = wrapwithpeer(patchedauthor, mpeer)
def uisetup(ui):
# Perform patching and most of the initialization inside log wrapper,
@@ -22,10 +22,11 @@
User matches pattern if their name has a `pat` substring (case
insensitive).
- Returns a list of revs.
+ Returns a list of node ids.
"""
# This is going to be accelerated in the subsequent patches
- return revset.author(self.repo, list(self.repo), ('symbol', pat))
+ revs = revset.author(self.repo, list(self.repo), ('symbol', pat))
+ return [self.repo[r].node() for r in revs]
def makeserver(repo):
"""Return an initialized metaserver instance."""