##// END OF EJS Templates
ui: add ui.write() output labeling API...
ui: add ui.write() output labeling API This adds output labeling support with the following methods: - ui.write(..., label='topic.name topic2.name2 ...') - ui.write_err(.., label=...) - ui.popbuffer(labeled=False) - ui.label(msg, label) By adding an API to label output directly, the color extension can forgo parsing command output and instead override the above methods to insert ANSI color codes. GUI tools can also override the above methods and use the labels to do GUI-specific styling. popbuffer gains a labeled argument that, when set to True, returns its buffered output with labels handled. In the case of the color extension, this would return output with color codes embedded. For existing users that use this method to capture and parse output, labels are discarded and output returned as normal when labeled is False (the default). Existing wrappers of ui.write() and ui.write_err() should make sure to accept its new **opts argument.

File last commit:

r10414:1a8df80d default
r10815:32b213b9 default
Show More
streamclone.py
70 lines | 2.2 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>
#
Martin Geisler
updated license to be explicit about GPL version 2
r8225 # This software may be used and distributed according to the terms of the
Matt Mackall
Update license to GPLv2+
r10263 # GNU General Public License version 2 or any later version.
Vadim Gelfer
add support for streaming clone....
r2612
Matt Mackall
error: move lock errors...
r7640 import util, error
Martin Geisler
i18n: mark strings for translation in Mercurial
r6953 from i18n import _
Vadim Gelfer
add support for streaming clone....
r2612
Benoit Boissinot
filelog encoding: move the encoding/decoding into store...
r8531 from mercurial import store
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:
#
timeless
Generally replace "file name" with "filename" in help and comments.
r8761 # server writes out line that says filename, how many bytes in
Vadim Gelfer
add support for streaming clone....
r2612 # file. separator is ascii nul, byte count is string.
#
# server writes out raw file data.
Matt Mackall
streamclone: allow uncompressed clones by default
r10377 def allowed(ui):
Matt Mackall
streaming: actually change default
r10414 return ui.configbool('server', 'uncompressed', True, untrusted=True)
Matt Mackall
streamclone: allow uncompressed clones by default
r10377
def stream_out(repo):
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
Matt Mackall
streamclone: allow uncompressed clones by default
r10377 if not allowed(repo.ui):
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:
Ronny Pfannschmidt
switch lock releasing in the core from gc to explicit
r8109 # get consistent snapshot of repo, lock during scan
lock = repo.lock()
Matt Mackall
streamclone: fold in localrepo.storefiles
r6901 try:
Martin Geisler
do not attempt to translate ui.debug output
r9467 repo.ui.debug('scanning\n')
Matt Mackall
streamclone: fold in localrepo.storefiles
r6901 for name, ename, size in repo.store.walk():
Greg Ward
streamclone: partially encode filename over the wire, not for local read (issue1847)...
r9506 entries.append((name, size))
Matt Mackall
streamclone: fold in localrepo.storefiles
r6901 total_bytes += size
finally:
Ronny Pfannschmidt
switch lock releasing in the core from gc to explicit
r8109 lock.release()
Matt Mackall
error: move lock errors...
r7640 except error.LockError:
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
do not attempt to translate ui.debug output
r9467 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
do not attempt to translate ui.debug output
r9467 repo.ui.debug('sending %s (%d bytes)\n' % (name, size))
Greg Ward
streamclone: partially encode filename over the wire, not for local read (issue1847)...
r9506 # partially encode name over the wire for backwards compat
yield '%s\0%d\n' % (store.encodedir(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