[PATCH 11 of 15] speedy: make log -u and -d options query the history server

Tomasz Kleczek tkleczek at fb.com
Tue Dec 11 12:38:26 CST 2012


# HG changeset patch
# User Tomasz Kleczek <tkleczek at fb.com>
# Date 1355182653 28800
# Branch stable
# Node ID 5527ac001fae8e214d1e78af0dfe34872fc27af0
# Parent  2fcc58f469d294c99f929b65d080637e6601242d
speedy: make log -u and -d options query the history server

diff --git a/hgext/speedy/client.py b/hgext/speedy/client.py
--- a/hgext/speedy/client.py
+++ b/hgext/speedy/client.py
@@ -8,6 +8,7 @@
 from mercurial import hg, discovery, util
 from mercurial import localrepo
 from mercurial.i18n import _
+from mercurial import cmdutil
 import server
 import protocol
 import tcptransport
@@ -93,6 +94,16 @@
         revs.update(revset.author(repo, lrevsall, ('symbol', pat)))
     return [r for r in subset if r in revs]
 
+def _patcheddate(metapeer, repo, subset, datestr):
+    """Return a list of revisions matching specified date.
+
+    metapeer: proxy object used to query the metadata server.
+    """
+    revs = set(metapeer.date(datestr))
+    lrevsall = metapeer.localrevs()
+    revs.update(revset.date(repo, lrevsall, ('symbol', datestr)))
+    return [ r for r in subset if r in revs ]
+
 def patchedauthor(metapeer, repo, subset, x):
     """Used to monkey patch revset.author function."""
     # We want to catch errors early and on client, if possible
@@ -100,18 +111,19 @@
     return _patchedauthor(metapeer, repo, subset, [pat])
 
 def patcheddate(metapeer, repo, subset, d):
-    """Return a list of revisions matching specified date.
-
-    metapeer: proxy object used to query the metadata server.
-
-    Used to monkey patch revset.date function.
-    """
+    """Used to monkey patch revset.date function."""
     # We want to catch errors early and on client, if possible
     ds = revset.getstring(d, _("date requires a string"))
-    revs = set(metapeer.date(ds))
-    lrevsall = metapeer.localrevs()
-    revs.update(revset.date(repo, lrevsall, ('symbol', ds)))
-    return [r for r in subset if r in revs]
+    return _patcheddate(metapeer, repo, subset, ds)
+
+def patchedfilterrevsopts(metapeer, repo, revs, opts):
+    users = opts.get('user')
+    date = opts.get('date')
+    if users:
+        revs = _patchedauthor(metapeer, repo, revs, users)
+    if date:
+        revs = _patcheddate(metapeer, repo, revs, date)
+    return revs
 
 def _speedysetup(ui, repo):
     """Initialize speedy client.
@@ -146,6 +158,7 @@
 
     revset.symbols['author'] = wrapwithpeer(patchedauthor, mpeer)
     revset.symbols['date'] = wrapwithpeer(patcheddate, mpeer)
+    cmdutil.walkchangerevshooks['filterrevsopts'] = wrapwithpeer(patchedfilterrevsopts, mpeer)
 
 def uisetup(ui):
     # Perform patching and most of the initialization inside log wrapper,
diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -998,6 +998,13 @@
             if windowsize < sizelimit:
                 windowsize *= 2
 
+def filterrevsopts(repo, revs, opts):
+    return revs
+
+walkchangerevshooks = {
+    'filterrevsopts': filterrevsopts,
+}
+
 def walkchangerevs(repo, match, opts, prepare):
     '''Iterate over files and the revs in which they changed.
 
@@ -1024,6 +1031,8 @@
     else:
         revs = list(repo)
         revs.reverse()
+    revs = walkchangerevshooks['filterrevsopts'](repo, revs, opts)
+
     if not revs:
         return []
     wanted = set()
diff --git a/tests/test-speedy.t b/tests/test-speedy.t
--- a/tests/test-speedy.t
+++ b/tests/test-speedy.t
@@ -142,6 +142,19 @@
   $ hg log --rev "date(10/20/2012) & user(testuser2)"
   chg1
 
+  $ hg log -d "10/20/2012"
+  chg5
+  chg1
+
+  $ hg log -u "TESTUSER1"
+  chg8
+  chgl6
+  chg5
+  chg4
+  chg3
+  chg2
+  chg0
+
 Testing http server
 
 Writing server config file


More information about the Mercurial-devel mailing list