You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2011/10/31 17:51:55 UTC

svn commit: r1195565 [2/2] - in /subversion/branches/showing-merge-info: ./ build/ build/win32/ subversion/bindings/javahl/native/ subversion/include/ subversion/include/private/ subversion/libsvn_client/ subversion/libsvn_delta/ subversion/libsvn_diff...

Modified: subversion/branches/showing-merge-info/subversion/libsvn_repos/log.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/libsvn_repos/log.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/libsvn_repos/log.c (original)
+++ subversion/branches/showing-merge-info/subversion/libsvn_repos/log.c Mon Oct 31 16:51:52 2011
@@ -663,9 +663,9 @@ fs_mergeinfo_changed(svn_mergeinfo_catal
           svn_mergeinfo_catalog_t tmp_catalog;
 
           APR_ARRAY_PUSH(query_paths, const char *) = changed_path;
-          SVN_ERR(svn_fs_get_mergeinfo(&tmp_catalog, root,
-                                       query_paths, svn_mergeinfo_inherited,
-                                       FALSE, iterpool));
+          SVN_ERR(svn_fs_get_mergeinfo2(&tmp_catalog, root,
+                                        query_paths, svn_mergeinfo_inherited,
+                                        FALSE, TRUE, iterpool, iterpool));
           tmp_mergeinfo = apr_hash_get(tmp_catalog, changed_path,
                                         APR_HASH_KEY_STRING);
           if (tmp_mergeinfo)
@@ -682,9 +682,9 @@ fs_mergeinfo_changed(svn_mergeinfo_catal
           svn_mergeinfo_catalog_t tmp_catalog;
 
           APR_ARRAY_PUSH(query_paths, const char *) = base_path;
-          SVN_ERR(svn_fs_get_mergeinfo(&tmp_catalog, base_root,
-                                       query_paths, svn_mergeinfo_inherited,
-                                       FALSE, iterpool));
+          SVN_ERR(svn_fs_get_mergeinfo2(&tmp_catalog, base_root,
+                                        query_paths, svn_mergeinfo_inherited,
+                                        FALSE, TRUE, iterpool, iterpool));
           tmp_mergeinfo = apr_hash_get(tmp_catalog, base_path,
                                         APR_HASH_KEY_STRING);
           if (tmp_mergeinfo)
@@ -835,8 +835,9 @@ get_combined_mergeinfo_changes(svn_merge
       SVN_ERR(svn_fs_revision_root(&prev_root, fs, prev_rev, iterpool));
       query_paths = apr_array_make(iterpool, 1, sizeof(const char *));
       APR_ARRAY_PUSH(query_paths, const char *) = prev_path;
-      err = svn_fs_get_mergeinfo(&catalog, prev_root, query_paths,
-                                 svn_mergeinfo_inherited, FALSE, iterpool);
+      err = svn_fs_get_mergeinfo2(&catalog, prev_root, query_paths,
+                                  svn_mergeinfo_inherited, FALSE, TRUE,
+                                  iterpool, iterpool);
       if (err && (err->apr_err == SVN_ERR_FS_NOT_FOUND ||
                   err->apr_err == SVN_ERR_FS_NOT_DIRECTORY ||
                   err->apr_err == SVN_ERR_MERGEINFO_PARSE_ERROR))
@@ -867,8 +868,9 @@ get_combined_mergeinfo_changes(svn_merge
       /* Fetch the current mergeinfo (as of REV, and including
          inherited stuff) for this path. */
       APR_ARRAY_IDX(query_paths, 0, const char *) = path;
-      SVN_ERR(svn_fs_get_mergeinfo(&catalog, root, query_paths,
-                                   svn_mergeinfo_inherited, FALSE, iterpool));
+      SVN_ERR(svn_fs_get_mergeinfo2(&catalog, root, query_paths,
+                                    svn_mergeinfo_inherited, FALSE, TRUE,
+                                    iterpool, iterpool));
 
       /* Issue #4022 again, fetch the raw inherited mergeinfo. */
       SVN_ERR(svn_fs_get_mergeinfo2(&inherited_catalog, root, query_paths,

Modified: subversion/branches/showing-merge-info/subversion/libsvn_repos/rev_hunt.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/libsvn_repos/rev_hunt.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/libsvn_repos/rev_hunt.c (original)
+++ subversion/branches/showing-merge-info/subversion/libsvn_repos/rev_hunt.c Mon Oct 31 16:51:52 2011
@@ -982,30 +982,27 @@ get_path_mergeinfo(apr_hash_t **mergeinf
                    svn_fs_t *fs,
                    const char *path,
                    svn_revnum_t revnum,
-                   apr_pool_t *pool)
+                   apr_pool_t *result_pool,
+                   apr_pool_t *scratch_pool)
 {
   svn_mergeinfo_catalog_t tmp_catalog;
   svn_fs_root_t *root;
-  apr_pool_t *subpool = svn_pool_create(pool);
-  apr_array_header_t *paths = apr_array_make(subpool, 1,
+  apr_array_header_t *paths = apr_array_make(scratch_pool, 1,
                                              sizeof(const char *));
 
   APR_ARRAY_PUSH(paths, const char *) = path;
 
-  SVN_ERR(svn_fs_revision_root(&root, fs, revnum, subpool));
+  SVN_ERR(svn_fs_revision_root(&root, fs, revnum, scratch_pool));
   /* We do not need to call svn_repos_fs_get_mergeinfo() (which performs authz)
      because we will filter out unreadable revisions in
      find_interesting_revision(), above */
-  SVN_ERR(svn_fs_get_mergeinfo(&tmp_catalog, root, paths,
-                               svn_mergeinfo_inherited, FALSE, subpool));
+  SVN_ERR(svn_fs_get_mergeinfo2(&tmp_catalog, root, paths,
+                                svn_mergeinfo_inherited, FALSE, TRUE,
+                                result_pool, scratch_pool));
 
   *mergeinfo = apr_hash_get(tmp_catalog, path, APR_HASH_KEY_STRING);
-  if (*mergeinfo)
-    *mergeinfo = svn_mergeinfo_dup(*mergeinfo, pool);
-  else
-    *mergeinfo = apr_hash_make(pool);
-
-  svn_pool_destroy(subpool);
+  if (!*mergeinfo)
+    *mergeinfo = apr_hash_make(result_pool);
 
   return SVN_NO_ERROR;
 }
@@ -1042,9 +1039,9 @@ static svn_error_t *
 get_merged_mergeinfo(apr_hash_t **merged_mergeinfo,
                      svn_repos_t *repos,
                      struct path_revision *old_path_rev,
-                     apr_pool_t *pool)
+                     apr_pool_t *result_pool,
+                     apr_pool_t *scratch_pool)
 {
-  apr_pool_t *subpool = svn_pool_create(pool);
   apr_hash_t *curr_mergeinfo, *prev_mergeinfo, *deleted, *changed;
   svn_error_t *err;
   svn_fs_root_t *root;
@@ -1054,8 +1051,8 @@ get_merged_mergeinfo(apr_hash_t **merged
   /* Getting/parsing/diffing svn:mergeinfo is expensive, so only do it
      if there is a property change. */
   SVN_ERR(svn_fs_revision_root(&root, repos->fs, old_path_rev->revnum,
-                               subpool));
-  SVN_ERR(svn_fs_paths_changed2(&changed_paths, root, subpool));
+                               scratch_pool));
+  SVN_ERR(svn_fs_paths_changed2(&changed_paths, root, scratch_pool));
   while (1)
     {
       svn_fs_path_change2_t *changed_path = apr_hash_get(changed_paths,
@@ -1065,17 +1062,17 @@ get_merged_mergeinfo(apr_hash_t **merged
         break;
       if (svn_fspath__is_root(path, strlen(path)))
         {
-          svn_pool_destroy(subpool);
           *merged_mergeinfo = NULL;
           return SVN_NO_ERROR;
         }
-      path = svn_fspath__dirname(path, subpool);
+      path = svn_fspath__dirname(path, scratch_pool);
     }
 
   /* First, find the mergeinfo difference for old_path_rev->revnum, and
      old_path_rev->revnum - 1. */
   err = get_path_mergeinfo(&curr_mergeinfo, repos->fs, old_path_rev->path,
-                           old_path_rev->revnum, subpool);
+                           old_path_rev->revnum, scratch_pool,
+                           scratch_pool);
   if (err)
     {
       if (err->apr_err == SVN_ERR_MERGEINFO_PARSE_ERROR)
@@ -1084,7 +1081,6 @@ get_merged_mergeinfo(apr_hash_t **merged
              best we can do is ignore it and act is if there are
              no mergeinfo differences. */
           svn_error_clear(err);
-          svn_pool_destroy(subpool);
           *merged_mergeinfo = NULL;
           return SVN_NO_ERROR;
         }
@@ -1095,14 +1091,14 @@ get_merged_mergeinfo(apr_hash_t **merged
     }
 
   err = get_path_mergeinfo(&prev_mergeinfo, repos->fs, old_path_rev->path,
-                           old_path_rev->revnum - 1, subpool);
+                           old_path_rev->revnum - 1, scratch_pool,
+                           scratch_pool);
   if (err && (err->apr_err == SVN_ERR_FS_NOT_FOUND
               || err->apr_err == SVN_ERR_MERGEINFO_PARSE_ERROR))
     {
       /* If the path doesn't exist in the previous revision or it does exist
          but has invalid mergeinfo (Issue #3896), assume no merges. */
       svn_error_clear(err);
-      svn_pool_destroy(subpool);
       *merged_mergeinfo = NULL;
       return SVN_NO_ERROR;
     }
@@ -1111,8 +1107,9 @@ get_merged_mergeinfo(apr_hash_t **merged
 
   /* Then calculate and merge the differences. */
   SVN_ERR(svn_mergeinfo_diff2(&deleted, &changed, prev_mergeinfo,
-                              curr_mergeinfo, FALSE, pool, subpool));
-  SVN_ERR(svn_mergeinfo_merge2(changed, deleted, pool, subpool));
+                              curr_mergeinfo, FALSE, result_pool,
+                              scratch_pool));
+  SVN_ERR(svn_mergeinfo_merge2(changed, deleted, result_pool, scratch_pool));
 
   /* Store the result. */
   if (apr_hash_count(changed))
@@ -1120,8 +1117,6 @@ get_merged_mergeinfo(apr_hash_t **merged
   else
     *merged_mergeinfo = NULL;
 
-  svn_pool_destroy(subpool);
-
   return SVN_NO_ERROR;
 }
 
@@ -1204,7 +1199,7 @@ find_interesting_revisions(apr_array_hea
 
       if (include_merged_revisions)
         SVN_ERR(get_merged_mergeinfo(&path_rev->merged_mergeinfo, repos,
-                                     path_rev, result_pool));
+                                     path_rev, result_pool, iterpool));
       else
         path_rev->merged_mergeinfo = NULL;
 

Propchange: subversion/branches/showing-merge-info/subversion/libsvn_subr/adler32.c
            ('svn:mergeinfo' removed)

Modified: subversion/branches/showing-merge-info/subversion/libsvn_subr/cmdline.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/libsvn_subr/cmdline.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/libsvn_subr/cmdline.c (original)
+++ subversion/branches/showing-merge-info/subversion/libsvn_subr/cmdline.c Mon Oct 31 16:51:52 2011
@@ -637,7 +637,7 @@ svn_cmdline__print_xml_prop(svn_stringbu
   const char *encoding = NULL;
 
   if (*outstr == NULL)
-    *outstr = svn_stringbuf_create("", pool);
+    *outstr = svn_stringbuf_create_empty(pool);
 
   if (svn_xml_is_xml_safe(propval->data, propval->len))
     {

Modified: subversion/branches/showing-merge-info/subversion/libsvn_subr/config.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/libsvn_subr/config.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/libsvn_subr/config.c (original)
+++ subversion/branches/showing-merge-info/subversion/libsvn_subr/config.c Mon Oct 31 16:51:52 2011
@@ -88,8 +88,8 @@ svn_config_create(svn_config_t **cfgp,
   cfg->pool = result_pool;
   cfg->x_pool = svn_pool_create(result_pool);
   cfg->x_values = FALSE;
-  cfg->tmp_key = svn_stringbuf_create("", result_pool);
-  cfg->tmp_value = svn_stringbuf_create("", result_pool);
+  cfg->tmp_key = svn_stringbuf_create_empty(result_pool);
+  cfg->tmp_value = svn_stringbuf_create_empty(result_pool);
   cfg->section_names_case_sensitive = section_names_case_sensitive;
 
   *cfgp = cfg;

Modified: subversion/branches/showing-merge-info/subversion/libsvn_subr/config_file.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/libsvn_subr/config_file.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/libsvn_subr/config_file.c (original)
+++ subversion/branches/showing-merge-info/subversion/libsvn_subr/config_file.c Mon Oct 31 16:51:52 2011
@@ -386,9 +386,9 @@ svn_config__parse_file(svn_config_t *cfg
                                            pool);
   ctx.line = 1;
   ctx.have_ungotten_char = FALSE;
-  ctx.section = svn_stringbuf_create("", pool);
-  ctx.option = svn_stringbuf_create("", pool);
-  ctx.value = svn_stringbuf_create("", pool);
+  ctx.section = svn_stringbuf_create_empty(pool);
+  ctx.option = svn_stringbuf_create_empty(pool);
+  ctx.value = svn_stringbuf_create_empty(pool);
 
   do
     {

Modified: subversion/branches/showing-merge-info/subversion/libsvn_subr/config_win.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/libsvn_subr/config_win.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/libsvn_subr/config_win.c (original)
+++ subversion/branches/showing-merge-info/subversion/libsvn_subr/config_win.c Mon Oct 31 16:51:52 2011
@@ -200,9 +200,9 @@ svn_config__parse_registry(svn_config_t 
 
 
   subpool = svn_pool_create(pool);
-  section = svn_stringbuf_create("", subpool);
-  option = svn_stringbuf_create("", subpool);
-  value = svn_stringbuf_create("", subpool);
+  section = svn_stringbuf_create_empty(subpool);
+  option = svn_stringbuf_create_empty(subpool);
+  value = svn_stringbuf_create_empty(subpool);
 
   /* The top-level values belong to the [DEFAULT] section */
   svn_err = parse_section(cfg, hkey, SVN_CONFIG__DEFAULT_SECTION,

Propchange: subversion/branches/showing-merge-info/subversion/libsvn_subr/hash.c
            ('svn:mergeinfo' removed)

Modified: subversion/branches/showing-merge-info/subversion/libsvn_subr/log.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/libsvn_subr/log.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/libsvn_subr/log.c (original)
+++ subversion/branches/showing-merge-info/subversion/libsvn_subr/log.c Mon Oct 31 16:51:52 2011
@@ -121,7 +121,7 @@ svn_log__get_mergeinfo(const apr_array_h
 {
   int i;
   apr_pool_t *iterpool = svn_pool_create(pool);
-  svn_stringbuf_t *space_separated_paths = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *space_separated_paths = svn_stringbuf_create_empty(pool);
 
   for (i = 0; i < paths->nelts; i++)
     {
@@ -210,8 +210,8 @@ svn_log__log(const apr_array_header_t *p
 {
   int i;
   apr_pool_t *iterpool = svn_pool_create(pool);
-  svn_stringbuf_t *space_separated_paths = svn_stringbuf_create("", pool);
-  svn_stringbuf_t *options = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *space_separated_paths = svn_stringbuf_create_empty(pool);
+  svn_stringbuf_t *options = svn_stringbuf_create_empty(pool);
 
   for (i = 0; i < paths->nelts; i++)
     {
@@ -264,7 +264,7 @@ svn_log__get_locations(const char *path,
 {
   const svn_revnum_t *revision_ptr, *revision_ptr_start, *revision_ptr_end;
   apr_pool_t *iterpool = svn_pool_create(pool);
-  svn_stringbuf_t *space_separated_revnums = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *space_separated_revnums = svn_stringbuf_create_empty(pool);
 
   revision_ptr_start = (const svn_revnum_t *)location_revisions->elts;
   revision_ptr = revision_ptr_start;
@@ -311,7 +311,7 @@ svn_log__lock(const apr_array_header_t *
 {
   int i;
   apr_pool_t *iterpool = svn_pool_create(pool);
-  svn_stringbuf_t *space_separated_paths = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *space_separated_paths = svn_stringbuf_create_empty(pool);
 
   for (i = 0; i < paths->nelts; i++)
     {
@@ -334,7 +334,7 @@ svn_log__unlock(const apr_array_header_t
 {
   int i;
   apr_pool_t *iterpool = svn_pool_create(pool);
-  svn_stringbuf_t *space_separated_paths = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *space_separated_paths = svn_stringbuf_create_empty(pool);
 
   for (i = 0; i < paths->nelts; i++)
     {

Modified: subversion/branches/showing-merge-info/subversion/libsvn_subr/mergeinfo.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/libsvn_subr/mergeinfo.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/libsvn_subr/mergeinfo.c (original)
+++ subversion/branches/showing-merge-info/subversion/libsvn_subr/mergeinfo.c Mon Oct 31 16:51:52 2011
@@ -1853,7 +1853,7 @@ svn_rangelist_to_string(svn_string_t **o
                         const apr_array_header_t *rangelist,
                         apr_pool_t *pool)
 {
-  svn_stringbuf_t *buf = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *buf = svn_stringbuf_create_empty(pool);
 
   if (rangelist->nelts > 0)
     {
@@ -1890,7 +1890,7 @@ mergeinfo_to_stringbuf(svn_stringbuf_t *
                        const char *prefix,
                        apr_pool_t *pool)
 {
-  *output = svn_stringbuf_create("", pool);
+  *output = svn_stringbuf_create_empty(pool);
 
   if (apr_hash_count(input) > 0)
     {
@@ -1923,16 +1923,10 @@ svn_error_t *
 svn_mergeinfo_to_string(svn_string_t **output, svn_mergeinfo_t input,
                         apr_pool_t *pool)
 {
-  if (apr_hash_count(input) > 0)
-    {
-      svn_stringbuf_t *mergeinfo_buf;
-      SVN_ERR(mergeinfo_to_stringbuf(&mergeinfo_buf, input, NULL, pool));
-      *output = svn_stringbuf__morph_into_string(mergeinfo_buf);
-    }
-  else
-    {
-      *output = svn_string_create("", pool);
-    }
+  svn_stringbuf_t *mergeinfo_buf;
+
+  SVN_ERR(mergeinfo_to_stringbuf(&mergeinfo_buf, input, NULL, pool));
+  *output = svn_stringbuf__morph_into_string(mergeinfo_buf);
   return SVN_NO_ERROR;
 }
 
@@ -2289,7 +2283,7 @@ svn_mergeinfo__catalog_to_formatted_stri
       apr_array_header_t *sorted_catalog =
         svn_sort__hash(catalog, svn_sort_compare_items_as_paths, pool);
 
-      output_buf = svn_stringbuf_create("", pool);
+      output_buf = svn_stringbuf_create_empty(pool);
       for (i = 0; i < sorted_catalog->nelts; i++)
         {
           svn_sort__item_t elt =
@@ -2362,7 +2356,7 @@ svn_mergeinfo__to_formatted_string(svn_s
 #endif
 
   *output = output_buf ? svn_stringbuf__morph_into_string(output_buf)
-                       : svn_string_create("", pool);
+                       : svn_string_create_empty(pool);
   return SVN_NO_ERROR;
 }
 

Modified: subversion/branches/showing-merge-info/subversion/libsvn_subr/opt.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/libsvn_subr/opt.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/libsvn_subr/opt.c (original)
+++ subversion/branches/showing-merge-info/subversion/libsvn_subr/opt.c Mon Oct 31 16:51:52 2011
@@ -944,7 +944,7 @@ svn_opt_parse_revprop(apr_hash_t **revpr
   else
     {
       SVN_ERR(svn_utf_cstring_to_utf8(&propname, revprop_spec, pool));
-      propval = svn_string_create("", pool);
+      propval = svn_string_create_empty(pool);
     }
 
   if (!svn_prop_name_is_valid(propname))

Modified: subversion/branches/showing-merge-info/subversion/libsvn_subr/prompt.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/libsvn_subr/prompt.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/libsvn_subr/prompt.c (original)
+++ subversion/branches/showing-merge-info/subversion/libsvn_subr/prompt.c Mon Oct 31 16:51:52 2011
@@ -95,7 +95,7 @@ prompt(const char **result,
   apr_file_t *fp;
   char c;
 
-  svn_stringbuf_t *strbuf = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *strbuf = svn_stringbuf_create_empty(pool);
 
   status = apr_file_open_stdin(&fp, pool);
   if (status)

Modified: subversion/branches/showing-merge-info/subversion/libsvn_subr/quoprint.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/libsvn_subr/quoprint.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/libsvn_subr/quoprint.c (original)
+++ subversion/branches/showing-merge-info/subversion/libsvn_subr/quoprint.c Mon Oct 31 16:51:52 2011
@@ -120,7 +120,7 @@ encode_data(void *baton, const char *dat
 {
   struct encode_baton *eb = baton;
   apr_pool_t *subpool = svn_pool_create(eb->pool);
-  svn_stringbuf_t *encoded = svn_stringbuf_create("", subpool);
+  svn_stringbuf_t *encoded = svn_stringbuf_create_empty(subpool);
   apr_size_t enclen;
   svn_error_t *err = SVN_NO_ERROR;
 
@@ -177,7 +177,7 @@ svn_quoprint_encode(svn_stream_t *output
 svn_stringbuf_t *
 svn_quoprint_encode_string(const svn_stringbuf_t *str, apr_pool_t *pool)
 {
-  svn_stringbuf_t *encoded = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *encoded = svn_stringbuf_create_empty(pool);
   int linelen = 0;
 
   encode_bytes(encoded, str->data, str->len, &linelen);
@@ -254,7 +254,7 @@ decode_data(void *baton, const char *dat
 
   /* Decode this block of data.  */
   subpool = svn_pool_create(db->pool);
-  decoded = svn_stringbuf_create("", subpool);
+  decoded = svn_stringbuf_create_empty(subpool);
   decode_bytes(decoded, data, *len, db->buf, &db->buflen);
 
   /* Write the output, clean up, go home.  */
@@ -300,7 +300,7 @@ svn_quoprint_decode(svn_stream_t *output
 svn_stringbuf_t *
 svn_quoprint_decode_string(const svn_stringbuf_t *str, apr_pool_t *pool)
 {
-  svn_stringbuf_t *decoded = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *decoded = svn_stringbuf_create_empty(pool);
   char ingroup[4];
   int ingrouplen = 0;
 

Modified: subversion/branches/showing-merge-info/subversion/libsvn_subr/subst.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/libsvn_subr/subst.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/libsvn_subr/subst.c (original)
+++ subversion/branches/showing-merge-info/subversion/libsvn_subr/subst.c Mon Oct 31 16:51:52 2011
@@ -1467,7 +1467,7 @@ stream_translated(svn_stream_t *stream,
     = create_translation_baton(eol_str, translated_eol, repair, keywords,
                                expand, result_pool);
   baton->written = FALSE;
-  baton->readbuf = svn_stringbuf_create("", result_pool);
+  baton->readbuf = svn_stringbuf_create_empty(result_pool);
   baton->readbuf_off = 0;
   baton->iterpool = svn_pool_create(result_pool);
   baton->buf = apr_palloc(result_pool, SVN__TRANSLATION_BUF_SIZE);
@@ -1522,7 +1522,7 @@ translate_cstring(const char **dst,
     }
 
   /* Create a stringbuf and wrapper stream to hold the output. */
-  dst_stringbuf = svn_stringbuf_create("", pool);
+  dst_stringbuf = svn_stringbuf_create_empty(pool);
   dst_stream = svn_stream_from_stringbuf(dst_stringbuf, pool);
 
   if (translated_eol)
@@ -1813,7 +1813,7 @@ svn_subst_create_specialfile(svn_stream_
   /* SCRATCH_POOL may not exist after the function returns. */
   baton->pool = result_pool;
 
-  baton->write_content = svn_stringbuf_create("", result_pool);
+  baton->write_content = svn_stringbuf_create_empty(result_pool);
   baton->write_stream = svn_stream_from_stringbuf(baton->write_content,
                                                   result_pool);
 
@@ -1852,7 +1852,7 @@ svn_subst_stream_from_specialfile(svn_st
       baton->read_stream = NULL;
     }
 
-  baton->write_content = svn_stringbuf_create("", pool);
+  baton->write_content = svn_stringbuf_create_empty(pool);
   baton->write_stream = svn_stream_from_stringbuf(baton->write_content, pool);
 
   *stream = svn_stream_create(baton, pool);

Modified: subversion/branches/showing-merge-info/subversion/libsvn_subr/svn_base64.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/libsvn_subr/svn_base64.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/libsvn_subr/svn_base64.c (original)
+++ subversion/branches/showing-merge-info/subversion/libsvn_subr/svn_base64.c Mon Oct 31 16:51:52 2011
@@ -208,7 +208,7 @@ static svn_error_t *
 encode_data(void *baton, const char *data, apr_size_t *len)
 {
   struct encode_baton *eb = baton;
-  svn_stringbuf_t *encoded = svn_stringbuf_create("", eb->scratch_pool);
+  svn_stringbuf_t *encoded = svn_stringbuf_create_empty(eb->scratch_pool);
   apr_size_t enclen;
   svn_error_t *err = SVN_NO_ERROR;
 
@@ -227,7 +227,7 @@ static svn_error_t *
 finish_encoding_data(void *baton)
 {
   struct encode_baton *eb = baton;
-  svn_stringbuf_t *encoded = svn_stringbuf_create("", eb->scratch_pool);
+  svn_stringbuf_t *encoded = svn_stringbuf_create_empty(eb->scratch_pool);
   apr_size_t enclen;
   svn_error_t *err = SVN_NO_ERROR;
 
@@ -267,7 +267,7 @@ svn_base64_encode_string2(const svn_stri
                           svn_boolean_t break_lines,
                           apr_pool_t *pool)
 {
-  svn_stringbuf_t *encoded = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *encoded = svn_stringbuf_create_empty(pool);
   unsigned char ingroup[3];
   size_t ingrouplen = 0;
   size_t linelen = 0;
@@ -461,7 +461,7 @@ decode_data(void *baton, const char *dat
   svn_error_t *err = SVN_NO_ERROR;
 
   /* Decode this block of data.  */
-  decoded = svn_stringbuf_create("", db->scratch_pool);
+  decoded = svn_stringbuf_create_empty(db->scratch_pool);
   decode_bytes(decoded, data, *len, db->buf, &db->buflen, &db->done);
 
   /* Write the output, clean up, go home.  */
@@ -507,7 +507,7 @@ svn_base64_decode(svn_stream_t *output, 
 const svn_string_t *
 svn_base64_decode_string(const svn_string_t *str, apr_pool_t *pool)
 {
-  svn_stringbuf_t *decoded = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *decoded = svn_stringbuf_create_empty(pool);
   unsigned char ingroup[4];
   int ingrouplen = 0;
   svn_boolean_t done = FALSE;
@@ -531,7 +531,7 @@ base64_from_checksum(const svn_checksum_
   unsigned char ingroup[3];
   size_t ingrouplen = 0;
   size_t linelen = 0;
-  checksum_str = svn_stringbuf_create("", pool);
+  checksum_str = svn_stringbuf_create_empty(pool);
 
   encode_bytes(checksum_str, checksum->digest,
                svn_checksum_size(checksum), ingroup, &ingrouplen,

Modified: subversion/branches/showing-merge-info/subversion/libsvn_subr/svn_string.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/libsvn_subr/svn_string.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/libsvn_subr/svn_string.c (original)
+++ subversion/branches/showing-merge-info/subversion/libsvn_subr/svn_string.c Mon Oct 31 16:51:52 2011
@@ -28,7 +28,6 @@
 #include <apr.h>
 
 #include <string.h>      /* for memcpy(), memcmp(), strlen() */
-#include <apr_lib.h>     /* for apr_isspace() */
 #include <apr_fnmatch.h>
 #include "svn_string.h"  /* loads "svn_types.h" and <apr_pools.h> */
 #include "svn_ctype.h"
@@ -133,6 +132,19 @@ create_string(const char *data, apr_size
   return new_string;
 }
 
+static char empty_buffer[1] = {0};
+  
+svn_string_t *
+svn_string_create_empty(apr_pool_t *pool)
+{
+  svn_string_t *new_string = apr_palloc(pool, sizeof(*new_string));
+  new_string->data = empty_buffer;
+  new_string->len = 0;
+
+  return new_string;
+}
+
+
 svn_string_t *
 svn_string_ncreate(const char *bytes, apr_size_t size, apr_pool_t *pool)
 {
@@ -286,6 +298,17 @@ create_stringbuf(char *data, apr_size_t 
 }
 
 svn_stringbuf_t *
+svn_stringbuf_create_empty(apr_pool_t *pool)
+{
+  /* All instances share the same zero-length buffer.
+   * Some algorithms, however, assume that they may write
+   * the terminating zero. So, empty_buffer must be writable 
+   * (a simple (char *)"" will cause SEGFAULTs). */
+
+  return create_stringbuf(empty_buffer, 0, 0, pool);
+}
+
+svn_stringbuf_t *
 svn_stringbuf_create_ensure(apr_size_t blocksize, apr_pool_t *pool)
 {
   void *mem;
@@ -724,7 +747,7 @@ svn_cstring_join(const apr_array_header_
                  const char *separator,
                  apr_pool_t *pool)
 {
-  svn_stringbuf_t *new_str = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *new_str = svn_stringbuf_create_empty(pool);
   size_t sep_len = strlen(separator);
   int i;
 

Propchange: subversion/branches/showing-merge-info/subversion/libsvn_subr/svn_temp_serializer.c
            ('svn:mergeinfo' removed)

Modified: subversion/branches/showing-merge-info/subversion/libsvn_subr/win32_xlate.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/libsvn_subr/win32_xlate.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/libsvn_subr/win32_xlate.c (original)
+++ subversion/branches/showing-merge-info/subversion/libsvn_subr/win32_xlate.c Mon Oct 31 16:51:52 2011
@@ -185,7 +185,7 @@ svn_subr__win32_xlate_to_stringbuf(win32
 
   if (src_length == 0)
   {
-    *dest = svn_stringbuf_create("", pool);
+    *dest = svn_stringbuf_create_empty(pool);
     return APR_SUCCESS;
   }
 

Modified: subversion/branches/showing-merge-info/subversion/libsvn_subr/xml.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/libsvn_subr/xml.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/libsvn_subr/xml.c (original)
+++ subversion/branches/showing-merge-info/subversion/libsvn_subr/xml.c Mon Oct 31 16:51:52 2011
@@ -115,7 +115,7 @@ xml_escape_cdata(svn_stringbuf_t **outst
   const char *p = data, *q;
 
   if (*outstr == NULL)
-    *outstr = svn_stringbuf_create("", pool);
+    *outstr = svn_stringbuf_create_empty(pool);
 
   while (1)
     {
@@ -277,7 +277,7 @@ svn_xml_fuzzy_escape(const char *string,
   if (q == end)
     return string;
 
-  outstr = svn_stringbuf_create("", pool);
+  outstr = svn_stringbuf_create_empty(pool);
   while (1)
     {
       q = p;
@@ -479,7 +479,7 @@ svn_xml_make_header2(svn_stringbuf_t **s
 {
 
   if (*str == NULL)
-    *str = svn_stringbuf_create("", pool);
+    *str = svn_stringbuf_create_empty(pool);
   svn_stringbuf_appendcstr(*str, "<?xml version=\"1.0\"");
   if (encoding)
     {
@@ -646,7 +646,7 @@ void svn_xml_make_close_tag(svn_stringbu
                             const char *tagname)
 {
   if (*str == NULL)
-    *str = svn_stringbuf_create("", pool);
+    *str = svn_stringbuf_create_empty(pool);
 
   svn_stringbuf_appendcstr(*str, "</");
   svn_stringbuf_appendcstr(*str, tagname);

Modified: subversion/branches/showing-merge-info/subversion/libsvn_wc/props.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/libsvn_wc/props.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/libsvn_wc/props.c (original)
+++ subversion/branches/showing-merge-info/subversion/libsvn_wc/props.c Mon Oct 31 16:51:52 2011
@@ -595,9 +595,9 @@ prop_conflict_from_skel(const svn_string
                                   incoming_base, scratch_pool);
 
   if (mine == NULL)
-    mine = svn_string_create("", scratch_pool);
+    mine = svn_string_create_empty(scratch_pool);
   if (incoming == NULL)
-    incoming = svn_string_create("", scratch_pool);
+    incoming = svn_string_create_empty(scratch_pool);
 
   /* Pick a suitable base for the conflict diff.
    * The incoming value is always a change,
@@ -607,7 +607,7 @@ prop_conflict_from_skel(const svn_string
       if (incoming_base)
         original = incoming_base;
       else
-        original = svn_string_create("", scratch_pool);
+        original = svn_string_create_empty(scratch_pool);
     }
   else if (incoming_base && svn_string_compare(original, mine))
     original = incoming_base;

Modified: subversion/branches/showing-merge-info/subversion/mod_dav_svn/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/mod_dav_svn/util.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/mod_dav_svn/util.c (original)
+++ subversion/branches/showing-merge-info/subversion/mod_dav_svn/util.c Mon Oct 31 16:51:52 2011
@@ -709,7 +709,7 @@ request_body_to_string(svn_string_t **re
     }
   else
     {
-      buf = svn_stringbuf_create("", pool);
+      buf = svn_stringbuf_create_empty(pool);
     }
 
   brigade = apr_brigade_create(r->pool, r->connection->bucket_alloc);
@@ -765,7 +765,7 @@ request_body_to_string(svn_string_t **re
   apr_brigade_destroy(brigade);
 
   /* Make an svn_string_t from our svn_stringbuf_t. */
-  *request_str = svn_string_create("", pool);
+  *request_str = svn_string_create_empty(pool);
   (*request_str)->data = buf->data;
   (*request_str)->len = buf->len;
   return OK;

Modified: subversion/branches/showing-merge-info/subversion/svn/blame-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/svn/blame-cmd.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/svn/blame-cmd.c (original)
+++ subversion/branches/showing-merge-info/subversion/svn/blame-cmd.c Mon Oct 31 16:51:52 2011
@@ -283,7 +283,7 @@ svn_cl__blame(apr_getopt_t *os,
   if (! opt_state->xml)
     SVN_ERR(svn_stream_for_stdout(&bl.out, pool));
   else
-    bl.sbuf = svn_stringbuf_create("", pool);
+    bl.sbuf = svn_stringbuf_create_empty(pool);
 
   bl.opt_state = opt_state;
 

Modified: subversion/branches/showing-merge-info/subversion/svn/diff-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/svn/diff-cmd.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/svn/diff-cmd.c (original)
+++ subversion/branches/showing-merge-info/subversion/svn/diff-cmd.c Mon Oct 31 16:51:52 2011
@@ -89,7 +89,7 @@ summarize_xml(const svn_client_diff_summ
   /* Full path to the object being diffed.  This is created by taking the
    * baton, and appending the target's relative path. */
   const char *path = *(const char **)baton;
-  svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
 
   /* Tack on the target path, so we can differentiate between different parts
    * of the output when we're given multiple targets. */
@@ -197,7 +197,7 @@ svn_cl__diff(apr_getopt_t *os,
 
       SVN_ERR(svn_cl__xml_print_header("diff", pool));
 
-      sb = svn_stringbuf_create("", pool);
+      sb = svn_stringbuf_create_empty(pool);
       svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "paths", NULL);
       SVN_ERR(svn_cl__error_checked_fputs(sb->data, stdout));
     }
@@ -419,7 +419,7 @@ svn_cl__diff(apr_getopt_t *os,
 
   if (opt_state->xml)
     {
-      svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+      svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
       svn_xml_make_close_tag(&sb, pool, "paths");
       SVN_ERR(svn_cl__error_checked_fputs(sb->data, stdout));
       SVN_ERR(svn_cl__xml_print_footer("diff", pool));

Modified: subversion/branches/showing-merge-info/subversion/svn/info-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/svn/info-cmd.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/svn/info-cmd.c (original)
+++ subversion/branches/showing-merge-info/subversion/svn/info-cmd.c Mon Oct 31 16:51:52 2011
@@ -85,7 +85,7 @@ print_info_xml(void *baton,
                const svn_client_info2_t *info,
                apr_pool_t *pool)
 {
-  svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
   const char *rev_str;
   const char *path_prefix = baton;
 

Modified: subversion/branches/showing-merge-info/subversion/svn/list-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/svn/list-cmd.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/svn/list-cmd.c (original)
+++ subversion/branches/showing-merge-info/subversion/svn/list-cmd.c Mon Oct 31 16:51:52 2011
@@ -156,7 +156,7 @@ print_dirent_xml(void *baton,
   if (pb->ctx->cancel_func)
     SVN_ERR(pb->ctx->cancel_func(pb->ctx->cancel_baton));
 
-  sb = svn_stringbuf_create("", pool);
+  sb = svn_stringbuf_create_empty(pool);
 
   svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "entry",
                         "kind", svn_cl__node_kind_str_xml(dirent->kind),
@@ -276,7 +276,7 @@ svn_cl__list(apr_getopt_t *os,
 
       if (opt_state->xml)
         {
-          svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+          svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
           svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "list",
                                 "path", truepath[0] == '\0' ? "." : truepath,
                                 NULL);
@@ -308,7 +308,7 @@ svn_cl__list(apr_getopt_t *os,
 
       if (opt_state->xml)
         {
-          svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+          svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
           svn_xml_make_close_tag(&sb, pool, "list");
           SVN_ERR(svn_cl__error_checked_fputs(sb->data, stdout));
         }

Modified: subversion/branches/showing-merge-info/subversion/svn/log-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/svn/log-cmd.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/svn/log-cmd.c (original)
+++ subversion/branches/showing-merge-info/subversion/svn/log-cmd.c Mon Oct 31 16:51:52 2011
@@ -227,8 +227,7 @@ log_entry_receiver(void *baton,
           svn_sort__item_t *item = &(APR_ARRAY_IDX(sorted_paths, i,
                                                    svn_sort__item_t));
           const char *path = item->key;
-          svn_log_changed_path2_t *log_item
-            = apr_hash_get(log_entry->changed_paths2, item->key, item->klen);
+          svn_log_changed_path2_t *log_item = item->value;
           const char *copy_data = "";
 
           if (lb->ctx->cancel_func)
@@ -432,7 +431,7 @@ log_entry_receiver_xml(void *baton,
 {
   struct log_receiver_baton *lb = baton;
   /* Collate whole log message into sb before printing. */
-  svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
   char *revstr;
   const char *author;
   const char *date;

Modified: subversion/branches/showing-merge-info/subversion/svn/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/svn/main.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/svn/main.c (original)
+++ subversion/branches/showing-merge-info/subversion/svn/main.c Mon Oct 31 16:51:52 2011
@@ -123,7 +123,7 @@ typedef enum svn_cl__longopt_t {
   opt_diff,
   opt_internal_diff,
   opt_use_git_diff_format,
-  opt_allow_mixed_revisions,
+  opt_allow_mixed_revisions
 } svn_cl__longopt_t;
 
 
@@ -659,56 +659,47 @@ const svn_opt_subcommand_desc2_t svn_cl_
      {'c', N_("the change made in revision ARG")}} },
 
   { "merge", svn_cl__merge, {0}, N_
-    ("Apply the differences between two sources to a working copy path.\n"
-     "usage: 1. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]\n"
+    ("Merge changes into a working copy.\n"
+     "usage: 0. merge SOURCE[@REV] [TARGET_WCPATH]\n"
+     "          (the 'sync' merge)\n"
+     "       1. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]\n"
+     "          (the 'cherry-pick' merge)\n"
      "       2. merge --reintegrate SOURCE[@REV] [TARGET_WCPATH]\n"
+     "          (the 'reintegrate' merge)\n"
      "       3. merge SOURCE1[@N] SOURCE2[@M] [TARGET_WCPATH]\n"
+     "          (the '2-URL' merge)\n"
      "\n"
-     "  1. The first form is called a \"sync\", or \"cherry-pick\", merge:\n"
-     "     svn merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]\n"
+     "  0. This form is called a 'sync' (aka 'catch-up') merge:\n"
      "\n"
-     "     A sync merge is used to merge into a branch any unmerged changes\n"
-     "     made on its immediate ancestor branch.\n"
-     "\n"
-     "     A cherry-picking merge is used to merge specific revisions from\n"
-     "     one branch to another.\n"
-     "\n"
-     "     SOURCE is usually a URL. The source of a cherry-picking merge can\n"
-     "     also be a working copy path, in which case the corresponding URL\n"
-     "     of the path is used.\n"
-     "\n"
-     "     If REV is specified, it is used as the peg revision for SOURCE,\n"
-     "     i.e. SOURCE is looked up in the repository at revision REV.\n"
-     "     If REV is not specified, the HEAD revision is assumed.\n"
-     "\n"
-     "     TARGET_WCPATH is a working copy of the branch the changes will\n"
-     "     be applied to.\n"
+     "       svn merge SOURCE[@REV] [TARGET_WCPATH]\n"
      "\n"
-     "     '-r N:M' specifies a revision range to be merged. The difference\n"
-     "     between SOURCE@REV as it existed at revision N, and SOURCE@REV at\n"
-     "     it existed at revision M, is merged into TARGET_WCPATH.  If no\n"
-     "     revision range is specified, the default range of 0:REV is used.\n"
-     "     \n"
-     "     If mergeinfo within TARGET_WCPATH indicates that revisions within\n"
-     "     the range were already merged, changes made in those revisions\n"
-     "     are not merged again. If needed, the range is broken into multiple\n"
-     "     sub-ranges, and each sub-range is merged separately.\n"
+     "     A sync merge is used to merge into a branch any unmerged changes\n"
+     "     made on its immediate ancestor branch. This uses merge tracking\n"
+     "     to find which changes need to be merged.\n"
      "\n"
-     "     If N is greater than M, the range is a \"reverse range\".\n"
-     "     A reverse range can be used to undo changes made to SOURCE\n"
-     "     between revisions N and M.\n"
+     "     SOURCE specifies the branch from where the changes will be pulled,\n"
+     "     and TARGET_WCPATH specifies the working copy of the target branch,\n"
+     "     into which the changes will be applied. Normally SOURCE and\n"
+     "     TARGET_WCPATH should each point to the root of a branch. If changes\n"
+     "     need to be merged from and to only a subtree of the branch, then\n"
+     "     the path to that subtree must be included in both SOURCE and\n"
+     "     TARGET_WCPATH.\n"
+     "\n"
+     "     SOURCE is usually a URL. The optional '@REV' specifies both the peg\n"
+     "     revision of the URL and the latest revision that will be considered\n"
+     "     for merging; the default value is the HEAD revision. If SOURCE is a\n"
+     "     working copy path, the corresponding URL of the path is used, and\n"
+     "     the default value of 'REV' is the base revision.\n"
      "\n"
-     "     '-c M' is equivalent to the range '-r <M-1>:M'.\n"
-     "     '-c -M' does the reverse: '-r M:<M-1>'.\n"
-     "     \n"
-     "     Multiple '-c' and/or '-r' options may be specified and mixing of\n"
-     "     forward and reverse ranges is allowed.\n"
+     "     TARGET_WCPATH is a working copy path; the default is '.'.\n"
      "\n"
      "       - Sync Merge Example -\n"
      "\n"
-     "     A feature is being developed on a branch called \"feature\".\n"
-     "     The feature branch is regularly synced with trunk to keep up with\n"
-     "     changes made there.\n"
+     "     A feature is being developed on a branch called 'feature'. The\n"
+     "     feature branch is regularly synced with trunk to keep up with the\n"
+     "     changes made there. The previous sync merges are not shown on this\n"
+     "     diagram, and the last of them was done when HEAD was r100, and now\n"
+     "     HEAD is r200.\n"
      "\n"
      "                 feature  +------------------------o-----\n"
      "                         /                         ^\n"
@@ -716,19 +707,53 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "                       /          .............../\n"
      "         trunk ------+------------L--------------R------\n"
      "                                r100           r200\n"
-     "     \n"
-     "     In the above diagram, L marks the \"left\" side of the merge\n"
-     "     (trunk@100), and R marks the \"right\" side of the merge (trunk@200).\n"
-     "     The difference between the left and right side is merged into the target.\n"
      "\n"
-     "     To perform the merge, check out a working copy of the feature\n"
+     "     Subversion will locate all the changes on 'trunk' that have not yet\n"
+     "     been merged into the target. In this case that is a single range,\n"
+     "     r100:200. In the diagram above, L marks the 'left' side of the\n"
+     "     range (trunk@100) and R marks the 'right' side of the range\n"
+     "     (trunk@200). The difference between L and R will be merged into\n"
+     "     the target.\n"
+     "\n"
+     "     To perform this sync merge, check out a working copy of the feature\n"
      "     branch and run the following command in the top-level directory\n"
      "     of the working copy:\n"
      "\n"
      "         svn merge ^/trunk\n"
      "\n"
-     "     The default revision range is -r0:HEAD, so any unmerged changes\n"
-     "     will be merged.\n"
+     "\n"
+     "  1. This form is called a 'cherry-pick' merge:\n"
+     "\n"
+     "       svn merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [TARGET_WCPATH]\n"
+     "\n"
+     "     A cherry-picking merge is used to merge specific revisions (or\n"
+     "     revision ranges) from one branch to another. By default, this form\n"
+     "     of merge uses merge tracking to avoid re-merging any of the specified\n"
+     "     revisions that have already been merged. If the --ignore-ancestry\n"
+     "     option is given then that does not happen.\n"
+     "\n"
+     "     The SOURCE and TARGET_WCPATH arguments are the same as for a 'sync'\n"
+     "     merge, except that REV acts only as a peg and does not specify the\n"
+     "     latest revision that will be considered for merging.\n"
+     "\n"
+     "     The revision ranges to be merged are specified by the '-r' and/or\n"
+     "     '-c' options. '-r N:M' refers to the difference in the history of\n"
+     "     the source branch between revision N and revision M. '-c M' is\n"
+     "     equivalent to '-r <M-1>:M'. Each such difference is merged into\n"
+     "     TARGET_WCPATH.\n"
+     "\n"
+     "     If mergeinfo within TARGET_WCPATH indicates that revisions within\n"
+     "     the range were already merged, changes made in those revisions\n"
+     "     are not merged again. If needed, the range is broken into multiple\n"
+     "     sub-ranges, and each sub-range is merged separately.\n"
+     "\n"
+     "     If N is greater than M in '-r N:M', or with '-c -M' which is\n"
+     "     equivalent to '-r M:<M-1>', the range is a 'reverse range'.\n"
+     "     A reverse range can be used to undo changes made to SOURCE\n"
+     "     between revisions N and M.\n"
+     "\n"
+     "     Multiple '-c' and/or '-r' options may be specified and mixing of\n"
+     "     forward and reverse ranges is allowed.\n"
      "\n"
      "       - Cherry-picking Merge Example -\n"
      "\n"
@@ -741,10 +766,10 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "                      /                          |\n"
      "         trunk ------+--------------------------LR-----\n"
      "                                                r50\n"
-     "     \n"
+     "\n"
      "     In the above diagram, L marks the left side of the merge (trunk@49)\n"
-     "     and R marks the right side of the merge (trunk@50).\n"
-     "     The difference between the left and right side is merged into the target.\n"
+     "     and R marks the right side of the merge (trunk@50). The difference\n"
+     "     between the left and right side is merged into the target.\n"
      "\n"
      "     To perform the merge, check out a working copy of the release\n"
      "     branch and run the following command in the top-level directory\n"
@@ -758,8 +783,9 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "         svn merge -c50,54,60 ^/trunk\n"
      "\n"
      "\n"
-     "  2. The second form is called a \"reintegrate merge\":\n"
-     "     svn merge --reintegrate SOURCE[@REV] [TARGET_WCPATH]\n"
+     "  2. This form is called a 'reintegrate merge':\n"
+     "\n"
+     "       svn merge --reintegrate SOURCE[@REV] [TARGET_WCPATH]\n"
      "\n"
      "     SOURCE is the URL of a branch to be merged back into (usually) its\n"
      "     immediate ancestor branch.  If REV is specified, it is used a\n"
@@ -772,10 +798,10 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "\n"
      "       - Reintegrate Merge Example -\n"
      "\n"
-     "     A feature has been developed on a branch called \"feature\".\n"
+     "     A feature has been developed on a branch called 'feature'.\n"
      "     The feature branch started as a copy of trunk@W. Work on the\n"
      "     feature has completed and it should be merged back into the trunk.\n"
-     "     \n"
+     "\n"
      "     The feature branch was last synced with its immediate ancestor,\n"
      "     the trunk, in revision X. So the difference between trunk@X and\n"
      "     feature@HEAD contains the complete set of changes that implement\n"
@@ -813,8 +839,9 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "     be done on the feature branch, it should be deleted and then re-created.\n"
      "\n"
      "\n"
-     "  3. The third form is called a \"2-URL merge\":\n"
-     "     svn merge SOURCE1[@N] SOURCE2[@M] [TARGET_WCPATH]\n"
+     "  3. This form is called a '2-URL merge':\n"
+     "\n"
+     "       svn merge SOURCE1[@N] SOURCE2[@M] [TARGET_WCPATH]\n"
      "\n"
      "     Two source URLs are specified, together with two revisions N and M.\n"
      "     The two sources to be compared at the specified revisions, and the\n"
@@ -840,9 +867,9 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "\n"
      "       - 2-URL Merge Example -\n"
      "\n"
-     "     A feature has been developed on a branch called \"feature\".\n"
+     "     A feature has been developed on a branch called 'feature'.\n"
      "     Development for the upcoming 3.0 release has happened in parallel on\n"
-     "     the \"3.x-release\" branch. The work on the feature branch must be\n"
+     "     the '3.x-release' branch. The work on the feature branch must be\n"
      "     merged to the 3.x-release branch. However, the feature branch and\n"
      "     the 3.x-release branch are not directly related, so a 2-URL merge\n"
      "     is needed.\n"
@@ -869,7 +896,7 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "     To perform the merge, check out a working copy of the 3.x-release\n"
      "     branch and run the following command in the top-level directory\n"
      "     of the working copy:\n"
-     "       \n"
+     "\n"
      "         svn merge ^/trunk@500 ^/feature\n"
      "\n"
      "     Before performing a 2-URL merge, it is a good idea to preview the\n"
@@ -1009,8 +1036,8 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "\n"
      "  Hint: If the patch file was created with Subversion, it will contain\n"
      "        the number of a revision N the patch will cleanly apply to\n"
-     "        (look for lines like \"--- foo/bar.txt        (revision N)\").\n"
-     "        To avoid rejects, first update to the revision N using \n"
+     "        (look for lines like '--- foo/bar.txt        (revision N)').\n"
+     "        To avoid rejects, first update to the revision N using\n"
      "        'svn update -r N', apply the patch, and then update back to the\n"
      "        HEAD revision. This way, conflicts can be resolved interactively.\n"
      ),

Modified: subversion/branches/showing-merge-info/subversion/svn/merge-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/svn/merge-cmd.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/svn/merge-cmd.c (original)
+++ subversion/branches/showing-merge-info/subversion/svn/merge-cmd.c Mon Oct 31 16:51:52 2011
@@ -184,28 +184,21 @@ svn_cl__merge(apr_getopt_t *os,
                                 _("Too many arguments given"));
 
       /* Set the default value for unspecified paths and peg revision. */
-      if (targets->nelts == 0)
-        {
-          peg_revision1.kind = svn_opt_revision_head;
-        }
-      else
-        {
-          /* targets->nelts is 1 ("svn merge SOURCE") or 2 ("svn merge
-             SOURCE WCPATH") here. */
-          sourcepath2 = sourcepath1;
-
-          if (peg_revision1.kind == svn_opt_revision_unspecified)
-            peg_revision1.kind = svn_path_is_url(sourcepath1)
-              ? svn_opt_revision_head : svn_opt_revision_working;
-
-          if (targets->nelts == 2)
-            {
-              targetpath = APR_ARRAY_IDX(targets, 1, const char *);
-              if (svn_path_is_url(targetpath))
-                return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
-                                        _("Cannot specify a revision range "
-                                          "with two URLs"));
-            }
+      /* targets->nelts is 1 ("svn merge SOURCE") or 2 ("svn merge
+         SOURCE WCPATH") here. */
+      sourcepath2 = sourcepath1;
+
+      if (peg_revision1.kind == svn_opt_revision_unspecified)
+        peg_revision1.kind = svn_path_is_url(sourcepath1)
+          ? svn_opt_revision_head : svn_opt_revision_working;
+
+      if (targets->nelts == 2)
+        {
+          targetpath = APR_ARRAY_IDX(targets, 1, const char *);
+          if (svn_path_is_url(targetpath))
+            return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+                                    _("Cannot specify a revision range "
+                                      "with two URLs"));
         }
     }
   else /* using @rev syntax */
@@ -309,10 +302,6 @@ svn_cl__merge(apr_getopt_t *os,
 
   if (! two_sources_specified) /* TODO: Switch order of if */
     {
-      /* If we don't have a source, use the target as the source. */
-      if (! sourcepath1)
-        sourcepath1 = targetpath;
-
       /* If we don't have at least one valid revision range, pick a
          good one that spans the entire set of revisions on our
          source. */

Modified: subversion/branches/showing-merge-info/subversion/svn/propedit-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/svn/propedit-cmd.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/svn/propedit-cmd.c (original)
+++ subversion/branches/showing-merge-info/subversion/svn/propedit-cmd.c Mon Oct 31 16:51:52 2011
@@ -122,7 +122,7 @@ svn_cl__propedit(apr_getopt_t *os,
 
       if (! propval)
         {
-          propval = svn_string_create("", pool);
+          propval = svn_string_create_empty(pool);
           /* This is how we signify to svn_client_revprop_set2() that
              we want it to check that the original value hasn't
              changed, but that that original value was non-existent: */
@@ -239,7 +239,7 @@ svn_cl__propedit(apr_getopt_t *os,
           /* Get the property value. */
           propval = apr_hash_get(props, abspath_or_url, APR_HASH_KEY_STRING);
           if (! propval)
-            propval = svn_string_create("", subpool);
+            propval = svn_string_create_empty(subpool);
 
           if (svn_path_is_url(target))
             {

Modified: subversion/branches/showing-merge-info/subversion/svn/props.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/svn/props.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/svn/props.c (original)
+++ subversion/branches/showing-merge-info/subversion/svn/props.c Mon Oct 31 16:51:52 2011
@@ -156,7 +156,7 @@ svn_cl__print_xml_prop_hash(svn_stringbu
   apr_hash_index_t *hi;
 
   if (*outstr == NULL)
-    *outstr = svn_stringbuf_create("", pool);
+    *outstr = svn_stringbuf_create_empty(pool);
 
   for (hi = apr_hash_first(pool, prop_hash); hi; hi = apr_hash_next(hi))
     {

Modified: subversion/branches/showing-merge-info/subversion/svn/status-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/svn/status-cmd.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/svn/status-cmd.c (original)
+++ subversion/branches/showing-merge-info/subversion/svn/status-cmd.c Mon Oct 31 16:51:52 2011
@@ -106,7 +106,7 @@ print_conflict_stats(struct status_baton
 static svn_error_t *
 print_start_target_xml(const char *target, apr_pool_t *pool)
 {
-  svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
 
   svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "target",
                         "path", target, NULL);
@@ -122,7 +122,7 @@ static svn_error_t *
 print_finish_target_xml(svn_revnum_t repos_rev,
                         apr_pool_t *pool)
 {
-  svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
 
   if (SVN_IS_VALID_REVNUM(repos_rev))
     {
@@ -355,7 +355,7 @@ svn_cl__status(apr_getopt_t *os,
       svn_stringbuf_t *buf;
 
       if (opt_state->xml)
-        buf = svn_stringbuf_create("", scratch_pool);
+        buf = svn_stringbuf_create_empty(scratch_pool);
 
       for (hi = apr_hash_first(scratch_pool, master_cl_hash); hi;
            hi = apr_hash_next(hi))

Modified: subversion/branches/showing-merge-info/subversion/svn/status.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/svn/status.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/svn/status.c (original)
+++ subversion/branches/showing-merge-info/subversion/svn/status.c Mon Oct 31 16:51:52 2011
@@ -424,7 +424,7 @@ svn_cl__print_status_xml(const char *pat
                          svn_client_ctx_t *ctx,
                          apr_pool_t *pool)
 {
-  svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
   apr_hash_t *att_hash;
   const char *local_abspath = status->local_abspath;
   svn_boolean_t tree_conflicted = FALSE;

Modified: subversion/branches/showing-merge-info/subversion/svn/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/svn/util.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/svn/util.c (original)
+++ subversion/branches/showing-merge-info/subversion/svn/util.c Mon Oct 31 16:51:52 2011
@@ -326,7 +326,7 @@ svn_cl__edit_string_externally(svn_strin
       SVN_ERR(svn_subst_translate_cstring2(contents->data, &translated,
                                            APR_EOL_STR, FALSE,
                                            NULL, FALSE, pool));
-      translated_contents = svn_string_create("", pool);
+      translated_contents = svn_string_create_empty(pool);
       if (encoding)
         SVN_ERR(svn_utf_cstring_from_utf8_ex2(&translated_contents->data,
                                               translated, encoding, pool));
@@ -737,7 +737,7 @@ svn_cl__get_log_message(const char **log
       int i;
       svn_stringbuf_t *tmp_message = svn_stringbuf_dup(default_msg, pool);
       svn_error_t *err = SVN_NO_ERROR;
-      svn_string_t *msg_string = svn_string_create("", pool);
+      svn_string_t *msg_string = svn_string_create_empty(pool);
 
       for (i = 0; i < commit_items->nelts; i++)
         {
@@ -876,7 +876,7 @@ svn_cl__get_log_message(const char **log
                 {
                   SVN_ERR(svn_io_remove_file2(lmb->tmpfile_left, FALSE, pool));
                   *tmp_file = lmb->tmpfile_left = NULL;
-                  message = svn_stringbuf_create("", pool);
+                  message = svn_stringbuf_create_empty(pool);
                 }
 
               /* If the user chooses anything else, the loop will
@@ -1058,7 +1058,7 @@ svn_error_t *
 svn_cl__xml_print_header(const char *tagname,
                          apr_pool_t *pool)
 {
-  svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
 
   /* <?xml version="1.0" encoding="UTF-8"?> */
   svn_xml_make_header2(&sb, "UTF-8", pool);
@@ -1074,7 +1074,7 @@ svn_error_t *
 svn_cl__xml_print_footer(const char *tagname,
                          apr_pool_t *pool)
 {
-  svn_stringbuf_t *sb = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *sb = svn_stringbuf_create_empty(pool);
 
   /* "</TAGNAME>" */
   svn_xml_make_close_tag(&sb, pool, tagname);
@@ -1303,7 +1303,7 @@ svn_cl__indent_string(const char *str,
                       const char *indent,
                       apr_pool_t *pool)
 {
-  svn_stringbuf_t *out = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *out = svn_stringbuf_create_empty(pool);
   const char *line;
 
   while ((line = next_line(&str, pool)))

Modified: subversion/branches/showing-merge-info/subversion/svnadmin/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/svnadmin/main.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/svnadmin/main.c (original)
+++ subversion/branches/showing-merge-info/subversion/svnadmin/main.c Mon Oct 31 16:51:52 2011
@@ -1254,7 +1254,7 @@ set_revprop(const char *prop_name, const
             struct svnadmin_opt_state *opt_state, apr_pool_t *pool)
 {
   svn_repos_t *repos;
-  svn_string_t *prop_value = svn_string_create("", pool);
+  svn_string_t *prop_value = svn_string_create_empty(pool);
   svn_stringbuf_t *file_contents;
 
   SVN_ERR(svn_stringbuf_from_file2(&file_contents, filename, pool));

Modified: subversion/branches/showing-merge-info/subversion/svndumpfilter/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/svndumpfilter/main.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/svndumpfilter/main.c (original)
+++ subversion/branches/showing-merge-info/subversion/svndumpfilter/main.c Mon Oct 31 16:51:52 2011
@@ -271,7 +271,7 @@ new_revision_record(void **revision_bato
   rb->has_props = FALSE;
   rb->had_dropped_nodes = FALSE;
   rb->writing_begun = FALSE;
-  rb->header = svn_stringbuf_create("", pool);
+  rb->header = svn_stringbuf_create_empty(pool);
   rb->props = apr_hash_make(pool);
 
   header_stream = svn_stream_from_stringbuf(rb->header, pool);
@@ -322,7 +322,7 @@ output_revision(struct revision_baton_t 
   char buf[SVN_KEYLINE_MAXLEN];
   apr_hash_index_t *hi;
   apr_pool_t *hash_pool = apr_hash_pool_get(rb->props);
-  svn_stringbuf_t *props = svn_stringbuf_create("", hash_pool);
+  svn_stringbuf_t *props = svn_stringbuf_create_empty(hash_pool);
   apr_pool_t *subpool = svn_pool_create(hash_pool);
 
   rb->writing_begun = TRUE;
@@ -551,8 +551,8 @@ new_node_record(void **node_baton,
       nb->has_text = FALSE;
       nb->writing_begun = FALSE;
       nb->tcl = tcl ? svn__atoui64(tcl) : 0;
-      nb->header = svn_stringbuf_create("", pool);
-      nb->props = svn_stringbuf_create("", pool);
+      nb->header = svn_stringbuf_create_empty(pool);
+      nb->props = svn_stringbuf_create_empty(pool);
 
       /* Now we know for sure that we have a node that will not be
          skipped, flush the revision if it has not already been done. */

Modified: subversion/branches/showing-merge-info/subversion/svnlook/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/svnlook/main.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/svnlook/main.c (original)
+++ subversion/branches/showing-merge-info/subversion/svnlook/main.c Mon Oct 31 16:51:52 2011
@@ -867,11 +867,11 @@ display_prop_diffs(const apr_array_heade
            Since the diff is not useful anyway for patching properties an
            eol character is appended when needed to remove those pescious
            ' \ No newline at end of file' lines. */
-        tmp = orig_value ? orig_value : svn_string_create("", pool);
+        tmp = orig_value ? orig_value : svn_string_create_empty(pool);
         orig = maybe_append_eol(tmp, pool);
 
         tmp = pc->value ? pc->value :
-                                  svn_string_create("", pool);
+                                  svn_string_create_empty(pool);
         val = maybe_append_eol(tmp, pool);
 
         SVN_ERR(svn_diff_mem_string_diff(&diff, orig, val, &options, pool));
@@ -921,7 +921,7 @@ print_diff_tree(svn_fs_root_t *root,
   if (! node)
     return SVN_NO_ERROR;
 
-  header = svn_stringbuf_create("", pool);
+  header = svn_stringbuf_create_empty(pool);
 
   /* Print copyfrom history for the top node of a copied tree. */
   if ((SVN_IS_VALID_REVNUM(node->copyfrom_rev))

Modified: subversion/branches/showing-merge-info/subversion/svnrdump/dump_editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/svnrdump/dump_editor.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/svnrdump/dump_editor.c (original)
+++ subversion/branches/showing-merge-info/subversion/svnrdump/dump_editor.c Mon Oct 31 16:51:52 2011
@@ -383,7 +383,7 @@ open_root(void *edit_baton,
 
   eb->props = apr_hash_make(eb->pool);
   eb->deleted_props = apr_hash_make(eb->pool);
-  eb->propstring = svn_stringbuf_create("", eb->pool);
+  eb->propstring = svn_stringbuf_create_empty(eb->pool);
 
   *root_baton = make_dir_baton(NULL, NULL, SVN_INVALID_REVNUM,
                                edit_baton, NULL, FALSE, eb->pool);

Modified: subversion/branches/showing-merge-info/subversion/svnrdump/svnrdump.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/svnrdump/svnrdump.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/svnrdump/svnrdump.c (original)
+++ subversion/branches/showing-merge-info/subversion/svnrdump/svnrdump.c Mon Oct 31 16:51:52 2011
@@ -80,7 +80,7 @@ enum svn_svnrdump__longopt_t
     opt_non_interactive,
     opt_incremental,
     opt_trust_server_cert,
-    opt_version,
+    opt_version
   };
 
 #define SVN_SVNRDUMP__BASE_OPTIONS opt_config_dir, \
@@ -311,7 +311,7 @@ dump_revision_header(svn_ra_session_t *s
                             ": %ld\n", revision));
 
   prophash = apr_hash_make(pool);
-  propstring = svn_stringbuf_create("", pool);
+  propstring = svn_stringbuf_create_empty(pool);
   SVN_ERR(svn_ra_rev_proplist(session, revision, &prophash, pool));
 
   propstream = svn_stream_from_stringbuf(propstring, pool);

Modified: subversion/branches/showing-merge-info/subversion/svnserve/serve.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/svnserve/serve.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/svnserve/serve.c (original)
+++ subversion/branches/showing-merge-info/subversion/svnserve/serve.c Mon Oct 31 16:51:52 2011
@@ -3072,7 +3072,7 @@ svn_error_t *serve(svn_ra_svn_conn_t *co
   apr_array_header_t *caplist, *cap_words;
   server_baton_t b;
   fs_warning_baton_t warn_baton;
-  svn_stringbuf_t *cap_log = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *cap_log = svn_stringbuf_create_empty(pool);
 
   b.tunnel = params->tunnel;
   b.tunnel_user = get_tunnel_user(params, pool);

Modified: subversion/branches/showing-merge-info/subversion/svnsync/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/svnsync/main.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/svnsync/main.c (original)
+++ subversion/branches/showing-merge-info/subversion/svnsync/main.c Mon Oct 31 16:51:52 2011
@@ -67,7 +67,7 @@ enum svnsync__opt {
   svnsync_opt_version,
   svnsync_opt_trust_server_cert,
   svnsync_opt_allow_non_empty,
-  svnsync_opt_steal_lock,
+  svnsync_opt_steal_lock
 };
 
 #define SVNSYNC_OPTS_DEFAULT svnsync_opt_non_interactive, \
@@ -1089,7 +1089,7 @@ replay_rev_started(svn_revnum_t revision
      replay_rev_finished callback. */
   if (! apr_hash_get(filtered, SVN_PROP_REVISION_LOG, APR_HASH_KEY_STRING))
     apr_hash_set(filtered, SVN_PROP_REVISION_LOG, APR_HASH_KEY_STRING,
-                 svn_string_create("", pool));
+                 svn_string_create_empty(pool));
 
   /* If necessary, normalize encoding and line ending style. Add the number
      of properties that required EOL normalization to the overall count

Modified: subversion/branches/showing-merge-info/subversion/svnsync/sync.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/svnsync/sync.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/svnsync/sync.c (original)
+++ subversion/branches/showing-merge-info/subversion/svnsync/sync.c Mon Oct 31 16:51:52 2011
@@ -461,7 +461,7 @@ change_dir_prop(void *dir_baton,
              are relative URLs, whereas svn:mergeinfo uses relative
              paths (not URI-encoded). */
           svn_error_t *err;
-          svn_stringbuf_t *mergeinfo_buf = svn_stringbuf_create("", pool);
+          svn_stringbuf_t *mergeinfo_buf = svn_stringbuf_create_empty(pool);
           svn_mergeinfo_t mergeinfo;
           int i;
           apr_array_header_t *sources =

Modified: subversion/branches/showing-merge-info/subversion/tests/libsvn_delta/editor-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/tests/libsvn_delta/editor-test.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/tests/libsvn_delta/editor-test.c (original)
+++ subversion/branches/showing-merge-info/subversion/tests/libsvn_delta/editor-test.c Mon Oct 31 16:51:52 2011
@@ -275,7 +275,7 @@ editor_from_delta_editor_test(const svn_
       /* Construct our editor, and from it a delta editor. */
       SVN_ERR(get_noop_editor(&editor, NULL, NULL, NULL, iterpool, iterpool));
       SVN_ERR(delta_from_editor(&deditor, &dedit_baton, editor,
-                                NULL, NULL, iterpool));
+                                NULL, NULL, NULL, NULL, iterpool));
 
       SVN_ERR(svn_repos_replay2(revision_root, "", SVN_INVALID_REVNUM, TRUE,
                                 deditor, dedit_baton, NULL, NULL, iterpool));

Modified: subversion/branches/showing-merge-info/subversion/tests/libsvn_diff/diff-diff3-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/tests/libsvn_diff/diff-diff3-test.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/tests/libsvn_diff/diff-diff3-test.c (original)
+++ subversion/branches/showing-merge-info/subversion/tests/libsvn_diff/diff-diff3-test.c Mon Oct 31 16:51:52 2011
@@ -175,7 +175,7 @@ three_way_merge(const char *filename1,
   SVN_ERR(svn_diff_mem_string_diff3(&diff,
                                     original, modified, latest, options, pool));
 
-  actual = svn_stringbuf_create("", pool);
+  actual = svn_stringbuf_create_empty(pool);
   ostream = svn_stream_from_stringbuf(actual, pool);
 
   SVN_ERR(svn_diff_mem_string_output_merge2
@@ -265,7 +265,7 @@ two_way_diff(const char *filename1,
 
   SVN_ERR(svn_diff_mem_string_diff(&diff, original, modified, options, pool));
 
-  actual = svn_stringbuf_create("", pool);
+  actual = svn_stringbuf_create_empty(pool);
   ostream = svn_stream_from_stringbuf(actual, pool);
 
   SVN_ERR(svn_diff_mem_string_output_unified(ostream, diff,

Modified: subversion/branches/showing-merge-info/subversion/tests/libsvn_fs_base/strings-reps-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/tests/libsvn_fs_base/strings-reps-test.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/tests/libsvn_fs_base/strings-reps-test.c (original)
+++ subversion/branches/showing-merge-info/subversion/tests/libsvn_fs_base/strings-reps-test.c Mon Oct 31 16:51:52 2011
@@ -360,7 +360,7 @@ verify_expected_record(svn_fs_t *fs,
                              size, expected_len);
 
   /* Read the string back in 100-byte chunks. */
-  text = svn_stringbuf_create("", trail->pool);
+  text = svn_stringbuf_create_empty(trail->pool);
   while (1)
     {
       size = sizeof(buf);

Modified: subversion/branches/showing-merge-info/subversion/tests/libsvn_subr/path-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/tests/libsvn_subr/path-test.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/tests/libsvn_subr/path-test.c (original)
+++ subversion/branches/showing-merge-info/subversion/tests/libsvn_subr/path-test.c Mon Oct 31 16:51:52 2011
@@ -871,7 +871,7 @@ test_path_remove_component(apr_pool_t *p
   int i;
   svn_stringbuf_t *buf;
 
-  buf = svn_stringbuf_create("", pool);
+  buf = svn_stringbuf_create_empty(pool);
 
   i = 0;
   while (tests[i].path)

Modified: subversion/branches/showing-merge-info/subversion/tests/libsvn_subr/stream-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/tests/libsvn_subr/stream-test.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/tests/libsvn_subr/stream-test.c (original)
+++ subversion/branches/showing-merge-info/subversion/tests/libsvn_subr/stream-test.c Mon Oct 31 16:51:52 2011
@@ -67,7 +67,7 @@ test_stream_from_string(apr_pool_t *pool
       apr_size_t len;
 
       inbuf = svn_stringbuf_create(strings[i], subpool);
-      outbuf = svn_stringbuf_create("", subpool);
+      outbuf = svn_stringbuf_create_empty(subpool);
       stream = svn_stream_from_stringbuf(inbuf, subpool);
       len = TEST_BUF_SIZE;
       while (len == TEST_BUF_SIZE)
@@ -94,7 +94,7 @@ test_stream_from_string(apr_pool_t *pool
       apr_size_t amt_read, len;
 
       inbuf = svn_stringbuf_create(strings[i], subpool);
-      outbuf = svn_stringbuf_create("", subpool);
+      outbuf = svn_stringbuf_create_empty(subpool);
       stream = svn_stream_from_stringbuf(outbuf, subpool);
       amt_read = 0;
       while (amt_read < inbuf->len)
@@ -125,7 +125,7 @@ test_stream_from_string(apr_pool_t *pool
 static svn_stringbuf_t *
 generate_test_bytes(int num_bytes, apr_pool_t *pool)
 {
-  svn_stringbuf_t *buffer = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *buffer = svn_stringbuf_create_empty(pool);
   int total, repeat, repeat_iter;
   char c;
 
@@ -189,8 +189,8 @@ test_stream_compressed(apr_pool_t *pool)
       apr_size_t len;
 
       origbuf = bufs[i];
-      inbuf = svn_stringbuf_create("", subpool);
-      outbuf = svn_stringbuf_create("", subpool);
+      inbuf = svn_stringbuf_create_empty(subpool);
+      outbuf = svn_stringbuf_create_empty(subpool);
 
       stream = svn_stream_compressed(svn_stream_from_stringbuf(outbuf,
                                                                subpool),
@@ -232,8 +232,8 @@ static svn_error_t *
 test_stream_tee(apr_pool_t *pool)
 {
   svn_stringbuf_t *test_bytes = generate_test_bytes(100, pool);
-  svn_stringbuf_t *output_buf1 = svn_stringbuf_create("", pool);
-  svn_stringbuf_t *output_buf2 = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *output_buf1 = svn_stringbuf_create_empty(pool);
+  svn_stringbuf_t *output_buf2 = svn_stringbuf_create_empty(pool);
   svn_stream_t *source_stream = svn_stream_from_stringbuf(test_bytes, pool);
   svn_stream_t *output_stream1 = svn_stream_from_stringbuf(output_buf1, pool);
   svn_stream_t *output_stream2 = svn_stream_from_stringbuf(output_buf2, pool);
@@ -538,8 +538,8 @@ static svn_error_t *
 test_stream_base64(apr_pool_t *pool)
 {
   svn_stream_t *stream;
-  svn_stringbuf_t *actual = svn_stringbuf_create("", pool);
-  svn_stringbuf_t *expected = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *actual = svn_stringbuf_create_empty(pool);
+  svn_stringbuf_t *expected = svn_stringbuf_create_empty(pool);
   int i;
   static const char *strings[] = {
     "fairly boring test data... blah blah",

Modified: subversion/branches/showing-merge-info/subversion/tests/libsvn_subr/string-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/tests/libsvn_subr/string-test.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/tests/libsvn_subr/string-test.c (original)
+++ subversion/branches/showing-merge-info/subversion/tests/libsvn_subr/string-test.c Mon Oct 31 16:51:52 2011
@@ -419,7 +419,7 @@ test15(apr_pool_t *pool)
 static svn_error_t *
 test16(apr_pool_t *pool)
 {
-  a = svn_stringbuf_create("", pool);
+  a = svn_stringbuf_create_empty(pool);
 
   return test_find_char_backward(a->data, a->len, ',', 0, pool);
 }

Modified: subversion/branches/showing-merge-info/subversion/tests/libsvn_subr/subst_translate-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/tests/libsvn_subr/subst_translate-test.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/tests/libsvn_subr/subst_translate-test.c (original)
+++ subversion/branches/showing-merge-info/subversion/tests/libsvn_subr/subst_translate-test.c Mon Oct 31 16:51:52 2011
@@ -115,7 +115,7 @@ test_svn_subst_translate_string2_null_en
     svn_string_t *new_value = NULL;
     svn_boolean_t translated_to_utf8 = FALSE;
     svn_boolean_t translated_line_endings = TRUE;
-    /* 'Æ', which is 0xc6 in both ISO-8859-1 and Windows-1252 */
+    /* 'Æ', which is 0xc6 in both ISO-8859-1 and Windows-1252 */
     svn_string_t *source_string = svn_string_create("\xc6", pool);
 
     SVN_ERR(svn_subst_translate_string2(&new_value, &translated_to_utf8,

Modified: subversion/branches/showing-merge-info/subversion/tests/libsvn_wc/wc-incomplete-tester.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/tests/libsvn_wc/wc-incomplete-tester.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/tests/libsvn_wc/wc-incomplete-tester.c (original)
+++ subversion/branches/showing-merge-info/subversion/tests/libsvn_wc/wc-incomplete-tester.c Mon Oct 31 16:51:52 2011
@@ -29,15 +29,15 @@
 #include <stdio.h>
 #include <stdlib.h>
 
-static
-svn_error_t *incomplete(const char *wc_path,
-                        const char *rev_str,
-                        const char *repos_relpath,
-                        apr_pool_t *pool)
+static svn_error_t *
+incomplete(const char *wc_path,
+           const char *rev_str,
+           const char *repos_relpath,
+           apr_pool_t *pool)
 {
   svn_wc_context_t *wc_ctx;
   const char *local_abspath;
-  svn_revnum_t revnum;
+  apr_int64_t revnum;
 
   SVN_ERR(svn_wc_context_create(&wc_ctx, NULL, pool, pool));
 
@@ -60,7 +60,7 @@ svn_error_t *incomplete(const char *wc_p
   SVN_ERR(svn_wc__db_temp_op_start_directory_update(wc_ctx->db,
                                                     local_abspath,
                                                     repos_relpath,
-                                                    revnum,
+                                                    (svn_revnum_t)revnum,
                                                     pool));
 
   return SVN_NO_ERROR;

Modified: subversion/branches/showing-merge-info/subversion/tests/svn_test_fs.c
URL: http://svn.apache.org/viewvc/subversion/branches/showing-merge-info/subversion/tests/svn_test_fs.c?rev=1195565&r1=1195564&r2=1195565&view=diff
==============================================================================
--- subversion/branches/showing-merge-info/subversion/tests/svn_test_fs.c (original)
+++ subversion/branches/showing-merge-info/subversion/tests/svn_test_fs.c Mon Oct 31 16:51:52 2011
@@ -251,7 +251,7 @@ svn_test__stream_to_string(svn_stringbuf
                    of priorities today, though. */
 
   apr_size_t len;
-  svn_stringbuf_t *str = svn_stringbuf_create("", pool);
+  svn_stringbuf_t *str = svn_stringbuf_create_empty(pool);
 
   do
     {
@@ -442,7 +442,7 @@ svn_test__validate_tree(svn_fs_root_t *r
             {
               /* If we don't have a corrupt entries string, make one. */
               if (! corrupt_entries)
-                corrupt_entries = svn_stringbuf_create("", subpool);
+                corrupt_entries = svn_stringbuf_create_empty(subpool);
 
               /* Append this entry name to the list of corrupt entries. */
               svn_stringbuf_appendcstr(corrupt_entries, "   ");
@@ -458,7 +458,7 @@ svn_test__validate_tree(svn_fs_root_t *r
         {
           /* If we don't have a missing entries string, make one. */
           if (! missing_entries)
-            missing_entries = svn_stringbuf_create("", subpool);
+            missing_entries = svn_stringbuf_create_empty(subpool);
 
           /* Append this entry name to the list of missing entries. */
           svn_stringbuf_appendcstr(missing_entries, "   ");
@@ -481,7 +481,7 @@ svn_test__validate_tree(svn_fs_root_t *r
 
       /* If we don't have an extra entries string, make one. */
       if (! extra_entries)
-        extra_entries = svn_stringbuf_create("", subpool);
+        extra_entries = svn_stringbuf_create_empty(subpool);
 
       /* Append this entry name to the list of missing entries. */
       svn_stringbuf_appendcstr(extra_entries, "   ");