diff hgext/fastannotate/protocol.py @ 39715:d8a7690ccc74

fastannotate: process files as they arrive peer.commandexecutor()'s context manager waits for all responses to arrive in its __exit__() method. We want to process the results as they arrive, so we should do that inside the context manager scope. Note that the futures' result() methods have been replaced to make sure that the command executor's sendcommands() method is called when the first future's result is requested, so we don't need to do that. A minor side-effect is that we can no longer easily tell when the server has started sending us responses, so that long statement was lost. Differential Revision: https://phab.mercurial-scm.org/D4666
author Martin von Zweigbergk <martinvonz@google.com>
date Wed, 19 Sep 2018 17:34:36 -0700
parents b220851999b5
children e40b7a504b1d
line wrap: on
line diff
--- a/hgext/fastannotate/protocol.py	Tue Sep 18 22:14:03 2018 -0400
+++ b/hgext/fastannotate/protocol.py	Wed Sep 19 17:34:36 2018 -0700
@@ -163,23 +163,23 @@
                 'getannotate',
                 {'path': p, 'lastnode':lastnodemap.get(p)}))
 
-    ui.debug('fastannotate: server returned\n')
-    for result in results:
-        r = result.result()
-        # TODO: pconvert these paths on the server?
-        r = {util.pconvert(p): v for p, v in r.iteritems()}
-        for path in sorted(r):
-            # ignore malicious paths
-            if not path.startswith('fastannotate/') or '/../' in (path + '/'):
-                ui.debug('fastannotate: ignored malicious path %s\n' % path)
-                continue
-            content = r[path]
-            if ui.debugflag:
-                ui.debug('fastannotate: writing %d bytes to %s\n'
-                         % (len(content), path))
-            repo.vfs.makedirs(os.path.dirname(path))
-            with repo.vfs(path, 'wb') as f:
-                f.write(content)
+        for result in results:
+            r = result.result()
+            # TODO: pconvert these paths on the server?
+            r = {util.pconvert(p): v for p, v in r.iteritems()}
+            for path in sorted(r):
+                # ignore malicious paths
+                if (not path.startswith('fastannotate/')
+                    or '/../' in (path + '/')):
+                    ui.debug('fastannotate: ignored malicious path %s\n' % path)
+                    continue
+                content = r[path]
+                if ui.debugflag:
+                    ui.debug('fastannotate: writing %d bytes to %s\n'
+                             % (len(content), path))
+                repo.vfs.makedirs(os.path.dirname(path))
+                with repo.vfs(path, 'wb') as f:
+                    f.write(content)
 
 def _filterfetchpaths(repo, paths):
     """return a subset of paths whose history is long and need to fetch linelog