Mark Phippard <> (markphip)

Found Patch Review Suggested
r25728, r25665, r25660, r25315, r25308, r25307, r25297, r25207, r24536, r24529, r24517, r17589 r24593, r24537, r17604, r17127, r17066, r17060, r16854, r9987 r25112, r22780, r19813, r17607, r16839, r16495 r25247, r25113, r25025, r23960, r22780, r22728, r22707, r16326, r15888

r25728 | dlr | 2007-07-12 18:06:06 -0500 (Thu, 12 Jul 2007)

JavaHL: A follow-up to r25717 removing a stray debugging statement.

[ in subversion/bindings/javahl/ ]

* tests/org/tigris/subversion/javahl/
  (testMergeConflictResolution): Remove println().

Found by: markphip

r25665 | dlr | 2007-07-05 18:59:30 -0500 (Thu, 05 Jul 2007)

JavaHL: Add support for getting changelists, working file size, and
repository file size from info.

[ in subversion/bindings/javahl/ ]

* src/org/tigris/subversion/javahl/
  (changelistName, workingSize, reposSize): Add new intance fields.
  (Info2): Add corresponding arguments to the constructor, and
   initialize instance fields accordingly.
  (getChangelistName, getWorkingSize, getReposSize): Add accessor
  (toString): Add stringification method which returns the URL.

* native/InfoCallback.cpp
  (createJavaInfo2): Adjust expected constructor argument list when
   retrieving its method ID.  Eliminate unnecessary primitive local
   variables in favor of casts when using corresponding data.  Add
   JNI C++ variables for changelist name, working size, and repos
   size, and pass them to the Java ctor method invocation.  Cleanup
   the changelist name appropriately.  Add missing exception check
   after transforming the copyfrom URL into a jstring.

* tests/org/tigris/subversion/javahl/
  (testBasicInfo2): Validate that changelist name, working file size,
   and repos file size are as expected after getting some Info2
   objects from a WC.

Found by: me

r25660 | dlr | 2007-07-05 15:37:07 -0500 (Thu, 05 Jul 2007)

Fix constant name in doc string.

* subversion/includes/svn_client.h
  (svn_info_t): Add missing "N" to SVN_WC_ENTRY_WORKING_SIZE_UNKNOWN
   constant in the doc string for the working_size field.

* subversion/includes/svn_wc.h
  (svn_wc_entry_t): Ditto.

Found by: me

r25315 | hwright | 2007-06-06 15:47:33 -0500 (Wed, 06 Jun 2007)

Followup to r25314: Move the definition of log_tree_node to the top of the
file, where it is visible for the declaration of do_logs().

Found by: markphip

* subversion/libsvn_repos/log.c
  (log_tree_node): Move definition to the top of the file.

r25308 | dlr | 2007-06-05 16:16:05 -0500 (Tue, 05 Jun 2007)

JavaHL: Fix potential exception thrown by the copy source discovery
API, which can occur when a path has no copy source.

[ in subversion/bindings/javahl/ ]

* native/SVNClient.cpp
  (getCopySource): Return NULL when svn_client__get_copy_source()
   returns an invalid revision number (and likely also a NULL copyfrom

Found by: markphip

r25307 | dlr | 2007-06-05 16:04:36 -0500 (Tue, 05 Jun 2007)

JavaHL: Fix potential segfault in merge info retrieval API, which can
crash a JVM.  The was caused by changes in Subversion's core APIs
which were not tracked by the JavaHL bindings.

[ in subversion/bindings/javahl/ ]

* native/SVNClient.cpp
  (getMergeInfo): Return NULL when svn_client_get_mergeinfo() returns
   NULL merge info.

Found by: markphip

r25297 | dlr | 2007-06-05 13:22:24 -0500 (Tue, 05 Jun 2007)

Add test for avoiding repeated merges when doing for cyclic merging
(e.g. trunk -> branch -> trunk), currently XFAIL'ing.

* subversion/tests/cmdline/
  (avoid_mirrored_revs): Add new test which creates a branch, makes
   mods to trunk, merges to the branch, makes mods on the branch, then
   merges back to trunk, and enforces that only the mod on the branch
   should be merged back to trunk.
  (test_list): Add avoid_mirrored_revs() to the list.

Found by: markphip

r25247 | dlr | 2007-05-31 18:47:59 -0500 (Thu, 31 May 2007)

Rename --merge-sensitive argument to --use-merge-history.

* subversion/tests/cmdline/getopt_tests_data/svn_help_log_switch_stdout
  Adjust expected stdout.

* subversion/tests/cmdline/
  (mergeinfo_inheritance_and_discontinuous_ranges): Adjust option name.

* subversion/svn/merge-cmd.c
  (svn_cl__merge): Adjust command-line option name.

* subversion/svn/cl.h
  (svn_cl__opt_state_t): Rename merge_sensitive field to use_merge_history.

* subversion/svn/log-cmd.c
  (svn_cl__log): Adjust command-line option name.

* subversion/svn/main.c
  (svn_cl__options): Rename "merge-sensitive" to "use-merge-history",
   and adjust command-line option name.

Suggested by: markphip

r25207 | hwright | 2007-05-30 13:49:33 -0500 (Wed, 30 May 2007)

Fix operator precedence error in log test 17 with Python 2.3.

Found by: markphip

* subversion/tests/cmdline/
  (simple_merge_sensitive_log):  Add some clarifying parenthesis, which 
  eliminates an operator precedence error.

r25113 | dlr | 2007-05-22 19:28:09 -0500 (Tue, 22 May 2007)

Exchange the more specific --suggested-source option introduced in
r25112 for the --merge-sensitive/-g option (cherry picked out of the
merge-sensitive-log branch), as requested by epg on IRC.

To explain the reasoning for this and r25112 a little more:

1) In the common case (a branch copied from trunk), multiple potential
merge sources will exist (since the copy source's merge info is also
copied).  Requiring an additional option makes the decision to use the
highest recommended potential merge source in the list of merge
sources (currently the copy source) explicit.  Also not uncommon is a
branch created from a tag (e.g. for a new feature or involved bugfix
for an existing release), or a renamed branch, in which case the copy
source is not necessarily the appropriate source to use for a merge.

2) Novice users often (inappropriately) type commands like 'svn merge'
in a (futile) attempt to get help.  In a heavily modified working
copy, having 'svn merge' actually perform a merge is like giving
novice users a stick of dynamite to play with.

* subversion/tests/cmdline/
  (mergeinfo_inheritance_and_discontinuous_ranges): Use
   --merge-sensitive instead of --suggested-source.

* subversion/svn/merge-cmd.c
  (svn_cl__merge): Use opt_state->merge_sensitive instead of suggested_src.

* subversion/svn/cl.h
  (svn_cl__longopt_t): Remove svn_cl__suggested_source_opt (replaced
   by 'g').
  (svn_cl__opt_state_t): Remove suggested_src field (replaced by

* subversion/svn/main.c
  (svn_cl__options): Remove "suggested-source" option, replaced by
   "merge-sensitive" (with help text slightly expanded from what's on
   the merge-sensitive-log branch).
  (svn_cl__cmd_table): Associate the --merge-sensitive option with
   'merge' operations, in lieu of the --suggested-source option.
  (main): Replace handling for the svn_cl__suggested_source_opt option
   with handling for 'g'.

Suggested by: epg

r25112 | dlr | 2007-05-22 18:28:12 -0500 (Tue, 22 May 2007)

Keep 'svn merge' (no arguments) backward compatible to avoid the
situation where a user types 'svn merge' to attempt to get help, and
is unpleasantly surprised by the execution of a merge operation.

* subversion/tests/cmdline/
  (mergeinfo_inheritance_and_discontinuous_ranges): Pass the
   --suggested-source option to the 'svn merge' command.

* subversion/svn/merge-cmd.c
  (svn_cl__merge): Return an error if both a merge source and the
   --suggested-source option are not specified.

* subversion/svn/cl.h
  (svn_cl__longopt_t): Add an svn_cl__suggested_source_opt enum value..
  (svn_cl__opt_state_t): Add a suggested_src boolean field.

* subversion/svn/main.c
  (svn_cl__options): Add a "suggested-source" option.
  (svn_cl__cmd_table): Associate the --suggested-source option with
   'merge' operations.
  (main): Handle the svn_cl__suggested_source_opt option.

Reviewed by: markphip

r25025 | dlr | 2007-05-15 13:17:45 -0500 (Tue, 15 May 2007)

Revert the majority of r22780, on the assumption that the Java <->
native interface has changed so much that any attempt at compatibility
is futile.  Mixing 1.5 JavaHL with 1.4.x native libraries will result
in an UnsatisfiedLinkError.

[ in subversion/bindings/javahl/src/org/tigris/subversion/javahl/ ]

  (SVNClient): Pass null to setConfigDirectory().
  (determineInitialConfigDir, getUserHomeDirectory, getEnv,
   isOSWindows): Remove.
  (setConfigDirectory): Replace JavaDoc with @see to SVNClientInterface.

  (setConfigDirectory): Improve JavaDoc.

  (setConfigDirectory): Replace JavaDoc with @see to SVNClientInterface.

Suggested by: markphip

r24593 | dlr | 2007-04-16 14:36:28 -0500 (Mon, 16 Apr 2007)

JavaHL: Correct 'proplist' implementation altered in r24536, making
the behavior again compatible with pre-1.5.

[ in subversion/bindings/javahl/ ]

* native/ProplistCallback.cpp
  Drop include of svn_path.h.
  (singlePath): Avoid use of svn_path_local_style() for path parameter.

* src/org/tigris/subversion/javahl/tests/
  (testBasicProperties): Leverage fileToSVNPath().
  (fileToSVNPath): Convert paths from local to Subversion-internal

Patch by: markphip
(Tweaked by me.)

r24537 | hwright | 2007-04-11 16:23:41 -0500 (Wed, 11 Apr 2007)

JavaHL: Fix a null pointer error in the proplist thin wrapper.

Patch by: markphip

* subversion/bindings/javahl/src/org/tigris/subversion/javahl/
  (properties): Check for a null pointer before trying to use the property map.

r24536 | hwright | 2007-04-11 16:13:03 -0500 (Wed, 11 Apr 2007)

JavaHL: Localize the path which is being returned via the ProplistCallback.

Found by: markphip

* subversion/bindings/javahl/native/ProplistCallback.cpp
  (singlePath): Use a localized path when calling the Java callback.

r24529 | dlr | 2007-04-11 12:05:50 -0500 (Wed, 11 Apr 2007)

A follow-up to r24510, fixing the semantics of svn_client_list() API
to equate non-recursive with svn_depth_immediates (rather than
svn_depth_files), thus retaining compatibility with previous behavior.

* subversion/libsvn_client/list.c
  (svn_client_list): Explicitly convert RECURSE to depth, rather than
   using the SVN_DEPTH_FROM_RECURSE() macro, which equates
   non-recursive with svn_depth_files.

Found by: markphip

r24517 | dlr | 2007-04-10 15:09:50 -0500 (Tue, 10 Apr 2007)

JavaHL: Fix segfaults when not building with SVN_DEBUG defined.

* subversion/bindings/javahl/native/JNIUtil.cpp
  (handleSVNError): Change data type of local variable "source" to
   const char *, initializing its default value to NULL for use when
   SVN_DEBUG is not defined, or err->file is NULL.  Use more care when
   SVN_DEBUG is defined when constructing the string containing the
   source file and line number.

Found by: pburba
Patch by: pburba

r23960 | hwright | 2007-03-21 12:22:06 -0500 (Wed, 21 Mar 2007)

JavaHL: Use the a native method directly when implementing a couple of wrappers.

Suggested by: markphip

* subversion/bindings/java/javahl/src/org/tigris/subversion/javahl/
  (blame, blame): Use the native blame function directly.

r22780 | dlr | 2006-12-22 11:41:59 -0600 (Fri, 22 Dec 2006)

JavaHL: Try hard to provide an appropriate initial config directory.

While 1.4+ native libraries will Do The Right Thing, mixing 1.3-
native libraries with newer Java bytecode will produce a segfault if a
config directory is not provided.

[ in subversion/bindings/java/javahl/ ]

* src/org/tigris/subversion/javahl/
  (SVNClient): Set the config directory to
   determineInitialConfigDir(), allowing it to be overridden by
  (determineInitialConfigDir): Attempt to determine an initial
   configuration directory, "%APPDATA%\Subversion" on Windows and
   "~/.subversion" on other operating systems.
  (getUserHomeDirectory): Return the absolute path to the current
   user's home directory,
  (getEnv): Attempt to read an environment variable, something which
   is not possible with most JREs (1.5 re-introduced this
  (isOSWindows): Return whether we're running on Windows.

Suggested by: markphip
Review by: markphip

r22728 | dlr | 2006-12-15 17:36:52 -0600 (Fri, 15 Dec 2006)

A follow-up to r22601, adding a diffSummarize() API with support for
peg revisions.

[ in subversion/bindings/java/javahl/ ]

* src/org/tigris/subversion/javahl/
* src/org/tigris/subversion/javahl/
* src/org/tigris/subversion/javahl/
  (diffSummarize): Add new API overload.

* src/org/tigris/subversion/javahl/tests/
  (testDiffSummarize): Test both overloads of the diffSummarize() API.
   Narrow "throws" clause to only the exception types that we actually
   throw.  Leverage assertExpectedDiffSummaries() to perform the
  (assertExpectedDiffSummaries): Diff summary verification code
   factored out of testDiffSummarize().

* native/org_tigris_subversion_javahl_SVNClient.cpp
   Renamed from Java_org_tigris_subversion_javahl_SVNClient_diffSummarize
   (thanks to the way 'javahl' works).
   Add new diff summary API with support for peg revs.

* native/SVNClient.h
* native/SVNClient.cpp
  (diffSummarize): Add new API overload which delegates to

Suggested by: markphip

r22707 | dlr | 2006-12-14 12:09:27 -0600 (Thu, 14 Dec 2006)

A follow-up to r22601, providing compatibility with older JDK

* subversion/libsvn_client/client.h
  (DiffSummary.DiffKind.hashCode): Return member variable "kind"
   directly as the hash code, which is the equivalent of

Suggested by: markphip

r19813 | dlr | 2006-05-25 13:13:55 -0500 (Thu, 25 May 2006)

Disallow use of null arguments to the client credential portion of the
JavaHL API (which previous to r19803 resulted in a segfault and thus a
hard JVM crash), instead throwing an IllegalArgumentException.

[ in subversion/bindings/java/javahl/ ]

* native/JNIUtil.h
  (isExceptionThrown): Update doc string for slight change in
   behavior, where any Throwable set this flag (rather than solely

  (raiseThrowable): New function to create and throw an arbitrary
   java.lang.Throwable instance.

  (throwError): Inlined implementation, which now delegates to

* native/JNIUtil.cpp
  (raiseThrowable): Refactored old throwError() function to be more

* native/org_tigris_subversion_javahl_SVNClient.cpp
   Java_org_tigris_subversion_javahl_SVNClient_password): Throw an
   IllegalArgumentException when a null argument is passed in.

* src/org/tigris/subversion/javahl/
  (username, password): Update JavaDoc.

Review by: djames

r17607 | dlr | 2005-12-02 19:03:28 -0600 (Fri, 02 Dec 2005)

A follow-up to r17604 which extends the version information provided
about the native libraries by the JavaHL bindings.

[in subversion/bindings/java/javahl/]

* native/org_tigris_subversion_javahl_Version.cpp
   Java_org_tigris_subversion_javahl_Version_getPatch): Corrected decl
   specifier in "Signature" portion of the doc string.

   Java_org_tigris_subversion_javahl_Version_getNumberTag): New
   methods which return SVN_VER_TAG and SVN_VER_NUMTAG, respectively.

* src/org/tigris/subversion/javahl/
  (toString): Include tag and number tag in output as done with the
   command-line clients.

  (getTag, getNumberTag): New private methods which return some extra
   textual version data.

Review by: markphip

r17604 | dlr | 2005-12-02 17:27:44 -0600 (Fri, 02 Dec 2005)

Provide version information about the native libraries through the
JavaHL bindings (via introduction of a new Version class).

[in subversion/bindings/java/javahl/]

* native/org_tigris_subversion_javahl_Version.cpp
  A new class which wraps the definitions from svn_version.h, and
  supplies the native implementation for

* src/org/tigris/subversion/javahl/tests/
  (testVersion): A new test for SVNClientInterface.getVersion().

* src/org/tigris/subversion/javahl/
  A new Java class which encapsulates version information about the
  underlying native libraries.  Includes methods with native

* src/org/tigris/subversion/javahl/
* src/org/tigris/subversion/javahl/
* src/org/tigris/subversion/javahl/
  (getVersion): Add new method returning the Version object defined in

* src/org/tigris/subversion/javahl/
  (version): Version information about the underlying native

  (loadNativeLibrary): Refactor to use init()...

  (init): ...a new private method which performs initialization of the
   "version" field and the native library's re-entrace hack.

Patch by: me

r17589 | dlr | 2005-12-01 16:28:38 -0600 (Thu, 01 Dec 2005)

Fix a bug in parsing of the XML responses from mod_dav_svn which
exhibited itself as the concatenation of the href and committed-rev
fields for the value of the committed-rev field when an explicitly
requested resource is out of date.

* subversion/libsvn_ra_dav/fetch.c
  (end_element): When handling ELEM_href (usually something like
   "</D:href>"), assure that the cdata_accum field of the
   report_baton_t * structure is cleared regardless of whether the
   fetch_content is TRUE.  Otherwise, we end up appending the value
   of the next CDATA element encountered while parsing mod_dav_svn's
   response in cdata_handler() to the end of the path from the D:href

Found by: pburba

r17127 | dlr | 2005-11-01 10:48:24 -0600 (Tue, 01 Nov 2005)

* subversion/bindings/java/javahl/src/org/tigris/subversion/javahl/
  (getReposLastCmtRevision): Corrected return type (it's amazing that
   this even compiled).

  (getReposLastCmtRevisionNumber): New method corresponding to
   getReposLastCmtRevision() which returns the last committed revision
   as a primitive.

Patch by: Mark Phippard <>
Review by: me
           Marc Sherman <>

r17066 | dlr | 2005-10-27 16:28:50 -0500 (Thu, 27 Oct 2005)

As SVNClientSynchronized is but a slim wrapper around SVNClient which
synchronizes access to an underlying SVNClient instance, test
SVNClientSynchronized instead of SVNClient, actually testing _both_ as
a side-effect.

[in subversion/bindings/java/javahl/src/]

* org/tigris/subversion/javahl/tests/
  (setUp): Create "client" as an instance of SVNClientSynchronized
   instead of SVNClient.

Patch by: markphip

r17060 | dlr | 2005-10-27 15:32:34 -0500 (Thu, 27 Oct 2005)

Correct implementation of the ASP.Net/admin directory name-related
APIs for the thread-safe JavaHL client.

[in subversion/bindings/java/javahl/src/]

* org/tigris/subversion/javahl/
  (getAdminDirectoryName, isAdminDirectory): Rather than delegating to
   native implementations (which don't exist for this class), delegate
   to the SVNClient instance, wrapped in a synchronized block.

Patch by: markphip

r16854 | dlr | 2005-10-20 12:53:10 -0500 (Thu, 20 Oct 2005)

Expose the svn_wc_get_adm_dir() API via the JavaHL bindings to support
SVN_ASP_DOT_NET_HACK.  Modify JUnit tests to remove hard-coded
assumption about .svn administrative directory name

[in subversion/bindings/java/javahl/]

* native/SVNClient.cpp
  (SVNClient::getAdminDirectoryName): Returns svn_wc_get_adm_dir() as
   a java.lang.String object.

* native/SVNClient.h
  (SVNClient::getAdminDirectoryName): Declaration.

* native/org_tigris_subversion_javahl_SVNClient.cpp
   Exposes SVNClient::getAdminDirectoryName() to Java.

* src/org/tigris/subversion/javahl/
* src/org/tigris/subversion/javahl/
* src/org/tigris/subversion/javahl/
  (getAdminDirectoryName): Add new method to interface, and expose its
   native definition to Java in interface implementations.

* src/org/tigris/subversion/javahl/tests/
  (getAdminDirectoryName): A new method intended to be called after
   setUp() (e.g. as part of test method execution), which returns the
   WC admin directory name, or calls fail() if the dir name cannot be

* src/org/tigris/subversion/javahl/tests/
  (testBasicCleanup): Used SVNTests.getAdminDirectoryName() instead of
   hard-coding the string ".svn".

Patch by: me

r16839 | dlr | 2005-10-19 13:57:27 -0500 (Wed, 19 Oct 2005)

Add support for the SVN_ASP_DOT_NET_HACK env var, and associated
working copy administrative directory name change (detailed at

* subversion/bindings/java/javahl/native/JNIUtil.cpp
  (JNIUtil::JNIInit): On Windows or Cygwin, when the
   SVN_ASP_DOT_NET_HACK environment variable is set, change the WC
   admin dir from its default of ".svn" to "_svn".

Patch by:  philip
Review by: markphip

r16495 | dlr | 2005-10-05 15:26:28 -0500 (Wed, 05 Oct 2005)

Expose the "out of date" and URI fields now available from the
svn_wc_status2_t data type to the JavaHL bindings via its Status

* subversion/bindings/java/javahl/native/SVNClient.cpp
  (SVNClient::createJavaStatus): Add new parameters identifying the
   constructor for the Status class, extract the parameters from the
   svn_wc_status2_t, and pass'em along.  Use the new
   svn_wc_status2_t->url field (rather than
   svn_wc_status2_t->entry->url) for the constructor's "url"

* subversion/bindings/java/javahl/src/org/tigris/subversion/javahl/
  (reposLastCmtRevision, reposLastCmtDate, reposKind,
   reposLastCmtAuthor): New private instance fields in which to store
   any "out of date" information from the repository.

  (Status): Added parameters for initialization of the new instance

  (getUrl): Adjusted doc string for modified behavior of
   SVNClient.cpp, which now uses svn_wc_status2_t->url (rather than

  (getReposLastCmtRevision, getReposLastCmtDate, getReposKind,
   getReposLastCmtAuthor): New accesor methods.

Review by: markphip

r16326 | lundblad | 2005-09-28 11:17:03 -0500 (Wed, 28 Sep 2005)

* www/svn_1.3_releasenotes.html:
* notes/asp-dot-net-hack.txt:
  Say that the envvar for the ASP.NET hack can be set to any value and that
  the admin dir name will always be changed to _svn.

Suggested by: markphip

r15888 | dlr | 2005-08-23 15:58:05 -0500 (Tue, 23 Aug 2005)

Remove work-around for special handling for 'svn cat' of BASE
revisions, the need for which was obviated in Subversion 1.2.0 when
the bug requiring a connection to the repository was fixed (issue

Patch by: me
Suggested by: Mark Phippard

* subversion/bindings/java/javahl/native/SVNClient.cpp
  (createReadStream): Remove special handling for BASE revision.
   They're now treated like any other revision, and only the working
   copy revision gets special treatment.

r9987 | ringstrom | 2004-06-14 15:32:17 -0500 (Mon, 14 Jun 2004)

Fix compilation on OS/400.

Patch by: Mark Phippard <>

* subversion/svnserve/main.c
  (run_mode): Remove comma after last enum.