On branch swig-py3: Create and use a wrapper function to efficiently retrieve lists from dict object on Python 2 and 3.
Wrapping dict methods such as keys() and values() in list() works to create a independent list, but on Python 2 two distinct lists are created which is inefficient.
* subversion/bindings/swig/python/svn/core.py Create a new utility function, _as_list(), and remove now unnecessary _bi_list alias. (svn.core._unprefix_names, svn.core.__all__): Use new _as_list() function in place of list() on dict output.
* subversion/bindings/swig/python/svn/client.py, subversion/bindings/swig/python/svn/delta.py, subversion/bindings/swig/python/svn/diff.py, subversion/bindings/swig/python/svn/fs.py, subversion/bindings/swig/python/svn/ra.py, subversion/bindings/swig/python/svn/repos.py, subversion/bindings/swig/python/svn/wc.py, subversion/bindings/swig/python/tests/mergeinfo.py, subversion/bindings/swig/python/tests/ra.py, subversion/bindings/swig/python/tests/repository.py, subversion/bindings/swig/python/tests/trac/versioncontrol/svn_fs.py, subversion/bindings/swig/python/tests/wc.py (svn.client.__all__, svn.delta.__all__, svn.diff.__all__, svn.fs.__all__, svn.fs.entries, svn.ra.__all__, svn.repos.__all__, svn.wc.__all__, SubversionMergeinfoTestCase.test_mergeinfo_leakage__incorrect_range_t_refcounts, SubversionRepositoryAccessTestCase.test_delta_driver_commit, SubversionRepositoryAccessTestCase.test_get_log2, SubversionChangeset.get_changes, SubversionChangeset.get_properties, SubversionRepositoryTestCase.test_get_logs, SubversionWorkingCopyTestCase.test_entries_read, SubversionWorkingCopyTestCase.test_diff_editor4): Use new _as_list() function in place of list() on dict output.
On branch swig-py3: Fix additional Bytes versus String inconsistencies.
Be explicit about UTF-8 conversions between bytes and strings. All swig unit tests now pass under both Python 2 and 3.
* subversion/bindings/swig/include/svn_types.swg (typemap(argout) unsigned char digest[ANY], unsigned char *digest): Treat checksum digest data correctly as bytes, not a string.
* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c (write_handler_pyio): Create a compatibility definition, SVN_SWIG_BYTES_FMT, to ensure raw file data is treated as bytes in Python 3 and string in Python2.
* subversion/bindings/swig/python/tests/delta.py, subversion/bindings/swig/python/tests/ra.py, subversion/bindings/swig/python/tests/repository.py, subversion/bindings/swig/python/tests/utils.py, subversion/bindings/swig/python/tests/wc.py, subversion/bindings/swig/python/tests/trac/versioncontrol/tests/svn_fs.py (DeltaTestCase.testTxWindowHandler, DeltaTestCase.testTxdeltaWindowT, SubversionRepositoryAccessTestCase.test_get_file, SubversionRepositoryTestCase.test_dump_fs2, Temper.alloc_known_repo, SubversionWorkingCopyTestCase.test_diff_editor4.write_diff, SubversionRepositoryTestSetup.setUp): Use BytesIO instead of StringIO to servce as a source of raw binary data.
(SubversionRepositoryTestCase.test_parse_fns3): Open raw data file in binary mode.
(SubversionWorkingCopyTestCase.test_commit): Explicity encode data being written to a file opened in binary mode and decode binary data in the result from binascii.b2a_hex().