##// END OF EJS Templates
diff: pass contexts to status...
diff: pass contexts to status Allow status() to take contexts as well as nodes. This lets us avoid unpacking manifests multiple times and intelligently unpack manifests in revision order. Also, we can avoid unpacking manifests at all when there are no changes in the working directory.

File last commit:

r6953:63b5f4c7 default
r7090:7b5c063b default
Show More
streamclone.py
65 lines | 2.1 KiB | text/x-python | PythonLexer
Vadim Gelfer
add support for streaming clone....
r2612 # streamclone.py - streaming clone server support for mercurial
#
# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
#
# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.
Adrian Buehlmann
introduce store classes...
r6840 import util, lock
Martin Geisler
i18n: mark strings for translation in Mercurial
r6953 from i18n import _
Vadim Gelfer
add support for streaming clone....
r2612
Dirkjan Ochtman
make streamclone.stream_out() a generator
r6925 class StreamException(Exception):
def __init__(self, code):
Exception.__init__(self)
self.code = code
def __str__(self):
return '%i\n' % self.code
Vadim Gelfer
add support for streaming clone....
r2612 # if server supports streaming clone, it advertises "stream"
# capability with value that is version+flags of repo it is serving.
# client only streams if it can read that repo format.
# stream file format is simple.
#
# server writes out line that says how many files, how many total
# bytes. separator is ascii space, byte counts are strings.
#
# then for each file:
#
# server writes out line that says file name, how many bytes in
# file. separator is ascii nul, byte count is string.
#
# server writes out raw file data.
Dirkjan Ochtman
make streamclone.stream_out() a generator
r6925 def stream_out(repo, untrusted=False):
Vadim Gelfer
add support for streaming clone....
r2612 '''stream out all metadata files in repository.
writes to file-like object, must support write() and optional flush().'''
Vadim Gelfer
clone: disable stream support on server side by default....
r2621
Edouard Gomez
Fix inconsistency for the stream_out capability in hgweb...
r4834 if not repo.ui.configbool('server', 'uncompressed', untrusted=untrusted):
Dirkjan Ochtman
make streamclone.stream_out() a generator
r6925 raise StreamException(1)
Vadim Gelfer
clone: disable stream support on server side by default....
r2621
Matt Mackall
streamclone: fold in localrepo.storefiles
r6901 entries = []
total_bytes = 0
Thomas Arendsen Hein
Handle locking exceptions if streaming clone can't lock the repo. (Issue324)
r3687 try:
Matt Mackall
streamclone: fold in localrepo.storefiles
r6901 l = None
try:
Martin Geisler
i18n: mark strings for translation in Mercurial
r6953 repo.ui.debug(_('scanning\n'))
Matt Mackall
streamclone: fold in localrepo.storefiles
r6901 # get consistent snapshot of repo, lock during scan
l = repo.lock()
for name, ename, size in repo.store.walk():
entries.append((name, size))
total_bytes += size
finally:
del l
Adrian Buehlmann
introduce store classes...
r6840 except (lock.LockHeld, lock.LockUnavailable), inst:
Dirkjan Ochtman
make streamclone.stream_out() a generator
r6925 raise StreamException(2)
Thomas Arendsen Hein
Handle locking exceptions if streaming clone can't lock the repo. (Issue324)
r3687
Dirkjan Ochtman
make streamclone.stream_out() a generator
r6925 yield '0\n'
Martin Geisler
i18n: mark strings for translation in Mercurial
r6953 repo.ui.debug(_('%d files, %d bytes to transfer\n') %
Vadim Gelfer
add support for streaming clone....
r2612 (len(entries), total_bytes))
Dirkjan Ochtman
make streamclone.stream_out() a generator
r6925 yield '%d %d\n' % (len(entries), total_bytes)
Vadim Gelfer
add support for streaming clone....
r2612 for name, size in entries:
Martin Geisler
i18n: mark strings for translation in Mercurial
r6953 repo.ui.debug(_('sending %s (%d bytes)\n') % (name, size))
Dirkjan Ochtman
make streamclone.stream_out() a generator
r6925 yield '%s\0%d\n' % (name, size)
Benoit Boissinot
introduce localrepo.spath for the store path, sopener fixes
r3791 for chunk in util.filechunkiter(repo.sopener(name), limit=size):
Dirkjan Ochtman
make streamclone.stream_out() a generator
r6925 yield chunk