You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2010/09/06 22:02:24 UTC

svn commit: r993141 [6/25] - in /subversion/branches/performance: ./ build/ac-macros/ build/generator/ contrib/server-side/ notes/ notes/wc-ng/ subversion/bindings/javahl/native/ subversion/bindings/javahl/src/org/apache/subversion/javahl/ subversion/b...

Modified: subversion/branches/performance/subversion/include/svn_config.h
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/include/svn_config.h?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/include/svn_config.h (original)
+++ subversion/branches/performance/subversion/include/svn_config.h Mon Sep  6 20:02:15 2010
@@ -185,6 +185,15 @@ svn_config_get_config(apr_hash_t **cfg_h
                       apr_pool_t *pool);
 
 
+/** Set @a *cfgp to an empty @c svn_config_t structure,
+ * allocated in @a result_pool.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_config_create(svn_config_t **cfgp,
+                  apr_pool_t *result_pool);
+
 /** Read configuration data from @a file (a file or registry path) into
  * @a *cfgp, allocated in @a pool.
  *

Modified: subversion/branches/performance/subversion/include/svn_dav.h
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/include/svn_dav.h?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/include/svn_dav.h (original)
+++ subversion/branches/performance/subversion/include/svn_dav.h Mon Sep  6 20:02:15 2010
@@ -43,6 +43,12 @@ extern "C" {
  */
 #define SVN_SVNDIFF_MIME_TYPE "application/vnd.svn-svndiff"
 
+/** This is the MIME type that Subversion users for its "skel" format.
+ *
+ * This is an application type, for the "svn" vendor. The specific subtype
+ * is "skel".
+ */
+#define SVN_SKEL_MIME_TYPE "application/vnd.svn-skel"
 
 /** This header is *TEMPORARILY* used to transmit the delta base to the
  * server. It contains a version resource URL for what is on the client.

Modified: subversion/branches/performance/subversion/include/svn_diff.h
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/include/svn_diff.h?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/include/svn_diff.h (original)
+++ subversion/branches/performance/subversion/include/svn_diff.h Mon Sep  6 20:02:15 2010
@@ -376,7 +376,7 @@ typedef struct svn_diff_file_options_t
   /** Whether to treat all end-of-line markers the same when comparing lines.
    * The default is @c FALSE. */
   svn_boolean_t ignore_eol_style;
-  /** Whether the '@@' lines of the unified diff output should include a prefix
+  /** Whether the "@@" lines of the unified diff output should include a prefix
     * of the nearest preceding line that starts with a character that might be
     * the initial character of a C language identifier.  The default is
     * @c FALSE.
@@ -796,31 +796,37 @@ typedef enum svn_diff_operation_kind_e
  *   - modified text   The result of patching the original text.
  *
  * For example, consider a hunk with the following diff text:
- *   @@ -1,5 +1,5 @@
- *    #include <stdio.h>
- *    int main(int argc, char *argv[]) {
- *   -        printf("Hello World!\n");
- *   +        printf("I like Subversion!\n");
- *    }
+ *
+ * @verbatim
+     @@ -1,5 +1,5 @@
+      #include <stdio.h>
+      int main(int argc, char *argv[]) {
+     -        printf("Hello World!\n");
+     +        printf("I like Subversion!\n");
+      } @endverbatim
  *
  * The original text of this hunk is:
- *   #include <stdio.h>
- *   int main(int argc, char *argv[]) {
- *           printf("Hello World!\n");
- *   }
+ *
+ * @verbatim
+     #include <stdio.h>
+     int main(int argc, char *argv[]) {
+             printf("Hello World!\n");
+     } @endverbatim
  *
  * And the modified text is:
- *   #include <stdio.h>
- *   int main(int argc, char *argv[]) {
- *           printf("I like Subversion!\n");
- *   }
+ *
+ * @verbatim
+     #include <stdio.h>
+     int main(int argc, char *argv[]) {
+             printf("I like Subversion!\n");
+     } @endverbatim
  *
  * @see svn_diff_hunk_readline_diff_text()
  * @see svn_diff_hunk_readline_original_text()
  * @see svn_diff_hunk_readline_modified_text()
  *
  * @since New in 1.7. */
-typedef struct svn_hunk_t svn_hunk_t;
+typedef struct svn_diff_hunk_t svn_diff_hunk_t;
 
 /**
  * Allocate @a *stringbuf in @a result_pool, and read into it one line
@@ -838,7 +844,7 @@ typedef struct svn_hunk_t svn_hunk_t;
  * @since New in 1.7.
  */
 svn_error_t *
-svn_diff_hunk_readline_diff_text(const svn_hunk_t *hunk,
+svn_diff_hunk_readline_diff_text(const svn_diff_hunk_t *hunk,
                                  svn_stringbuf_t **stringbuf,
                                  const char **eol,
                                  svn_boolean_t *eof,
@@ -854,11 +860,11 @@ svn_diff_hunk_readline_diff_text(const s
  * and @a eol is not NULL, @a *eol is set to NULL.
  * Temporary allocations will be performed in @a scratch_pool.
  *
- * @see svn_hunk_t
+ * @see svn_diff_hunk_t
  * @since New in 1.7.
  */
 svn_error_t *
-svn_diff_hunk_readline_original_text(const svn_hunk_t *hunk,
+svn_diff_hunk_readline_original_text(const svn_diff_hunk_t *hunk,
                                      svn_stringbuf_t **stringbuf,
                                      const char **eol,
                                      svn_boolean_t *eof,
@@ -869,69 +875,69 @@ svn_diff_hunk_readline_original_text(con
  * Like svn_diff_hunk_readline_original_text(), but it returns lines from
  * the modified text of the hunk.
  *
- * @see svn_hunk_t
+ * @see svn_diff_hunk_t
  * @since New in 1.7.
  */
 svn_error_t *
-svn_diff_hunk_readline_modified_text(const svn_hunk_t *hunk,
+svn_diff_hunk_readline_modified_text(const svn_diff_hunk_t *hunk,
                                      svn_stringbuf_t **stringbuf,
                                      const char **eol,
                                      svn_boolean_t *eof,
                                      apr_pool_t *result_pool,
                                      apr_pool_t *scratch_pool);
 
-/* Reset the diff text of @a hunk so it can be read again from the start.
+/** Reset the diff text of @a hunk so it can be read again from the start.
  * @since New in 1.7. */
 svn_error_t *
-svn_diff_hunk_reset_diff_text(const svn_hunk_t *hunk);
+svn_diff_hunk_reset_diff_text(const svn_diff_hunk_t *hunk);
 
-/* Reset the original text of @a hunk so it can be read again from the start.
+/** Reset the original text of @a hunk so it can be read again from the start.
  * @since New in 1.7. */
 svn_error_t *
-svn_diff_hunk_reset_original_text(const svn_hunk_t *hunk);
+svn_diff_hunk_reset_original_text(const svn_diff_hunk_t *hunk);
 
-/* Reset the modified text of @a hunk so it can be read again from the start.
+/** Reset the modified text of @a hunk so it can be read again from the start.
  * @since New in 1.7. */
 svn_error_t *
-svn_diff_hunk_reset_modified_text(const svn_hunk_t *hunk);
+svn_diff_hunk_reset_modified_text(const svn_diff_hunk_t *hunk);
 
-/* Return the line offset of the original hunk text,
+/** Return the line offset of the original hunk text,
  * as parsed from the hunk header.
  * @since New in 1.7. */
 svn_linenum_t
-svn_diff_hunk_get_original_start(const svn_hunk_t *hunk);
+svn_diff_hunk_get_original_start(const svn_diff_hunk_t *hunk);
 
-/* Return the number of lines in the original @a hunk text,
+/** Return the number of lines in the original @a hunk text,
  * as parsed from the hunk header.
  * @since New in 1.7. */
 svn_linenum_t
-svn_diff_hunk_get_original_length(const svn_hunk_t *hunk);
+svn_diff_hunk_get_original_length(const svn_diff_hunk_t *hunk);
 
-/* Return the line offset of the modified @a hunk text,
+/** Return the line offset of the modified @a hunk text,
  * as parsed from the hunk header.
  * @since New in 1.7. */
 svn_linenum_t
-svn_diff_hunk_get_modified_start(const svn_hunk_t *hunk);
+svn_diff_hunk_get_modified_start(const svn_diff_hunk_t *hunk);
 
-/* Return the number of lines in the modified @a hunk text,
+/** Return the number of lines in the modified @a hunk text,
  * as parsed from the hunk header.
  * @since New in 1.7. */
 svn_linenum_t
-svn_diff_hunk_get_modified_length(const svn_hunk_t *hunk);
+svn_diff_hunk_get_modified_length(const svn_diff_hunk_t *hunk);
 
-/* Return the number of lines of leading context of @a hunk,
+/** Return the number of lines of leading context of @a hunk,
  * i.e. the number of lines starting with ' ' before the first line
  * that starts with a '+' or '-'.
  * @since New in 1.7. */
 svn_linenum_t
-svn_diff_hunk_get_leading_context(const svn_hunk_t *hunk);
+svn_diff_hunk_get_leading_context(const svn_diff_hunk_t *hunk);
 
-/* Return the number of lines of trailing context of @a hunk,
+/** Return the number of lines of trailing context of @a hunk,
  * i.e. the number of lines starting with ' ' after the last line
  * that starts with a '+' or '-'.
  * @since New in 1.7. */
 svn_linenum_t
-svn_diff_hunk_get_trailing_context(const svn_hunk_t *hunk);
+svn_diff_hunk_get_trailing_context(const svn_diff_hunk_t *hunk);
 
 /**
  * Data type to manage parsing of properties in patches.
@@ -944,8 +950,8 @@ typedef struct svn_prop_patch_t {
   svn_diff_operation_kind_t operation;
 
   /**
-   * An array containing an svn_hunk_t object for each hunk parsed from the
-   * patch associated with our property name */
+   * An array containing an svn_diff_hunk_t object for each hunk parsed
+   * from the patch associated with our property name */
   apr_array_header_t *hunks;
 } svn_prop_patch_t;
 
@@ -968,12 +974,12 @@ typedef struct svn_patch_t {
   const char *new_filename;
 
   /**
-   * An array containing an svn_hunk_t object for each hunk parsed
+   * An array containing an svn_diff_hunk_t object for each hunk parsed
    * from the patch. */
   apr_array_header_t *hunks;
 
   /**
-   * A hash table keyed by property names containing svn_patch_property_t
+   * A hash table keyed by property names containing svn_prop_patch_t
    * object for each property parsed from the patch. */
   apr_hash_t *prop_patches;
 
@@ -1002,11 +1008,12 @@ svn_diff_parse_next_patch(svn_patch_t **
 
 /**
  * Dispose of @a patch, closing any streams used by it.
+ * Use @a scratch_pool for all temporary allocations.
  *
  * @since New in 1.7.
  */
 svn_error_t *
-svn_diff_close_patch(const svn_patch_t *patch);
+svn_diff_close_patch(const svn_patch_t *patch, apr_pool_t *scratch_pool);
 
 #ifdef __cplusplus
 }

Modified: subversion/branches/performance/subversion/include/svn_dirent_uri.h
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/include/svn_dirent_uri.h?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/include/svn_dirent_uri.h (original)
+++ subversion/branches/performance/subversion/include/svn_dirent_uri.h Mon Sep  6 20:02:15 2010
@@ -561,19 +561,19 @@ svn_dirent_get_absolute(const char **pab
                         const char *relative,
                         apr_pool_t *pool);
 
-/** Test if @a uri2 is a child of @a uri1.
+/** Test if @a child_uri is a child of @a parent_uri.
  * If not, return @c NULL.
  * If so, return a copy of the remainder uri, allocated in @a pool.
- * (The remainder is the component which, added to @a uri1, yields
- * @a uri2.  The remainder does not begin with a dir separator.)
+ * (The remainder is the component which, added to @a parent_uri, yields
+ * @a child_uri.  The remainder does not begin with a dir separator.)
  *
  * Both uris must be in canonical form, and must either be absolute,
  * or contain no ".." components.
  *
- * If @a uri2 is the same as @a uri1, it is not considered a child,
+ * If @a child_uri is the same as @a parent_uri, it is not considered a child,
  * so the result is @c NULL; an empty string is never returned.
  *
- * If @a pool is @c NULL , a pointer into @a uri2 will be returned to
+ * If @a pool is @c NULL , a pointer into @a child_uri will be returned to
  *       identify the remainder uri.
  *
  * ### @todo the ".." restriction is unfortunate, and would ideally
@@ -584,12 +584,12 @@ svn_dirent_get_absolute(const char **pab
  * @since New in 1.7.
  */
 const char *
-svn_uri_is_child(const char *uri1,
-                 const char *uri2,
+svn_uri_is_child(const char *parent_uri,
+                 const char *child_uri,
                  apr_pool_t *pool);
 
 /**
- * This function is similar as svn_uri_is_child(), except that it supports
+ * This function is similar to svn_uri_is_child(), except that it supports
  * Windows dirents and UNC paths on Windows.
  *
  * ### @todo Makes no attempt to handle one absolute and one relative
@@ -598,88 +598,90 @@ svn_uri_is_child(const char *uri1,
  * @since New in 1.6.
  */
 const char *
-svn_dirent_is_child(const char *dirent1,
-                    const char *dirent2,
+svn_dirent_is_child(const char *parent_dirent,
+                    const char *child_dirent,
                     apr_pool_t *pool);
 
 /**
- * This function is similar as svn_uri_is_child(), except that it supports
+ * This function is similar to svn_uri_is_child(), except that it supports
  * only relative paths.
  *
  * @since New in 1.7.
  */
 const char *
-svn_relpath_is_child(const char *relpath1,
-                     const char *relpath2,
+svn_relpath_is_child(const char *parent_relpath,
+                     const char *child_relpath,
                      apr_pool_t *pool);
 
-/** Return TRUE if @a dirent1 is an ancestor of @a dirent2 or the dirents are
- * equal and FALSE otherwise.
+/** Return TRUE if @a parent_dirent is an ancestor of @a child_dirent or
+ * the dirents are equal, and FALSE otherwise.
  *
  * @since New in 1.6.
  */
 svn_boolean_t
-svn_dirent_is_ancestor(const char *path1,
-                       const char *path2);
+svn_dirent_is_ancestor(const char *parent_dirent,
+                       const char *child_dirent);
 
-/** Return TRUE if @a relpath1 is an ancestor of @a relpath2 or the relpaths
- * are equal and FALSE otherwise.
+/** Return TRUE if @a parent_relpath is an ancestor of @a child_relpath or
+ * the relpaths are equal, and FALSE otherwise.
  *
  * This function supports only relative paths.
  *
  * @since New in 1.7.
  */
 svn_boolean_t
-svn_relpath_is_ancestor(const char *relpath1,
-                        const char *relpath2);
+svn_relpath_is_ancestor(const char *parent_relpath,
+                        const char *child_relpath);
 
-/** Return TRUE if @a uri1 is an ancestor of @a uri2 or the uris are
- * equal and FALSE otherwise.
+/** Return TRUE if @a parent_uri is an ancestor of @a child_uri or
+ * the uris are equal, and FALSE otherwise.
  *
  * This function supports URLs.
  *
  * @since New in 1.7.
  */
 svn_boolean_t
-svn_uri_is_ancestor(const char *uri1,
-                    const char *uri2);
+svn_uri_is_ancestor(const char *parent_uri,
+                    const char *child_uri);
 
 
-/** Returns the relative path part of @a dirent2 that is below @a dirent1,
- * or just "" iif @a dirent1 is equal to @a dirent2. If @a dirent2 is not
- * below @a path1, return @a dirent2 completely.
+/** Return the relative path part of @a child_dirent that is below
+ * @a parent_dirent, or just "" if @a parent_dirent is equal to
+ * @a child_dirent. If @a child_dirent is not below @a parent_dirent,
+ * return @a child_dirent completely.
  *
- * This function assumes @a dirent1 and @a dirent2 are both absolute or
- * relative in the same way.
+ * This function assumes @a parent_dirent and @a child_dirent are both
+ * absolute or relative in the same way.
  *
  * @since New in 1.7.
  */
 const char *
-svn_dirent_skip_ancestor(const char *dirent1,
-                         const char *dirent2);
+svn_dirent_skip_ancestor(const char *parent_dirent,
+                         const char *child_dirent);
 
-/** Returns the relative path part of @a relpath2 that is below @a relpath1,
- * or just "" iif @a relpath1 is equal to @a relpath2. If @a relpath2 is not
- * below @a relpath1, return @a relpath2.
+/** Return the relative path part of @a child_relpath that is below
+ * @a parent_relpath, or just "" if @a parent_relpath is equal to
+ * @a child_relpath. If @a child_relpath is not below @a parent_relpath,
+ * return @a child_relpath.
  *
  * @since New in 1.7.
  */
 const char *
-svn_relpath_skip_ancestor(const char *relpath1,
-                          const char *relpath2);
+svn_relpath_skip_ancestor(const char *parent_relpath,
+                          const char *child_relpath);
 
-/** Returns the relative path part of @a uri2 that is below @a uri1, or just
- * "" iif @a uri1 is equal to @a uri2. If @a uri2 is not below @a uri1,
- * return @a uri2.
+/** Return the relative path part of @a child_uri that is below
+ * @a parent_uri, or just "" if @a parent_uri is equal to @a child_uri. If
+ * @a child_uri is not below @a parent_uri, return @a child_uri.
  *
- * This function assumes @a uri1 and @a uri2 are both absolute or relative
- * in the same way.
+ * This function assumes @a parent_uri and @a child_uri are both absolute or
+ * relative in the same way.
  *
  * @since New in 1.7.
  */
 const char *
-svn_uri_skip_ancestor(const char *uri1,
-                      const char *uri2);
+svn_uri_skip_ancestor(const char *parent_uri,
+                      const char *child_uri);
 
 /** Find the common prefix of the canonicalized dirents in @a targets
  * (an array of <tt>const char *</tt>'s), and remove redundant dirents if @a
@@ -764,20 +766,22 @@ svn_uri_condense_targets(const char **pc
                          apr_pool_t *scratch_pool);
 
 /** Check that when @a path is joined to @a base_path, the resulting path
- * is still under BASE_PATH in the local filesystem. If not, return @c FALSE.
- * If @c TRUE is returned, @a *full_path will be set to the absolute path
- * of @a path, allocated in @a pool.
+ * is still under BASE_PATH in the local filesystem. If not, set @a under_root
+ * to @c FALSE. If @a under_root is @c TRUE is returned, and @a result_path is
+ * not @c NULL, then @a *result_path will be set to the absolute path of @a
+ * path, allocated in @a result_pool.
  *
  * Note: Use of this function is strongly encouraged. Do not roll your own.
  * (http://cve.mitre.org/cgi-bin/cvename.cgi?name=2007-3846)
  *
  * @since New in 1.7.
  */
-svn_boolean_t
-svn_dirent_is_under_root(char **full_path,
+svn_error_t *
+svn_dirent_is_under_root(svn_boolean_t *under_root,
+                         const char **result_path,
                          const char *base_path,
                          const char *path,
-                         apr_pool_t *pool);
+                         apr_pool_t *result_pool);
 
 /** Set @a *dirent to the path corresponding to the file:// URL @a url, using
  * the platform-specific file:// rules.

Modified: subversion/branches/performance/subversion/include/svn_error_codes.h
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/include/svn_error_codes.h?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/include/svn_error_codes.h (original)
+++ subversion/branches/performance/subversion/include/svn_error_codes.h Mon Sep  6 20:02:15 2010
@@ -512,6 +512,11 @@ SVN_ERROR_START
              SVN_ERR_WC_CATEGORY_START + 37,
              "Previous operation was interrupted; run 'svn cleanup'")
 
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_WC_INVALID_OPERATION_DEPTH,
+             SVN_ERR_WC_CATEGORY_START + 38,
+             "This operation can not be performed with just this depth.")
+
   /* fs errors */
 
   SVN_ERRDEF(SVN_ERR_FS_GENERAL,
@@ -837,6 +842,11 @@ SVN_ERROR_START
              SVN_ERR_RA_CATEGORY_START + 10,
              "Repository root URL does not match expected root URL")
 
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_RA_SESSION_URL_MISMATCH,
+             SVN_ERR_RA_CATEGORY_START + 11,
+             "Session URL does not match expected session URL")
+
   /* ra_dav errors */
 
   SVN_ERRDEF(SVN_ERR_RA_DAV_SOCK_INIT,
@@ -969,6 +979,11 @@ SVN_ERROR_START
              SVN_ERR_RA_SERF_CATEGORY_START + 2,
              "Initialization of the GSSAPI context failed")
 
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_RA_SERF_WRAPPED_ERROR,
+             SVN_ERR_RA_SERF_CATEGORY_START + 3,
+             "While handling serf response:")
+
   /* libsvn_auth errors */
 
        /* this error can be used when an auth provider doesn't have
@@ -1160,6 +1175,11 @@ SVN_ERROR_START
              SVN_ERR_CLIENT_CATEGORY_START + 18,
              "Invalid path component strip count specified")
 
+  /** @since New in 1.7. */
+  SVN_ERRDEF(SVN_ERR_CLIENT_CYCLE_DETECTED,
+             SVN_ERR_CLIENT_CATEGORY_START + 19,
+             "Detected a cycle while processing the operation")
+
   /* misc errors */
 
   SVN_ERRDEF(SVN_ERR_BASE,

Modified: subversion/branches/performance/subversion/include/svn_fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/include/svn_fs.h?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/include/svn_fs.h (original)
+++ subversion/branches/performance/subversion/include/svn_fs.h Mon Sep  6 20:02:15 2010
@@ -1154,7 +1154,7 @@ svn_fs_path_change2_create(const svn_fs_
 
 /** Determine what has changed under a @a root.
  *
- * Allocate and return a hash @a *changed_paths_p containing descriptions
+ * Allocate and return a hash @a *changed_paths2_p containing descriptions
  * of the paths changed under @a root.  The hash is keyed with
  * <tt>const char *</tt> paths, and has #svn_fs_path_change2_t * values.
  *
@@ -1169,7 +1169,7 @@ svn_fs_path_change2_create(const svn_fs_
  * @since New in 1.6.
  */
 svn_error_t *
-svn_fs_paths_changed2(apr_hash_t **changed_paths_p,
+svn_fs_paths_changed2(apr_hash_t **changed_paths2_p,
                       svn_fs_root_t *root,
                       apr_pool_t *pool);
 

Modified: subversion/branches/performance/subversion/include/svn_props.h
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/include/svn_props.h?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/include/svn_props.h (original)
+++ subversion/branches/performance/subversion/include/svn_props.h Mon Sep  6 20:02:15 2010
@@ -264,7 +264,7 @@ svn_prop_name_is_valid(const char *prop_
  * @{
  */
 
-/* Properties whose values are interpreted as booleans (such as
+/** Properties whose values are interpreted as booleans (such as
  * svn:executable, svn:needs_lock, and svn:special) always fold their
  * value to this.
  *
@@ -319,13 +319,14 @@ svn_prop_name_is_valid(const char *prop_
  *
  * The format is a series of lines, such as:
  *
- *@verbatim
+ * <pre reason="Should use 'verbatim' instead, but Doxygen v1.6.1 & v1.7.1
+ *              then doesn't recognize the #define; presumably a bug.">
      localdir1           http://url.for.external.source/etc/
      localdir1/foo       http://url.for.external.source/foo
      localdir1/bar       http://blah.blah.blah/repositories/theirproj
      localdir1/bar/baz   http://blorg.blorg.blorg/basement/code
      localdir2           http://another.url/blah/blah/blah
-     localdir3           http://and.so.on/and/so/forth @endverbatim
+     localdir3           http://and.so.on/and/so/forth </pre>
  *
  * The subdir names on the left side are relative to the directory on
  * which this property is set.
@@ -398,9 +399,10 @@ svn_prop_name_is_valid(const char *prop_
  * For example, WebDAV RA implementations might store a versioned-resource
  * url as a WC prop like this:
  *
- * @verbatim
+ * <pre reason="Should use 'verbatim' instead, but Doxygen v1.6.1 & v1.7.1
+ *              then doesn't recognize the #define; presumably a bug.">
       name = svn:wc:dav_url
-      val  = http://www.example.com/repos/452348/e.289 @endverbatim
+      val  = http://www.example.com/repos/452348/e.289 </pre>
  *
  * The client will try to protect WC props by warning users against
  * changing them.  The client will also send them back to the RA layer

Modified: subversion/branches/performance/subversion/include/svn_ra.h
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/include/svn_ra.h?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/include/svn_ra.h (original)
+++ subversion/branches/performance/subversion/include/svn_ra.h Mon Sep  6 20:02:15 2010
@@ -65,7 +65,7 @@ svn_ra_version(void);
  * @a close_baton as appropriate.
  *
  * @a path is relative to the "root" of the session, defined by the
- * @a repos_URL passed to svn_ra_open3() vtable call.
+ * @a repos_URL passed to svn_ra_open4() vtable call.
  *
  * @a name is the name of the property to fetch. If the property is present,
  * then it is returned in @a value. Otherwise, @a *value is set to @c NULL.
@@ -294,7 +294,7 @@ typedef struct svn_ra_reporter3_t
    * implementor should assume the directory has no entries or props.
    *
    * This will *override* any previous set_path() calls made on parent
-   * paths.  @a path is relative to the URL specified in svn_ra_open3().
+   * paths.  @a path is relative to the URL specified in svn_ra_open4().
    *
    * If @a lock_token is non-NULL, it is the lock token for @a path in the WC.
    *
@@ -445,7 +445,7 @@ typedef struct svn_ra_reporter_t
 /** A collection of callbacks implemented by libsvn_client which allows
  * an RA layer to "pull" information from the client application, or
  * possibly store information.  libsvn_client passes this vtable to
- * svn_ra_open3().
+ * svn_ra_open4().
  *
  * Each routine takes a @a callback_baton originally provided with the
  * vtable.
@@ -580,8 +580,19 @@ svn_ra_create_callbacks(svn_ra_callbacks
 typedef struct svn_ra_session_t svn_ra_session_t;
 
 /**
- * Open a repository session to @a repos_URL.  Return an opaque object
- * representing this session in @a *session_p, allocated in @a pool.
+ * Open a repository access session to the repository at @a repos_URL,
+ * or inform the caller regarding a correct URL by which to access
+ * that repository.
+ *
+ * If @a repos_URL can be used successfully to access the repository,
+ * set @a *session_p to an opaque object representing a repository
+ * session for the repository and (if @a corrected_url is non-NULL)
+ * set @a *corrected_url to NULL.  If there's a better URL that the
+ * caller should try and @a corrected_url is non-NULL, set
+ * @a *session_p to NULL and @a *corrected_url to the corrected URL.  If
+ * there's a better URL that the caller should try, and @a
+ * corrected_url is NULL, return an #SVN_ERR_RA_SESSION_URL_MISMATCH
+ * error.  Allocate all returned items in @a pool.
  *
  * Return @c SVN_ERR_RA_UUID_MISMATCH if @a uuid is non-NULL and not equal
  * to the UUID of the repository at @c repos_URL.
@@ -598,8 +609,25 @@ typedef struct svn_ra_session_t svn_ra_s
  *
  * @see svn_client_open_ra_session().
  *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_ra_open4(svn_ra_session_t **session_p,
+             const char **corrected_url,
+             const char *repos_URL,
+             const char *uuid,
+             const svn_ra_callbacks2_t *callbacks,
+             void *callback_baton,
+             apr_hash_t *config,
+             apr_pool_t *pool);
+
+/** Similar to svn_ra_open4(), but with @a corrected_url always passed
+ * as @c NULL.
+ *
  * @since New in 1.5.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
  */
+SVN_DEPRECATED
 svn_error_t *
 svn_ra_open3(svn_ra_session_t **session_p,
              const char *repos_URL,
@@ -1157,7 +1185,7 @@ svn_ra_do_switch(svn_ra_session_t *sessi
  *
  * Get status as deeply as @a depth indicates. If @a depth is
  * #svn_depth_unknown, get the status down to the ambient depth of the
- * working copy. If @depth is deeper than the working copy, include changes
+ * working copy. If @a depth is deeper than the working copy, include changes
  * that would be needed to populate the working copy to that depth.
  *
  * The caller may not perform any RA operations using @a session
@@ -1568,8 +1596,9 @@ svn_ra_get_location_segments(svn_ra_sess
  * empty file.  In the following calls, the delta will be against the
  * fulltext contents for the previous call.
  *
- * If @a include_merged_revisions is TRUE, revisions which a included as a
- * result of a merge between @a start and @a end will be included.
+ * If @a include_merged_revisions is TRUE, revisions which are
+ * included as a result of a merge between @a start and @a end will be
+ * included.
  *
  * @note This functionality is not available in pre-1.1 servers.  If the
  * server doesn't implement it, an alternative (but much slower)

Modified: subversion/branches/performance/subversion/include/svn_ra_svn.h
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/include/svn_ra_svn.h?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/include/svn_ra_svn.h (original)
+++ subversion/branches/performance/subversion/include/svn_ra_svn.h Mon Sep  6 20:02:15 2010
@@ -302,11 +302,11 @@ svn_ra_svn_flush(svn_ra_svn_conn_t *conn
  * Use the '!' format specifier to write partial tuples when you have
  * to transmit an array or other unusual data.  For example, to write
  * a tuple containing a revision, an array of words, and a boolean:
- * @verbatim
+ * @code
      SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "r(!", rev));
      for (i = 0; i < n; i++)
        SVN_ERR(svn_ra_svn_write_word(conn, pool, words[i]));
-     SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!)b", flag)); @endverbatim
+     SVN_ERR(svn_ra_svn_write_tuple(conn, pool, "!)b", flag)); @endcode
  */
 svn_error_t *
 svn_ra_svn_write_tuple(svn_ra_svn_conn_t *conn,

Modified: subversion/branches/performance/subversion/include/svn_repos.h
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/include/svn_repos.h?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/include/svn_repos.h (original)
+++ subversion/branches/performance/subversion/include/svn_repos.h Mon Sep  6 20:02:15 2010
@@ -2323,10 +2323,6 @@ svn_repos_node_from_baton(void *edit_bat
 /** @since New in 1.5. */
 #define SVN_REPOS_DUMPFILE_TEXT_DELTA_BASE_CHECKSUM  \
                                         SVN_REPOS_DUMPFILE_TEXT_DELTA_BASE_MD5
-/** @since New in 1.7. */
-#define SVN_REPOS_DUMPFILE_PROP_CONTENT_MD5          "Prop-content-md5"
-/** @since New in 1.7. */
-#define SVN_REPOS_DUMPFILE_PROP_CONTENT_SHA1         "Prop-content-sha1"
 
 /**
  * Verify the contents of the file system in @a repos.

Modified: subversion/branches/performance/subversion/include/svn_sorts.h
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/include/svn_sorts.h?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/include/svn_sorts.h (original)
+++ subversion/branches/performance/subversion/include/svn_sorts.h Mon Sep  6 20:02:15 2010
@@ -76,10 +76,10 @@ typedef struct svn_sort__item_t {
  * @c apr_array_header_t.  For example, to convert hash @a hsh to a sorted
  * array, do this:
  *
- * @verbatim
-     apr_array_header_t *hdr;
-     hdr = svn_sort__hash (hsh, @c svn_sort_compare_items_as_paths, pool);
-   @endverbatim
+ * @code
+     apr_array_header_t *array;
+     array = svn_sort__hash(hsh, svn_sort_compare_items_as_paths, pool);
+   @endcode
  */
 int
 svn_sort_compare_items_as_paths(const svn_sort__item_t *a,

Modified: subversion/branches/performance/subversion/include/svn_types.h
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/include/svn_types.h?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/include/svn_types.h (original)
+++ subversion/branches/performance/subversion/include/svn_types.h Mon Sep  6 20:02:15 2010
@@ -131,6 +131,16 @@ svn__apr_hash_index_klen(const apr_hash_
 void *
 svn__apr_hash_index_val(const apr_hash_index_t *hi);
 
+/** On Windows, APR_STATUS_IS_ENOTDIR includes several kinds of
+ * invalid-pathname error but not this one, so we include it. */
+/* ### This fix should go into APR. */
+#ifndef WIN32
+#define SVN__APR_STATUS_IS_ENOTDIR(s)  APR_STATUS_IS_ENOTDIR(s)
+#else
+#define SVN__APR_STATUS_IS_ENOTDIR(s)  (APR_STATUS_IS_ENOTDIR(s) \
+                      || ((s) == APR_OS_START_SYSERR + ERROR_INVALID_NAME))
+#endif
+
 /** @} */
 
 /** The various types of nodes in the Subversion filesystem. */
@@ -601,6 +611,10 @@ typedef struct svn_commit_info_t
   /** error message from post-commit hook, or NULL. */
   const char *post_commit_err;
 
+  /** repository root, may be @c NULL if unknown.
+      @since New in 1.7. */
+  const char *repos_root;
+
 } svn_commit_info_t;
 
 

Modified: subversion/branches/performance/subversion/include/svn_wc.h
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/include/svn_wc.h?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/include/svn_wc.h (original)
+++ subversion/branches/performance/subversion/include/svn_wc.h Mon Sep  6 20:02:15 2010
@@ -1086,6 +1086,11 @@ typedef enum svn_wc_notify_action_t
    * @since New in 1.7. */
   svn_wc_notify_patch_hunk_already_applied,
 
+  /** The server has instructed the client to follow a URL
+   * redirection.
+   * @since New in 1.7. */
+  svn_wc_notify_url_redirect
+
 } svn_wc_notify_action_t;
 
 
@@ -1249,7 +1254,7 @@ typedef struct svn_wc_notify_t {
    * @since New in 1.7 */
   svn_revnum_t old_revision;
 
-  /* These fields are used by svn patch to identify the
+  /** These fields are used by svn patch to identify the
    * hunk the notification is for. They are line-based
    * offsets and lengths parsed from the unidiff hunk header.
    * @since New in 1.7. */
@@ -1258,11 +1263,11 @@ typedef struct svn_wc_notify_t {
   svn_linenum_t hunk_modified_start;
   svn_linenum_t hunk_modified_length;
 
-  /* The line at which a hunk was matched (and applied).
+  /** The line at which a hunk was matched (and applied).
    * @since New in 1.7. */
   svn_linenum_t hunk_matched_line;
 
-  /* The fuzz factor the hunk was applied with.
+  /** The fuzz factor the hunk was applied with.
    * @since New in 1.7 */
   int hunk_fuzz;
 
@@ -1419,11 +1424,11 @@ typedef svn_error_t *(*svn_wc_get_file_t
  */
 typedef enum svn_wc_conflict_action_t
 {
-  svn_wc_conflict_action_edit,    /* attempting to change text or props */
-  svn_wc_conflict_action_add,     /* attempting to add object */
-  svn_wc_conflict_action_delete,  /* attempting to delete object */
-  svn_wc_conflict_action_replace  /* attempting to replace object,
-                                     @since New in 1.7 */
+  svn_wc_conflict_action_edit,    /**< attempting to change text or props */
+  svn_wc_conflict_action_add,     /**< attempting to add object */
+  svn_wc_conflict_action_delete,  /**< attempting to delete object */
+  svn_wc_conflict_action_replace  /**< attempting to replace object,
+                                       @since New in 1.7 */
 } svn_wc_conflict_action_t;
 
 
@@ -2065,20 +2070,20 @@ svn_wc__conflict_description2_dup(
  */
 typedef enum svn_wc_conflict_choice_t
 {
-  /* Don't resolve the conflict now.  Let libsvn_wc mark the path
+  /** Don't resolve the conflict now.  Let libsvn_wc mark the path
      'conflicted', so user can run 'svn resolved' later. */
   svn_wc_conflict_choose_postpone,
 
-  /* If there were files to choose from, select one as a way of
+  /** If there were files to choose from, select one as a way of
      resolving the conflict here and now.  libsvn_wc will then do the
      work of "installing" the chosen file.
   */
-  svn_wc_conflict_choose_base,            /* original version */
-  svn_wc_conflict_choose_theirs_full,     /* incoming version */
-  svn_wc_conflict_choose_mine_full,       /* own version */
-  svn_wc_conflict_choose_theirs_conflict, /* incoming (for conflicted hunks) */
-  svn_wc_conflict_choose_mine_conflict,   /* own (for conflicted hunks) */
-  svn_wc_conflict_choose_merged           /* merged version */
+  svn_wc_conflict_choose_base,            /**< original version */
+  svn_wc_conflict_choose_theirs_full,     /**< incoming version */
+  svn_wc_conflict_choose_mine_full,       /**< own version */
+  svn_wc_conflict_choose_theirs_conflict, /**< incoming (for conflicted hunks) */
+  svn_wc_conflict_choose_mine_conflict,   /**< own (for conflicted hunks) */
+  svn_wc_conflict_choose_merged           /**< merged version */
 
 } svn_wc_conflict_choice_t;
 
@@ -2709,13 +2714,20 @@ svn_wc_text_modified_p(svn_boolean_t *mo
                        svn_wc_adm_access_t *adm_access,
                        apr_pool_t *pool);
 
-
 /** Set @a *modified_p to non-zero if @a path's properties are modified
  * with regard to the base revision, else set @a modified_p to zero.
  * @a adm_access must be an access baton for @a path.
  *
- * If you want to use this with a post-wc-ng working copy, just call
- * svn_wc_get_prop_diffs2() and examine the output.
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_props_modified_p2(svn_boolean_t *modified_p,
+                         svn_wc_context_t* wc_ctx,
+                         const char *local_abspath,
+                          apr_pool_t *scratch_pool);
+
+/** Similar to svn_wc_props_modified_p2(), but with a relative path and
+ * adm_access baton.
  *
  * @deprecated Provided for backward compatibility with the 1.6 API.
  */
@@ -3496,7 +3508,7 @@ enum svn_wc_status_kind
     /** text or props have been modified */
     svn_wc_status_modified,
 
-    /** local mods received repos mods */
+    /** local mods received repos mods (### unused) */
     svn_wc_status_merged,
 
     /** local mods received conflicting repos mods */
@@ -4215,12 +4227,15 @@ svn_wc_status_set_repos_locks(void *set_
  * is used for accessing the working copy and must contain a write lock for
  * the parent directory of @a dst_abspath,
  *
+ * If metadata_only is TRUE then this a database only operation and
+ * the working directories and files are not copied.
+ *
  * @a src_abspath must be a file or directory under version control;
  * the parent of @a dst_abspath must be a directory under version control
  * in the same working copy; @a dst_abspath will be the name of the copied
- * item, and it must not exist already.  Note that when @a src points to a
- * versioned file, the working file doesn't necessarily exist in which case
- * its text-base is used instead.
+ * item, and it must not exist already if metadata_only is FALSE.  Note that
+ * when @a src points to a versioned file, the working file doesn't
+ * necessarily exist in which case its text-base is used instead.
  *
  * If @a cancel_func is non-NULL, call it with @a cancel_baton at
  * various points during the operation.  If it returns an error
@@ -4235,7 +4250,7 @@ svn_wc_status_set_repos_locks(void *set_
  * @par Important:
  * This is a variant of svn_wc_add4().  No changes will happen
  * to the repository until a commit occurs.  This scheduling can be
- * removed with svn_client_revert2().
+ * removed with svn_client_revert4().
  *
  * @since New in 1.7.
  */
@@ -4243,6 +4258,7 @@ svn_error_t *
 svn_wc_copy3(svn_wc_context_t *wc_ctx,
              const char *src_abspath,
              const char *dst_abspath,
+             svn_boolean_t metadata_only,
              svn_cancel_func_t cancel_func,
              void *cancel_baton,
              svn_wc_notify_func2_t notify_func,
@@ -4393,7 +4409,7 @@ svn_wc_delete(const char *path,
  * and anything below it will be scheduled for addition inside the parent
  * working copy as a copy of the original location. The separate working
  * copy will be integrated by this step. In this case, which is only used
- * by code like that of 'svn cp URL@rev path' @a copyfrom_url and
+ * by code like that of "svn cp URL@rev path" @a copyfrom_url and
  * @a copyfrom_rev MUST BE the the url and revision of @a local_abspath
  * in the separate working copy.
  *
@@ -5947,6 +5963,10 @@ svn_wc_canonicalize_svn_prop(const svn_s
  * appear as a diff against their copy source, or whether such paths will
  * appear as if they were newly added in their entirety.
  *
+ * If @a use_git_diff_format is TRUE, copied paths will be treated as added
+ * if they weren't modified after being copied. This allows the callbacks
+ * to generate appropriate --git diff headers for such files.
+ *
  * If @a use_text_base is TRUE, then compare the repository against
  * the working copy's text-base files, rather than the working files.
  *
@@ -5975,6 +5995,7 @@ svn_wc_get_diff_editor6(const svn_delta_
                         svn_depth_t depth,
                         svn_boolean_t ignore_ancestry,
                         svn_boolean_t show_copies_as_adds,
+                        svn_boolean_t use_git_diff_format,
                         svn_boolean_t use_text_base,
                         svn_boolean_t reverse_order,
                         const apr_array_header_t *changelists,
@@ -5986,7 +6007,7 @@ svn_wc_get_diff_editor6(const svn_delta_
 /**
  * Similar to svn_wc_get_diff_editor6(), but with an
  * #svn_wc_diff_callbacks3_t instead of #svn_wc_diff_callbacks4_t,
- * and @a show_copies_as_adds set to @c FALSE.
+ * @a show_copies_as_adds, and @a use_git_diff_format set to @c FALSE.
  *
  * @since New in 1.6.
  *
@@ -6128,6 +6149,10 @@ svn_wc_get_diff_editor(svn_wc_adm_access
  * appear as a diff against their copy source, or whether such paths will
  * appear as if they were newly added in their entirety.
  *
+ * If @a use_git_diff_format is TRUE, copied paths will be treated as added
+ * if they weren't modified after being copied. This allows the callbacks
+ * to generate appropriate --git diff headers for such files.
+ *
  * @a changelists is an array of <tt>const char *</tt> changelist
  * names, used as a restrictive filter on items whose differences are
  * reported; that is, don't generate diffs about any item unless
@@ -6148,6 +6173,7 @@ svn_wc_diff6(svn_wc_context_t *wc_ctx,
              svn_depth_t depth,
              svn_boolean_t ignore_ancestry,
              svn_boolean_t show_copies_as_adds,
+             svn_boolean_t use_git_diff_format,
              const apr_array_header_t *changelists,
              svn_cancel_func_t cancel_func,
              void *cancel_baton,
@@ -6155,8 +6181,9 @@ svn_wc_diff6(svn_wc_context_t *wc_ctx,
 
 /**
  * Similar to svn_wc_diff6(), but with a #svn_wc_diff_callbacks3_t argument
- * instead of #svn_wc_diff_callbacks4_t, and @a show_copies_as_adds set to
- * @c FALSE. It also doesn't allow specifying a cancel function.
+ * instead of #svn_wc_diff_callbacks4_t, @a show_copies_as_adds,
+ * and @a use_git_diff_format set to * @c FALSE.
+ * It also doesn't allow specifying a cancel function.
  *
  * @since New in 1.6.
  *
@@ -6948,6 +6975,23 @@ svn_wc_revert(const char *path,
               void *notify_baton,
               apr_pool_t *pool);
 
+/**
+ * Restores a missing node, @a local_abspath using the @a wc_ctx. Records
+ * the new last modified time of the file for status processing.
+ *
+ * If @a use_commit_times is TRUE, then set restored files' timestamps
+ * to their last-commit-times.
+ *
+ * ### Before Single-DB this function can only restore missing files.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc_restore(svn_wc_context_t *wc_ctx,
+               const char *local_abspath,
+               svn_boolean_t use_commit_times,
+               apr_pool_t *scratch_pool);
+
 
 /* Tmp files */
 
@@ -7013,15 +7057,17 @@ svn_wc_create_tmp_file(apr_file_t **fp,
  * @c SVN_WC_TRANSLATE_TO_NF is specified, against @a versioned_file itself
  * if @c SVN_WC_TRANSLATE_FROM_NF is specified.
  *
- * Output files are created in the temp file area belonging to
- * @a versioned_file.  By default they will be deleted at pool cleanup.
- *
- * If @c SVN_WC_TRANSLATE_NO_OUTPUT_CLEANUP is specified, the default
- * pool cleanup handler to remove @a *xlated_path is not registered.
+ * If a new output file is created, it is created in the temp file area
+ * belonging to @a versioned_file.  By default it will be deleted at pool
+ * cleanup.  If @c SVN_WC_TRANSLATE_NO_OUTPUT_CLEANUP is specified, the
+ * default pool cleanup handler to remove @a *xlated_path is not registered.
+ * If the input file is returned as the output, its lifetime is not
+ * specified.
  *
  * If an error is returned, the effect on @a *xlated_path is undefined.
  *
  * @since New in 1.4
+ * @deprecated Provided for compatibility with the 1.6 API
  */
 SVN_DEPRECATED
 svn_error_t *
@@ -7062,6 +7108,7 @@ svn_wc_translated_file(const char **xlat
  * svn_wc_translated_file().
  *
  * @since New in 1.5.
+ * @deprecated Provided for compatibility with the 1.6 API.
  */
 SVN_DEPRECATED
 svn_error_t *

Modified: subversion/branches/performance/subversion/libsvn_client/add.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/libsvn_client/add.c?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/libsvn_client/add.c (original)
+++ subversion/branches/performance/subversion/libsvn_client/add.c Mon Sep  6 20:02:15 2010
@@ -657,6 +657,8 @@ static svn_error_t *
 mkdir_urls(const apr_array_header_t *urls,
            svn_boolean_t make_parents,
            const apr_hash_t *revprop_table,
+           svn_commit_callback2_t commit_callback,
+           void *commit_baton,
            svn_client_ctx_t *ctx,
            apr_pool_t *pool)
 {
@@ -689,9 +691,9 @@ mkdir_urls(const apr_array_header_t *url
       const char *first_url = APR_ARRAY_IDX(urls, 0, const char *);
       apr_pool_t *iterpool = svn_pool_create(pool);
 
-      SVN_ERR(svn_client__open_ra_session_internal(&ra_session, first_url,
-                                                   NULL, NULL, FALSE,
-                                                   TRUE, ctx, pool));
+      SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL,
+                                                   first_url, NULL, NULL,
+                                                   FALSE, TRUE, ctx, pool));
 
       for (i = 0; i < urls->nelts; i++)
         {
@@ -791,8 +793,9 @@ mkdir_urls(const apr_array_header_t *url
   /* Open an RA session for the URL. Note that we don't have a local
      directory, nor a place to put temp files. */
   if (!ra_session)
-    SVN_ERR(svn_client__open_ra_session_internal(&ra_session, common, NULL,
-                                                 NULL, FALSE, TRUE, ctx, pool));
+    SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, common,
+                                                 NULL, NULL, FALSE, TRUE,
+                                                 ctx, pool));
 
   /* URI-decode each target. */
   for (i = 0; i < targets->nelts; i++)
@@ -805,8 +808,8 @@ mkdir_urls(const apr_array_header_t *url
   /* Fetch RA commit editor */
   SVN_ERR(svn_ra_get_commit_editor3(ra_session, &editor, &edit_baton,
                                     commit_revprops,
-                                    ctx->commit_callback2,
-                                    ctx->commit_baton,
+                                    commit_callback,
+                                    commit_baton,
                                     NULL, TRUE, /* No lock tokens */
                                     pool));
 
@@ -867,6 +870,8 @@ svn_error_t *
 svn_client_mkdir4(const apr_array_header_t *paths,
                   svn_boolean_t make_parents,
                   const apr_hash_t *revprop_table,
+                  svn_commit_callback2_t commit_callback,
+                  void *commit_baton,
                   svn_client_ctx_t *ctx,
                   apr_pool_t *pool)
 {
@@ -875,7 +880,8 @@ svn_client_mkdir4(const apr_array_header
 
   if (svn_path_is_url(APR_ARRAY_IDX(paths, 0, const char *)))
     {
-      SVN_ERR(mkdir_urls(paths, make_parents, revprop_table, ctx, pool));
+      SVN_ERR(mkdir_urls(paths, make_parents, revprop_table, commit_callback,
+                         commit_baton, ctx, pool));
     }
   else
     {

Modified: subversion/branches/performance/subversion/libsvn_client/changelist.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/libsvn_client/changelist.c?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/libsvn_client/changelist.c (original)
+++ subversion/branches/performance/subversion/libsvn_client/changelist.c Mon Sep  6 20:02:15 2010
@@ -72,7 +72,11 @@ set_node_changelist(const char *local_ab
   /* We only care about files right now. */
   if (kind != svn_node_file)
     {
-      if (b->ctx->notify_func2)
+      /* Notify, unless it's a directory being removed from a changelist.
+         (That is in order to not spam during 'svn cl --remove -R'.)
+       */
+      if (b->ctx->notify_func2
+          && ! (b->changelist == NULL && kind == svn_node_dir))
         b->ctx->notify_func2(b->ctx->notify_baton2,
                              svn_wc_create_notify(local_abspath,
                                                   svn_wc_notify_skip,

Modified: subversion/branches/performance/subversion/libsvn_client/client.h
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/libsvn_client/client.h?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/libsvn_client/client.h (original)
+++ subversion/branches/performance/subversion/libsvn_client/client.h Mon Sep  6 20:02:15 2010
@@ -349,7 +349,9 @@ svn_client__default_walker_error_handler
 #define SVN_CLIENT__HAS_LOG_MSG_FUNC(ctx) \
         ((ctx)->log_msg_func3 || (ctx)->log_msg_func2 || (ctx)->log_msg_func)
 
-/* Open an RA session, returning it in *RA_SESSION.
+/* Open an RA session, returning it in *RA_SESSION or a corrected URL
+   in *CORRECTED_URL.  (This function mirrors svn_ra_open4(), which
+   see, regarding the interpretation and handling of these two parameters.)
 
    The root of the session is specified by BASE_URL and BASE_DIR.
 
@@ -375,6 +377,7 @@ svn_client__default_walker_error_handler
    avoid confusion with the public API svn_client_open_ra_session(). */
 svn_error_t *
 svn_client__open_ra_session_internal(svn_ra_session_t **ra_session,
+                                     const char **corrected_url,
                                      const char *base_url,
                                      const char *base_dir_abspath,
                                      const apr_array_header_t *commit_items,

Modified: subversion/branches/performance/subversion/libsvn_client/cmdline.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/libsvn_client/cmdline.c?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/libsvn_client/cmdline.c (original)
+++ subversion/branches/performance/subversion/libsvn_client/cmdline.c Mon Sep  6 20:02:15 2010
@@ -121,10 +121,18 @@ check_root_url_of_target(const char **ro
       /* It is OK if the given target does not exist, it just means
        * we will not be able to determine the root url from this particular
        * argument.
+       *
+       * If the target itself is a URL to a repository that does not exist,
+       * that's fine, too. The callers will deal with this argument in an
+       * appropriate manter if it does not make any sense.
+       *
+       * Also tolerate locally added targets ("bad revision" error).
        */
       if ((err->apr_err == SVN_ERR_ENTRY_NOT_FOUND)
           || (err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
-          || (err->apr_err == SVN_ERR_WC_NOT_WORKING_COPY))
+          || (err->apr_err == SVN_ERR_WC_NOT_WORKING_COPY)
+          || (err->apr_err == SVN_ERR_RA_LOCAL_REPOS_OPEN_FAILED)
+          || (err->apr_err == SVN_ERR_CLIENT_BAD_REVISION))
         {
           svn_error_clear(err);
           return SVN_NO_ERROR;

Modified: subversion/branches/performance/subversion/libsvn_client/commit.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/libsvn_client/commit.c?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/libsvn_client/commit.c (original)
+++ subversion/branches/performance/subversion/libsvn_client/commit.c Mon Sep  6 20:02:15 2010
@@ -637,7 +637,7 @@ get_ra_editor(svn_ra_session_t **ra_sess
   apr_hash_t *commit_revprops;
 
   /* Open an RA session to URL. */
-  SVN_ERR(svn_client__open_ra_session_internal(ra_session, base_url,
+  SVN_ERR(svn_client__open_ra_session_internal(ra_session, NULL, base_url,
                                                base_dir_abspath, commit_items,
                                                is_commit, !is_commit,
                                                ctx, pool));
@@ -676,6 +676,8 @@ svn_client_import4(const char *path,
                    svn_boolean_t no_ignore,
                    svn_boolean_t ignore_unknown_node_types,
                    const apr_hash_t *revprop_table,
+                   svn_commit_callback2_t commit_callback,
+                   void *commit_baton,
                    svn_client_ctx_t *ctx,
                    apr_pool_t *pool)
 {
@@ -694,6 +696,11 @@ svn_client_import4(const char *path,
   const char *dir;
   apr_pool_t *subpool;
 
+  if (svn_path_is_url(path))
+    return svn_error_return(svn_error_createf(SVN_ERR_ILLEGAL_TARGET, NULL,
+                                              _("'%s' is not a local path"),
+                                              path));
+
   SVN_ERR(svn_dirent_get_absolute(&local_abspath, path, pool));
   base_dir_abspath = local_abspath;
 
@@ -760,8 +767,7 @@ svn_client_import4(const char *path,
   while ((err = get_ra_editor(&ra_session,
                               &editor, &edit_baton, ctx, url, base_dir_abspath,
                               log_msg, NULL, revprop_table, FALSE, NULL, TRUE,
-                              ctx->commit_callback2, ctx->commit_baton,
-                              subpool)));
+                              commit_callback, commit_baton, subpool)));
 
   /* Reverse the order of the components we added to our NEW_ENTRIES array. */
   if (new_entries->nelts)
@@ -923,6 +929,7 @@ post_process_commit_item(svn_wc_committe
   svn_boolean_t loop_recurse = FALSE;
   svn_boolean_t remove_lock;
 
+#ifndef SVN_WC__SINGLE_DB
   /* Is it a missing, deleted directory?
 
      ### Temporary: once we centralise this sort of node is just a
@@ -939,6 +946,7 @@ post_process_commit_item(svn_wc_committe
         return svn_wc__temp_mark_missing_not_present(item->path,
                                                      wc_ctx, scratch_pool);
     }
+#endif
 
   if ((item->state_flags & SVN_CLIENT_COMMIT_ITEM_ADD)
       && (item->kind == svn_node_dir)
@@ -1031,6 +1039,8 @@ svn_client_commit5(const apr_array_heade
                    svn_boolean_t keep_changelists,
                    const apr_array_header_t *changelists,
                    const apr_hash_t *revprop_table,
+                   svn_commit_callback2_t commit_callback,
+                   void *commit_baton,
                    svn_client_ctx_t *ctx,
                    apr_pool_t *pool)
 {
@@ -1192,8 +1202,8 @@ svn_client_commit5(const apr_array_heade
                                      pool)))
     goto cleanup;
 
-  cb.original_callback = ctx->commit_callback2;
-  cb.original_baton = ctx->commit_baton;
+  cb.original_callback = commit_callback;
+  cb.original_baton = commit_baton;
   cb.info = &commit_info;
   cb.pool = pool;
 

Modified: subversion/branches/performance/subversion/libsvn_client/commit_util.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/libsvn_client/commit_util.c?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/libsvn_client/commit_util.c (original)
+++ subversion/branches/performance/subversion/libsvn_client/commit_util.c Mon Sep  6 20:02:15 2010
@@ -398,7 +398,6 @@ harvest_committables(apr_hash_t *committ
   svn_boolean_t is_added;
   const char *node_copyfrom_relpath;
   svn_revnum_t node_copyfrom_rev;
-  svn_boolean_t keep_local;
   svn_wc_context_t *wc_ctx = ctx->wc_ctx;
 
   SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
@@ -482,12 +481,9 @@ harvest_committables(apr_hash_t *committ
         }
     }
 
-  SVN_ERR(svn_wc__temp_get_keep_local(&keep_local, ctx->wc_ctx,
-                                      local_abspath, scratch_pool));
-  if (! keep_local)
-    SVN_ERR(bail_on_tree_conflicted_children(ctx->wc_ctx, local_abspath,
-                                             db_kind, depth, changelists,
-                                             scratch_pool));
+  SVN_ERR(bail_on_tree_conflicted_children(ctx->wc_ctx, local_abspath,
+                                           db_kind, depth, changelists,
+                                           scratch_pool));
 
   /* Our own URL wins if not in COPY_MODE.  In COPY_MODE the
      telescoping URLs are used. */
@@ -863,6 +859,7 @@ harvest_committables(apr_hash_t *committ
                      and depth says not to go there. */
                   continue;
                 }
+#ifndef SVN_WC__SINGLE_DB
               else
                 {
                   svn_boolean_t obstructed;
@@ -901,6 +898,7 @@ harvest_committables(apr_hash_t *committ
                         }
                     }
                 }
+#endif
             }
 
           {

Modified: subversion/branches/performance/subversion/libsvn_client/copy.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/libsvn_client/copy.c?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/libsvn_client/copy.c (original)
+++ subversion/branches/performance/subversion/libsvn_client/copy.c Mon Sep  6 20:02:15 2010
@@ -277,6 +277,7 @@ do_wc_to_wc_copies_with_write_lock(void 
       dst_abspath = svn_dirent_join(pair->dst_parent_abspath, pair->base_name,
                                     iterpool);
       err = svn_wc_copy3(b->ctx->wc_ctx, pair->src_abspath_or_url, dst_abspath,
+                         FALSE /* metadata_only */,
                          b->ctx->cancel_func, b->ctx->cancel_baton,
                          b->ctx->notify_func2, b->ctx->notify_baton2, iterpool);
       if (err)
@@ -336,7 +337,7 @@ do_wc_to_wc_moves_with_locks2(void *bato
                                 scratch_pool);
 
   SVN_ERR(svn_wc_copy3(b->ctx->wc_ctx, b->pair->src_abspath_or_url,
-                       dst_abspath,
+                       dst_abspath, FALSE /* metadata_only */,
                        b->ctx->cancel_func, b->ctx->cancel_baton,
                        b->ctx->notify_func2, b->ctx->notify_baton2,
                        scratch_pool));
@@ -444,12 +445,10 @@ do_wc_to_wc_moves(const apr_array_header
 
 
 static svn_error_t *
-wc_to_wc_copy(const apr_array_header_t *copy_pairs,
-              const char *dst_path,
-              svn_boolean_t is_move,
-              svn_boolean_t make_parents,
-              svn_client_ctx_t *ctx,
-              apr_pool_t *pool)
+verify_wc_srcs_and_dsts(const apr_array_header_t *copy_pairs,
+                        svn_boolean_t make_parents,
+                        svn_client_ctx_t *ctx,
+                        apr_pool_t *pool)
 {
   int i;
   apr_pool_t *iterpool = svn_pool_create(pool);
@@ -506,11 +505,7 @@ wc_to_wc_copy(const apr_array_header_t *
 
   svn_pool_destroy(iterpool);
 
-  /* Copy or move all targets. */
-  if (is_move)
-    return do_wc_to_wc_moves(copy_pairs, dst_path, ctx, pool);
-  else
-    return do_wc_to_wc_copies(copy_pairs, ctx, pool);
+  return SVN_NO_ERROR;
 }
 
 
@@ -723,6 +718,8 @@ static svn_error_t *
 repos_to_repos_copy(const apr_array_header_t *copy_pairs,
                     svn_boolean_t make_parents,
                     const apr_hash_t *revprop_table,
+                    svn_commit_callback2_t commit_callback,
+                    void *commit_baton,
                     svn_client_ctx_t *ctx,
                     svn_boolean_t is_move,
                     apr_pool_t *pool)
@@ -749,7 +746,7 @@ repos_to_repos_copy(const apr_array_head
      be verifying that every one of our copy source and destination
      URLs is or is beneath this sucker's repository root URL as a form
      of a cheap(ish) sanity check.  */
-  SVN_ERR(svn_client__open_ra_session_internal(&ra_session,
+  SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL,
                                                first_pair->src_abspath_or_url,
                                                NULL, NULL, FALSE, TRUE,
                                                ctx, pool));
@@ -1115,8 +1112,8 @@ repos_to_repos_copy(const apr_array_head
   /* Fetch RA commit editor. */
   SVN_ERR(svn_ra_get_commit_editor3(ra_session, &editor, &edit_baton,
                                     commit_revprops,
-                                    ctx->commit_callback2,
-                                    ctx->commit_baton,
+                                    commit_callback,
+                                    commit_baton,
                                     NULL, TRUE, /* No lock tokens */
                                     pool));
 
@@ -1151,6 +1148,8 @@ static svn_error_t *
 wc_to_repos_copy(const apr_array_header_t *copy_pairs,
                  svn_boolean_t make_parents,
                  const apr_hash_t *revprop_table,
+                 svn_commit_callback2_t commit_callback,
+                 void *commit_baton,
                  svn_client_ctx_t *ctx,
                  apr_pool_t *pool)
 {
@@ -1211,7 +1210,7 @@ wc_to_repos_copy(const apr_array_header_
     }
 
   SVN_ERR(svn_dirent_get_absolute(&top_src_abspath, top_src_path, pool));
-  SVN_ERR(svn_client__open_ra_session_internal(&ra_session, top_dst_url,
+  SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, top_dst_url,
                                                top_src_abspath, NULL, TRUE,
                                                TRUE, ctx, pool));
 
@@ -1382,15 +1381,15 @@ wc_to_repos_copy(const apr_array_header_
                                             commit_items, pool));
 
   /* Open an RA session to DST_URL. */
-  SVN_ERR(svn_client__open_ra_session_internal(&ra_session, top_dst_url,
+  SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, top_dst_url,
                                                NULL, commit_items,
                                                FALSE, FALSE, ctx, pool));
 
   /* Fetch RA commit editor. */
   SVN_ERR(svn_ra_get_commit_editor3(ra_session, &editor, &edit_baton,
                                     commit_revprops,
-                                    ctx->commit_callback2,
-                                    ctx->commit_baton, NULL,
+                                    commit_callback,
+                                    commit_baton, NULL,
                                     TRUE, /* No lock tokens */
                                     pool));
 
@@ -1769,8 +1768,9 @@ repos_to_wc_copy(const apr_array_header_
   /* Open a repository session to the longest common src ancestor.  We do not
      (yet) have a working copy, so we don't have a corresponding path and
      tempfiles cannot go into the admin area. */
-  SVN_ERR(svn_client__open_ra_session_internal(&ra_session, top_src_url, NULL,
-                                               NULL, FALSE, TRUE, ctx, pool));
+  SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL, top_src_url,
+                                               NULL, NULL, FALSE, TRUE,
+                                               ctx, pool));
 
   /* Pass null for the path, to ensure error if trying to get a
      revision based on the working copy.  */
@@ -1870,6 +1870,8 @@ try_copy(const apr_array_header_t *sourc
          svn_boolean_t make_parents,
          svn_boolean_t ignore_externals,
          const apr_hash_t *revprop_table,
+         svn_commit_callback2_t commit_callback,
+         void *commit_baton,
          svn_client_ctx_t *ctx,
          apr_pool_t *pool)
 {
@@ -2147,14 +2149,20 @@ try_copy(const apr_array_header_t *sourc
   /* Now, call the right handler for the operation. */
   if ((! srcs_are_urls) && (! dst_is_url))
     {
-      return svn_error_return(
-        wc_to_wc_copy(copy_pairs, dst_path_in, is_move, make_parents, ctx,
-                      pool));
+      SVN_ERR(verify_wc_srcs_and_dsts(copy_pairs, make_parents, ctx, pool));
+
+      /* Copy or move all targets. */
+      if (is_move)
+        return svn_error_return(do_wc_to_wc_moves(copy_pairs, dst_path_in, ctx,
+                                                  pool));
+      else
+        return svn_error_return(do_wc_to_wc_copies(copy_pairs, ctx, pool));
     }
   else if ((! srcs_are_urls) && (dst_is_url))
     {
       return svn_error_return(
-        wc_to_repos_copy(copy_pairs, make_parents, revprop_table, ctx, pool));
+        wc_to_repos_copy(copy_pairs, make_parents, revprop_table,
+                         commit_callback, commit_baton, ctx, pool));
     }
   else if ((srcs_are_urls) && (! dst_is_url))
     {
@@ -2165,8 +2173,9 @@ try_copy(const apr_array_header_t *sourc
   else
     {
       return svn_error_return(
-        repos_to_repos_copy(copy_pairs, make_parents,
-                            revprop_table, ctx, is_move, pool));
+        repos_to_repos_copy(copy_pairs, make_parents, revprop_table,
+                            commit_callback, commit_baton, ctx, is_move,
+                            pool));
     }
 }
 
@@ -2180,6 +2189,8 @@ svn_client_copy6(const apr_array_header_
                  svn_boolean_t make_parents,
                  svn_boolean_t ignore_externals,
                  const apr_hash_t *revprop_table,
+                 svn_commit_callback2_t commit_callback,
+                 void *commit_baton,
                  svn_client_ctx_t *ctx,
                  apr_pool_t *pool)
 {
@@ -2196,6 +2207,7 @@ svn_client_copy6(const apr_array_header_
                  make_parents,
                  ignore_externals,
                  revprop_table,
+                 commit_callback, commit_baton,
                  ctx,
                  subpool);
 
@@ -2228,6 +2240,7 @@ svn_client_copy6(const apr_array_header_
                      make_parents,
                      ignore_externals,
                      revprop_table,
+                     commit_callback, commit_baton,
                      ctx,
                      subpool);
     }
@@ -2244,6 +2257,8 @@ svn_client_move6(const apr_array_header_
                  svn_boolean_t move_as_child,
                  svn_boolean_t make_parents,
                  const apr_hash_t *revprop_table,
+                 svn_commit_callback2_t commit_callback,
+                 void *commit_baton,
                  svn_client_ctx_t *ctx,
                  apr_pool_t *pool)
 {
@@ -2278,6 +2293,7 @@ svn_client_move6(const apr_array_header_
                  make_parents,
                  FALSE,
                  revprop_table,
+                 commit_callback, commit_baton,
                  ctx,
                  subpool);
 
@@ -2307,6 +2323,7 @@ svn_client_move6(const apr_array_header_
                      make_parents,
                      FALSE,
                      revprop_table,
+                     commit_callback, commit_baton,
                      ctx,
                      subpool);
     }

Modified: subversion/branches/performance/subversion/libsvn_client/delete.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/libsvn_client/delete.c?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/libsvn_client/delete.c (original)
+++ subversion/branches/performance/subversion/libsvn_client/delete.c Mon Sep  6 20:02:15 2010
@@ -115,7 +115,7 @@ svn_client__can_delete(const char *path,
      be deleted. */
   return svn_error_return(svn_client_status5(NULL, ctx, path, &revision,
                                              svn_depth_infinity, FALSE,
-                                             FALSE, FALSE, FALSE,
+                                             FALSE, FALSE, FALSE, FALSE,
                                              NULL,
                                              find_undeletables, NULL,
                                              scratch_pool));
@@ -138,6 +138,8 @@ path_driver_cb_func(void **dir_baton,
 static svn_error_t *
 delete_urls(const apr_array_header_t *paths,
             const apr_hash_t *revprop_table,
+            svn_commit_callback2_t commit_callback,
+            void *commit_baton,
             svn_client_ctx_t *ctx,
             apr_pool_t *pool)
 {
@@ -214,9 +216,9 @@ delete_urls(const apr_array_header_t *pa
          session.  */
       if (! ra_session)
         {
-          SVN_ERR(svn_client__open_ra_session_internal(&ra_session, item_url,
-                                                       NULL, NULL, FALSE,
-                                                       TRUE, ctx, pool));
+          SVN_ERR(svn_client__open_ra_session_internal(&ra_session, NULL,
+                                                       item_url, NULL, NULL,
+                                                       FALSE, TRUE, ctx, pool));
         }
       else
         {
@@ -237,8 +239,8 @@ delete_urls(const apr_array_header_t *pa
   /* Fetch RA commit editor */
   SVN_ERR(svn_ra_get_commit_editor3(ra_session, &editor, &edit_baton,
                                     commit_revprops,
-                                    ctx->commit_callback2,
-                                    ctx->commit_baton,
+                                    commit_callback,
+                                    commit_baton,
                                     NULL, TRUE, /* No lock tokens */
                                     pool));
 
@@ -315,20 +317,37 @@ svn_client_delete4(const apr_array_heade
                    svn_boolean_t force,
                    svn_boolean_t keep_local,
                    const apr_hash_t *revprop_table,
+                   svn_commit_callback2_t commit_callback,
+                   void *commit_baton,
                    svn_client_ctx_t *ctx,
                    apr_pool_t *pool)
 {
+  svn_boolean_t is_url;
+  int i;
+
   if (! paths->nelts)
     return SVN_NO_ERROR;
 
-  if (svn_path_is_url(APR_ARRAY_IDX(paths, 0, const char *)))
+  /* Check that all targets are of the same type. */
+  is_url = svn_path_is_url(APR_ARRAY_IDX(paths, 0, const char *));
+  for (i = 1; i < paths->nelts; i++)
+    {
+      const char *path = APR_ARRAY_IDX(paths, i, const char *);
+      if (is_url != svn_path_is_url(path))
+        return svn_error_return(
+                 svn_error_create(SVN_ERR_ILLEGAL_TARGET, NULL,
+                                  _("Cannot mix repository and working copy "
+                                    "targets")));
+    }
+
+  if (is_url)
     {
-      SVN_ERR(delete_urls(paths, revprop_table, ctx, pool));
+      SVN_ERR(delete_urls(paths, revprop_table, commit_callback, commit_baton,
+                          ctx, pool));
     }
   else
     {
       apr_pool_t *subpool = svn_pool_create(pool);
-      int i;
 
       for (i = 0; i < paths->nelts; i++)
         {

Modified: subversion/branches/performance/subversion/libsvn_client/deprecated.c
URL: http://svn.apache.org/viewvc/subversion/branches/performance/subversion/libsvn_client/deprecated.c?rev=993141&r1=993140&r2=993141&view=diff
==============================================================================
--- subversion/branches/performance/subversion/libsvn_client/deprecated.c (original)
+++ subversion/branches/performance/subversion/libsvn_client/deprecated.c Mon Sep  6 20:02:15 2010
@@ -53,13 +53,8 @@
 
 /* Baton for capture_commit_info() */
 struct capture_baton_t {
-  svn_commit_callback2_t original_callback;
-  void *original_baton;
-
   svn_commit_info_t **info;
   apr_pool_t *pool;
-
-  svn_boolean_t saw_commit;
 };
 
 
@@ -74,11 +69,6 @@ capture_commit_info(const svn_commit_inf
 
   *(cb->info) = svn_commit_info_dup(commit_info, cb->pool);
 
-  if (cb->original_callback)
-    SVN_ERR((cb->original_callback)(commit_info, cb->original_baton, pool));
-
-  cb->saw_commit = TRUE;
-
   return SVN_NO_ERROR;
 }
 
@@ -124,20 +114,13 @@ svn_client_mkdir3(svn_commit_info_t **co
                   svn_client_ctx_t *ctx,
                   apr_pool_t *pool)
 {
-  svn_client_ctx_t shadow_ctx;
   struct capture_baton_t cb;
 
   cb.info = commit_info_p;
   cb.pool = pool;
-  cb.original_callback = ctx->commit_callback2;
-  cb.original_baton = ctx->commit_baton;
-
-  shadow_ctx = *ctx;
-  shadow_ctx.commit_callback2 = capture_commit_info;
-  shadow_ctx.commit_baton = &cb;
 
-  return svn_client_mkdir4(paths, make_parents, revprop_table, &shadow_ctx,
-                           pool);
+  return svn_client_mkdir4(paths, make_parents, revprop_table,
+                           capture_commit_info, &cb, ctx, pool);
 }
 
 svn_error_t *
@@ -398,21 +381,14 @@ svn_client_import3(svn_commit_info_t **c
                    svn_client_ctx_t *ctx,
                    apr_pool_t *pool)
 {
-  svn_client_ctx_t shadow_ctx;
   struct capture_baton_t cb;
 
   cb.info = commit_info_p;
   cb.pool = pool;
-  cb.original_callback = ctx->commit_callback2;
-  cb.original_baton = ctx->commit_baton;
-
-  shadow_ctx = *ctx;
-  shadow_ctx.commit_callback2 = capture_commit_info;
-  shadow_ctx.commit_baton = &cb;
 
   return svn_client_import4(path, url, depth, no_ignore,
                             ignore_unknown_node_types, revprop_table,
-                            &shadow_ctx, pool);
+                            capture_commit_info, &cb, ctx, pool);
 }
 
 svn_error_t *
@@ -460,23 +436,17 @@ svn_client_commit4(svn_commit_info_t **c
                    svn_client_ctx_t *ctx,
                    apr_pool_t *pool)
 {
-  svn_client_ctx_t shadow_ctx;
   struct capture_baton_t cb;
 
+  *commit_info_p = NULL;
   cb.info = commit_info_p;
   cb.pool = pool;
-  cb.original_callback = ctx->commit_callback2;
-  cb.original_baton = ctx->commit_baton;
-  cb.saw_commit = FALSE;
-
-  shadow_ctx = *ctx;
-  shadow_ctx.commit_callback2 = capture_commit_info;
-  shadow_ctx.commit_baton = &cb;
 
   SVN_ERR(svn_client_commit5(targets, depth, keep_locks, keep_changelists,
-                             changelists, revprop_table, &shadow_ctx, pool));
+                             changelists, revprop_table,
+                             capture_commit_info, &cb, ctx, pool));
 
-  if (!cb.saw_commit)
+  if (! *commit_info_p)
     *commit_info_p = svn_create_commit_info(pool);
 
   return SVN_NO_ERROR;
@@ -539,20 +509,14 @@ svn_client_copy5(svn_commit_info_t **com
                  svn_client_ctx_t *ctx,
                  apr_pool_t *pool)
 {
-  svn_client_ctx_t shadow_ctx;
   struct capture_baton_t cb;
 
   cb.info = commit_info_p;
   cb.pool = pool;
-  cb.original_callback = ctx->commit_callback2;
-  cb.original_baton = ctx->commit_baton;
-
-  shadow_ctx = *ctx;
-  shadow_ctx.commit_callback2 = capture_commit_info;
-  shadow_ctx.commit_baton = &cb;
 
   return svn_client_copy6(sources, dst_path, copy_as_child, make_parents,
-                          ignore_externals, revprop_table, &shadow_ctx, pool);
+                          ignore_externals, revprop_table,
+                          capture_commit_info, &cb, ctx, pool);
 }
 
 svn_error_t *
@@ -651,20 +615,14 @@ svn_client_move5(svn_commit_info_t **com
                  svn_client_ctx_t *ctx,
                  apr_pool_t *pool)
 {
-  svn_client_ctx_t shadow_ctx;
   struct capture_baton_t cb;
 
   cb.info = commit_info_p;
   cb.pool = pool;
-  cb.original_callback = ctx->commit_callback2;
-  cb.original_baton = ctx->commit_baton;
-
-  shadow_ctx = *ctx;
-  shadow_ctx.commit_callback2 = capture_commit_info;
-  shadow_ctx.commit_baton = &cb;
 
   return svn_client_move6(src_paths, dst_path, force, move_as_child,
-                          make_parents, revprop_table, &shadow_ctx, pool);
+                          make_parents, revprop_table,
+                          capture_commit_info, &cb, ctx, pool);
 }
 
 svn_error_t *
@@ -768,20 +726,13 @@ svn_client_delete3(svn_commit_info_t **c
                    svn_client_ctx_t *ctx,
                    apr_pool_t *pool)
 {
-  svn_client_ctx_t shadow_ctx;
   struct capture_baton_t cb;
 
   cb.info = commit_info_p;
   cb.pool = pool;
-  cb.original_callback = ctx->commit_callback2;
-  cb.original_baton = ctx->commit_baton;
-
-  shadow_ctx = *ctx;
-  shadow_ctx.commit_callback2 = capture_commit_info;
-  shadow_ctx.commit_baton = &cb;
 
   return svn_client_delete4(paths, force, keep_local, revprop_table,
-                            &shadow_ctx, pool);
+                            capture_commit_info, &cb, ctx, pool);
 }
 
 svn_error_t *
@@ -1487,21 +1438,14 @@ svn_client_propset3(svn_commit_info_t **
                     svn_client_ctx_t *ctx,
                     apr_pool_t *pool)
 {
-  svn_client_ctx_t shadow_ctx;
   struct capture_baton_t cb;
 
   cb.info = commit_info_p;
   cb.pool = pool;
-  cb.original_callback = ctx->commit_callback2;
-  cb.original_baton = ctx->commit_baton;
-
-  shadow_ctx = *ctx;
-  shadow_ctx.commit_callback2 = capture_commit_info;
-  shadow_ctx.commit_baton = &cb;
 
   return svn_client_propset4(propname, propval, target, depth, skip_checks,
                              base_revision_for_url, changelists, revprop_table,
-                             &shadow_ctx, pool);
+                             capture_commit_info, &cb, ctx, pool);
 }
 
 svn_error_t *
@@ -1698,8 +1642,8 @@ svn_client_status4(svn_revnum_t *result_
                                        status_baton };
 
   return svn_client_status5(result_rev, ctx, path, revision, depth, get_all,
-                            update, no_ignore, ignore_externals, changelists,
-                            status4_wrapper_func, &swb, pool);
+                            update, no_ignore, ignore_externals, TRUE,
+                            changelists, status4_wrapper_func, &swb, pool);
 }
 
 struct status3_wrapper_baton