hgext/convert/common.py
changeset 49288 ef5f5f1cbd90
parent 48946 642e31cb55f0
child 49306 2e726c934fcd
equal deleted inserted replaced
49287:7fe82a5101c9 49288:ef5f5f1cbd90
    53         return self._l.lineno
    53         return self._l.lineno
    54 
    54 
    55 
    55 
    56 def shlexer(data=None, filepath=None, wordchars=None, whitespace=None):
    56 def shlexer(data=None, filepath=None, wordchars=None, whitespace=None):
    57     if data is None:
    57     if data is None:
    58         if pycompat.ispy3:
    58         data = open(filepath, b'r', encoding='latin1')
    59             data = open(filepath, b'r', encoding='latin1')
       
    60         else:
       
    61             data = open(filepath, b'r')
       
    62     else:
    59     else:
    63         if filepath is not None:
    60         if filepath is not None:
    64             raise error.ProgrammingError(
    61             raise error.ProgrammingError(
    65                 b'shlexer only accepts data or filepath, not both'
    62                 b'shlexer only accepts data or filepath, not both'
    66             )
    63             )
    67         if pycompat.ispy3:
    64         data = data.decode('latin1')
    68             data = data.decode('latin1')
       
    69     l = shlex.shlex(data, infile=filepath, posix=True)
    65     l = shlex.shlex(data, infile=filepath, posix=True)
    70     if whitespace is not None:
    66     if whitespace is not None:
    71         l.whitespace_split = True
    67         l.whitespace_split = True
    72         if pycompat.ispy3:
    68         l.whitespace += whitespace.decode('latin1')
    73             l.whitespace += whitespace.decode('latin1')
       
    74         else:
       
    75             l.whitespace += whitespace
       
    76     if wordchars is not None:
    69     if wordchars is not None:
    77         if pycompat.ispy3:
    70         l.wordchars += wordchars.decode('latin1')
    78             l.wordchars += wordchars.decode('latin1')
    71     return _shlexpy3proxy(l)
    79         else:
       
    80             l.wordchars += wordchars
       
    81     if pycompat.ispy3:
       
    82         return _shlexpy3proxy(l)
       
    83     return l
       
    84 
       
    85 
       
    86 if pycompat.ispy3:
       
    87     base64_encodebytes = base64.encodebytes
       
    88     base64_decodebytes = base64.decodebytes
       
    89 else:
       
    90     base64_encodebytes = base64.encodestring
       
    91     base64_decodebytes = base64.decodestring
       
    92 
    72 
    93 
    73 
    94 def encodeargs(args):
    74 def encodeargs(args):
    95     def encodearg(s):
    75     def encodearg(s):
    96         lines = base64_encodebytes(s)
    76         lines = base64.encodebytes(s)
    97         lines = [l.splitlines()[0] for l in pycompat.iterbytestr(lines)]
    77         lines = [l.splitlines()[0] for l in pycompat.iterbytestr(lines)]
    98         return b''.join(lines)
    78         return b''.join(lines)
    99 
    79 
   100     s = pickle.dumps(args)
    80     s = pickle.dumps(args)
   101     return encodearg(s)
    81     return encodearg(s)
   102 
    82 
   103 
    83 
   104 def decodeargs(s):
    84 def decodeargs(s):
   105     s = base64_decodebytes(s)
    85     s = base64.decodebytes(s)
   106     return pickle.loads(s)
    86     return pickle.loads(s)
   107 
    87 
   108 
    88 
   109 class MissingTool(Exception):
    89 class MissingTool(Exception):
   110     pass
    90     pass