[Bug 6065] New: hglib.clone raises exception due to string encoding

mercurial-bugs at mercurial-scm.org mercurial-bugs at mercurial-scm.org
Tue Jan 29 13:40:19 UTC 2019


https://bz.mercurial-scm.org/show_bug.cgi?id=6065

            Bug ID: 6065
           Summary: hglib.clone raises exception due to string encoding
           Product: Mercurial
           Version: 2.6.1
          Hardware: PC
                OS: Windows
            Status: UNCONFIRMED
          Severity: bug
          Priority: wish
         Component: hglib
          Assignee: bugzilla at mercurial-scm.org
          Reporter: sheats at zaxasoft.com
                CC: mercurial-devel at mercurial-scm.org

OS: Windows 10 64
Python: 3.7.0
HgLib: 2.6.1

Overview:

Cannot execute a simple clone due to the binary encoding of the strings in the
util.py functions.  Binary encoded strings cause an exception.

Steps To Reproduce:

hglib.clone("http://from.anywhere/repo", "/to/anywhere/")

Actual Results:

TypeError: a bytes-like object is required, not 'str'

At:

needquote = (" " in arg) or ("\t" in arg) or not arg in subprocess.py

Excepted Results:

A cloned repo at the required path.

Build Date & Hardware:

Windows 10, HgLib 2.6.1, Python 3.7.0, encoding utf-8

Work Around:

I was able to work around the issue in util.py in popen by checking each arg to
see if it is a string, if not I decode it back to a string and pass it onto
subprocess.popen:

def __fix_str(string):
    if isinstance(string, six.text_type):
        return string
    else:
        return string.decode()

def popen(args, env=None):
    environ = None
    if env:
        environ = dict(os.environ)
        environ.update(env)

    args_adj = list(map(lambda x: __fix_str(x), args))

    return subprocess.Popen(args_adj, stdin=subprocess.PIPE,
stdout=subprocess.PIPE,stderr=subprocess.PIPE, close_fds=close_fds,
startupinfo=startupinfo, env=environ)

This obviously adds the dependency on the "six" library.  I have no clue how it
would behave on Linux or other platforms, but it works for windows.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the Mercurial-devel mailing list