예제 #1
0
def _configure_argv():
    global argv, argvb
    assert not argv
    assert not argvb
    if len(sys.argv) > 1:
        if environ.get(b'BUP_ARGV_0'):
            print('error: BUP_ARGV* set and sys.argv not empty',
                  file=sys.stderr)
            sys.exit(2)
        argv = sys.argv
        argvb = [argv_bytes(x) for x in argv]
        return
    args = []
    i = 0
    arg = environ.get(b'BUP_ARGV_%d' % i)
    while arg is not None:
        args.append(arg)
        i += 1
        arg = environ.get(b'BUP_ARGV_%d' % i)
    i -= 1
    while i >= 0:
        del environ[b'BUP_ARGV_%d' % i]
        i -= 1
    argvb = args
    # System encoding?
    if py3:
        argv = [x.decode(errors='surrogateescape') for x in args]
    else:
        argv = argvb
예제 #2
0
def restore_lc_env():
    # Once we're up and running with iso-8859-1, undo the bup-python
    # LC_CTYPE hackery, so we don't affect unrelated subprocesses.
    bup_lc_all = environ.get(b'BUP_LC_ALL')
    if bup_lc_all:
        del environ[b'LC_COLLATE']
        del environ[b'LC_CTYPE']
        del environ[b'LC_MONETARY']
        del environ[b'LC_NUMERIC']
        del environ[b'LC_TIME']
        del environ[b'LC_MESSAGES']
        del environ[b'LC_MESSAGES']
        environ[b'LC_ALL'] = bup_lc_all
        return
    bup_lc_ctype = environ.get(b'BUP_LC_CTYPE')
    if bup_lc_ctype:
        environ[b'LC_CTYPE'] = bup_lc_ctype
예제 #3
0
from array import array
from binascii import hexlify
from traceback import print_exception
import os, sys

# Please see CODINGSTYLE for important exception handling guidelines
# and the rationale behind add_ex_tb(), add_ex_ctx(), etc.

py_maj = sys.version_info[0]
py3 = py_maj >= 3

if py3:

    from os import environb as environ

    lc_ctype = environ.get(b'LC_CTYPE')
    if lc_ctype and lc_ctype.lower() != b'iso-8859-1':
        # Because of argv, options.py, pwd, grp, and any number of other issues
        print(
            'error: bup currently only works with ISO-8859-1, not LC_CTYPE=%s'
            % lc_ctype.decode(),
            file=sys.stderr)
        print(
            'error: this should already have been arranged, so indicates a bug',
            file=sys.stderr)
        sys.exit(2)

    from os import fsdecode, fsencode
    from shlex import quote
    input = input
    range = range