Troy Curtis, Jr <troycurtisjr@gmail.com> (troycurtisjr)


Found Patch
r862063 r1850913, r1850520, r1850519, r1850011, r1849804, r1849786, r1849784, r1849778, r1849037, r1849003, r1825316, r1824410, r1823802, r1822739, r1822736, r1822729, r1822728, r1822488, r1822486, r1822485, r1820032, r1819712, r1819566, r1819565, r1819562, r1819561, r1819498, r1819460, r1819452, r1819441, r1819397, r1819396, r1819394, r1819386, r1819312, r1819203, r1819202, r1819112, r1819110, r1818995, r1818994, r1816596, r1816097, r1816092, r1815770, r1815768, r1814455, r1814454, r1814387, r1814386, r1813774, r1813700, r1813665, r1813663, r1813662, r1813660, r1813114, r871532, r871091, r870934, r870827, r867580

r1850913 | troycurtisjr | 2019-01-09 21:29:53 -0600 (Wed, 09 Jan 2019)

* staging/docs/community-guide/releasing.part.html
  (tarball-signing): Fix public key list url.



r1850520 | troycurtisjr | 2019-01-05 18:49:25 -0600 (Sat, 05 Jan 2019)

On branch swig-py3: Update BRANCH-README.

* BRANCH-README
  Remove resolved TODO items for better swig build error messages and returning
  bytes versus str.


r1850519 | troycurtisjr | 2019-01-05 18:42:27 -0600 (Sat, 05 Jan 2019)

On branch swig-py3: Improve error messages for swig language builds.

* Makefile.in
  (SWIG_PY_ERRMSG, SWIG_PL_ERRMSG, SWIG_RB_ERRMSG): New

* build/ac-macros/swig.m4
  (SWIG_PY_ERRMSG, SWIG_PL_ERRMSG, SWIG_RB_ERRMSG): Set a meaningful error
    message if the language binding is not configured for any reason, and clear
    the error message if the configuration is successful.

* build/generator/gen_make.py
  (Generator.write): Add 'name' and 'short_upper' to the ezt template data for
    each swig language option.

* build/generator/templates/build-outputs.mk.ezt
  (.swig_py_checked, .swig_pl_checked, .swig_rb_checked): New make targets.
  (autogen-swig-py, autogen-swig-pl, autogen-swig-rb, swig-py, swig-pl, swig-rb):
    Add corresponding swig_<lang>_checked dependency to top-level swig building
    targets.



r1850011 | troycurtisjr | 2018-12-30 22:14:58 -0600 (Sun, 30 Dec 2018)

On branch swig-py3: Fix macro usage to distinguish py2 and py3 context.

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
   Include "swigutil_py3c.h" file before define SVN_SWIG_BYTES_FMT to use
     IS_PY3 macro to switch py2 and py3 context.
   (add_directory, add_file, apply_textdelta, change_file_prop,
    close_file, parse_fn3_set_revision_property,
    parse_fn3_set_node_property, svn_swig_py_notify_func,
    svn_swig_py_notify_func, svn_swig_py_delta_path_driver_cb_func,
    svn_swig_py_repos_authz_func, svn_swig_py_log_receiver,
    svn_swig_py_client_blame_receiver_func,
    svn_swig_py_changelist_receiver_func,
    svn_swig_py_auth_simple_prompt_func,
    svn_swig_py_config_auth_walk_func,
    ra_callbacks_get_wc_prop, ra_callbacks_push_or_set_wc_prop,
    ra_callbacks_invalidate_wc_props, svn_swig_py_commit_callback,
    reporter_set_path, reporter_link_path,
    wc_diff_callbacks2_file_changed_or_added,
    wc_diff_callbacks2_file_deleted, wc_diff_callbacks2_dir_added,
    wc_diff_callbacks2_dir_props_changed,
    svn_swig_py_config_enumerator2):
     Use IS_PY3 macro instead of comparison of PY_VERSION_HEX.
   (add_directory, add_file, apply_textdelta, change_file_prop,
    close_file, parse_fn3_set_revision_property,
    parse_fn3_set_node_property, ra_callbacks_get_wc_prop,
    ra_callbacks_push_or_set_wc_prop, ra_callbacks_invalidate_wc_props):
     Enclose only format argument of Py_CallFunction or Py_CallMethod
     with #if IS_PY3 #else #endif block.

Patch By: Yasuhito Futatsuki <futatuki@poem.co.jp>



r1849804 | troycurtisjr | 2018-12-27 13:01:00 -0600 (Thu, 27 Dec 2018)

On branch swig-py3: Revise encode/decode usage in swig-py unit test.

[in subversion/bindings/swig/python/tests]

* client.py (SubversionClientTestCase.test_update4): Don't encode os.path.sep
    if it is already a bytes object.

* core.py (SubversionCoreTestCase.test_stream_write): Don't encode fname
    if it is already a bytes object.

* delta.py (DeltaTestCase.testTxWindowHandler_stream_IF,
  DeltaTestCase.testTxWindowHandler_Stream_IF): Don't encode fname if it
    is already a bytes object.

* fs.py (SubversionFSTestCase.setUp): Don't encode self.tmpfile if it is
    already a bytes object.

* trac/versioncontrol/svn_fs.py
  Remove unnecessary variable IS_PY3 and therefore unnecessary import of
    sys module.
  (SubversionNode.__init__): Don't use IS_PY3 condition, just store a unicode
    string in the exception object.

* utils.py (Temper.alloc_empty_dir, Temper.alloc_empty_repo): Ensure suffix
    arg for tempfile.mkdtemp() is unicode (for py3 < 3.5).

Patch By: Yasuhito Futatsuki <futatuki@poem.co.jp>



r1849786 | troycurtisjr | 2018-12-26 22:16:43 -0600 (Wed, 26 Dec 2018)

On branch swig-py3: Fix tests after str to bytes API conversion.

* subversion/bindings/swig/python/tests/client.py
  (SubversionClientTestCase.test_conflict,
   SubversionClientTestCase.test_shelf)): Construct paths as bytes instead of
    str.

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
  (svn_swig_py_client_status_func): The path given to the callback should be
    bytes instead of str for consistency with the rest of the API.



r1849784 | troycurtisjr | 2018-12-26 21:42:52 -0600 (Wed, 26 Dec 2018)

On branch swig-py3: Use bytes for all API string parameters.

Since many string like arguments in the API can contain arbitrary bytes, use the
Python Bytes interface in Python 3, while still using Str in Python 2, to ensure
full compatibility with all possible input data.

Build system change:

* build/ac-macros/swig.m4:
  Add "-DPY3" option to SWIG_PY_OPTS for py3 build to define symbol to switch
  typemap between py2 and py3.

Typemap changes:

* subversion/bindings/swig/core.i
  (%typemap(argout) (char *buffer, apr_size_t *len):
    Map buffer arg to Bytes insted of Str.
  (%typemap(in) (const char *data, apr_size_t *len) ($*2_type temp):
    Map data arg to Bytes instead of Str and pass Py_ssize_t variable as length
    argment of PyBytes_AsStringAndSize for for explicit type conversion.
  (%typemap(in) const void *value):
    Map value arg to Bytes instead of Str for svn_auth_set_parameter().

* subversion/bindings/swig/include/svn_global.swg:
  - Define SWIG_PYTHON_STRICT_BYTE_CHAR symbol for swig context for
    Python3.
  - Switch "in" type typemap for char *, char const *, char * const,
    and char const * const "", to use parse parameter "y" for py3 and
    "s" for py2.

* subversion/bindings/swig/include/svn_string.swg
  (%typemap(argout) RET_STRING, %typemap(in) svn_stringbuf_t *,
    %typemap(out) svn_stringbuf_t *, %typemap(in) const svn_string_t *,
    %typemap(out) svn_string_t *, %typemap(argout) const char **OUTPUT):
    Map args to Bytes instead of Str.

* subversion/bindings/swig/include/svn_swigcompat.swg
  (%set_constant(name, value): Use PyDict_SetItem and PyBytes_FromString
    instead of PyDict_SetItemString, for SWIG <= 1.3.27 (not tested).

* subversion/bindings/swig/include/svn_types.swg
  (%typemap(in) const char *MAY_BE_NULL): Don't use "z" conversion
    format and convert to Bytes if it is not NULL.
  (%typemap(in) (const char *PTR, apr_size_t LEN): Use PyBytes_Check and
    PyBytes_AsStringAndSize instead of PyStr_Check and PyStr_AsUTF8AndSize.

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
  (make_string_from_ob(), make_svn_string_from_ob(),
   svn_swig_py_make_file(), svn_swig_py_get_commit_log_func()):
    Use PyBytes_Check and PyBytes_AsString instead of PyStr_Check and
    PyStr_AsString.
  (convert_hash()): Use Dict_SetItem and PyBytes_FromString instead of
    DictItemString.
  (convert_svn_string_t(), svn_swig_py_proparray_to_dict(),
   ra_callbacks_get_wc_prop()):
    Use PyBytes_AsStringAndSize instead of PyStr_AsUTF8AndSize.
   (cstring_to_pystring(), convert_string(),
    svn_swig_py_propinheriteditemarray_to_dict(),
    svn_swig_py_proparray_to_dict(),
    svn_swig_py_locationhash_to_dict(),
    svn_swig_py_c_strings_to_list(),
    svn_swig_py_changed_path_hash_to_dict(),
    svn_swig_py_changed_path2_hash_to_dict(),
    svn_swig_py_unwrap_string(),
    svn_swig_py_array_to_list()): Use PyBytes_FromString instead of
     PyStr_FromString.
  (delete_entry(), add_directory(), open_directory(), change_dir_prop(),
    add_file(), open_file(), apply_textdelta(), change_file_prop(),
    close_file(), parse_fn3_uuid_record(), parse_fn3_set_revision_property(),
    parse_fn3_set_node_property(), parse_fn3_delete_node_property(),
    svn_swig_py_notify_func(), svn_swig_py_status_func(),
    svn_swig_py_delta_path_driver_cb_func(), svn_swig_py_status_func2(),
    svn_swig_py_fs_lock_callback(), svn_swig_py_repos_authz_func(),
    svn_swig_py_repos_history_func(), svn_swig_py_proplist_receiver2(),
    svn_swig_py_log_receiver(), svn_swig_py_info_receiver_func(),
    svn_swig_py_client_blame_receiver_func(),
    svn_swig_py_changelist_receiver_func(),
    svn_swig_py_auth_gnome_keyring_unlock_prompt_func(),
    svn_swig_py_auth_simple_prompt_func(),
    svn_swig_py_auth_username_prompt_func(),
    svn_swig_py_auth_ssl_server_trust_prompt_func(),
    svn_swig_py_auth_ssl_client_cert_prompt_func(),
    svn_swig_py_auth_ssl_client_cert_pw_prompt_func(),
    svn_swig_py_config_auth_walk_func(), ra_callbacks_get_wc_prop(),
    ra_callbacks_push_or_set_wc_prop(), ra_callbacks_invalidate_wc_props(),
    svn_swig_py_commit_callback(), svn_swig_py_ra_file_rev_handler_func(),
    svn_swig_py_ra_lock_callback(), reporter_set_path(),
    reporter_delete_path(), reporter_link_path(),
    wc_diff_callbacks2_file_changed_or_added(),
    wc_diff_callbacks2_file_deleted(), wc_diff_callbacks2_dir_added(),
    wc_diff_callbacks2_dir_deleted(),
    wc_diff_callbacks2_dir_props_changed(),
    svn_swig_py_config_enumerator2(),
    svn_swig_py_config_section_enumerator2()): Use 's' for py2 and use 'y'
     for py3 in argment format string.
  (ra_callbacks_push_or_set_wc_prop()): Use PyBytes_FromStringAndSize
    instead of PyStr_FromStringAndSize.
  (ra_callbacks_get_client_string()): Use PyBytes_FromString instaed of
    PyStr_AsString.

* subversion/bindings/swig/svn_client.i
  (%typemap(argout) apr_array_header_t **props):
   Use PyBytes_FromStringAndSize() instead of PyStr_FromStringAndSize.

Helper python code changes:

* subversion/bindings/swig/python/svn/core.py
  (svn_path_compare_paths): Do not use cmp, for py3 compatibility.
  (Stream.read()): Chunks is now list of bytes, not list of str.

* subversion/bindings/swig/python/svn/fs.py
  (FileDiff.get_pipe()):
   - Make sure self.tempfile1 and self.self.tempfile2 are bytes.
   - Pass bytes to header_encoding arg in _svndiff.file_output_unified4().

* subversion/bindings/swig/python/svn/ra.py
  (Callbacks..__doc__):
    Treat path as bytes in sample code.

* subversion/bindings/swig/python/svn/repos.py
  (ChangeCollector._make_base_path()): Treat path as bytes.
  (ChangeCollector.open_root(): Path and basepath should be bytes in
    dir_baton.
  (RevisionChangeCollector._make_base_path()): Treat path as bytes.

Unit test changes:

* subversion/bindings/swig/python/tests/auth.py:
  Replace all str literals with bytes literals except docstring and module name.

* subversion/bindings/swig/python/tests/checksum.py
  (ChecksumTestCases.test_checksum()): Check if type of check_val is
   bytes instead of str.

* subversion/bindings/swig/python/tests/client.py:
  Replace all str literals with bytes literals except for the mode arg of open(),
    arguments to utils.Temper methods, docstrings, and module names.
  (SubversionClientTestCase.test_uuid_from_url): Check if return value
    type client.uuid_from_url() is bytes instead of str.
  (SubversionClientTestCase.test_uuid_from_path): Check if return value
    type client.uuid_from_path() is bytes instead of str.
  (SubversionClientTestCase.test_merge_peg3()): Open the result file in
    raw mode.
  (SubversionClientTestCase.test_update4()): Convert os.path.sep into
    bytes if it is str in py3.

* subversion/bindings/swig/python/tests/core.py:
  Replace all str literals with bytes literals except for exception messages,
    arguments to utils.Temper methods, docstrigs, and module names.
  Add new tests for svn_stream_*()
  (SubversionCoreTestCase.test_stream_from_stringbuf()): New test method.
  (SubversionCoreTestCase.test_stream_read_full()): New test method.
  (SubversionCoreTestCase.test_stream_read2()): New test method.
  (SubversionCoreTestCase.test_stream_write_exception()): New test method.
  (SubversionCoreTestCase.test_stream_write()): New test method.
  (SubversionCoreTestCase.test_stream_readline()): New test method.

* subversion/bindings/swig/python/tests/delta.py
 (DeltaTestCase.estTxWindowHandler_stream_IF(),
  DeltaTestCase.estTxWindowHandler_Stream_IF()):
  Use bytes literals to make stream when using
   svn.core.svn_stream_from_stringbuf().
  Use bytes file name to make stream when using
   svn.core.svn_stream_from_aprfile2().

* subversion/bindings/swig/python/tests/fs.py
  (SubversionFSTestCase.log_message_func(): log_msg_func3 callback now
    expects bytes to return.
  (SubversionFSTestCase.setUp()): Pass bytes path and url to client.import2().
  (SubversionFSTestCase.test_diff_repos_paths_internal(),
   SubversionFSTestCase.test_diff_repos_paths_external()): Use bytes for
    path1 argument to fs.FileDiff.__init__().

* subversion/bindings/swig/python/tests/mergeinfo.py
  (SubversionMergeinfoTestCase.TEXT_MERGEINFO1,
   SubversionMergeinfoTestCase.TEXT_MERGEINFO2,
   SubversionMergeinfoTestCase.MERGEINFO_SRC): Use bytes instead of str.
  (SubversionMergeinfoTestCase.test_mergeinfo_get()):
   - Pass list of bytes for paths arg to repos.fs_get_mergeinfo().
   - Replace str in expected_mergeinfo with bytes.

* subversion/bindings/swig/python/tests/ra.py
  Replace all str literals with bytes literals except assertion message,
  arguments to utils.Temper methods, docstrings, and module names.
  (SubversionRepositoryAccessTestCase.test_get_file): Compare file
   content as bytes.

* subversion/bindings/swig/python/tests/repository.py
  Replace all str literals with bytes literals when passed into or returned from
    the Subversion API, except exception messages.
  (SubversionRepositoryTestCase.test_dump_fs2()): Treat dump and
   feedback as bytes and compose expected_feedback as bytes.

* subversion/bindings/swig/python/tests/utils.py
  (Temper.alloc_empty_dir(),
   Temper.alloc_empty_repo): Convert return value of tempfile.mkdtemp() into
    bytes.
  (Temper.file_uri_for_path()): Return URI as bytes.

* subversion/bindings/swig/python/tests/wc.py
  Replace all str literals with bytes literals when passed into or returned from
    the Subversion API, except exception messages.
  (SubversionWorkingCopyTestCase.test_get_adm_dir()): Check type as
    bytes.
  (SubversionWorkingCopyTestCase.test_get_pristine_copy_path(),
   SubversionWorkingCopyTestCase.test_diff_editor4()): Open file in raw mode.
  (SubversionWorkingCopyTestCase.test_commit()): Use bytes literals
    instead of str.

* subversion/bindings/swig/python/tests/trac/versioncontrol/main.py
  (Node.DIRECTORY, Node.FILE): Replace str with bytes.
  (Node.__init__): Do not convert path to str.
  (Node.get_name): Treat self.path as bytes.
  (Changeset.ADD, Changeset.COPY, Changeset.DELETE, Changeset.EDIT,
   Changeset.MOVE): Replace str with bytes.

* subversion/bindings/swig/python/tests/trac/versioncontrol/svn_fs.py
  (SubversionRepository.__init__(),
   SubversionRepository.get_oldest_rev(),
   SubversionRepository.youngest_rev(),
   SubversionRepository.next_rev()): Treat self.path and self.scope as bytes.
  (SubversionRepository.normalize_path(),
   SubversionRepository.get_node()): Treat path as bytes.
  (SubversionRepository.get_path_history()): Replace 'unknown' Changeset value
    with bytes.
  (SubversionRepository.get_deltas()): Replace str 'entry' arg to
    repos.svn_repos_dir_delta() with bytes.
  (SubversionNode.__init__()):
   - Treat self.path and self.scope as bytes.
   - Decode path into str for exception message on py3.
  (SubversionNode.get_entries()): Treat self.path as bytes.
  (SubversionNode.get_properties()): Property values are bytes, not str.
  (DiffChangeEditor.open_root()): Return bytes value.

* subversion/bindings/swig/python/tests/trac/versioncontrol/tests/svn_fs.py
  Replace all str literals with bytes literals when passed into or returned from
    the Subversion API, except exception messages.
  (REPOS_URL) Build REPOS_URL as bytes.

Patch By: Yasuhito FUTATSUKI <futatuki@poem.co.jp>



r1849778 | troycurtisjr | 2018-12-26 15:07:53 -0600 (Wed, 26 Dec 2018)

On branch swig-py3: Complete Python SWIG bindings for svn_client.h.

* subversion/bindings/swig/include/svn_containers.swg
  (apr_array_header_t **OUTPUT_OF_CONST_CHAR_P): Add additional "char *" array
    maps.
  (%typemap(argout) apr_array_header_t **options): New output mapping for array
    of svn_client_conflict_option_t objects.
  (%typemap(argout) apr_array_header_t **versions_p): New output mapping for
    array of svn_client__shelf_version_t objects.

* subversion/bindings/swig/include/svn_string.swg
  (const char **OUTPUT): Add additional char * output parameter for log_message.

* subversion/bindings/swig/include/svn_types.swg
  (SWIGTYPE **OUTPARAM): Add several missing output parameter swig types.

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c,
  subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h
  Add make_ob_* swig constructor for svn_client_status_dup.
  (svn_swig_py_client_status_func): New Function.

* subversion/bindings/swig/svn_client.i
  Add callback typemaps for usages of svn_client_status_func_t.

* subversion/bindings/swig/python/tests/client.py
  (SubversionClientTestCase.assert_all_instances_of): New helper method.
  (SubversionClientTestCase.test_platform_providers): Add usage of
    assert_all_instances_of() helper method.
  (SubversionClientTestCase.test_conflict): New test method.
  (SubversionClientTestCase.test_shelf): New test method.



r1849037 | troycurtisjr | 2018-12-16 10:53:38 -0600 (Sun, 16 Dec 2018)

On branch swig-py3: Address compiler warnings under Python 3.

Resolved compiler warnings relating to handling of const values when the SWIG
bindings are built under Python 3.

* subversion/bindings/swig/core.i
  (const char *data, apr_size_t *len): Explicitly cast away const and document
    the rationale.
  (const void *value): Fix variable initialization from PyStr_AsString to be
    const.

* subversion/bindings/swig/include/svn_types.swg
  (const char *PTR, apr_size_t LEN): Explicitly cast away const and document the
    rationale.

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
  (svn_swig_py_make_file): Fix variable initialization from PyStr_AsString to be
    const.



r1849003 | troycurtisjr | 2018-12-15 13:23:40 -0600 (Sat, 15 Dec 2018)

On branch swig-py3: Catchup to trunk @r1849002.



r1825316 | troycurtisjr | 2018-02-25 11:26:45 -0600 (Sun, 25 Feb 2018)

Update external 'diff' command test for svn.fs.FileDiff() to depend on presence
of the command instead of testing for 'win32' platform.

* subversion/bindings/swig/python/tests/fs.py
  (SubversionFSTestCase.test_diff_repos_paths): Split function into internal
   and external variants.
  (SubversionFSTestCase.test_diff_repos_paths_external): New test method.
  (SubversionFSTestCase.test_diff_repos_paths_internal): New test method.
  (SubversionFSTestCase.setUp): Added unicode test commit from original
   test_diff_repos_paths() so all test methods have a common repository setup.

Found by: stsp


r1824410 | troycurtisjr | 2018-02-15 23:12:05 -0600 (Thu, 15 Feb 2018)

Fix Python unit test, fs.SubversionFSTestCase, on Windows.

* subversion/bindings/swig/python/tests/fs.py	
  (SubversionFSTestCase.test_diff_repos_paths):
   Update default test case to invoke internal diff implementation and add
   a case for testing calls to the 'diff' executable on non-Windows platforms.

* subversion/bindings/swig/python/svn/fs.py	
  (FileDiff.__init__): Add difftemp to track temporary file for cleanup.
  (FileDiff.__del__): Ensure difftemp is cleaned up.
  (File.get_pipe): Add a condition to use the internal diff implementation when
   the diffoptions value is given as None.


r1823802 | troycurtisjr | 2018-02-10 20:19:42 -0600 (Sat, 10 Feb 2018)

Ensure Python bindings for fs.FileDiff behaves correctly when the python-future
package is installed.

* subversion/bindings/swig/python/svn/fs.py
  Try the Python 2 '__builtin__' import before the Python 3 'builtins'.
  (FileDiff._dump_contents): Open temporary file in binary mode.
  
* subversion/bindings/swig/python/tests/fs.py
  Add test for fs.FileDiff.

* subversion/bindings/swig/python/tests/run_all.py
  (suite): Add fs test suite.

Found By: Kenneth Porter <shiva@sewingwitch.com>


r1822739 | troycurtisjr | 2018-01-30 23:13:59 -0600 (Tue, 30 Jan 2018)

On branch swig-py3: Ensure swig check_output() is decoded as utf8.

To support Python 2 and 3, explicitly decode check_output() return as utf8.

* build/generator/swig/__init__.py
  (Generator.__init__, Generator.version): Explicitly decode check_output() as
   utf8.


r1822736 | troycurtisjr | 2018-01-30 22:16:43 -0600 (Tue, 30 Jan 2018)

On branch swig-py3: Catchup to trunk @r1822734.


r1822729 | troycurtisjr | 2018-01-30 21:53:58 -0600 (Tue, 30 Jan 2018)

On branch swig-py3: Update status now the Visual Studio <= 2008 works.

* BRANCH-README: Remove note about only Visual Studio > 2008 being supported.


r1822728 | troycurtisjr | 2018-01-30 21:50:43 -0600 (Tue, 30 Jan 2018)

On branch swig-py3: Fix python swig compile for Visual Studio <= 2008.

Add the proper UserMacros definitions to pull in the necessary SWIG arguments
for python generation.

* build/generator/templates/vcnet_vsprops.ezt
  New file defining UserMacros.

* build/generator/templates/vcnet_vcproj.ezt
  Inherit the new property sheet containing UserMacros.

* build/generator/gen_vcnet_vcproj.py
  (Generator.write_project): Write out the property sheet for Visual Studio
   2008 and earlier.



r1822488 | troycurtisjr | 2018-01-28 21:46:19 -0600 (Sun, 28 Jan 2018)

On branch swig-py3: Update BRANCH-README with Windows status.

* BRANCH-README
  - Update with current Windows build status.


r1822486 | troycurtisjr | 2018-01-28 20:22:16 -0600 (Sun, 28 Jan 2018)

On branch swig-py3: Revert a Python 3 only usage.

* build/generator/gen_base.py
  (IncludeDependencyInfo._scan_for_includes): 
   Drop the Python 3 only "errors" argument to fileinput.hook_encoded().


r1822485 | troycurtisjr | 2018-01-28 18:53:54 -0600 (Sun, 28 Jan 2018)

On branch swig-py3: Add py3c library support to the Windows build.

* build/generator/templates/vcnet_vcxproj.ezt
  (UserMacros): Add template options to define UserMacros.

* build/generator/gen_vcnet_vcproj.py
  (Generator.write_project): Include new user macro values in 
   data passed to the ezt template function.

* build/generator/gen_win_dependencies.py
  (UserMacro): Define a new type to use with user macro templates.
  (GenDependenciesBase._optional_libraries): Include py3c library.
  (GenDependenciesBase.parse_options): Include the py3c library path
   option.
  (GenDependenciesBase.find_libraries): Add a call to _find_py3c().
  (GenDependenciesBase._find_python): Define SWIG_PY_OPTS user macro 
   based on detected Python version.
  (GenDependenciesBase._find_py3c): New method.
  (GenDependenciesBase._find_swig,
   GenDependenciesBase._find_jdk): Ensure output from subprocess is
   properly decoded.

* gen-make.py
  (_usage_exit): Add --with-py3c usage.
  (my_getopt): Add with-py3c option.

* subversion/bindings/swig/INSTALL
  Include py3c in Windows SWIG building instructions.

* build/generator/gen_base.py
  (IncludeDependencyInfo._scan_for_includes): Ensure file data is
   properly encoded as UTF8.

* build/generator/gen_win.py
  (WinGeneratorBase.makeguid): Ensure data input to hashlib is binary
   and not Unicode.
  (WinGeneratorBase.get_win_includes): Include py3c include directory
   in swig compile definition.



r1820032 | troycurtisjr | 2018-01-03 22:06:36 -0600 (Wed, 03 Jan 2018)

On branch swig-py3: Go back to using classic classes for Python 2 swig bindings.

Add some additional clarifying comments for the reasons behind overriding
__getattr__ and __getattribute__.

* build/ac-macros/swig.m4
  (SVN_FIND_SWIG): Add the '-classic' flag to swig when python 2 is detected.

* subversion/bindings/swig/include/proxy.py
   (_retrieve_swig_value): Factor out metadata retrieval from __getattribute__ to a new function.  
   (__getattribute__): Only define __getattribute__ for new style classes.
   (__getattr__): Add back implementation for classic classes.

Suggested By: brane


r1819712 | troycurtisjr | 2017-12-30 19:49:15 -0600 (Sat, 30 Dec 2017)

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.

Found By: danielsh, brane
    


r1819566 | troycurtisjr | 2017-12-29 22:04:06 -0600 (Fri, 29 Dec 2017)

On branch swig-py3: Properly handle NULL values from the Python C API.

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
  (svn_swig_py_as_file): Ensure each return from the Python C API is not NULL
   before passing to the next API function. 

Found By: danielsh


r1819565 | troycurtisjr | 2017-12-29 21:37:31 -0600 (Fri, 29 Dec 2017)

On branch swig-py3: Clarify move detection logic in swig trac tests.

* subversion/bindings/swig/python/tests/trac/versioncontrol/svn_fs.py
  (get_changes): Clarify the move detection logic by adding a few comments and
   replacing the odd index/offset based loop with one based on enumerate.

Suggested By: danielsh


r1819562 | troycurtisjr | 2017-12-29 20:32:58 -0600 (Fri, 29 Dec 2017)

On branch swig-py3: Fix swig tests which relied on consistent dict key ordering.

* subversion/bindings/swig/python/tests/trac/versioncontrol/svn_fs.py
  (test_changeset_file_edit, test_changeset_file_copy): Ensure consistent dict
   key sequence ordering by using sorted().

* subversion/bindings/swig/python/tests/trac/versioncontrol/tests/svn_fs.py
  (get_changes): Ensure moves indexes are sorted so that deletions work correctly.

Found By: danielsh


r1819561 | troycurtisjr | 2017-12-29 20:26:22 -0600 (Fri, 29 Dec 2017)

On branch swig-py3: Add missing undef to the py3c/swig compatibility header.

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py3c.h
  Add PyInt_FromSize_t to the list of undefs to prevent conflicts between py3c
  and swig.


r1819498 | troycurtisjr | 2017-12-29 10:13:18 -0600 (Fri, 29 Dec 2017)

On branch swig-py3: Do not include internal header as a system header.

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
  Change include of swigutil_py3c.h from <> to "" as it is an internal header.

Found By: danielsh


r1819460 | troycurtisjr | 2017-12-28 20:05:43 -0600 (Thu, 28 Dec 2017)

On branch swig-py3: Move py3c compat fixes to all swig modules.

Resolves compile warnings in Python 3 build for all modules, not just those in
swigutil_py.c.

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py3c.h:
  New file containing the py3c compat undef fixes previously in swigutil_py.c.

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c:
  Moved py3c compat undef fixes to swigutil_py3c.h and include the header.

* subversion/bindings/swig/include/svn_global.swg:
  Add swigutil_py3c.h include to ensure all swig modules get the compat fixes.

* subversion/bindings/swig/core.i,
  subversion/bindings/swig/include/svn_string.swg,
  subversion/bindings/swig/include/svn_types.swg,
  subversion/bindings/swig/svn_client.i,
  subversion/bindings/swig/svn_delta.i,
  subversion/bindings/swig/svn_diff.i,
  subversion/bindings/swig/svn_fs.i,
  subversion/bindings/swig/svn_ra.i,
  subversion/bindings/swig/svn_repos.i,
  subversion/bindings/swig/svn_wc.i:
  Remove redundant py3c.h inclusion, now that svn_global.swg includes
  swigutil_py3c.h.

Found By: danielsh



r1819452 | troycurtisjr | 2017-12-28 17:38:34 -0600 (Thu, 28 Dec 2017)

On branch swig-py3: Make swig python configure error more meaningful if
Python.h is not found.

* build/ac-macros/swig.m4
  (SVN_FIND_SWIG): Add a AC_CHECK_HEADER for Python.h to verify its existence,
   and provide a meaningful error if it is not found.

Found By: danielsh


r1819441 | troycurtisjr | 2017-12-28 15:58:31 -0600 (Thu, 28 Dec 2017)

On branch swig-py3: Include the detected PY3C header path in the swig compile.

* Makefile.in
  (SWIG_PY_INCLUDES): Add SVN_PY3C_INCLUDES.

Found By: danielsh


r1819397 | troycurtisjr | 2017-12-27 23:25:55 -0600 (Wed, 27 Dec 2017)

On branch swig-py3: Fix style in newly added function.

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c 
  (svn_swig_ensure_valid_swig_wrapper): Update style for consistency.


r1819396 | troycurtisjr | 2017-12-27 22:55:00 -0600 (Wed, 27 Dec 2017)

On branch swig-py3: Add configuration instructions for py3c.

* INSTALL: Add configuration instructions for py3c and remove reference to
  Python 3 not being supported.

* subversion/bindings/swig/INSTALL: Add build instructions for py3c.


r1819394 | troycurtisjr | 2017-12-27 22:19:17 -0600 (Wed, 27 Dec 2017)

On branch swig-py3: Remove use of hasattr() in python bindings since it can be
subtly different between Python 2 and 3.

* subversion/bindings/swig/include/proxy_apr.swg,
  subversion/bindings/swig/python/tests/client.py,
  subversion/bindings/swig/python/tests/mergeinfo.py,
  subversion/bindings/swig/python/tests/trac/versioncontrol/svn_fs.py
  (_mark_weakpool_invalid,
   apr_pool_t.valid,
   apr_pool_t.destroy
   apr_pool_t._wrap,
   testGnomeKeyring,
   get_svn_merge_range_t_objects,
   _get_history): Remove use of hasattr() to ensure consistent behavior with
    both Python 2 and 3.

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
  (svn_swig_ensure_valid_swig_wrapper): New private function for common wrapper
   validation code.
  (svn_swig_py_convert_ptr, svn_swig_py_must_get_ptr): Use new wrapper
   validation function.


r1819386 | troycurtisjr | 2017-12-27 20:00:36 -0600 (Wed, 27 Dec 2017)

On branch swig-py3: Remove resolved Python3 runtime issues from BRANCH-README.

* BRANCH-README: Remove resolved Python3 runtime issues.


r1819312 | troycurtisjr | 2017-12-26 20:43:05 -0600 (Tue, 26 Dec 2017)

On branch swig-py3: Do not hide AttributeError exception in called function.

* subversion/bindings/swig/include/proxy.swg
  (_assert_valid_deep): Move the call to assert_valid() out of the try block to
   prevent masking AttributeError that happen within the method call.


r1819203 | troycurtisjr | 2017-12-23 23:23:08 -0600 (Sat, 23 Dec 2017)

On branch swig-py3: Catch up to trunk@1819202.


r1819202 | troycurtisjr | 2017-12-23 22:47:31 -0600 (Sat, 23 Dec 2017)

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().



r1819112 | troycurtisjr | 2017-12-22 22:52:16 -0600 (Fri, 22 Dec 2017)

On branch swig-py3: Ensure the correct parent pool weakref is used.

* subversion/bindings/swig/include/proxy_apr.swg
  (GenericSWIGWrapper.set_parent_pool): Update the _is_valid weakref with the
   ref to the new parent pool.


r1819110 | troycurtisjr | 2017-12-22 22:43:26 -0600 (Fri, 22 Dec 2017)

On branch swig-py3: Replace hasattr check for a method with try-except.

* subversion/bindings/swig/include/proxy.swg
  (_assert_valid_deep): Replace hasattr check for the 'assert_valid' method
   with a try-except block as some class instances can have the method but return
   False to hasattr().


r1818995 | troycurtisjr | 2017-12-21 21:52:59 -0600 (Thu, 21 Dec 2017)

On branch swig-py3: Correctly manage swig objects with Python new style classes.

* subversion/bindings/swig/include/proxy.py
  (__getattr__): Replace __getattr__ with __getattribute__ to correctly
  intercept attribute access, even when swig uses descriptors for new style
  classes (which are the only type available in Python 3).

* build/ac-macros/swig.m4
  (SVN_FIND_SWIG):
  Request that swig generate new style classes, even for Python 2, to reduce
  differences with Python 3.

* subversion/bindings/swig/include/proxy.swg
  (_copy_metadata_deep): Remove iteritems() use to make compatible with both
   Python 2 and 3.
  (_assert_valid_deep): Remove itervalues() use and add type check to be
   compatible with both Python 2 and 3.


r1818994 | troycurtisjr | 2017-12-21 21:40:08 -0600 (Thu, 21 Dec 2017)

On branch swig-py3: Disable invalid PyInt_Check() in Python 3.

* subversion/bindings/swig/core.i
  (%typemap(in) (char *buffer, apr_size_t *len)):
  Remove PyInt_Check() when building against Python 3, since it has
  been removed.


r1816596 | troycurtisjr | 2017-11-28 21:50:09 -0600 (Tue, 28 Nov 2017)

On branch swig-py3: Fix clean-swig-py for out-of-source builds.

* Makefile.in
  (EXTRACLEAN_SWIG_PY): Change SWIG_PY_SRC_DIR to SWIG_PY_DIR to correctly
   reference generated files in out-of-source builds.


r1816097 | troycurtisjr | 2017-11-22 19:29:56 -0600 (Wed, 22 Nov 2017)

On branch swig-py3: Sort lists generated from dictionaries before testing.

* subversion/bindings/swig/python/tests/trac/versioncontrol/tests/svn_fs.py
  (SubversionRepositoryTestCase.test_get_dir_entries,
   SubversionRepositoryTestCase.test_changeset_added_dirs,
   SubversionRepositoryTestCase.test_changset_dir_moves):
   Wrap sequences in sorted() which are generated from dictionaries and used for equivalence
   tests to ensure consistent test returns.


r1816092 | troycurtisjr | 2017-11-22 18:44:53 -0600 (Wed, 22 Nov 2017)

On branch swig-py3: Explicitly use truncating division to ensure consistent
behavior between Python 2 and 3.

* subversion/bindings/swig/python/svn/core.py,
  subversion/bindings/swig/python/tests/trac/versioncontrol/svn_fs.py
  (secs_from_timestr, SubversionChangeset.__init__,
   SubversionNode.get_last_modified):
  Replace standard division between integers with truncating division, '//'.


r1815770 | troycurtisjr | 2017-11-19 21:17:22 -0600 (Sun, 19 Nov 2017)

On branch swig-py3: Ensure Python file objects are closed before destruction.

* subversion/bindings/swig/python/tests/trac/versioncontrol/tests/svn_fs.py,
  subversion/bindings/swig/python/tests/utils.py,
  subversion/bindings/swig/python/tests/wc.py
  (SubversionRepositoryTestSetup.setUp,
   SubversionWorkingCopyTestCase.test_get_pristine_copy_path,
   Temper.alloc_known_repo):
   Wrap bare open() calls in a 'with' block to ensure the file object is closed
   before destruction.


r1815768 | troycurtisjr | 2017-11-19 20:30:00 -0600 (Sun, 19 Nov 2017)

On branch swig-py3: Fix raw file read handling in python swig bindings to work
the same in Python 2 and 3.

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
  (read_handler_pyio): Replace PyStr_AsUTF8AndSize() with
  PyBytes_AsStringAndSize() so that raw file I/O in Python 2 and 3 are handled
  the same way.



r1814455 | troycurtisjr | 2017-11-06 22:01:25 -0600 (Mon, 06 Nov 2017)

* subversion/bindings/swig/python/tests/trac/versioncontrol/tests/svn_fs.py
  Remove redundent StringIO imports.
  (test_diff_file_different_revs, test_diff_file_different_files,
   test_diff_file_no_change, test_diff_dir_different_revs,
   test_diff_dir_different_dirs, test_diff_dir_no_change,
   test_changeset_repos_creation): Remove extraneous '*args' lambda argument.


r1814454 | troycurtisjr | 2017-11-06 21:54:24 -0600 (Mon, 06 Nov 2017)

* build/ac-macros/swig.m4
  (SVN_FIND_SWIG): Ensure Python 3.0 is correctly detected as Python 3.



r1814387 | troycurtisjr | 2017-11-05 20:33:27 -0600 (Sun, 05 Nov 2017)

On branch swig-py3: Get swig bindings compiling with Python 3.

Add the necessary build tool support for choosing Python 3 or Python 2 to build
against, and get the bindings building under Python 3.

* BRANCH-README
  Add a note about current known runtime issues under Python 3.

* Makefile.in
  (SWIG_PY_OPTS): New configuration variable.

* build.conf
  (swig-python-opts): Use the new SWIG_PY_OPTS variable for the swig python
    arguments.

* configure.ac
  Add PYTHON to the influential environment variable list.
  
* build/ac-macros/swig.m4
  (SVN_FIND_SWIG): Choose appropriate SWIG_PY_OPTS based on the Python version
    detected.

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
  Move the py3c.h include such that selected conflicting macros from swig can be
  undefined for use with this file.
  (svn_swig_py_as_file): Use correct PyObject_AsFileDescriptor instead of Python
    2's PyFile_AsFileDescriptor.


r1814386 | troycurtisjr | 2017-11-05 19:58:20 -0600 (Sun, 05 Nov 2017)

On branch swig-py3: Update swig python code to be compatible with both Python 2
and Python3.

Change non-generated python code to use syntax that is valid for both Python 3
and Python 2.7. Where this is not possible, provide compatibility wrappers.
Python 2 unit tests all pass after the changes, but more effort remains for full
Python 3 functionality.

* build/generator/swig/header_wrappers.py
  (_write_swig_interface_file): For Python3, include an encoding argument to
    tempfile.TemporaryFile()

* build/generator/util/executable.py
  (output): Ensure the subprocess' output is interpreted as utf8 for proper
            Python 3 compatibility.

[in subversion/bindings/swig/python]

* svn/core.py
  Import the builtin 'list' as '_bi_list' to aid in compatibility in other
  modules.
  (_unprefix_names): Wrap dict.items() in list() for py2.7/3 support.
  (__all__): Change filter() to list comprehension for py2.7/3 support.

* svn/client.py
  svn/delta.py
  svn/diff.py
  svn/fs.py
  svn/ra.py
  svn/repos.py
  svn/wc.py
  (__all__): Change filter() to list comprehension for py2.7/3 support. Use the
    _bi_list to provide a new list instance of locals on both Python 2.7 and 3.
    
* svn/fs.py
  (entries): Wrap dict.items() in _bi_list() for py2.7/3 support.

* tests/auth.py
  (test_open): Change deprecated assert_ to assertTrue.
  (test_credentials_get_username,
   test_credentials_get_simple,
   test_credentials_get_ssl_client_cert,
   test_credentials_get_ssl_client_cert_pw,
   test_credentials_get_ssl_server_trust):
  Change deprecated assertEquals to assertEqual and assert_ to assertTrue.

* tests/client.py
  (setUp, test_log5, proplist_receiver_trunk, proplist_receiver_dir1,
   test_inherited_props, test_update4):
    Change deprecated assertEquals to assertEqual.
  (testBatonPlay): Change deprecated assertEquals to assertEqual and
    assertNotEquals to assertNotEqual.
  (test_log3_url, test_platform_providers):
    Change deprecated assert_ to assertTrue. 
  (test_log5): Change deprecated assert_ to assertTrue and assertEquals to
    assertEqual.

* tests/core.py
  (test_config_enumerate2): Replace dict.iteritems() with dict.items() to be
    compatible with py2.7/3. Change deprecated assert_ to assertTrue.
  (test_config_enumerate_sections2): Change deprecated assert_ to assertTrue.

* tests/delta.py
  (testTxdeltaWindowT): Change deprecated assert_ to assertTrue.

* tests/mergeinfo.py
  (test_rangelist_reverse,
   test_mergeinfo_leakage__incorrect_range_t_refcounts,
   test_mergeinfo_leakage__lingering_range_t_objects_after_del,
   inspect_mergeinfo_dict):
    Change deprecated assertEquals to assertEqual.
  (test_mergeinfo_leakage__incorrect_range_t_refcounts): Wrap dict.items() in
    list() for py2.7/3 support. Change deprecated assertEquals to assertEqual.
  (inspect_mergeinfo_dict): Change deprecated assert_ to assertTrue.
  (compare_mergeinfo_catalogs,
   compare_mergeinfos):
   Drop usage of dict.keys() for py2.7/3 support.

* tests/ra.py
  (test_get_dir2, test_delta_driver_commit, test_get_file_revs,
   test_lock, test_get_log2, test_namestring):
    Change deprecated assert_ to assertTrue.
  (test_delta_driver_commit): Wrap dict.items() in list() for py2.7/3 support.

* tests/repository.py
  (test_dump_fs2): Change deprecated assertEquals to assertEqual.
  (test_get_logs): Wrap dict.values() in list() for py2.7/3 support.

* tests/run_all.py
  (suite): Do not use long() cast when running with Python 3.

* tests/utils.py
  Support correct import of StringIO and pathname2url from Python 2.7 and 3.
  (file_uri_for_path): Use unqualified pathname2url to support py2.7/3.

* tests/wc.py
  (test_is_adm_dir, test_set_adm_dir, test_status_editor,
    test_is_normal_prop, test_is_wc_prop, test_is_entry_prop):
    Change deprecated assert_ to assertTrue and failIf to assertFalse.
  (test_get_adm_dir, test_crawl_revisions2, test_check_wc, test_get_prop_diffs,
   test_get_ignores):
    Change deprecated assert_ with assertTrue.
  (test_commit): Change deprecated assertEquals to assertEqual.
  (test_diff_editor4): Wrap dict.items() in list() for py2.7/3 support.

* tests/trac/versioncontrol/svn_fs.py
  (get_entries): Drop usage of dict.keys() for py2.7/3 support.
  (get_properties, get_changes): Wrap dict.items() with list() for py2.7/3
    support.
  
* tests/trac/versioncontrol/tests/svn_fs.py
  Support correct import of StringIO and pathname2url from Python 2.7 and 3.
  (test_get_dir_entries, test_get_file_entries, test_get_node_history,
   test_get_node_history_follow_copy, test_get_path_history,
   test_get_path_history_copied_file, test_get_path_history_copied_dir,
   test_changeset_added_dirs, test_changeset_file_edit, test_changset_dir_moves,
   test_changeset_file_copy):
    Replace the series of direct calls to .next() with assertSequenceEqual for
    py2.7/3 support.
  (test_diff_file_different_revs, test_diff_file_different_files,
   test_diff_file_no_change, test_diff_dir_different_revs,
    test_diff_dir_different_dirs, test_diff_dir_no_change,
    test_changeset_repos_creation):
    Replace <iter>.next() with next(<iter>) for py2.7/3 support.
  


r1813774 | troycurtisjr | 2017-10-30 09:58:34 -0500 (Mon, 30 Oct 2017)

On branch swig-py3: Remove py3c AC macro's implicit dependency on swig-python.

The py3c library is not necessarily tied to the python swig bindings, so don't
assume so in SVN_PY3C AC macro. Instead, add a check in the swig macro for
py3c library, and gracefully disable just the python bindings instead of
requiring all of swig to be disabled.

* BRANCH-README
  Add a TODO to 'make swig-py' error more meaningful when py3c isn't available.

* build/ac-macros/py3c.m4
  (SVN_PY3C): Remove references to the swig bindings and remove the
  AC_MSG_ERROR, and fix checking of header compilability when prefix method
  is used.

* build/ac-macros/swig.m4
  (SVN_FIND_SWIG): Add a check for the py3c library in the python section and
  if not found, only disable the python bindings instead of all swig bindings.


r1813700 | troycurtisjr | 2017-10-29 13:10:30 -0500 (Sun, 29 Oct 2017)

On branch swig-py3: Add a branch specific README.

* BRANCH-README: New.



r1813665 | troycurtisjr | 2017-10-28 22:37:37 -0500 (Sat, 28 Oct 2017)

On branch swig-py3: Use py3c library in Python swig bindings.

Add the py3c Python compatibility library and update the python swig bindings
to use the compatibility functions that it provides. This is the first step to
getting the swig bindings to support Python 3.

* build/ac-macros/py3c.m4:
  Create a new ac-macro for the py3c library.

* aclocal.m4:
  Include the new py3c.m4 file.

* build/ac-macros/swig.m4:
  (SVN_FIND_SWIG): Call the new SVN_PY3C macro to add py3c to the build.

[in subversion/bindings/swig]

* include/svn_string.swg
  (python typemaps: RET_STRING): Replace PyString_FromStringAndSize with
     PyStr_FromStringAndSize.
  (python typemaps: (in) svn_stringbuf_t *,
   (in) const svn_string_t * (svn_string_t value)): 
     Replace PyString_Check with PyStr_Check and
     PyString_AS_STRING/PyString_GET_SIZE with PyStr_AsUTF8AndSize.
  (python typemaps: (out) svn_stringbuf_t *, 
                    (out) svn_string_t *):
     Replace PyString_FromStringAndSize with PyStr_FromStringAndSize.
  (python typemaps: (argout) const char **OUTPUT):
     Replace PyString_FromString with PyStr_FromString.

* include/svn_types.swg
  (python typemaps: (in) (const char *PTR, apr_size_t LEN)): 
    Replace PyString_Check with PyStr_Check and
    PyStr_AS_STRING/PyString_GET_SIZE with PyStr_AsUTF8AndSize.
  (python typemaps: (argout) unsigned char digest[ANY]): 
    Replace PyString_FromStringAndSize with PyStr_FromStringAndSize.
  (python typemaps: (in) const unsigned char *digest): 
    Replace PyString_AsString with PyStr_AsString.

* include/libsvn_swig_py/swigutil_py.h,
  include/libsvn_swig_py/swigutil_py.c
  Include py3c.h to pick up Python 2/3 compatibility defines.
  (svn_swig_py_as_file): Add new compatibility function.
  (svn_swig_py_unwrap_string): Add clarifying note to function.
  (svn_swig_py_svn_exception,
   svn_swig_py_propinheriteditemarray_to_dict,
   svn_swig_py_proparray_to_dict,
   svn_swig_py_locationhash_to_dict,
   svn_swig_py_c_strings_to_list,
   svn_swig_py_array_to_list,
   cstring_to_pystring,
   convert_string): 
     Replace PyString_FromString with PyStr_FromString.
  (make_string_from_ob,
   make_svn_string_from_ob,
   svn_swig_py_unwrap_string,
   ra_callbacks_get_client_string,
   exeception_to_error):
     Replace PyString_AsString with PyStr_AsString.
  (make_string_from_ob, make_svn_string_from_ob):
     Replace PyString_Check with PyStr_Check.
  (convert_svn_string_t,
   svn_swig_py_proparray_to_dict,
   ra_callbacks_push_or_set_wc_prop):
     Replace PyString_FromStringAndSize with PyStr_FromStringAndSize.
  (svn_swig_py_make_file):
     Replace PyFile_Check/PyFile_AsFile with svn_swig_py_as_file.
  (read_handler_pyio, ra_callbacks_get_wc_prop):
     Replace PyString_GET_SIZE/PyString_AS_STRING with PyStr_AsUTF8AndSize.
  (svn_swig_py_get_commit_log_func):
     Replace PyString_AS_STRING with PyStr_AsString and PyString_Check with
     PyStr_Check.

* core.i
  (python typemap: 
   (char *buffer, apr_size_t *len)): 
     Replace PyString_FromStringAndSize with PyStr_FromStringAndSize.
  (python typemap: 
   (const char *data, apr_size_t *len)): 
     Replace PyString_Check with PyStr_Check, and PyString_AS_STRING/
     PyString_GET_SIZE with PyStr_AsUTF8AndSize.
  (python typemap: 
   const void *value (apr_pool_t *_global_pool, PyObject *_global_py_pool)):
     Replace PyString_Check with PyStr_Check and PyString_AS_STRING with
     PyStr_AsString.
  (python typemap: FILE *): Replace PyFile_AsFile with svn_swig_py_as_file.

* svn_client.i
  Include py3c.h to pick up Python 2/3 compatibility defines.
  (python typemap: (argout) apr_array_header_t **props):
    Replace PyString_FromStringAndSize with PyStr_FromStringAndSize.

* svn_delta.i,
  svn_diff.i,
  svn_fs.i,
  svn_ra.i,
  svn_repos.i,
  svn_wc.i
  Include py3c.h to pick up Python 2/3 compatibility defines.



r1813663 | troycurtisjr | 2017-10-28 16:50:06 -0500 (Sat, 28 Oct 2017)

Revert unintended commit of WIP code.

* aclocal.m4:
  Back out premature addition of py3c.m4.


r1813662 | troycurtisjr | 2017-10-28 16:42:32 -0500 (Sat, 28 Oct 2017)

[Accidental commit, reverted in r1813663]


r1813660 | troycurtisjr | 2017-10-28 15:58:44 -0500 (Sat, 28 Oct 2017)

Create a branch to work on Python 3 compatibility for the swig bindings.


r1813114 | troycurtisjr | 2017-10-23 21:27:17 -0500 (Mon, 23 Oct 2017)

* COMMITTERS:
  (troycurtisjr) Add myself as partial committer for swig bindings.


r871532 | kfogel | 2008-05-26 16:21:08 -0500 (Mon, 26 May 2008)

Fix peg revision support for repository root urls to address issue
#3193.  Along the way, unify some aspects of peg revision parsing into
a new helper function.

Patch by: Troy Curtis Jr <troycurtisjr@gmail.com>
(Only minor tweaks by me.)

* subversion/include/private/svn_opt_private.h
  (svn_opt__split_arg_at_peg_revision): New prototype.

* subversion/libsvn_subr/opt.c
  (svn_opt__split_arg_at_peg_revision): New function.
  (svn_opt_parse_path, svn_opt_args_to_target_array3): Replace in-line
    peg revision parsing with call to new function.

* subversion/libsvn_client/cmdline.c
  (svn_opt_args_to_target_array3): Same.

* subversion/include/svn_opt.h 
  (svn_opt_parse_path): Document error behavior more precisely.

* subversion/tests/cmdline/basic_tests.py
  (basic_relative_url_with_peg_revisions): New test.
  (test_list): Run it.


r871091 | danielsh | 2008-05-04 12:09:51 -0500 (Sun, 04 May 2008)

Fix an assertion failure when a user inputs a non-canonical repository root
relative url.

Patch by: Troy Curtis Jr <troycurtisjr@gmail.com>

* subversion/libsvn_client/cmdline.c
   (resolve_repos_relative_url): Avoid an assertion failure in svn_path_join()
   by replacing it with apr_pstrcat() so that there is not a requirement that
   the input arguments be canonical.  Also update the doc string to reflect
   this.

* subversion/tests/cmdline/basic_tests.py
   (basic_relative_url_non_canonical): New test function.
   (test_list): Call the new test function.

r870934 | danielsh | 2008-04-30 00:09:28 -0500 (Wed, 30 Apr 2008)

Add some notes on the syntax of the repository root relative url support in
the svn command-line client.  Also include known issues with some shells'
special treatment of the '^' character.

Patch by: Troy Curtis Jr <troycurtisjr@gmail.com>
(Tweaked by me to add examples and reserve '^' URLs.)

* notes/cli-repo-root-relative-support.txt: New file.

r870827 | julianfoad | 2008-04-22 10:21:36 -0500 (Tue, 22 Apr 2008)

Implement repository root relative url support for the svn command-line
client.  This allows the user to use '^/' in front of any target to
mean the repository root url.  The repository root url is determined by
checking the other arguments' root urls (if they exist) and using that common
url.  If none is found the root url of the current directory is used.  If no
common repository root url can be found, an error is generated.

Patch by: Troy Curtis Jr <troycurtisjr@gmail.com>
(minor tweaks by me)

* subversion/include/private/svn_opt_private.h
  New file to hold inter-library svn_opt functions.
  (svn_opt__arg_canonicalize_url): New function prototype.
  (svn_opt__arg_canonicalize_path): New function prototype.

* subversion/include/svn_opt.h
  (svn_opt_args_to_target_array3): Change doc string to reflect deprecated
    status.

* subversion/libsvn_subr/opt.c
  (svn_opt__arg_canonicalize_url): New function to canonicalize user input
    urls.
  (svn_opt__arg_canonicalize_path): New function to canonicalize user input
    paths.
  (svn_opt_args_to_target_array3): Replace the inline canonicalization code
    with calls to the new svn_opt__arg_canonicalize_* functions.

* subversion/include/svn_client.h
  (svn_client_args_to_target_array): New function prototype.

* subversion/libsvn_client/cmdline.c
  New file for client library commandline processing functionality.
  (arg_is_repos_relative_url,
   resolve_repos_relative_url,
   check_root_url_of_target): New functions to support
    svn_client_args_to_target_array.
  (svn_client_args_to_target_array): New client function to parse user
    arguments into a target array.  Replaces use of
    svn_opt_args_to_target_array3().  Remove the replicated knowledge of
    admin directory names, and, as a side effect, don't skip path names
    of "_svn" on systems that don't use that name for the admin dir.

* subversion/tests/libsvn_client/client-test.c
  (test_args_to_target_array): New test function.
  (test_funcs): Run new test function.

* subversion/tests/cmdline/special_tests.py
  (warn_on_reserved_name): Modify test to work right with the new
    svn_client_args_to_target_array().

* subversion/tests/cmdline/basic_tests.py
  (basic_relative_url_multi_repo,
   basic_relative_url_using_other_targets,
   basic_relative_url_using_current_dir): New test functions.
  (test_list): Run new test functions.

* subversion/svn/cl.h
  (svn_cl__args_to_target_array_print_reserved): Add client context parameter.

* subversion/svn/util.c
  (svn_cl__args_to_target_array_print_reserved): Replace call to
    svn_opt_args_to_target_array3() with svn_client_args_to_target_array().

* subversion/svn/update-cmd.c
  (svn_cl__update): Replace svn_opt_args_to_target_array3() with
    svn_cl__args_to_target_array_print_reserved() for consistency with the other
    command line functions.

* subversion/svn/diff-cmd.c
  (svn_cl__diff): Create a client context variable and use it in the
    svn_cl__args_to_target_array_print_reserved() function along with
    everywhere else it is needed.

* subversion/svn/add-cmd.c,
  subversion/svn/blame-cmd.c,
  subversion/svn/cat-cmd.c,
  subversion/svn/changelist-cmd.c,
  subversion/svn/checkout-cmd.c,
  subversion/svn/cleanup-cmd.c,
  subversion/svn/commit-cmd.c,
  subversion/svn/copy-cmd.c,
  subversion/svn/delete-cmd.c,
  subversion/svn/export-cmd.c,
  subversion/svn/import-cmd.c,
  subversion/svn/info-cmd.c,
  subversion/svn/list-cmd.c,
  subversion/svn/lock-cmd.c,
  subversion/svn/log-cmd.c,
  subversion/svn/merge-cmd.c,
  subversion/svn/mergeinfo-cmd.c,
  subversion/svn/mkdir-cmd.c,
  subversion/svn/move-cmd.c,
  subversion/svn/propdel-cmd.c,
  subversion/svn/propedit-cmd.c,
  subversion/svn/propget-cmd.c,
  subversion/svn/proplist-cmd.c,
  subversion/svn/propset-cmd.c,
  subversion/svn/resolve-cmd.c,
  subversion/svn/resolved-cmd.c,
  subversion/svn/revert-cmd.c,
  subversion/svn/status-cmd.c,
  subversion/svn/switch-cmd.c,
  subversion/svn/unlock-cmd.c
    Add client context variable to all the calls to
    svn_cl__args_to_target_array_print_reserved().


r867580 | jpeacock | 2007-10-30 17:29:14 -0500 (Tue, 30 Oct 2007)

Make many functions added since version 1.0 in the Client API visible
to users of the Perl bindings. They are already swig-wrapped, just not
exported. (issue 2646)

* subversion/bindings/swig/perl/native/Repos.pm:
  Export more API functions.
  (POD Documentation): Added entries documenting dump_fs2 and load_fs2.

Patch by: Troy Curtis Jr <troycurtisjr@gmail.com>
          me
Approved by: dlr

r862063 | dlr | 2006-10-16 22:21:03 -0500 (Mon, 16 Oct 2006)

* contrib/client-side/mucc.c
  Add comment on how to build this client.

Suggested by: glasser
Found by: Troy Curtis Jr <troycurtisjr@gmail.com>