• 
      

    Fix Python 3.x compatibility issues with demarshalling Perforce data.

    Review Request #10666 — Created Aug. 21, 2019 and submitted — Latest diff uploaded

    Information

    RBTools
    release-1.0.x
    f50f73c...

    Reviewers

    When we call out to p4, we often request data in a marshalled form.
    These come back as byte strings, and on Python 3.x, this prevents us
    from properly looking up all sorts of data from them (error results,
    change status, etc.). We had a single place that attempted to handle
    this, which was the fetching of a change description, but nowhere else.

    We now normalize the string types before we hand it back to the caller,
    ensuring that all keys and string values are Unicode. This is based in
    part on Perforce's own documentation on demarshalling on Python 3.x
    (though fixes an issue they have involving int values, found in error
    payloads).

    Ran a handful of tests locally, including rbt diff and rbt post
    commands, testing againt Perforce change numbers and with change
    descriptions utilizing various Unicode characters (including Emoji).

    While these failed before (with rbt post claiming the path was
    invalid and rbt diff just raising a KeyError), both now work
    as expected.