##// END OF EJS Templates
getchangegroup: take an 'outgoing' object as argument (API)...
getchangegroup: take an 'outgoing' object as argument (API) There is various version of this function that differ mostly by the way they define the bundled set. The flexibility is now available in the outgoing object itself so we move the complexity into the caller themself. This will allow use to remove a good share of the similar function to obtains a changegroup in the 'changegroup.py' module. An important side effect is that we stop calling 'computeoutgoing' in 'getchangegroup'. This is fine as code that needs such argument processing is actually going through the 'exchange' module which already all this function itself.

File last commit:

r27486:5bfd01a3 default
r29807:d4e02634 default
Show More
py3kcompat.py
68 lines | 2.1 KiB | text/x-python | PythonLexer
Renato Cunha
py3kcompat: added a "compatibility layer" for py3k...
r11748 # py3kcompat.py - compatibility definitions for running hg in py3k
#
# Copyright 2010 Renato Cunha <renatoc@gmail.com>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
Gregory Szorc
py3compat: use absolute_import
r27486 from __future__ import absolute_import
Renato Cunha
py3kcompat: added a "compatibility layer" for py3k...
r11748
Gregory Szorc
py3compat: use absolute_import
r27486 import builtins
import numbers
Number = numbers.Number
Renato Cunha
py3kcompat: added a "compatibility layer" for py3k...
r11748
def bytesformatter(format, args):
'''Custom implementation of a formatter for bytestrings.
Mads Kiilerich
fix trivial spelling errors
r17424 This function currently relies on the string formatter to do the
Renato Cunha
py3kcompat: added a "compatibility layer" for py3k...
r11748 formatting and always returns bytes objects.
>>> bytesformatter(20, 10)
0
>>> bytesformatter('unicode %s, %s!', ('string', 'foo'))
b'unicode string, foo!'
>>> bytesformatter(b'test %s', 'me')
b'test me'
>>> bytesformatter('test %s', 'me')
b'test me'
>>> bytesformatter(b'test %s', b'me')
b'test me'
>>> bytesformatter('test %s', b'me')
b'test me'
>>> bytesformatter('test %d: %s', (1, b'result'))
b'test 1: result'
'''
# The current implementation just converts from bytes to unicode, do
# what's needed and then convert the results back to bytes.
# Another alternative is to use the Python C API implementation.
if isinstance(format, Number):
# If the fixer erroneously passes a number remainder operation to
# bytesformatter, we just return the correct operation
return format % args
if isinstance(format, bytes):
format = format.decode('utf-8', 'surrogateescape')
if isinstance(args, bytes):
args = args.decode('utf-8', 'surrogateescape')
if isinstance(args, tuple):
newargs = []
for arg in args:
if isinstance(arg, bytes):
arg = arg.decode('utf-8', 'surrogateescape')
newargs.append(arg)
args = tuple(newargs)
ret = format % args
return ret.encode('utf-8', 'surrogateescape')
builtins.bytesformatter = bytesformatter
Renato Cunha
py3kcompat: added fake ord implementation for py3k...
r11878 origord = builtins.ord
def fakeord(char):
if isinstance(char, int):
return char
return origord(char)
builtins.ord = fakeord
Renato Cunha
py3kcompat: added a "compatibility layer" for py3k...
r11748 if __name__ == '__main__':
import doctest
doctest.testmod()