changeset 6794:8ff321a381d0

Backed out changeset b9d6ab187523 (doesn't work on Python 2.3/2.4)
author Dirkjan Ochtman <dirkjan@ochtman.nl>
date Wed, 02 Jul 2008 10:58:27 +0200
parents b9d6ab187523
children c228ae4bc89c
files mercurial/hgweb/protocol.py mercurial/sshserver.py mercurial/streamclone.py
diffstat 3 files changed, 11 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/hgweb/protocol.py	Sun Jun 29 14:20:01 2008 +0200
+++ b/mercurial/hgweb/protocol.py	Wed Jul 02 10:58:27 2008 +0200
@@ -205,5 +205,4 @@
 
 def stream_out(repo, req):
     req.respond(HTTP_OK, HGTYPE)
-    for chunk in streamclone.stream_out(repo, untrusted=True):
-        req.write(chunk)
+    streamclone.stream_out(repo, req, untrusted=True)
--- a/mercurial/sshserver.py	Sun Jun 29 14:20:01 2008 +0200
+++ b/mercurial/sshserver.py	Wed Jul 02 10:58:27 2008 +0200
@@ -204,6 +204,4 @@
                 os.unlink(tempname)
 
     def do_stream_out(self):
-        for chunk in streamclone.stream_out(self.repo):
-            self.fout.write(chunk)
-        self.fout.flush()
+        streamclone.stream_out(self.repo, self.fout)
--- a/mercurial/streamclone.py	Sun Jun 29 14:20:01 2008 +0200
+++ b/mercurial/streamclone.py	Wed Jul 02 10:58:27 2008 +0200
@@ -51,12 +51,12 @@
 #
 #   server writes out raw file data.
 
-def stream_out(repo, untrusted=False):
+def stream_out(repo, fileobj, untrusted=False):
     '''stream out all metadata files in repository.
     writes to file-like object, must support write() and optional flush().'''
 
     if not repo.ui.configbool('server', 'uncompressed', untrusted=untrusted):
-        yield '1\n'
+        fileobj.write('1\n')
         return
 
     # get consistent snapshot of repo. lock during scan so lock not
@@ -67,10 +67,10 @@
             repolock = repo.lock()
         except (lock.LockHeld, lock.LockUnavailable), inst:
             repo.ui.warn('locking the repository failed: %s\n' % (inst,))
-            yield '2\n'
+            fileobj.write('2\n')
             return
 
-        yield '0\n'
+        fileobj.write('0\n')
         repo.ui.debug('scanning\n')
         entries = []
         total_bytes = 0
@@ -83,9 +83,11 @@
 
     repo.ui.debug('%d files, %d bytes to transfer\n' %
                   (len(entries), total_bytes))
-    yield '%d %d\n' % (len(entries), total_bytes)
+    fileobj.write('%d %d\n' % (len(entries), total_bytes))
     for name, size in entries:
         repo.ui.debug('sending %s (%d bytes)\n' % (name, size))
-        yield '%s\0%d\n' % (name, size)
+        fileobj.write('%s\0%d\n' % (name, size))
         for chunk in util.filechunkiter(repo.sopener(name), limit=size):
-            yield chunk
+            fileobj.write(chunk)
+    flush = getattr(fileobj, 'flush', None)
+    if flush: flush()