Checkout Tools
  • last updated 7 hours ago
Constraints: committers
Constraints: files
Constraints: dates

Changeset 1235734 is being indexed.

Add a rotation API to Ev2, per the discussion started at:

* subversion/include/svn_editor.h:

(...): update comments to discuss the rotate API

(svn_editor_cb_rotate_t): new callback type for rotations

(svn_editor_setcb_rotate): new callback setter

(svn_editor_cb_many_t): add a member callback for rotation

(svn_editor_rotate): new driving function for rotation

* subversion/libsvn_delta/editor.c:

(svn_editor_setcb_rotate, svn_editor_rotate): new

(svn_editor_setcb_many): copy the rotation callback

Ev2 shims: When replacing a node, don't use the old properties.

Current number of Ev2 test failures: 32

* subversion/libsvn_delta/compat.c

(process_actions): Use an empty initial props hash on a replace.

(build): Same.

No functional change.

* tools/client-side/svnmucc/svnmucc.c

(execute): Move a declaration to resolve a compiler warning.

Some debugging magic: add a Python module which allows us to define

pretty-printers for our custom Subversion types in gdb. Right now, this

includes a very simple example, which may not even be useful, but could be

improved upon in the future. See the README for more information.

* tools/dev/gdb-py/svndbg:

New, ignore *.pyc files.

* tools/dev/gdb-py/svndbg/

New, empty.

* tools/dev/gdb-py/svndbg/


* tools/dev/gdb-py/README:


    • ?
    • ?
* subversion/tests/cmdline/

(natural_history_filtering): Add a diagram to help explain this test.

Nominate r1235302.
* subversion/bindings/swig/python/tests/

(itertools): Remove import.

Suggested by: Trent Nelson

Nominate r1235296.
Follow-up to r1235264: add two new tests to aid in detecting memory leaks.

They essentially test the same thing in two different ways; if one fails,

the other *should* fail. (Of course, if one fails and the other does not --

that's just as valuable, diagnostically, and points to an issue with the

'automatic pool memory management' logic.)

Patch by: Trent Nelson <>

Tested on: FreeBSD, OS X, Windows.

(split from r1235264 by me)

* subversion/bindings/swig/python/tests/

(get_svn_merge_range_t_objects): New helper method that returns a list of

any 'svn_merge_range_t' objects being tracked by the garbage collector.


(test_mergeinfo_leakage__incorrect_range_t_refcounts): New test. Verify

svn_merge_range_t objects returned from svn_mergeinfo_parse() have the

correct refcounts set.

(test_mergeinfo_leakage__lingering_range_t_objects_after_del): New test.

Verify that there are no lingering svn_merge_range_t objects after we

explicitly delete the results returned from svn_mergeinfo_parse().

Nominate r1235264.
Fix a memory leak in convert_rangelist by *always* Py_DECREF'ing the object

returned by convert_to_swigtype (a SWIG wrapper around svn_merge_range_t)

once we've established it's not NULL.

This is required because PyList_Append takes ownership of references passed

in (i.e. calls Py_INCREF). Prior to this fix, the reference counts of any

svn_merge_range_t objects would always be off-by-one, preventing them from

ever being garbage collected, having dire effects on the memory usage of

long-running programs calling svn_mergeinfo_parse() on real-world data.

Patch by: Trent Nelson <>

Tested on: FreeBSD, OS X, Windows.

(this is part of a patch that also included a test suite portion)

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c:

(convert_rangelist): Make sure we call Py_DECREF on the object returned

from convert_to_swigtype. PyList_New might return NULL; check for that.

Ev2 shims: Fix memory error.

Current number of Ev2 test failures: 33

* subversion/libsvn_delta/compat.c

(build): On property modification, put the property name in the correct pool.

Document some common knowledge.

* subversion/include/private/svn_repos_private.h


Document the implications of making this validator function stricter.

Ev2 shims: Simplify our shims. We don't need to ensure the root is opened

in each callback, since we already open it at the beginning of the edit.

* subversion/libsvn_delta/compat.c

(editor_baton): Remove root_opened flag.

(ensure_root_opened): Remove.

(add_directory_cb, add_file_cb, add_symlink_cb, add_absent_cb, set_props_cb,

set_text_cb, set_target_cb, delete_cb, copy_cb, move_cb, complete_cb):

Don't bother calling ensure_root_opened().

(start_edit_func): Ensure the root is opened manually.

(editor_from_delta): Don't set the old flag.

In a reintegrate merge, detect when a revision to be merged is itself the

result of a merge in the opposite direction (often called a reflective

merge). Don't merge any such revision, but do record it as merged.

The most important result is that the user can reintegrate a branch and then

carry on using it without needing to do either of the two currently

recommended work-arounds (the record-only merge known as the 'keep-alive

dance', or deleting and recreating the branch). The next time the user runs

a sync merge on the branch, Subversion will automatically detect the

reintegration commit on the parent branch and will record that revision as

having been merged to the branch just like the manual 'keep-alive dance'.

If a revision under consideration is not simply a reflective merge but

consists of both a reflective and desired merges, throw an error to let the

user know that they will need to merge the other changes manually. (The

user may have made a mistake. Resolving this case automatically would

require merges other than from the specified source to the specified target,

which is outside the scope of Subversion's automatic merge tracking.)

Future improvements:

- For a partially-reflective revision, issue a better diagnostic message

to let the user know exactly what is and isn't already merged.

- Examine subtree mergeinfo as well as merge-root mergeinfo. (At present,

any revision that has reflective mergeinfo at the merge-root will be

skipped across all sub-trees, but a revision that only shows up as

reflective if we look at its subtree mergeinfo will not be skipped.)

- Work also for a reverse merge. (Just need to generalize the range

arithmetic w.r.t. exclusive and inclusive end-points.)

- Work also for a single-file merge. (But, ugh, the code is completely


* subversion/libsvn_client/merge.c

(show_mergeinfo): New (for debugging only).

(mergeinfo_graph_*): New.

(fetch_repos_mergeinfo, incoming_mergeinfo_diff, is_reflected_merge,

find_reflected_rev, remove_reflected_revs): New functions.

(do_directory_merge): Call remove_reflected_revs().

* subversion/tests/cmdline/

(merge_history_repos): Don't try to resolve conflicts in the final merge,

because the merge now works exactly how it should and produces no


* subversion/tests/cmdline/

(simple_reintegrate, simple_sync_merge): New functions.

(reintegrate_keep_alive1, reintegrate_keep_alive2, reintegrate_keep_alive3):

New tests.

(test_list): Add the new tests.

Make a branch for improving merge reintegrate keep-alive.
On the ev2-export branch:

Optionally translate a stream on write, rather than on read. Doing so is a bit

more efficient (according to Greg, and other comments).

* subversion/libsvn_client/export.c

(add_file): Translate the file on write, not read.

JavaHL: Include OSGI Manifest information in svn-javahl.jar


(install-javahl): Use a manifest file when creating the JAR

* subversion/bindings/javahl

(svn:ignore): Ignore the Manifest file produced by build process

* subversion/bindings/javahl/

Template for OSGI Manifest information

Patch by: Jakub Adam <>

    • ?
Fix typo in comment.

* subversion/libsvn_subr/config_file.c:

Changed "miscelleneous" to "miscellaneous'.

Patch by: Jeyanthan Inbasekaran <jeyanthan{_AT_}>

Ev2 shims: Always use the base version of properties when doing a repos->wc


Current number of failing Ev2 tests: 56

* subversion/libsvn_wc/diff_editor.c

(svn_wc_get_diff_editor6): Always fetch base props for the editor shims.

Fix comments and diagram for mergeinfo in log tests, to match current


* subversion/tests/cmdline/log_tests_data/merge_history_repo.png

Adjust the merge ranges shown for the first two merges.

* subversion/tests/cmdline/

(merge_history_repos): Adjust comments: correct the name of the above

file, remove references to expecting self-referential mergeinfo, and fix

a start-of-branch revision number.

* subversion/libsvn_client/merge.c

(find_unmerged_mergeinfo_subroutine): Simplify by removing an unnecessary

mergeinfo intersection: (A - (B intersect A)) simplifies to (A - B).

Factor out repeated code from find_unmerged_mergeinfo().

* subversion/libsvn_client/merge.c

(find_youngest_merged_rev, find_unmerged_mergeinfo_subroutine): New

functions, factored out ...

(find_unmerged_mergeinfo): ... from here.

Eliminate a redundant parameter in merge code.

* subversion/libsvn_client/merge.c

(find_unmerged_mergeinfo): Eliminate the 'never_synched' output, as it is

redundant with SVN_IS_VALID_REVNUM(youngest_merged_rev).

(calculate_left_hand_side): Adjust accordingly.

* subversion/include/svn_io.h

(svn_stream_buffered): Expand the docstring a bit.

Use a buffered stream in place of a file-backed temporary stream.

* subversion/libsvn_client/copy.c

(repos_to_wc_copy_single): Use a buffered stream.

On the ev2-export branch:

Use a buffered stream to capture content flowing from the repos, rather than

a temporary file-backed stream.

* subversion/libsvn_client/export.c

(svn_client_export5): Use a buffered intermediate stream.

On the ev2-export branch:

Bring up-to-date with trunk.

Add a public wrapper around our spillbuf-backed stream.

* subversion/include/svn_io.h

(svn_stream_buffered): New.

* subversion/libsvn_subr/stream.c

(svn_stream_buffered): New.

Create a stream which is wrapped around a spillbuffer.

* subversion/include/private/svn_subr_private.h

(svn_stream__from_spillbuf): New.

* subversion/libsvn_subr/spillbuf.c

(spillbuf_baton, read_handler_spillbuf, write_handler_spillbuf,

svn_stream__from_spillbuf): New.

* subversion/tests/libsvn_subr/spillbuf-test.c

(test_spillbuf_stream): New.

(test_funcs): Run the new test.