diff --git a/remotefilelog/fileserverclient.py b/remotefilelog/fileserverclient.py --- a/remotefilelog/fileserverclient.py +++ b/remotefilelog/fileserverclient.py @@ -9,6 +9,7 @@ import hashlib, os, time, io, struct import itertools +import threading from mercurial.i18n import _ from mercurial.node import hex, bin, nullid @@ -220,29 +221,26 @@ def _getfiles( remote, receivemissing, progresstick, missed, idmap, step): remote._callstream("getfiles") - i = 0 pipeo = shallowutil.trygetattr(remote, ('_pipeo', 'pipeo')) pipei = shallowutil.trygetattr(remote, ('_pipei', 'pipei')) - while i < len(missed): - # issue a batch of requests - start = i - end = min(len(missed), start + step) - i = end - for missingid in missed[start:end]: - # issue new request + + def writer(): + for missingid in missed: versionid = missingid[-40:] file = idmap[missingid] sshrequest = "%s%s\n" % (versionid, file) pipeo.write(sshrequest) pipeo.flush() + writerthread = threading.Thread(target=writer) + writerthread.start() - # receive batch results - for missingid in missed[start:end]: - versionid = missingid[-40:] - file = idmap[missingid] - receivemissing(pipei, file, versionid) - progresstick() + for missingid in missed: + versionid = missingid[-40:] + file = idmap[missingid] + receivemissing(pipei, file, versionid) + progresstick() + writerthread.join() # End the command pipeo.write('\n') pipeo.flush()