You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ar...@apache.org on 2011/11/21 08:08:07 UTC

svn commit: r1204374 [2/29] - in /subversion/branches/svn-bisect: ./ build/ build/ac-macros/ build/generator/ build/generator/templates/ build/win32/ contrib/client-side/ contrib/client-side/emacs/ notes/ notes/wc-ng/ subversion/bindings/javahl/native/...

Modified: subversion/branches/svn-bisect/notes/moves
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/notes/moves?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/notes/moves (original)
+++ subversion/branches/svn-bisect/notes/moves Mon Nov 21 07:07:56 2011
@@ -1,20 +1,20 @@
 
- =========================================================================
- This file sketches ideas about how we could improve move support in wc-ng
- =========================================================================
+ =======================
+ Moves in Subversion 1.8
+ =======================
 
 This file purposefully talks about 'moves' rather than 'renames'.
 This isn't about true renames as requested in issue #898.
-Rather, these ideas keep the add+delete concept while trying to make
-moves behave more in a way that one would expect if true renames were
-implemented, as requested in issue #3631.
-
-These ideas only cover local (client-side) moves in the working copy.
-They attempt to reuse as much existing code as possible, so new
-functionality will be implemented as part of existing copy/delete
-code paths unless doing so is not feasible.
+Rather, we keep the add+delete concept while trying to make moves behave
+more in a way that one would expect if true renames were implemented,
+as requested in issue #3631. See also the umbrella issue #3630.
+
+So far the changes only cover local (client-side) moves in the working copy.
+We reuse as much existing code as possible, so new functionality is
+implemented as part of existing copy/delete code paths unless doing
+so is not feasible.
 
-One significant change from how copies work is that moves will be tracked
+One significant change from how copies work is that moves are tracked
 both ways, i.e. one can locate the add-half of a move if given the
 delete-half, and locate the delete-half if given the add-half.
 
@@ -30,17 +30,17 @@ The goals are:
     when talking to the server.
 
 
-
 Notes regarding specific layers of Subversion follow below.
 
 
 == wc.db ==
 
-There already exist columns in the NODES table we use to differentiate
+The following columns in the NODES table are used to differentiate
 moves from copies:
 
   /* Boolean value, specifying if this node was moved here (rather than just
-     copied). The source of the move is specified in copyfrom_*.  */
+     copied). The source of the move is implied by a different node with
+     a moved_to column pointing at this node. */
   moved_here  INTEGER,
 
   /* If the underlying node was moved away (rather than just deleted), this
@@ -48,30 +48,39 @@ moves from copies:
      This is set only on the root of a move, and is NULL for all children.
 
      Note that moved_to never refers to *this* node. It always refers
-     to the "underlying" node, whether that is BASE or a child node
-     implied from a parent's move/copy.  */
+     to the "underlying" node in the BASE tree. A non-NULL moved_to column
+     is only valid in rows where op_depth == 0. */
   moved_to  TEXT,
 
-These will be used as described in their docstrings.
+Some new queries were added which use these columns:
 
+  STMT_SELECT_MOVED_FROM_RELPATH
+  STMT_UPDATE_MOVED_TO_RELPATH
+  STMT_CLEAR_MOVED_TO_RELPATH
+  STMT_CLEAR_MOVED_TO_RELPATH_RECURSIVE
+  STMT_SELECT_MOVED_HERE_CHILDREN
+
+More queries might be needed (TBD).
 
-== libsvn_wc ==
 
-Various wc_db and svn_wc interfaces will be extended for moves.
-New interfaces will be modeled after (and share code with) their
-existing copy or delete equivalents as much as possible.
-See r1146119 for an example of how existing code will be reused.
+== libsvn_wc ==
 
-Some existing interfaces will be extended, e.g. the _scan_addition()
-and _scan_deletion() interfaces will be extended to differentiate
+In the internal wc_db API, the _scan_addition() and _scan_deletion()
+interfaces were extended to make use of new DB queries to differentiate
 moved nodes from copied, added, and deleted nodes.
 
-### gstein: note that scan_addition() already returns status_moved_here,
-###   and scan_deletion() returns a MOVED_TO_ABSPATH. these functions
-###   should already do what you're asking (with bitrot and "untested"
-###   caveats since I first implemented them).
+Two functions were built on top of the wc_db API and added to the
+private libsvn_wc API:
+  svn_wc__node_was_moved_away() provides, for a given local_abspath:
+    - the moved_to abspath within the working copy
+    - the abspath of the op-root of the copy operation that created
+      the node at the moved_to abspath
+  svn_wc__node_was_moved_here() provides, for a given local_abspath:
+    - the moved_from abspath within the working copy
+    - the abspath of the op-root of the delete operation that deleted
+      the node at the moved_from abspath
 
-There might be some public API changes (TBD).
+More API changes might be needed (TBD).
 
 We might require a working copy upgrade when going from 1.7 to 1.8,
 and only allow new move functionality to be used with 1.8 working copies.
@@ -79,40 +88,51 @@ and only allow new move functionality to
 
 == libsvn_client ==
 
-This layer already uses existing svn_wc move APIs. For those callers
-APIs changes will hopefully be fairly transparent, apart from changes
-that enhance behaviour of move operations.
-
-Some code that is expected to change behaviour:
-
- - commit: Commit will refuse to commit anything if only one half of
-    a move appears in the commit target list, or if only one half of
-    a move is picked up by recursion.
-
- - revert: Revert will by default revert both nodes involved in a move,
-    independent of which half of the move is mentioned in the revert
-    target list. If only one half of a move is picked up by recursion,
-    revert will refuse to revert anything.
-    If the delete-half has been replaced by another node after
-    it has been deleted, revert will require both the add and delete
-    half to appear in the revert target list or be picked up by recursion
-    (i.e. the node replacing the delete-half has to be reverted explicitly
-     or via recursion).
-
- - status: Status will provide information about both halfs of a move,
-    in a way that allows the user to tell that both halfs belong to
-    the same move operation.
-
- - update/merge: Update and Merge will use move information to auto-resolve
-    the "local move vs. incoming edit" tree conflict scenario.
-
- - diff: Diff will use move information to generate 'rename from' headers
-    when the --git option is used.
+This layer already uses 1.7 and earlier svn_wc move APIs. For callers
+of such APIs, changes will hopefully be fairly transparent apart from
+changes that enhance behaviour of move operations.
+
+Interfaces which have changed behaviour:
+
+ svn_client_commit: Commit will refuse to commit anything if only one
+   half of a move appears in the commit target list, or if only one half of
+   a move is picked up by recursion.
+
+ svn_client_revert: The behaviour of this API is not changed, but it
+   is worth noting how it behaves for moves:
+   - If both halves of a move are among the revert targets (either by
+     virtue of being listed explicitly, or by being picked up during
+     recursion), the entire move is reverted.
+   - If only one half of a move is among the revert targets, the other
+     half will be transformed into a normal copy or delete.
+     See http://svn.haxx.se/dev/archive-2011-08/0239.shtml for rationale.
+
+ - svn_client_status: Status provides the moved-to abspath for a moved-away
+     nodes, and the moved-from abspath for a moved-here node.
+     Note that, mostly due to performance reasons, only information about
+     roots of moves is provided. Children of moved nodes aren't marked as such.
+
+ - svn_client_info: Like status, except that it also provides move
+     information about children of moved nodes.
+
+ - svn_client_patch: Patch uses move information to apply changes to files
+     which have been moved locally.
+
+ - svn_client_update/svn_client_merge: Update and Merge use move
+    information to auto-resolve the "local move vs. incoming edit"
+    tree conflict scenario.
+
+Interfaces which have not changed behaviour yet but might change in 1.8.0:
+
+ - svn_client_update/svn_client_merge: Update and Merge might use move
+    information to auto-resolve some additional tree conflict scenarios.
+
+ - diff: Diff might use move information to generate 'rename from' headers
+    when the --git option is used. (A related problem is making diff use
+    correct copyfrom in repos-repos diffs, which is not trivial.)
 
- - patch: Patch will use move information to apply changes to files
-    which have been moved locally.
+Several public APIs may still be bumped as their behaviour changes.
 
-Several public APIs may be bumped as their behaviour changes.
 For backwards compatibility, APIs released prior to 1.8 will continue
 to treat moves just like 1.7 and earlier releases did. (However, see
 also the note on working copy upgrades above, which might affect to
@@ -121,15 +141,15 @@ what degree the APIs need to stay compat
 
 == svn ==
 
-The svn client will present moves similar to but distinct from copy
-operations. E.g. it might show moves like this:
+The svn client presents moves similar to but distinct from copy operations. 
+
+svn status shows move roots:
 
 $ svn status
 A  +    foo
-   > moved from 'bar'
+        > moved from 'bar'
 D       bar
-   > moved to 'foo'
+        > moved to 'foo'
 $
 
-(If the above is done, we should also show copyfrom for normal copies
-this way, but as "copied from '%s'")
+svn info shows additional Moved-To: and Moved-From: lines for any moved node.

Modified: subversion/branches/svn-bisect/notes/wc-ng/transitions
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/notes/wc-ng/transitions?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/notes/wc-ng/transitions (original)
+++ subversion/branches/svn-bisect/notes/wc-ng/transitions Mon Nov 21 07:07:56 2011
@@ -19,7 +19,7 @@ in addition to <none> when the WORKING_N
 ### A comment in 'wc-metadata.sql' says not all of 6 values are
 allowed in WORKING, but it may be wrong.  A wc-to-wc copy could have
 absent and excluded presence values in the BASE source, does the copy
-put those values into the working tree?  An url-to-wc copy could get
+put those values into the working tree?  A url-to-wc copy could get
 an authz failure part way through, does that result in an absent node?
 There is currently no UI to do a sparse url-to-wc copy, but if there
 was then would that result in an excluded node?

Modified: subversion/branches/svn-bisect/subversion/bindings/javahl/native/Array.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/javahl/native/Array.cpp?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/javahl/native/Array.cpp (original)
+++ subversion/branches/svn-bisect/subversion/bindings/javahl/native/Array.cpp Mon Nov 21 07:07:56 2011
@@ -33,16 +33,13 @@
 
 Array::~Array()
 {
-  if (m_objectArray != NULL)
-    {
-      for (std::vector<jobject>::iterator it = m_objects.begin();
-            it < m_objects.end(); ++it)
-        {
-          JNIUtil::getEnv()->DeleteLocalRef(*it);
-        }
-
-      JNIUtil::getEnv()->DeleteLocalRef(m_objectArray);
-    }
+  /* We don't clean up our Java object here, because this destructor may run
+     *after* a call to PopLocalFrame().  If so, we would be deleting references
+     twice, which leads to all kinds of problems.
+
+     Instead, we intentionally "leak" these references, knowing that a call
+     to PopLocalFrame() will clean them up, or, in the worse case, the JVM
+     will clean them up when it returns from the JNI code. */
 }
 
 const std::vector<jobject> &Array::vector(void) const

Modified: subversion/branches/svn-bisect/subversion/bindings/javahl/native/CreateJ.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/javahl/native/CreateJ.cpp?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/javahl/native/CreateJ.cpp (original)
+++ subversion/branches/svn-bisect/subversion/bindings/javahl/native/CreateJ.cpp Mon Nov 21 07:07:56 2011
@@ -533,11 +533,16 @@ CreateJ::Status(svn_wc_context_t *wc_ctx
       || text_status == svn_wc_status_conflicted)
     text_status = status->text_status;
 
+  enum svn_wc_status_kind repos_text_status = status->repos_node_status;
+
+  if (repos_text_status == svn_wc_status_modified
+      || repos_text_status == svn_wc_status_conflicted)
+    repos_text_status = status->repos_text_status;
+
   jboolean jIsConflicted = (status->conflicted == 1) ? JNI_TRUE : JNI_FALSE;
   jobject jTextType = EnumMapper::mapStatusKind(text_status);
   jobject jPropType = EnumMapper::mapStatusKind(status->prop_status);
-  jobject jRepositoryTextType = EnumMapper::mapStatusKind(
-                                                  status->repos_text_status);
+  jobject jRepositoryTextType = EnumMapper::mapStatusKind(repos_text_status);
   jobject jRepositoryPropType = EnumMapper::mapStatusKind(
                                                   status->repos_prop_status);
   jboolean jIsCopied = (status->copied == 1) ? JNI_TRUE: JNI_FALSE;
@@ -871,7 +876,8 @@ CreateJ::CommitInfo(const svn_commit_inf
   if (midCT == 0)
     {
       midCT = env->GetMethodID(clazz, "<init>",
-                               "(JLjava/lang/String;Ljava/lang/String;)V");
+                               "(JLjava/lang/String;Ljava/lang/String;"
+                               "Ljava/lang/String;Ljava/lang/String;)V");
       if (JNIUtil::isJavaExceptionThrown() || midCT == 0)
         POP_AND_RETURN_NULL;
     }
@@ -886,8 +892,18 @@ CreateJ::CommitInfo(const svn_commit_inf
 
   jlong jRevision = commit_info->revision;
 
+  jstring jPostCommitError = JNIUtil::makeJString(
+                                            commit_info->post_commit_err);
+  if (JNIUtil::isJavaExceptionThrown())
+    POP_AND_RETURN_NULL;
+
+  jstring jReposRoot = JNIUtil::makeJString(commit_info->repos_root);
+  if (JNIUtil::isJavaExceptionThrown())
+    POP_AND_RETURN_NULL;
+
   // call the Java method
-  jobject jInfo = env->NewObject(clazz, midCT, jRevision, jDate, jAuthor);
+  jobject jInfo = env->NewObject(clazz, midCT, jRevision, jDate, jAuthor,
+                                 jPostCommitError, jReposRoot);
   if (JNIUtil::isJavaExceptionThrown())
     POP_AND_RETURN_NULL;
 

Modified: subversion/branches/svn-bisect/subversion/bindings/javahl/native/File.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/javahl/native/File.cpp?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/javahl/native/File.cpp (original)
+++ subversion/branches/svn-bisect/subversion/bindings/javahl/native/File.cpp Mon Nov 21 07:07:56 2011
@@ -79,8 +79,13 @@ const char *File::getAbsPath()
 
       stringHolder = new JNIStringHolder(jabsolutePath);
 
+      /* We don't remove the local ref for jabsolutePath here, because
+         JNIStringHolder expects that ref to be valid for the life of
+         the object, which in this case is allocated on the stack.
+         
+         So we just "leak" the reference, and it will get cleaned up when
+         we eventually exit back to Java-land. */
       env->DeleteLocalRef(clazz);
-      env->DeleteLocalRef(jabsolutePath);
     }
 
   return static_cast<const char *>(*stringHolder);

Modified: subversion/branches/svn-bisect/subversion/bindings/javahl/native/SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/javahl/native/SVNClient.cpp?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/javahl/native/SVNClient.cpp (original)
+++ subversion/branches/svn-bisect/subversion/bindings/javahl/native/SVNClient.cpp Mon Nov 21 07:07:56 2011
@@ -898,7 +898,9 @@ void SVNClient::propertySetLocal(Targets
                                          ctx, subPool.getPool()), );
 }
 
-void SVNClient::propertySetRemote(const char *path, const char *name,
+void SVNClient::propertySetRemote(const char *path, long base_rev,
+                                  const char *name,
+                                  CommitMessage *message,
                                   JNIByteArray &value, bool force,
                                   RevpropTable &revprops,
                                   CommitCallback *callback)
@@ -916,12 +918,12 @@ void SVNClient::propertySetRemote(const 
     Path intPath(path, subPool);
     SVN_JNI_ERR(intPath.error_occured(), );
 
-    svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
+    svn_client_ctx_t *ctx = context.getContext(message, subPool);
     if (ctx == NULL)
         return;
 
     SVN_JNI_ERR(svn_client_propset_remote(name, val, intPath.c_str(),
-                                          force, SVN_INVALID_REVNUM,
+                                          force, base_rev,
                                           revprops.hash(subPool),
                                           CommitCallback::callback, callback,
                                           ctx, subPool.getPool()), );
@@ -930,12 +932,11 @@ void SVNClient::propertySetRemote(const 
 void SVNClient::diff(const char *target1, Revision &revision1,
                      const char *target2, Revision &revision2,
                      Revision *pegRevision, const char *relativeToDir,
-                     const char *outfileName, svn_depth_t depth,
+                     OutputStream &outputStream, svn_depth_t depth,
                      StringArray &changelists,
                      bool ignoreAncestry, bool noDiffDelete, bool force,
                      bool showCopiesAsAdds)
 {
-    svn_error_t *err;
     SVN::Pool subPool(pool);
     const char *c_relToDir = relativeToDir ?
       svn_dirent_canonicalize(relativeToDir, subPool.getPool()) :
@@ -946,7 +947,6 @@ void SVNClient::diff(const char *target1
     if (pegRevision == NULL)
         SVN_JNI_NULL_PTR_EX(target2, "target2", );
 
-    SVN_JNI_NULL_PTR_EX(outfileName, "outfileName", );
     svn_client_ctx_t *ctx = context.getContext(NULL, subPool);
     if (ctx == NULL)
         return;
@@ -954,26 +954,13 @@ void SVNClient::diff(const char *target1
     Path path1(target1, subPool);
     SVN_JNI_ERR(path1.error_occured(), );
 
-    apr_file_t *outfile = NULL;
-    apr_status_t rv =
-        apr_file_open(&outfile,
-                      svn_dirent_internal_style(outfileName,
-                                                subPool.getPool()),
-                      APR_CREATE|APR_WRITE|APR_TRUNCATE , APR_OS_DEFAULT,
-                      subPool.getPool());
-    if (rv != APR_SUCCESS)
-    {
-        SVN_JNI_ERR(svn_error_createf(rv, NULL, _("Cannot open file '%s'"),
-                                      outfileName), );
-    }
-
     // We don't use any options to diff.
     apr_array_header_t *diffOptions = apr_array_make(subPool.getPool(),
                                                      0, sizeof(char *));
 
     if (pegRevision)
     {
-        err = svn_client_diff_peg5(diffOptions,
+        SVN_JNI_ERR(svn_client_diff_peg6(diffOptions,
                                    path1.c_str(),
                                    pegRevision->revision(),
                                    revision1.revision(),
@@ -986,26 +973,20 @@ void SVNClient::diff(const char *target1
                                    force,
                                    FALSE,
                                    SVN_APR_LOCALE_CHARSET,
-                                   outfile,
+                                   outputStream.getStream(subPool),
                                    NULL /* error file */,
                                    changelists.array(subPool),
                                    ctx,
-                                   subPool.getPool());
+                                   subPool.getPool()),
+                    );
     }
     else
     {
         // "Regular" diff (without a peg revision).
         Path path2(target2, subPool);
-        err = path2.error_occured();
-        if (err)
-        {
-            if (outfile)
-                goto cleanup;
-
-            SVN_JNI_ERR(err, );
-        }
+        SVN_JNI_ERR(path2.error_occured(), );
 
-        err = svn_client_diff5(diffOptions,
+        SVN_JNI_ERR(svn_client_diff6(diffOptions,
                                path1.c_str(),
                                revision1.revision(),
                                path2.c_str(),
@@ -1018,47 +999,36 @@ void SVNClient::diff(const char *target1
                                force,
                                FALSE,
                                SVN_APR_LOCALE_CHARSET,
-                               outfile,
-                               NULL /* error file */,
+                               outputStream.getStream(subPool),
+                               NULL /* error stream */,
                                changelists.array(subPool),
                                ctx,
-                               subPool.getPool());
-    }
-
-cleanup:
-    rv = apr_file_close(outfile);
-    if (rv != APR_SUCCESS)
-    {
-        svn_error_clear(err);
-
-        SVN_JNI_ERR(svn_error_createf(rv, NULL, _("Cannot close file '%s'"),
-                                      outfileName), );
+                               subPool.getPool()),
+                    );
     }
-
-    SVN_JNI_ERR(err, );
 }
 
 void SVNClient::diff(const char *target1, Revision &revision1,
                      const char *target2, Revision &revision2,
-                     const char *relativeToDir, const char *outfileName,
+                     const char *relativeToDir, OutputStream &outputStream,
                      svn_depth_t depth, StringArray &changelists,
                      bool ignoreAncestry, bool noDiffDelete, bool force,
                      bool showCopiesAsAdds)
 {
     diff(target1, revision1, target2, revision2, NULL, relativeToDir,
-         outfileName, depth, changelists, ignoreAncestry, noDiffDelete, force,
+         outputStream, depth, changelists, ignoreAncestry, noDiffDelete, force,
          showCopiesAsAdds);
 }
 
 void SVNClient::diff(const char *target, Revision &pegRevision,
                      Revision &startRevision, Revision &endRevision,
-                     const char *relativeToDir, const char *outfileName,
+                     const char *relativeToDir, OutputStream &outputStream,
                      svn_depth_t depth, StringArray &changelists,
                      bool ignoreAncestry, bool noDiffDelete, bool force,
                      bool showCopiesAsAdds)
 {
     diff(target, startRevision, NULL, endRevision, &pegRevision,
-         relativeToDir, outfileName, depth, changelists,
+         relativeToDir, outputStream, depth, changelists,
          ignoreAncestry, noDiffDelete, force, showCopiesAsAdds);
 }
 

Modified: subversion/branches/svn-bisect/subversion/bindings/javahl/native/SVNClient.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/javahl/native/SVNClient.h?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/javahl/native/SVNClient.h (original)
+++ subversion/branches/svn-bisect/subversion/bindings/javahl/native/SVNClient.h Mon Nov 21 07:07:56 2011
@@ -81,7 +81,8 @@ class SVNClient :public SVNBase
   void propertySetLocal(Targets &targets, const char *name, JNIByteArray &value,
                         svn_depth_t depth, StringArray &changelists,
                         bool force);
-  void propertySetRemote(const char *path, const char *name,
+  void propertySetRemote(const char *path, long base_rev, const char *name,
+                         CommitMessage *message,
                          JNIByteArray &value, bool force,
                          RevpropTable &revprops, CommitCallback *callback);
   void properties(const char *path, Revision &revision,
@@ -173,13 +174,13 @@ class SVNClient :public SVNBase
                          Revision &revision, Revision &pegRevision);
   void diff(const char *target1, Revision &revision1,
             const char *target2, Revision &revision2,
-            const char *relativeToDir, const char *outfileName,
+            const char *relativeToDir, OutputStream &outputStream,
             svn_depth_t depth, StringArray &changelists,
             bool ignoreAncestry, bool noDiffDelete, bool force,
             bool showCopiesAsAdds);
   void diff(const char *target, Revision &pegevision,
             Revision &startRevision, Revision &endRevision,
-            const char *relativeToDir, const char *outfileName,
+            const char *relativeToDir, OutputStream &outputStream,
             svn_depth_t depth, StringArray &changelists,
             bool ignoreAncestry, bool noDiffDelete, bool force,
             bool showCopiesAsAdds);
@@ -208,7 +209,8 @@ class SVNClient :public SVNBase
   void diff(const char *target1, Revision &revision1,
             const char *target2, Revision &revision2,
             Revision *pegRevision, const char *relativeToDir,
-            const char *outfileName, svn_depth_t depth, StringArray &changelists,
+            OutputStream &outputStream, svn_depth_t depth,
+            StringArray &changelists,
             bool ignoreAncestry, bool noDiffDelete, bool force,
             bool showCopiesAsAdds);
 

Modified: subversion/branches/svn-bisect/subversion/bindings/javahl/native/SVNRepos.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/javahl/native/SVNRepos.cpp?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/javahl/native/SVNRepos.cpp (original)
+++ subversion/branches/svn-bisect/subversion/bindings/javahl/native/SVNRepos.cpp Mon Nov 21 07:07:56 2011
@@ -678,7 +678,6 @@ jobject SVNRepos::lslocks(File &path, sv
 void SVNRepos::rmlocks(File &path, StringArray &locks)
 {
   SVN::Pool requestPool;
-  apr_pool_t *pool = requestPool.getPool();
   svn_repos_t *repos;
   svn_fs_t *fs;
   svn_fs_access_t *access;
@@ -700,10 +699,11 @@ void SVNRepos::rmlocks(File &path, Strin
     apr_uid_t uid;
     apr_gid_t gid;
     char *un;
-    if (apr_uid_current (&uid, &gid, pool) == APR_SUCCESS &&
-        apr_uid_name_get (&un, uid, pool) == APR_SUCCESS)
+    if (apr_uid_current (&uid, &gid, requestPool.getPool()) == APR_SUCCESS &&
+        apr_uid_name_get (&un, uid, requestPool.getPool()) == APR_SUCCESS)
       {
-        svn_error_t *err = svn_utf_cstring_to_utf8(&username, un, pool);
+        svn_error_t *err = svn_utf_cstring_to_utf8(&username, un,
+                                                   requestPool.getPool());
         svn_error_clear (err);
         if (err)
           username = "administrator";
@@ -711,7 +711,7 @@ void SVNRepos::rmlocks(File &path, Strin
   }
 
   /* Create an access context describing the current user. */
-  SVN_JNI_ERR(svn_fs_create_access(&access, username, pool), );
+  SVN_JNI_ERR(svn_fs_create_access(&access, username, requestPool.getPool()), );
 
   /* Attach the access context to the filesystem. */
   SVN_JNI_ERR(svn_fs_set_access(fs, access), );

Modified: subversion/branches/svn-bisect/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp (original)
+++ subversion/branches/svn-bisect/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp Mon Nov 21 07:07:56 2011
@@ -922,8 +922,9 @@ Java_org_apache_subversion_javahl_SVNCli
 
 JNIEXPORT void JNICALL
 Java_org_apache_subversion_javahl_SVNClient_propertySetRemote
-(JNIEnv *env, jobject jthis, jstring jpath, jstring jname,
- jbyteArray jvalue, jboolean jforce, jobject jrevpropTable, jobject jcallback)
+(JNIEnv *env, jobject jthis, jstring jpath, jlong jbaseRev, jstring jname,
+ jbyteArray jval, jobject jmessage, jboolean jforce, jobject jrevpropTable,
+ jobject jcallback)
 {
   JNIEntry(SVNClient, propertySet);
   SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -940,7 +941,11 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  JNIByteArray value(jvalue);
+  CommitMessage message(jmessage);
+  if (JNIUtil::isExceptionThrown())
+    return;
+
+  JNIByteArray value(jval);
   if (JNIUtil::isExceptionThrown())
     return;
 
@@ -949,14 +954,15 @@ Java_org_apache_subversion_javahl_SVNCli
     return;
 
   CommitCallback callback(jcallback);
-  cl->propertySetRemote(path, name, value, jforce ? true:false, revprops,
-                        jcallback ? &callback : NULL);
+  cl->propertySetRemote(path, jbaseRev, name, &message, value,
+                        jforce ? true:false,
+                        revprops, jcallback ? &callback : NULL);
 }
 
 JNIEXPORT void JNICALL
 Java_org_apache_subversion_javahl_SVNClient_propertySetLocal
 (JNIEnv *env, jobject jthis, jobject jtargets, jstring jname,
- jbyteArray jvalue, jobject jdepth, jobject jchangelists, jboolean jforce)
+ jbyteArray jval, jobject jdepth, jobject jchangelists, jboolean jforce)
 {
   JNIEntry(SVNClient, propertySet);
   SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -975,7 +981,7 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  JNIByteArray value(jvalue);
+  JNIByteArray value(jval);
   if (JNIUtil::isExceptionThrown())
     return;
 
@@ -1038,7 +1044,7 @@ Java_org_apache_subversion_javahl_SVNCli
 JNIEXPORT void JNICALL
 Java_org_apache_subversion_javahl_SVNClient_setRevProperty
 (JNIEnv *env, jobject jthis, jstring jpath, jstring jname, jobject jrevision,
- jstring jvalue, jstring joriginalValue, jboolean jforce)
+ jstring jval, jstring joriginalValue, jboolean jforce)
 {
   JNIEntry(SVNClient, setRevProperty);
   SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -1059,7 +1065,7 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  JNIStringHolder value(jvalue);
+  JNIStringHolder value(jval);
   if (JNIUtil::isExceptionThrown())
     return;
 
@@ -1165,10 +1171,10 @@ JNIEXPORT void JNICALL Java_org_apache_s
 }
 
 JNIEXPORT void JNICALL
-Java_org_apache_subversion_javahl_SVNClient_diff__Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Revision_2Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Revision_2Ljava_lang_String_2Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Depth_2Ljava_util_Collection_2ZZZZ
+Java_org_apache_subversion_javahl_SVNClient_diff__Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Revision_2Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Revision_2Ljava_lang_String_2Ljava_io_OutputStream_2Lorg_apache_subversion_javahl_types_Depth_2Ljava_util_Collection_2ZZZZ
 (JNIEnv *env, jobject jthis, jstring jtarget1, jobject jrevision1,
  jstring jtarget2, jobject jrevision2, jstring jrelativeToDir,
- jstring joutfileName, jobject jdepth, jobject jchangelists,
+ jobject jstream, jobject jdepth, jobject jchangelists,
  jboolean jignoreAncestry, jboolean jnoDiffDeleted, jboolean jforce,
  jboolean jcopiesAsAdds)
 {
@@ -1199,7 +1205,7 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  JNIStringHolder outfileName(joutfileName);
+  OutputStream dataOut(jstream);
   if (JNIUtil::isExceptionThrown())
     return;
 
@@ -1207,7 +1213,7 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  cl->diff(target1, revision1, target2, revision2, relativeToDir, outfileName,
+  cl->diff(target1, revision1, target2, revision2, relativeToDir, dataOut,
            EnumMapper::toDepth(jdepth), changelists,
            jignoreAncestry ? true:false,
            jnoDiffDeleted ? true:false, jforce ? true:false,
@@ -1215,10 +1221,10 @@ Java_org_apache_subversion_javahl_SVNCli
 }
 
 JNIEXPORT void JNICALL
-Java_org_apache_subversion_javahl_SVNClient_diff__Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Revision_2Lorg_apache_subversion_javahl_types_Revision_2Lorg_apache_subversion_javahl_types_Revision_2Ljava_lang_String_2Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Depth_2Ljava_util_Collection_2ZZZZ
+Java_org_apache_subversion_javahl_SVNClient_diff__Ljava_lang_String_2Lorg_apache_subversion_javahl_types_Revision_2Lorg_apache_subversion_javahl_types_Revision_2Lorg_apache_subversion_javahl_types_Revision_2Ljava_lang_String_2Ljava_io_OutputStream_2Lorg_apache_subversion_javahl_types_Depth_2Ljava_util_Collection_2ZZZZ
 (JNIEnv *env, jobject jthis, jstring jtarget, jobject jpegRevision,
  jobject jstartRevision, jobject jendRevision, jstring jrelativeToDir,
- jstring joutfileName, jobject jdepth, jobject jchangelists,
+ jobject jstream, jobject jdepth, jobject jchangelists,
  jboolean jignoreAncestry, jboolean jnoDiffDeleted, jboolean jforce,
  jboolean jcopiesAsAdds)
 {
@@ -1245,7 +1251,7 @@ Java_org_apache_subversion_javahl_SVNCli
   if (JNIUtil::isExceptionThrown())
     return;
 
-  JNIStringHolder outfileName(joutfileName);
+  OutputStream dataOut(jstream);
   if (JNIUtil::isExceptionThrown())
     return;
 
@@ -1258,7 +1264,7 @@ Java_org_apache_subversion_javahl_SVNCli
     return;
 
   cl->diff(target, pegRevision, startRevision, endRevision, relativeToDir,
-           outfileName, EnumMapper::toDepth(jdepth), changelists,
+           dataOut, EnumMapper::toDepth(jdepth), changelists,
            jignoreAncestry ? true:false,
            jnoDiffDeleted ? true:false, jforce ? true:false,
            jcopiesAsAdds ? true:false);

Modified: subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitInfo.java
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitInfo.java?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitInfo.java (original)
+++ subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/apache/subversion/javahl/CommitInfo.java Mon Nov 21 07:07:56 2011
@@ -50,13 +50,21 @@ public class CommitInfo implements java.
     /** the author of the revision */
     String author;
 
+    /** post commit error (or NULL) */
+    String postCommitError;
+
+    /** repos root (or NULL) */
+    String reposRoot;
+
     /** This constructor will be only called from the jni code.  */
-    public CommitInfo(long rev, String d, String a)
+    public CommitInfo(long rev, String d, String a, String pce, String rr)
             throws java.text.ParseException
     {
         revision = rev;
         date = (new LogDate(d)).getDate();
         author = a;
+        postCommitError = pce;
+        reposRoot = rr;
     }
 
     /**
@@ -82,4 +90,20 @@ public class CommitInfo implements java.
     {
         return author;
     }
+
+    /**
+     * return any post commit error for the commit
+     */
+    public String getPostCommitError()
+    {
+        return postCommitError;
+    }
+
+    /**
+     * return the repos root
+     */
+    public String getReposRoot()
+    {
+        return reposRoot;
+    }
 }

Modified: subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java (original)
+++ subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java Mon Nov 21 07:07:56 2011
@@ -84,7 +84,7 @@ public interface ISVNClient
             throws ClientException;
 
     /**
-     * Lists the directory entries of an url on the server.
+     * Lists the directory entries of a url on the server.
      * @param url             the url to list
      * @param revision        the revision to list
      * @param pegRevision     the revision to interpret url
@@ -524,6 +524,13 @@ public interface ISVNClient
      * @throws ClientException
      */
     void diff(String target1, Revision revision1, String target2,
+              Revision revision2, String relativeToDir, OutputStream outStream,
+              Depth depth, Collection<String> changelists,
+              boolean ignoreAncestry, boolean noDiffDeleted, boolean force,
+              boolean copiesAsAdds)
+            throws ClientException;
+
+    void diff(String target1, Revision revision1, String target2,
               Revision revision2, String relativeToDir, String outFileName,
               Depth depth, Collection<String> changelists,
               boolean ignoreAncestry, boolean noDiffDeleted, boolean force,
@@ -548,6 +555,14 @@ public interface ISVNClient
      * @throws ClientException
      */
     void diff(String target, Revision pegRevision, Revision startRevision,
+              Revision endRevision, String relativeToDir,
+              OutputStream outStream,
+              Depth depth, Collection<String> changelists,
+              boolean ignoreAncestry, boolean noDiffDeleted, boolean force,
+              boolean copiesAsAdds)
+            throws ClientException;
+
+    void diff(String target, Revision pegRevision, Revision startRevision,
               Revision endRevision, String relativeToDir, String outFileName,
               Depth depth, Collection<String> changelists,
               boolean ignoreAncestry, boolean noDiffDeleted, boolean force,
@@ -649,7 +664,8 @@ public interface ISVNClient
                           boolean force)
             throws ClientException;
 
-    void propertySetRemote(String path, String name, byte[] value,
+    void propertySetRemote(String path, long baseRev, String name,
+                           byte[] value, CommitMessageCallback handler,
                            boolean force, Map<String, String> revpropTable,
                            CommitCallback callback)
             throws ClientException;

Modified: subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java (original)
+++ subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java Mon Nov 21 07:07:56 2011
@@ -27,6 +27,8 @@ import org.apache.subversion.javahl.call
 import org.apache.subversion.javahl.types.*;
 
 import java.io.OutputStream;
+import java.io.FileOutputStream;
+import java.io.FileNotFoundException;
 import java.io.ByteArrayOutputStream;
 
 import java.util.Collection;
@@ -264,17 +266,53 @@ public class SVNClient implements ISVNCl
                                        LogMessageCallback callback)
         throws ClientException;
 
+    public void diff(String target1, Revision revision1, String target2,
+                     Revision revision2, String relativeToDir,
+                     String outFileName, Depth depth,
+                     Collection<String> changelists,
+                     boolean ignoreAncestry, boolean noDiffDeleted,
+                     boolean force, boolean copiesAsAdds)
+            throws ClientException
+    {
+        try {
+            OutputStream stream = new FileOutputStream(outFileName);
+            diff(target1, revision1, target2, revision2, relativeToDir,
+                 stream, depth, changelists, ignoreAncestry, noDiffDeleted,
+                 force, copiesAsAdds);
+        } catch (FileNotFoundException ex) {
+            throw ClientException.fromException(ex);
+        }
+    }
+
     public native void diff(String target1, Revision revision1, String target2,
                             Revision revision2, String relativeToDir,
-                            String outFileName, Depth depth,
+                            OutputStream stream, Depth depth,
                             Collection<String> changelists,
                             boolean ignoreAncestry, boolean noDiffDeleted,
                             boolean force, boolean copiesAsAdds)
             throws ClientException;
 
+    public void diff(String target, Revision pegRevision,
+                     Revision startRevision, Revision endRevision,
+                     String relativeToDir, String outFileName,
+                     Depth depth, Collection<String> changelists,
+                     boolean ignoreAncestry, boolean noDiffDeleted,
+                     boolean force, boolean copiesAsAdds)
+            throws ClientException
+    {
+        try {
+            OutputStream stream = new FileOutputStream(outFileName);
+            diff(target, pegRevision, startRevision, endRevision,
+                 relativeToDir, stream, depth, changelists, ignoreAncestry,
+                 noDiffDeleted, force, copiesAsAdds);
+        } catch (FileNotFoundException ex) {
+            throw ClientException.fromException(ex);
+        }
+    }
+
     public native void diff(String target, Revision pegRevision,
                             Revision startRevision, Revision endRevision,
-                            String relativeToDir, String outFileName,
+                            String relativeToDir, OutputStream stream,
                             Depth depth, Collection<String> changelists,
                             boolean ignoreAncestry, boolean noDiffDeleted,
                             boolean force, boolean copiesAsAdds)
@@ -307,7 +345,9 @@ public class SVNClient implements ISVNCl
                                         boolean force)
             throws ClientException;
 
-    public native void propertySetRemote(String path, String name, byte[] value,
+    public native void propertySetRemote(String path, long baseRev,
+                                         String name, byte[] value,
+                                         CommitMessageCallback handler,
                                          boolean force,
                                          Map<String, String> revpropTable,
                                          CommitCallback callback)

Modified: subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNAdmin.java
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNAdmin.java?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNAdmin.java (original)
+++ subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNAdmin.java Mon Nov 21 07:07:56 2011
@@ -59,7 +59,6 @@ public class SVNAdmin
      */
     protected void finalize()
     {
-        aSVNAdmin.finalize();
     }
 
     /**

Modified: subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java (original)
+++ subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java Mon Nov 21 07:07:56 2011
@@ -70,7 +70,6 @@ public class SVNClient implements SVNCli
      */
     protected void finalize()
     {
-        aSVNClient.finalize();
     }
 
     /**
@@ -325,10 +324,20 @@ public class SVNClient implements SVNCli
         implements org.apache.subversion.javahl.callback.UserPasswordCallback
     {
         PromptUserPassword oldPrompt;
+        PromptUserPassword2 oldPrompt2;
+        PromptUserPassword3 oldPrompt3;
 
         PromptUser1Wrapper(PromptUserPassword prompt)
         {
             oldPrompt = prompt;
+
+            /* This mirrors the insanity that was going on in the C++ layer
+               prior to 1.7.  Don't ask, just pray it works. */
+            if (prompt instanceof PromptUserPassword2)
+              oldPrompt2 = (PromptUserPassword2) prompt;
+
+            if (prompt instanceof PromptUserPassword3)
+              oldPrompt3 = (PromptUserPassword3) prompt;
         }
 
         public String getPassword()
@@ -360,7 +369,10 @@ public class SVNClient implements SVNCli
 
         public int askTrustSSLServer(String info, boolean allowPermanently)
         {
-            return askTrustSSLServer(info, allowPermanently);
+            if (oldPrompt2 != null)
+                return oldPrompt2.askTrustSSLServer(info, allowPermanently);
+            else
+                return 0;
         }
 
         public boolean userAllowedSave()
@@ -371,12 +383,19 @@ public class SVNClient implements SVNCli
         public String askQuestion(String realm, String question,
                                   boolean showAnswer, boolean maySave)
         {
-            return askQuestion(realm, question, showAnswer);
+            if (oldPrompt3 != null)
+                return oldPrompt3.askQuestion(realm, question, showAnswer,
+                                              maySave);
+            else
+                return askQuestion(realm, question, showAnswer);
         }
 
         public boolean prompt(String realm, String username, boolean maySave)
         {
-            return prompt(realm, username);
+            if (oldPrompt3 != null)
+                return oldPrompt3.prompt(realm, username, maySave);
+            else
+                return prompt(realm, username);
         }
     }
 
@@ -1878,8 +1897,12 @@ public class SVNClient implements SVNCli
         {
             if (Path.isURL(path))
             {
-                aSVNClient.propertySetRemote(path, name,
+                Info2[] infos = info2(path, Revision.HEAD, Revision.HEAD,
+                                      false);
+
+                aSVNClient.propertySetRemote(path, infos[0].getRev(), name,
                                        value == null ? null : value.getBytes(),
+                                       cachedHandler,
                                        force, revpropTable, null);
             }
             else

Modified: subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java (original)
+++ subversion/branches/svn-bisect/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClientInterface.java Mon Nov 21 07:07:56 2011
@@ -154,7 +154,7 @@ public interface SVNClientInterface
             throws ClientException;
 
     /**
-     * Lists the directory entries of an url on the server.
+     * Lists the directory entries of a url on the server.
      * @param url       the url to list
      * @param revision  the revision to list
      * @param recurse   recurse into subdirectories
@@ -167,7 +167,7 @@ public interface SVNClientInterface
             throws ClientException;
 
     /**
-     * Lists the directory entries of an url on the server.
+     * Lists the directory entries of a url on the server.
      * @param url       the url to list
      * @param revision  the revision to list
      * @param pegRevision the revision to interpret url
@@ -182,7 +182,7 @@ public interface SVNClientInterface
             throws ClientException;
 
     /**
-     * Lists the directory entries of an url on the server.
+     * Lists the directory entries of a url on the server.
      * @param url             the url to list
      * @param revision        the revision to list
      * @param pegRevision     the revision to interpret url
@@ -707,7 +707,7 @@ public interface SVNClientInterface
      *
      * @param srcPath   source path or url
      * @param destPath  destination path or url
-     * @param message   commit message if destPath is an url
+     * @param message   commit message if destPath is a url
      * @param revision  source revision
      * @throws ClientException
      * @deprecated Use {@link #copy(CopySource[], String, String, boolean,
@@ -754,7 +754,7 @@ public interface SVNClientInterface
      *
      * @param srcPath   source path or url
      * @param destPath  destination path or url
-     * @param message   commit message if destPath is an url
+     * @param message   commit message if destPath is a url
      * @param force     even with local modifications.
      * @throws ClientException
      * @deprecated Use {@link #move(String[], String, String, boolean, boolean,

Modified: subversion/branches/svn-bisect/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java (original)
+++ subversion/branches/svn-bisect/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java Mon Nov 21 07:07:56 2011
@@ -32,6 +32,7 @@ import java.io.FileReader;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.io.ByteArrayOutputStream;
+import java.io.UnsupportedEncodingException;
 import java.text.ParseException;
 import java.util.Collection;
 import java.util.Arrays;
@@ -3110,6 +3111,53 @@ public class BasicTests extends SVNTests
     }
 
     /**
+     * Test the basic SVNClient.propertySetRemote functionality.
+     * @throws Throwable
+     */
+    public void testPropEdit() throws Throwable
+    {
+        final String PROP = "abc";
+        final byte[] VALUE = new String("def").getBytes();
+        final byte[] NEWVALUE = new String("newvalue").getBytes();
+        // create the test working copy
+        OneTest thisTest = new OneTest();
+
+        Set<String> pathSet = new HashSet<String>();
+        // set a property on A/D/G/rho file
+        pathSet.clear();
+        pathSet.add(thisTest.getWCPath()+"/A/D/G/rho");
+        client.propertySetLocal(pathSet, PROP, VALUE,
+                                Depth.infinity, null, false);
+        thisTest.getWc().setItemPropStatus("A/D/G/rho", Status.Kind.modified);
+
+        // test the status of the working copy
+        thisTest.checkStatus();
+
+        // commit the changes
+        checkCommitRevision(thisTest, "wrong revision number from commit", 2,
+                            thisTest.getWCPathSet(), "log msg", Depth.infinity,
+                            false, false, null, null);
+
+        thisTest.getWc().setItemPropStatus("A/D/G/rho", Status.Kind.normal);
+
+        // check the status of the working copy
+        thisTest.checkStatus();
+        
+        // now edit the propval directly in the repository
+        long baseRev = 2L;
+        client.propertySetRemote(thisTest.getUrl()+"/A/D/G/rho", baseRev, PROP, NEWVALUE,
+                                 new ConstMsg("edit prop"), false, null, null);
+        
+        // update the WC and verify that the property was changed
+        client.update(thisTest.getWCPathSet(), Revision.HEAD, Depth.infinity, false, false,
+                      false, false);
+        byte[] propVal = client.propertyGet(thisTest.getWCPath()+"/A/D/G/rho", PROP, null, null);
+
+        assertEquals(new String(propVal), new String(NEWVALUE));
+
+    }
+
+    /**
      * Test tolerance of unversioned obstructions when adding paths with
      * {@link org.apache.subversion.javahl.SVNClient#checkout()},
      * {@link org.apache.subversion.javahl.SVNClient#update()}, and
@@ -3632,8 +3680,17 @@ public class BasicTests extends SVNTests
                                       Map<String, byte[]> revprops,
                                       boolean hasChildren)
             {
-                String author = new String(revprops.get("svn:author"));
-                String message = new String(revprops.get("svn:log"));
+                String author, message;
+                try {
+                    author = new String(revprops.get("svn:author"), "UTF8");
+                } catch (UnsupportedEncodingException e) {
+                    author = new String(revprops.get("svn:author"));
+                }
+                try {
+                    message = new String(revprops.get("svn:log"), "UTF8");
+                } catch (UnsupportedEncodingException e) {
+                    message = new String(revprops.get("svn:log"));
+                }
                 long timeMicros;
 
                 try {

Modified: subversion/branches/svn-bisect/subversion/bindings/javahl/tests/org/apache/subversion/javahl/WC.java
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/javahl/tests/org/apache/subversion/javahl/WC.java?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/javahl/tests/org/apache/subversion/javahl/WC.java (original)
+++ subversion/branches/svn-bisect/subversion/bindings/javahl/tests/org/apache/subversion/javahl/WC.java Mon Nov 21 07:07:56 2011
@@ -519,6 +519,9 @@ public class WC
                                         + item.myPath + "' don't match:",
                                         item.reposLastCmtAuthor,
                                         status.getReposLastCmtAuthor());
+                    Assert.assertNotNull("URL for path " + item.myPath
+                                         + " should not be null", 
+                                         status.getUrl());
                 }
             }
             item.touched = true;

Modified: subversion/branches/svn-bisect/subversion/bindings/swig/perl/native/Makefile.PL.in
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/swig/perl/native/Makefile.PL.in?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/swig/perl/native/Makefile.PL.in (original)
+++ subversion/branches/svn-bisect/subversion/bindings/swig/perl/native/Makefile.PL.in Mon Nov 21 07:07:56 2011
@@ -47,8 +47,7 @@ my @ldmodules = map {"-lsvn_$_-1"} (@mod
 my $apr_shlib_path_var = '@SVN_APR_SHLIB_PATH_VAR@';
 my $cppflags = '@CPPFLAGS@';
 my $cflags = '@CFLAGS@';
-my $apr_cflags = '@SVN_APR_INCLUDES@';
-my $apu_cflags = '@SVN_APRUTIL_INCLUDES@';
+my $includes = '@SVN_APR_INCLUDES@ @SVN_APRUTIL_INCLUDES@';
 
 # According to the log of r7937, the flags guarded by the conditional break
 # the build on FreeBSD if not conditionalized.
@@ -61,7 +60,7 @@ my %config = (
     ABSTRACT => 'Perl bindings for Subversion',
     DEFINE => $cppflags,
     CCFLAGS => join(' ', $cflags, $Config{ccflags}),
-    INC  => join(' ',$apr_cflags, $apu_cflags,
+    INC  => join(' ', $includes, $cppflags,
                  " -I$swig_srcdir/perl/libsvn_swig_perl",
                  " -I$svnlib_srcdir/include",
                  " -I$svnlib_builddir",

Modified: subversion/branches/svn-bisect/subversion/bindings/swig/python/svn/repos.py
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/swig/python/svn/repos.py?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/swig/python/svn/repos.py (original)
+++ subversion/branches/svn-bisect/subversion/bindings/swig/python/svn/repos.py Mon Nov 21 07:07:56 2011
@@ -72,12 +72,28 @@ class ChangedPath:
 
 
 class ChangeCollector(_svndelta.Editor):
-  """Available Since: 1.2.0
+  """An editor that, when driven, walks a revision or a transaction and
+  incrementally invokes a callback with ChangedPath instances corresponding to
+  paths changed in that revision.
+
+  Available Since: 1.2.0
   """
 
   # BATON FORMAT: [path, base_path, base_rev]
 
   def __init__(self, fs_ptr, root, pool=None, notify_cb=None):
+    """Construct a walker over the svn_fs_root_t ROOT, which must
+    be in the svn_fs_t FS_PTR.  Invoke NOTIFY_CB with a single argument
+    of type ChangedPath for each change under ROOT.
+
+    At this time, two ChangedPath objects will be passed for a path that had
+    been replaced in the revision/transaction.  This may change in the future.
+  
+    ### Can't we deduce FS_PTR from ROOT?
+
+    ### POOL is unused
+    """
+
     self.fs_ptr = fs_ptr
     self.changes = { } # path -> ChangedPathEntry()
     self.roots = { } # revision -> svn_svnfs_root_t
@@ -136,9 +152,9 @@ class ChangeCollector(_svndelta.Editor):
     self.changes[path] = ChangedPath(item_type,
                                      False,
                                      False,
-                                     base_path,
+                                     base_path,       # base_path
                                      parent_baton[2], # base_rev
-                                     None,            # (new) path
+                                     path,            # path
                                      False,           # added
                                      CHANGE_ACTION_DELETE,
                                      )

Modified: subversion/branches/svn-bisect/subversion/bindings/swig/python/tests/trac/versioncontrol/svn_fs.py
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/swig/python/tests/trac/versioncontrol/svn_fs.py?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/swig/python/tests/trac/versioncontrol/svn_fs.py (original)
+++ subversion/branches/svn-bisect/subversion/bindings/swig/python/tests/trac/versioncontrol/svn_fs.py Mon Nov 21 07:07:56 2011
@@ -407,7 +407,7 @@ class SubversionChangeset(Changeset):
                 else:
                     base_path = None
             action = ''
-            if not change.path:
+            if change.action == repos.CHANGE_ACTION_DELETE:
                 action = Changeset.DELETE
                 deletions[change.base_path] = idx
             elif change.added:

Modified: subversion/branches/svn-bisect/subversion/bindings/swig/ruby/test/test_client.rb
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/swig/ruby/test/test_client.rb?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/swig/ruby/test/test_client.rb (original)
+++ subversion/branches/svn-bisect/subversion/bindings/swig/ruby/test/test_client.rb Mon Nov 21 07:07:56 2011
@@ -1287,7 +1287,6 @@ class SvnClientTest < Test::Unit::TestCa
         ctx.mv(path1, path2)
       end
       ctx.revert([path1, path2])
-      FileUtils.rm(path2)
 
       File.open(path1, "w") {|f| f.print(src2)}
       assert_nothing_raised do

Modified: subversion/branches/svn-bisect/subversion/bindings/swig/svn_wc.i
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/bindings/swig/svn_wc.i?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/bindings/swig/svn_wc.i (original)
+++ subversion/branches/svn-bisect/subversion/bindings/swig/svn_wc.i Mon Nov 21 07:07:56 2011
@@ -45,6 +45,7 @@
 
 #ifdef SWIGRUBY
 %ignore svn_wc_external_item_create;
+%ignore svn_wc_external_item2_create;
 %ignore svn_wc_external_item_dup;
 %ignore svn_wc_external_item2_dup;
 %ignore svn_wc_revision_status;
@@ -268,11 +269,11 @@ svn_wc_swig_init_asp_dot_net_hack (apr_p
 {
   svn_wc_external_item2_t(apr_pool_t *pool) {
     svn_error_t *err;
-    const svn_wc_external_item2_t *self;
-    err = svn_wc_external_item_create(&self, pool);
+    svn_wc_external_item2_t *self;
+    err = svn_wc_external_item2_create(&self, pool);
     if (err)
       svn_swig_rb_handle_svn_error(err);
-    return (svn_wc_external_item2_t *)self;
+    return self;
   };
 
   ~svn_wc_external_item2_t() {

Modified: subversion/branches/svn-bisect/subversion/include/private/ra_svn_sasl.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/private/ra_svn_sasl.h?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/private/ra_svn_sasl.h (original)
+++ subversion/branches/svn-bisect/subversion/include/private/ra_svn_sasl.h Mon Nov 21 07:07:56 2011
@@ -60,7 +60,7 @@ svn_ra_svn__default_secprops(sasl_securi
 
 /* This function is called by the client and the server before
    calling sasl_{client, server}_init, pool is used for allocations. */
-apr_status_t
+svn_error_t *
 svn_ra_svn__sasl_common_init(apr_pool_t *pool);
 
 /* Sets local_addrport and remote_addrport to a string containing the

Propchange: subversion/branches/svn-bisect/subversion/include/private/svn_adler32.h
            ('svn:mergeinfo' removed)

Modified: subversion/branches/svn-bisect/subversion/include/private/svn_dav_protocol.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/private/svn_dav_protocol.h?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/private/svn_dav_protocol.h (original)
+++ subversion/branches/svn-bisect/subversion/include/private/svn_dav_protocol.h Mon Nov 21 07:07:56 2011
@@ -43,7 +43,6 @@ extern "C" {
 #define SVN_DAV__PATH "path"
 #define SVN_DAV__INHERIT "inherit"
 #define SVN_DAV__REVISION "revision"
-#define SVN_DAV__VALIDATE_INHERITED "validate-inherited"
 #define SVN_DAV__INCLUDE_DESCENDANTS "include-descendants"
 #define SVN_DAV__VERSION_NAME "version-name"
 

Modified: subversion/branches/svn-bisect/subversion/include/private/svn_dep_compat.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/private/svn_dep_compat.h?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/private/svn_dep_compat.h (original)
+++ subversion/branches/svn-bisect/subversion/include/private/svn_dep_compat.h Mon Nov 21 07:07:56 2011
@@ -107,6 +107,32 @@ typedef apr_uint32_t apr_uintptr_t;
 #endif /* SERF_VERSION_AT_LEAST */
 
 /**
+ * By default, if libsvn is built against one version of SQLite
+ * and then run using an older version, svn will error out:
+ *
+ *     svn: Couldn't perform atomic initialization
+ *     svn: SQLite compiled for 3.7.4, but running with 3.7.3
+ *
+ * That can be annoying when building on a modern system in order
+ * to deploy on a less modern one.  So these constants allow one
+ * to specify how old the system being deployed on might be.
+ * For example,
+ *
+ *     EXTRA_CFLAGS += -DSVN_SQLITE_MIN_VERSION_NUMBER=3007003
+ *     EXTRA_CFLAGS += '-DSVN_SQLITE_MIN_VERSION="3.7.3"'
+ *
+ * turns on code that works around infelicities in older versions
+ * as far back as 3.7.3 and relaxes the check at initialization time
+ * to permit them.
+ *
+ * @since New in 1.8.
+ */
+#ifndef SVN_SQLITE_MIN_VERSION_NUMBER
+#define SVN_SQLITE_MIN_VERSION_NUMBER SQLITE_VERSION_NUMBER
+#define SVN_SQLITE_MIN_VERSION SQLITE_VERSION
+#endif /* SVN_SQLITE_MIN_VERSION_NUMBER */
+
+/**
  * Check at compile time if the SQLite version is at least a certain
  * level.
  * @param major The major version component of the version checked
@@ -120,7 +146,7 @@ typedef apr_uint32_t apr_uintptr_t;
  */
 #ifndef SQLITE_VERSION_AT_LEAST
 #define SQLITE_VERSION_AT_LEAST(major,minor,patch)                     \
-((major*1000000 + minor*1000 + patch) <= SQLITE_VERSION_NUMBER)
+((major*1000000 + minor*1000 + patch) <= SVN_SQLITE_MIN_VERSION_NUMBER)
 #endif /* SQLITE_VERSION_AT_LEAST */
 
 #ifdef __cplusplus

Modified: subversion/branches/svn-bisect/subversion/include/private/svn_fspath.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/private/svn_fspath.h?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/private/svn_fspath.h (original)
+++ subversion/branches/svn-bisect/subversion/include/private/svn_fspath.h Mon Nov 21 07:07:56 2011
@@ -123,23 +123,6 @@ svn_boolean_t
 svn_fspath__is_root(const char *fspath,
                     apr_size_t len);
 
-/** Test if @a child_fspath is a child of @a parent_fspath.  If not, return
- * NULL.  If so, return the relpath which, if joined to @a parent_fspath,
- * would yield @a child_fspath.
- *
- * If @a child_fspath is the same as @a parent_fspath, it is not considered
- * a child, so the result is NULL; an empty string is never returned.
- *
- * If @a pool is NULL, a pointer into @a child_fspath will be returned to
- * identify the remainder fspath.
- *
- * @since New in 1.7.
- */
-const char *
-svn_fspath__is_child(const char *parent_fspath,
-                     const char *child_fspath,
-                     apr_pool_t *pool);
-
 /** Return the relative path part of @a child_fspath that is below
  * @a parent_fspath, or just "" if @a parent_fspath is equal to
  * @a child_fspath. If @a child_fspath is not below @a parent_fspath
@@ -151,15 +134,6 @@ const char *
 svn_fspath__skip_ancestor(const char *parent_fspath,
                           const char *child_fspath);
 
-/** Return TRUE if @a parent_fspath is an ancestor of @a child_fspath or
- * the fspaths are equal, and FALSE otherwise.
- *
- * @since New in 1.7.
- */
-svn_boolean_t
-svn_fspath__is_ancestor(const char *parent_fspath,
-                        const char *child_fspath);
-
 /** Return the longest common path shared by two fspaths, @a fspath1 and
  * @a fspath2.  If there's no common ancestor, return "/".
  *
@@ -179,9 +153,7 @@ svn_fspath__get_longest_ancestor(const c
 #define svn_urlpath__basename             svn_fspath__basename
 #define svn_urlpath__dirname              svn_fspath__dirname
 #define svn_urlpath__get_longest_ancestor svn_fspath__get_longest_ancestor
-#define svn_urlpath__is_ancestor          svn_fspath__is_ancestor
 #define svn_urlpath__is_canonical         svn_fspath__is_canonical
-#define svn_urlpath__is_child             svn_fspath__is_child
 #define svn_urlpath__is_root              svn_fspath__is_root
 #define svn_urlpath__join                 svn_fspath__join
 #define svn_urlpath__skip_ancestor        svn_fspath__skip_ancestor

Modified: subversion/branches/svn-bisect/subversion/include/private/svn_mergeinfo_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/private/svn_mergeinfo_private.h?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/private/svn_mergeinfo_private.h (original)
+++ subversion/branches/svn-bisect/subversion/include/private/svn_mergeinfo_private.h Mon Nov 21 07:07:56 2011
@@ -44,6 +44,18 @@ void
 svn_rangelist__set_inheritance(apr_array_header_t *rangelist,
                                svn_boolean_t inheritable);
 
+/* Parse a rangelist from the string STR. Set *RANGELIST to the result,
+ * allocated in RESULT_POOL. Return an error if the rangelist is not
+ * well-formed (for example, if it contains invalid characters or if
+ * R1 >= R2 in a "R1-R2" range element).
+ *
+ * Unlike svn_mergeinfo_parse(), this does not sort the ranges into order
+ * or combine adjacent and overlapping ranges. */
+svn_error_t *
+svn_rangelist__parse(apr_array_header_t **rangelist,
+                     const char *str,
+                     apr_pool_t *result_pool);
+
 /* Set inheritability of all rangelists in MERGEINFO to INHERITABLE.
    If MERGEINFO is NULL do nothing.  If a rangelist in MERGEINFO is
    NULL leave it alone. */
@@ -112,11 +124,25 @@ svn_mergeinfo__add_prefix_to_catalog(svn
                                      apr_pool_t *result_pool,
                                      apr_pool_t *scratch_pool);
 
-/* Set *OUT_MERGEINFO to a deep copy of MERGEINFO with the relpath
+/* Set *OUT_MERGEINFO to a shallow copy of MERGEINFO with each source path
+   converted to a (URI-encoded) URL based on REPOS_ROOT_URL. *OUT_MERGEINFO
+   is declared as 'apr_hash_t *' because its key do not obey the rules of
+   'svn_mergeinfo_t'.
+
+   Allocate *OUT_MERGEINFO and the new keys in RESULT_POOL.  Use
+   SCRATCH_POOL for any temporary allocations. */
+svn_error_t *
+svn_mergeinfo__relpaths_to_urls(apr_hash_t **out_mergeinfo,
+                                svn_mergeinfo_t mergeinfo,
+                                const char *repos_root_url,
+                                apr_pool_t *result_pool,
+                                apr_pool_t *scratch_pool);
+
+/* Set *OUT_MERGEINFO to a shallow copy of MERGEINFO with the relpath
    SUFFIX_RELPATH added to the end of each key path.
 
-   Allocate *OUT_MERGEINFO in RESULT_POOL.  Use SCRATCH_POOL for any
-   temporary allocations. */
+   Allocate *OUT_MERGEINFO and the new keys in RESULT_POOL.  Use
+   SCRATCH_POOL for any temporary allocations. */
 svn_error_t *
 svn_mergeinfo__add_suffix_to_mergeinfo(svn_mergeinfo_t *out_mergeinfo,
                                        svn_mergeinfo_t mergeinfo,
@@ -208,15 +234,6 @@ svn_boolean_t
 svn_mergeinfo__is_noninheritable(svn_mergeinfo_t mergeinfo,
                                  apr_pool_t *scratch_pool);
 
-/* If MERGEINFO_STR is a string representation of non-inheritable mergeinfo
-   set *IS_NONINHERITABLE to TRUE, set it to FALSE otherwise.  MERGEINFO_STR
-   may be NULL or empty.  If MERGEINFO_STR cannot be parsed return
-   SVN_ERR_MERGEINFO_PARSE_ERROR. */
-svn_error_t *
-svn_mergeinfo__string_has_noninheritable(svn_boolean_t *is_noninheritable,
-                                         const char *mergeinfo_str,
-                                         apr_pool_t *scratch_pool);
-
 /* Return a rangelist with one svn_merge_range_t * element defined by START,
    END, and INHERITABLE.  The rangelist and its contents are allocated in
    RESULT_POOL. */
@@ -252,6 +269,17 @@ svn_mergeinfo__mergeinfo_from_segments(s
                                        const apr_array_header_t *segments,
                                        apr_pool_t *pool);
 
+/* Merge every rangelist in MERGEINFO into the given MERGED_RANGELIST,
+ * ignoring the source paths of MERGEINFO. MERGED_RANGELIST may
+ * initially be empty. New elements added to RANGELIST are allocated in
+ * RESULT_POOL. See svn_rangelist_merge2() for details of inheritability
+ * etc. */
+svn_error_t *
+svn_rangelist__merge_many(apr_array_header_t *merged_rangelist,
+                          svn_mergeinfo_t mergeinfo,
+                          apr_pool_t *result_pool,
+                          apr_pool_t *scratch_pool);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/svn-bisect/subversion/include/private/svn_opt_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/private/svn_opt_private.h?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/private/svn_opt_private.h (original)
+++ subversion/branches/svn-bisect/subversion/include/private/svn_opt_private.h Mon Nov 21 07:07:56 2011
@@ -129,6 +129,26 @@ const char *
 svn_opt__revision_to_string(const svn_opt_revision_t *revision,
                             apr_pool_t *result_pool);
 
+/**
+ * Create a revision range structure from two revisions.  Return a new range
+ * allocated in @a result_pool with the start and end initialized to
+ * (deep copies of) @a *start_revision and @a *end_revision.
+ */
+svn_opt_revision_range_t *
+svn_opt__revision_range_create(const svn_opt_revision_t *start_revision,
+                               const svn_opt_revision_t *end_revision,
+                               apr_pool_t *result_pool);
+
+/**
+ * Create a revision range structure from two revnums.  Return a new range
+ * allocated in @a result_pool with the start and end kinds initialized to
+ * #svn_opt_revision_number and values @a start_revnum and @a end_revnum.
+ */
+svn_opt_revision_range_t *
+svn_opt__revision_range_from_revnums(svn_revnum_t start_revnum,
+                                     svn_revnum_t end_revnum,
+                                     apr_pool_t *result_pool);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/svn-bisect/subversion/include/private/svn_ra_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/private/svn_ra_private.h?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/private/svn_ra_private.h (original)
+++ subversion/branches/svn-bisect/subversion/include/private/svn_ra_private.h Mon Nov 21 07:07:56 2011
@@ -116,6 +116,16 @@ svn_ra__release_operational_lock(svn_ra_
                                  const svn_string_t *mylocktoken,
                                  apr_pool_t *scratch_pool);
 
+
+/** Like svn_ra_get_path_relative_to_root(), except returning a fspath
+ * (starting with '/') instead of a relpath.
+ */
+svn_error_t *
+svn_ra__get_fspath_relative_to_root(svn_ra_session_t *ra_session,
+                                    const char **fspath,
+                                    const char *url,
+                                    apr_pool_t *pool);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/svn-bisect/subversion/include/private/svn_sqlite.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-bisect/subversion/include/private/svn_sqlite.h?rev=1204374&r1=1204373&r2=1204374&view=diff
==============================================================================
--- subversion/branches/svn-bisect/subversion/include/private/svn_sqlite.h (original)
+++ subversion/branches/svn-bisect/subversion/include/private/svn_sqlite.h Mon Nov 21 07:07:56 2011
@@ -85,13 +85,6 @@ svn_sqlite__insert(apr_int64_t *row_id, 
 svn_error_t *
 svn_sqlite__update(int *affected_rows, svn_sqlite__stmt_t *stmt);
 
-/* Return in *VERSION the version of the schema for the database as PATH.
-   Use SCRATCH_POOL for temporary allocations. */
-svn_error_t *
-svn_sqlite__get_schema_version(int *version,
-                               const char *path,
-                               apr_pool_t *scratch_pool);
-
 /* Return in *VERSION the version of the schema in DB. Use SCRATCH_POOL
    for temporary allocations.  */
 svn_error_t *
@@ -99,12 +92,6 @@ svn_sqlite__read_schema_version(int *ver
                                 svn_sqlite__db_t *db,
                                 apr_pool_t *scratch_pool);
 
-/* Set DB's schema version to VERSION. Use SCRATCH_POOL for all temporary
-   allocations.  */
-svn_error_t *
-svn_sqlite__set_schema_version(svn_sqlite__db_t *db,
-                               int version,
-                               apr_pool_t *scratch_pool);
 
 
 /* Open a connection in *DB to the database at PATH. Validate the schema,
@@ -373,13 +360,12 @@ svn_sqlite__with_immediate_transaction(s
 
 /* Helper function to handle several SQLite operations inside a shared lock.
    This callback is similar to svn_sqlite__with_transaction(), but can be
-   nested (even with a transaction) and changes in the callback are always
-   committed when this function returns.
+   nested (even with a transaction).
 
-   For SQLite 3.6.8 and later using this function as a wrapper around a group
-   of operations can give a *huge* performance boost as the shared-read lock
-   will be shared over multiple statements, instead of being reobtained
-   everytime, which requires disk and/or network io.
+   Using this function as a wrapper around a group of operations can give a
+   *huge* performance boost as the shared-read lock will be shared over
+   multiple statements, instead of being reobtained every time, which may
+   require disk and/or network io, depending on SQLite's locking strategy.
 
    SCRATCH_POOL will be passed to the callback (NULL is valid).
 

Propchange: subversion/branches/svn-bisect/subversion/include/private/svn_string_private.h
            ('svn:mergeinfo' removed)

Propchange: subversion/branches/svn-bisect/subversion/include/private/svn_temp_serializer.h
            ('svn:mergeinfo' removed)