comparison mercurial/sshserver.py @ 2612:ffb895f16925

add support for streaming clone. existing clone code uses pull to get changes from remote repo. is very slow, uses lots of memory and cpu. new clone code has server write file data straight to client, client writes file data straight to disk. memory and cpu used are very low, clone is much faster over lan. new client can still clone with pull, can still clone from older servers. new server can still serve older clients.
author Vadim Gelfer <vadim.gelfer@gmail.com>
date Fri, 14 Jul 2006 11:17:22 -0700
parents e8c4f3d3df8c
children 5a5852a417b1
comparison
equal deleted inserted replaced
2611:1b4eb1f92433 2612:ffb895f16925
6 # of the GNU General Public License, incorporated herein by reference. 6 # of the GNU General Public License, incorporated herein by reference.
7 7
8 from demandload import demandload 8 from demandload import demandload
9 from i18n import gettext as _ 9 from i18n import gettext as _
10 from node import * 10 from node import *
11 demandload(globals(), "os sys tempfile util") 11 demandload(globals(), "os streamclone sys tempfile util")
12 12
13 class sshserver(object): 13 class sshserver(object):
14 def __init__(self, ui, repo): 14 def __init__(self, ui, repo):
15 self.ui = ui 15 self.ui = ui
16 self.repo = repo 16 self.repo = repo
58 consists of a line in the form: 58 consists of a line in the form:
59 59
60 capabilities: space separated list of tokens 60 capabilities: space separated list of tokens
61 ''' 61 '''
62 62
63 r = "capabilities: unbundle\n" 63 r = "capabilities: unbundle stream=%d\n" % (self.repo.revlogversion,)
64 self.respond(r) 64 self.respond(r)
65 65
66 def do_lock(self): 66 def do_lock(self):
67 '''DEPRECATED - allowing remote client to lock repo is not safe''' 67 '''DEPRECATED - allowing remote client to lock repo is not safe'''
68 68
165 self.lock = None 165 self.lock = None
166 finally: 166 finally:
167 fp.close() 167 fp.close()
168 os.unlink(tempname) 168 os.unlink(tempname)
169 169
170 def do_stream_out(self):
171 streamclone.stream_out(self.repo, self.fout)