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/08/10 20:06:33 UTC

svn commit: r984153 [31/39] - in /subversion/branches/ignore-mergeinfo: ./ build/ build/ac-macros/ build/generator/ build/generator/templates/ build/hudson/ build/hudson/jobs/subversion-1.6.x-solaris/ build/hudson/jobs/subversion-1.6.x-ubuntu/ build/hu...

Modified: subversion/branches/ignore-mergeinfo/subversion/po/it.po
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/po/it.po?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/po/it.po (original)
+++ subversion/branches/ignore-mergeinfo/subversion/po/it.po Tue Aug 10 18:06:17 2010
@@ -5700,7 +5700,7 @@ msgstr ""
 msgid ""
 "This client is too old to work with working copy '%s'.  You need\n"
 "to get a newer Subversion client, or to downgrade this working copy.\n"
-"See http://subversion.tigris.org/faq.html#working-copy-format-change\n"
+"See http://subversion.apache.org/faq.html#working-copy-format-change\n"
 "for details."
 msgstr ""
 

Modified: subversion/branches/ignore-mergeinfo/subversion/po/ja.po
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/po/ja.po?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/po/ja.po [UTF-8] (original)
+++ subversion/branches/ignore-mergeinfo/subversion/po/ja.po [UTF-8] Tue Aug 10 18:06:17 2010
@@ -5831,13 +5831,13 @@ msgstr ""
 msgid ""
 "This client is too old to work with working copy '%s'.  You need\n"
 "to get a newer Subversion client, or to downgrade this working copy.\n"
-"See http://subversion.tigris.org/faq.html#working-copy-format-change\n"
+"See http://subversion.apache.org/faq.html#working-copy-format-change\n"
 "for details."
 msgstr ""
 "クライアントが古すぎて、作業コピー '%s' を扱うことができません。\n"
 "もっと新しい Subversion クライアントをインストールするか、作業コピーをダウン"
 "グレードする必要があります。\n"
-"詳しくは http://subversion.tigris.org/faq.html#working-copy-format-change を"
+"詳しくは http://subversion.apache.org/faq.html#working-copy-format-change を"
 "参照してください。"
 
 #: libsvn_wc/questions.c:344

Modified: subversion/branches/ignore-mergeinfo/subversion/po/ko.po
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/po/ko.po?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/po/ko.po [UTF-8] (original)
+++ subversion/branches/ignore-mergeinfo/subversion/po/ko.po [UTF-8] Tue Aug 10 18:06:17 2010
@@ -6703,7 +6703,7 @@ msgid ""
 "This client is too old to work with the working copy at\n"
 "'%s' (format %d).\n"
 "You need to get a newer Subversion client. For more details, see\n"
-"  http://subversion.tigris.org/faq.html#working-copy-format-change\n"
+"  http://subversion.apache.org/faq.html#working-copy-format-change\n"
 msgstr ""
 
 #: ../libsvn_wc/wc_db.c:502

Modified: subversion/branches/ignore-mergeinfo/subversion/po/nb.po
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/po/nb.po?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/po/nb.po [UTF-8] (original)
+++ subversion/branches/ignore-mergeinfo/subversion/po/nb.po [UTF-8] Tue Aug 10 18:06:17 2010
@@ -6839,12 +6839,12 @@ msgid ""
 "This client is too old to work with the working copy at\n"
 "'%s' (format %d).\n"
 "You need to get a newer Subversion client. For more details, see\n"
-"  http://subversion.tigris.org/faq.html#working-copy-format-change\n"
+"  http://subversion.apache.org/faq.html#working-copy-format-change\n"
 msgstr ""
 "Denne klienten er for gammel til å virke med arbeidskopien på\n"
 "«%s» (format %d).\n"
 "Du må hente en nyere Subversionklient. For flere detaljer, se\n"
-"  http://subversion.tigris.org/faq.html#working-copy-format-change\n"
+"  http://subversion.apache.org/faq.html#working-copy-format-change\n"
 
 #: ../libsvn_wc/wc_db.c:478
 #, c-format

Modified: subversion/branches/ignore-mergeinfo/subversion/po/pl.po
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/po/pl.po?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/po/pl.po [UTF-8] (original)
+++ subversion/branches/ignore-mergeinfo/subversion/po/pl.po [UTF-8] Tue Aug 10 18:06:17 2010
@@ -6761,12 +6761,12 @@ msgid ""
 "This client is too old to work with the working copy at\n"
 "'%s' (format %d).\n"
 "You need to get a newer Subversion client. For more details, see\n"
-"  http://subversion.tigris.org/faq.html#working-copy-format-change\n"
+"  http://subversion.apache.org/faq.html#working-copy-format-change\n"
 msgstr ""
 "Ten klient jest zbyt stary, by obsługiwać kopię roboczą\n"
 "'%s' (format %d).\n"
 "Musisz zainstalować nowszy klient Subversion. Zobacz szczegóły na stronie:\n"
-"  http://subversion.tigris.org/faq.html#working-copy-format-change\n"
+"  http://subversion.apache.org/faq.html#working-copy-format-change\n"
 
 #: ../libsvn_wc/wc_db.c:532
 #, c-format

Modified: subversion/branches/ignore-mergeinfo/subversion/po/zh_CN.po
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/po/zh_CN.po?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/po/zh_CN.po [UTF-8] (original)
+++ subversion/branches/ignore-mergeinfo/subversion/po/zh_CN.po [UTF-8] Tue Aug 10 18:06:17 2010
@@ -5368,11 +5368,11 @@ msgid ""
 "This client is too old to work with the working copy at\n"
 "'%s' (format %d).\n"
 "You need to get a newer Subversion client. For more details, see\n"
-"  http://subversion.tigris.org/faq.html#working-copy-format-change\n"
+"  http://subversion.apache.org/faq.html#working-copy-format-change\n"
 msgstr ""
 "此客户端对于工作副本“%s”太旧(格式 %d)。\n"
 "你需要取得更新的 Subversion 客户端。参见\n"
-"  http://subversion.tigris.org/faq.html#working-copy-format-change\n"
+"  http://subversion.apache.org/faq.html#working-copy-format-change\n"
 "以获得更详细的信息。\n"
 
 #, c-format

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/cl.h
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/cl.h?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/cl.h (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/cl.h Tue Aug 10 18:06:17 2010
@@ -223,6 +223,9 @@ typedef struct svn_cl__opt_state_t
                                       otherwise be rejected as "untrusted" */
   int strip_count; /* number of leading path components to strip */
   svn_boolean_t ignore_keywords;  /* do not expand keywords */
+  svn_boolean_t reverse_diff;     /* reverse a diff (e.g. when patching) */
+  apr_array_header_t *include_patterns; /* targets to include in operation */
+  apr_array_header_t *exclude_patterns; /* targets to exclude from operation */
   svn_boolean_t ignore_mergeinfo; /* ignore mergeinfo in reporting commands. */
 } svn_cl__opt_state_t;
 
@@ -379,7 +382,11 @@ svn_cl__time_cstring_to_human_cstring(co
    unversioned items found in the working copy.
 
    When DETAILED is set, and REPOS_LOCKS is set, treat missing repository locks
-   as broken WC locks. */
+   as broken WC locks.
+
+   Increment *TEXT_CONFLICTS, *PROP_CONFLICTS, or *TREE_CONFLICTS if
+   a conflict was encountered.
+   */
 svn_error_t *
 svn_cl__print_status(const char *path,
                      const svn_wc_status2_t *status,
@@ -387,6 +394,9 @@ svn_cl__print_status(const char *path,
                      svn_boolean_t show_last_committed,
                      svn_boolean_t skip_unrecognized,
                      svn_boolean_t repos_locks,
+                     unsigned int *text_conflicts,
+                     unsigned int *prop_conflicts,
+                     unsigned int *tree_conflicts,
                      apr_pool_t *pool);
 
 
@@ -437,7 +447,7 @@ svn_cl__print_xml_commit(svn_stringbuf_t
  */
 svn_error_t *
 svn_cl__revprop_prepare(const svn_opt_revision_t *revision,
-                        apr_array_header_t *targets,
+                        const apr_array_header_t *targets,
                         const char **URL,
                         svn_client_ctx_t *ctx,
                         apr_pool_t *pool);
@@ -668,7 +678,9 @@ svn_cl__check_boolean_prop_val(const cha
 
 /* De-streamifying wrapper around svn_client_get_changelists(), which
    is called for each target in TARGETS to populate *PATHS (a list of
-   paths assigned to one of the CHANGELISTS. */
+   paths assigned to one of the CHANGELISTS.
+   If all targets are to be included, may set *PATHS to TARGETS without
+   reallocating. */
 svn_error_t *
 svn_cl__changelist_paths(apr_array_header_t **paths,
                          const apr_array_header_t *changelists,
@@ -684,7 +696,7 @@ svn_cl__changelist_paths(apr_array_heade
 svn_error_t *
 svn_cl__args_to_target_array_print_reserved(apr_array_header_t **targets_p,
                                             apr_getopt_t *os,
-                                            apr_array_header_t *known_targets,
+                                            const apr_array_header_t *known_targets,
                                             svn_client_ctx_t *ctx,
                                             apr_pool_t *pool);
 
@@ -698,7 +710,8 @@ svn_cl__indent_string(const char *str,
 
 
 /* Return a string showing NODE's kind, URL and revision, to the extent that
- * that information is available in NODE.
+ * that information is available in NODE. If NODE itself is NULL, this prints
+ * just a 'none' node kind.
  * WC_REPOS_ROOT_URL should reflect the target working copy's repository
  * root URL. If NODE is from that same URL, the printed URL is abbreviated
  * to caret notation (^/). WC_REPOS_ROOT_URL may be NULL, in which case
@@ -716,8 +729,8 @@ svn_cl__node_description(const svn_wc_co
  * if BASE is an uri, dirent or relative.
  */
 const char *
-svn_cl__path_join(const char *base, 
-                  const char *component, 
+svn_cl__path_join(const char *base,
+                  const char *component,
                   apr_pool_t *pool);
 
 #ifdef __cplusplus

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/info-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/info-cmd.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/info-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/info-cmd.c Tue Aug 10 18:06:17 2010
@@ -428,13 +428,17 @@ print_info(void *baton,
 
   if (info->tree_conflict)
     {
-      const char *desc, *src_left_version, *src_right_version;
+      const char *desc;
+      const char *src_left_version;
+      const char *src_right_version;
 
       SVN_ERR(svn_cl__get_human_readable_tree_conflict_description(
                 &desc, info->tree_conflict, pool));
+
       src_left_version =
         svn_cl__node_description(info->tree_conflict->src_left_version,
                                  info->repos_root_URL, pool);
+
       src_right_version =
         svn_cl__node_description(info->tree_conflict->src_right_version,
                                  info->repos_root_URL, pool);

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/log-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/log-cmd.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/log-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/log-cmd.c Tue Aug 10 18:06:17 2010
@@ -367,8 +367,8 @@ log_entry_receiver_xml(void *baton,
            hi != NULL;
            hi = apr_hash_next(hi))
         {
-          const char *path = svn_apr_hash_index_key(hi);
-          svn_log_changed_path2_t *log_item = svn_apr_hash_index_val(hi);
+          const char *path = svn__apr_hash_index_key(hi);
+          svn_log_changed_path2_t *log_item = svn__apr_hash_index_val(hi);
           char action[2];
 
           action[0] = log_item->action;
@@ -545,8 +545,8 @@ svn_cl__log(apr_getopt_t *os,
                hi != NULL;
                hi = apr_hash_next(hi))
             {
-              const char *property = svn_apr_hash_index_key(hi);
-              svn_string_t *value = svn_apr_hash_index_val(hi);
+              const char *property = svn__apr_hash_index_key(hi);
+              svn_string_t *value = svn__apr_hash_index_val(hi);
 
               if (value && value->data[0] != '\0')
                 return svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/main.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/main.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/main.c Tue Aug 10 18:06:17 2010
@@ -116,6 +116,9 @@ typedef enum {
   opt_trust_server_cert,
   opt_show_copies_as_adds,
   opt_ignore_keywords,
+  opt_reverse_diff,
+  opt_include_pattern,
+  opt_exclude_pattern,
   opt_ignore_mergeinfo
 } svn_cl__longopt_t;
 
@@ -343,6 +346,40 @@ const apr_getopt_option_t svn_cl__option
                     N_("don't expand keywords\n"
                        "                             "
                        "[alias: --ik]")},
+  {"reverse-diff", opt_reverse_diff, 0,
+                    N_("apply the unidiff in reverse\n"
+                       "                             "
+                       "[alias: --rd]")},
+  {"include-pattern", opt_include_pattern, 1,
+                    N_("operate only on targets matching ARG,\n"
+                       "                             "
+                       "which may be a glob pattern such as '*.txt'.\n"
+                       "                             "
+                       "If this option is specified multiple times,\n"
+                       "                             "
+                       "all patterns are matched in turn.\n"
+                       "                             "
+                       "If both --include-pattern and --exclude-pattern\n"
+                       "                             "
+                       "options are specified include patterns are applied\n"
+                       "                             "
+                       "first, i.e. exclude patterns are applied to all\n"
+                       "                             "
+                       "targets which match an include pattern.\n"
+                       "                             "
+                       "[alias: --ip]")},
+  {"exclude-pattern", opt_exclude_pattern, 1,
+                    N_("do not operate on targets matching ARG,\n"
+                       "                             "
+                       "which may be a glob pattern such as '*.txt'.\n"
+                       "                             "
+                       "If this option is specified multiple times,\n"
+                       "                             "
+                       "all patterns are matched in turn.\n"
+                       "                             "
+                       "See also the --include-pattern option.\n"
+                       "                             "
+                       "[alias: --ep]")},
   {"ignore-mergeinfo",  opt_ignore_mergeinfo, 0,
                     N_("ignore changes to mergeinfo")},
 
@@ -361,6 +398,7 @@ const apr_getopt_option_t svn_cl__option
   {"na",            opt_notice_ancestry, 0, NULL},
   {"ia",            opt_ignore_ancestry, 0, NULL},
   {"ie",            opt_ignore_externals, 0, NULL},
+  {"rd",            opt_reverse_diff, 0, NULL},
   {"ro",            opt_record_only, 0, NULL},
   {"cd",            opt_config_dir, 1, NULL},
   {"cl",            opt_changelist, 1, NULL},
@@ -369,6 +407,8 @@ const apr_getopt_option_t svn_cl__option
   {"ri",            opt_reintegrate, 0, NULL},
   {"sca",           opt_show_copies_as_adds, 0, NULL},
   {"ik",            opt_ignore_keywords, 0, NULL},
+  {"ip",            opt_include_pattern, 1, NULL},
+  {"ep",            opt_exclude_pattern, 1, NULL},
 
   {0,               0, 0, 0},
 };
@@ -779,17 +819,21 @@ const svn_opt_subcommand_desc2_t svn_cl_
     ("Apply a patch to a working copy.\n"
      "usage: patch PATCHFILE [WCPATH]\n"
      "\n"
-     "  Apply unidiff content in PATCHFILE to the working copy WCPATH.\n"
+     "  Apply a unidiff patch in PATCHFILE to the working copy WCPATH.\n"
      "  If WCPATH is omitted, '.' is assumed.\n"
-     "  A unidiff file suitable for application to a working copy can be\n"
+     "\n"
+     "  A unidiff patch suitable for application to a working copy can be\n"
      "  produced with the 'svn diff' command or third-party diffing tools.\n"
      "  Any non-unidiff content of PATCHFILE is ignored.\n"
      "\n"
+     "  Changes listed in the patch will either be applied or rejected.\n"
      "  If a change does not match at its exact line offset, it may be applied\n"
      "  earlier or later in the file if a match is found elsewhere for the\n"
-     "  surrounding lines of context provided in the unidiff.\n"
-     "  If no matching context can be found for a change, the change will\n"
-     "  produce a text conflict at its exact line offset.\n"
+     "  surrounding lines of context provided by the patch.\n"
+     "  A change may also be applied with fuzz, which means that one\n"
+     "  or more lines of context are ignored when matching the change.\n"
+     "  If no matching context can be found for a change, the change conflicts\n"
+     "  and will be written to a reject file with the extension .svnpatch.rej.\n"
      "\n"
      "  For each patched file a line will be printed with characters reporting\n"
      "  the action taken. These characters have the following meaning:\n"
@@ -798,14 +842,18 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "    D  Deleted\n"
      "    U  Updated\n"
      "    C  Conflict\n"
-     "    G  Merged\n"
+     "    G  Merged (with local uncommitted changes)\n"
+     "\n"
+     "  Changes applied with an offset or fuzz are reported on lines starting\n"
+     "  with the '>' symbol. You should review such changes carefully.\n"
      "\n"
-     "  If a unidiff removes all content from a file, that file is scheduled\n"
-     "  for deletion. If a unidiff creates a new file, that file is scheduled\n"
+     "  If the patch removes all content from a file, that file is scheduled\n"
+     "  for deletion. If the patch creates a new file, that file is scheduled\n"
      "  for addition. Use 'svn revert' to undo deletions and additions you\n"
      "  do not agree with.\n"
      ),
-    {'q', opt_dry_run, opt_accept, opt_merge_cmd, 'p'} },
+    {'q', opt_dry_run, 'p', opt_reverse_diff, opt_include_pattern,
+     opt_exclude_pattern} },
 
   { "propdel", svn_cl__propdel, {"pdel", "pd"}, N_
     ("Remove a property from files, dirs, or revisions.\n"
@@ -1717,6 +1765,21 @@ main(int argc, const char *argv[])
       case opt_ignore_keywords:
         opt_state.ignore_keywords = TRUE;
         break;
+      case opt_reverse_diff:
+        opt_state.reverse_diff = TRUE;
+        break;
+      case opt_include_pattern:
+        if (opt_state.include_patterns == NULL)
+          opt_state.include_patterns = apr_array_make(pool, 1,
+                                                      sizeof (const char *));
+        APR_ARRAY_PUSH(opt_state.include_patterns, const char *) = opt_arg;
+        break;
+      case opt_exclude_pattern:
+        if (opt_state.exclude_patterns == NULL)
+          opt_state.exclude_patterns = apr_array_make(pool, 1,
+                                                      sizeof (const char *));
+        APR_ARRAY_PUSH(opt_state.exclude_patterns, const char *) = opt_arg;
+        break;
       case opt_ignore_mergeinfo:
         opt_state.ignore_mergeinfo = TRUE;
         break;

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/mergeinfo-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/mergeinfo-cmd.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/mergeinfo-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/mergeinfo-cmd.c Tue Aug 10 18:06:17 2010
@@ -117,7 +117,7 @@ svn_cl__mergeinfo(apr_getopt_t *os,
   /* Do the real work, depending on the requested data flavor. */
   if (opt_state->show_revs == svn_cl__show_revs_merged)
     {
-      SVN_ERR(svn_client_mergeinfo_log(target, TRUE, &tgt_peg_revision,
+      SVN_ERR(svn_client_mergeinfo_log(TRUE, target, &tgt_peg_revision,
                                        source, &src_peg_revision,
                                        print_log_rev, NULL,
                                        TRUE, depth, NULL, ctx,
@@ -125,7 +125,7 @@ svn_cl__mergeinfo(apr_getopt_t *os,
     }
   else if (opt_state->show_revs == svn_cl__show_revs_eligible)
     {
-      SVN_ERR(svn_client_mergeinfo_log(target, FALSE, &tgt_peg_revision,
+      SVN_ERR(svn_client_mergeinfo_log(FALSE, target, &tgt_peg_revision,
                                        source, &src_peg_revision,
                                        print_log_rev, NULL,
                                        TRUE, depth, NULL, ctx,

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/notify.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/notify.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/notify.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/notify.c Tue Aug 10 18:06:17 2010
@@ -58,12 +58,6 @@ struct notify_baton
   unsigned int tree_conflicts;
   unsigned int skipped_paths;
 
-  /* Conflict stats for update and merge (for externals). */
-  unsigned int ext_text_conflicts;
-  unsigned int ext_prop_conflicts;
-  unsigned int ext_tree_conflicts;
-  unsigned int ext_skipped_paths;
-
   /* The cwd, for use in decomposing absolute paths. */
   const char *path_prefix;
 };
@@ -73,32 +67,19 @@ svn_error_t *
 svn_cl__print_conflict_stats(void *notify_baton, apr_pool_t *pool)
 {
   struct notify_baton *nb = notify_baton;
-  const char *header;
   unsigned int text_conflicts;
   unsigned int prop_conflicts;
   unsigned int tree_conflicts;
   unsigned int skipped_paths;
 
-  if (nb->in_external)
-    {
-      header = _("Summary of conflicts in external item:\n");
-      text_conflicts = nb->ext_text_conflicts;
-      prop_conflicts = nb->ext_prop_conflicts;
-      tree_conflicts = nb->ext_tree_conflicts;
-      skipped_paths = nb->ext_skipped_paths;
-    }
-  else
-    {
-      header = _("Summary of conflicts:\n");
-      text_conflicts = nb->text_conflicts;
-      prop_conflicts = nb->prop_conflicts;
-      tree_conflicts = nb->tree_conflicts;
-      skipped_paths = nb->skipped_paths;
-    }
+  text_conflicts = nb->text_conflicts;
+  prop_conflicts = nb->prop_conflicts;
+  tree_conflicts = nb->tree_conflicts;
+  skipped_paths = nb->skipped_paths;
 
   if (text_conflicts > 0 || prop_conflicts > 0
     || tree_conflicts > 0 || skipped_paths > 0)
-      SVN_ERR(svn_cmdline_printf(pool, "%s", header));
+      SVN_ERR(svn_cmdline_printf(pool, "%s", _("Summary of conflicts:\n")));
 
   if (text_conflicts > 0)
     SVN_ERR(svn_cmdline_printf
@@ -146,8 +127,7 @@ notify(void *baton, const svn_wc_notify_
   switch (n->action)
     {
     case svn_wc_notify_skip:
-      nb->in_external ? nb->ext_skipped_paths++
-                      : nb->skipped_paths++;
+      nb->skipped_paths++;
       if (n->content_state == svn_wc_notify_state_missing)
         {
           if ((err = svn_cmdline_printf
@@ -194,8 +174,7 @@ notify(void *baton, const svn_wc_notify_
       nb->received_some_change = TRUE;
       if (n->content_state == svn_wc_notify_state_conflicted)
         {
-          nb->in_external ? nb->ext_text_conflicts++
-                          : nb->text_conflicts++;
+          nb->text_conflicts++;
           if ((err = svn_cmdline_printf(pool, "C    %s\n", path_local)))
             goto print_error;
         }
@@ -210,8 +189,7 @@ notify(void *baton, const svn_wc_notify_
       nb->received_some_change = TRUE;
       if (n->content_state == svn_wc_notify_state_conflicted)
         {
-          nb->in_external ? nb->ext_text_conflicts++
-                          : nb->text_conflicts++;
+          nb->text_conflicts++;
           statchar_buf[0] = 'C';
         }
       else
@@ -219,8 +197,7 @@ notify(void *baton, const svn_wc_notify_
 
       if (n->prop_state == svn_wc_notify_state_conflicted)
         {
-          nb->in_external ? nb->ext_prop_conflicts++
-                          : nb->prop_conflicts++;
+          nb->prop_conflicts++;
           statchar_buf[1] = 'C';
         }
       else if (n->prop_state == svn_wc_notify_state_merged)
@@ -281,12 +258,116 @@ notify(void *baton, const svn_wc_notify_
         goto print_error;
       break;
 
+    case svn_wc_notify_patch:
+      {
+        nb->received_some_change = TRUE;
+        if (n->content_state == svn_wc_notify_state_conflicted)
+          {
+            nb->text_conflicts++;
+            statchar_buf[0] = 'C';
+          }
+        else if (n->kind == svn_node_file)
+          {
+            if (n->content_state == svn_wc_notify_state_merged)
+              statchar_buf[0] = 'G';
+            else if (n->content_state == svn_wc_notify_state_changed)
+              statchar_buf[0] = 'U';
+          }
+
+        if (statchar_buf[0] != ' ')
+          {
+            if ((err = svn_cmdline_printf(pool, "%s      %s\n",
+                                          statchar_buf, path_local)))
+              goto print_error;
+          }
+      }
+      break;
+
+    case svn_wc_notify_patch_applied_hunk:
+      nb->received_some_change = TRUE;
+      if (n->hunk_original_start != n->hunk_matched_line)
+        {
+          apr_uint64_t off;
+          const char *s;
+          const char *minus;
+
+          if (n->hunk_matched_line > n->hunk_original_start)
+            {
+              off = n->hunk_matched_line - n->hunk_original_start;
+              minus = "";
+            }
+          else
+            {
+              off = n->hunk_original_start - n->hunk_matched_line;
+              minus = "-";
+            }
+
+          /* ### APR_INT64_T_FMT isn't translator-friendly */
+          if (n->hunk_fuzz)
+            {
+              s = _(">         applied hunk @@ -%lu,%lu +%lu,%lu @@ "
+                    "with offset %s");
+              if ((err = svn_cmdline_printf(pool,
+                                            apr_pstrcat(pool, s,
+                                                        "%"APR_UINT64_T_FMT
+                                                        " and fuzz %d\n",
+                                                        NULL),
+                                            n->hunk_original_start,
+                                            n->hunk_original_length,
+                                            n->hunk_modified_start,
+                                            n->hunk_modified_length,
+                                            minus, off, n->hunk_fuzz)))
+                goto print_error;
+            }
+          else
+            {
+              s = _(">         applied hunk @@ -%lu,%lu +%lu,%lu @@ "
+                    "with offset %s");
+              if ((err = svn_cmdline_printf(pool,
+                                            apr_pstrcat(pool, s,
+                                                        "%"APR_UINT64_T_FMT"\n",
+                                                        NULL),
+                                            n->hunk_original_start,
+                                            n->hunk_original_length,
+                                            n->hunk_modified_start,
+                                            n->hunk_modified_length,
+                                            minus, off)))
+                goto print_error;
+            }
+        }
+      else if (n->hunk_fuzz)
+        {
+          if ((err = svn_cmdline_printf(pool,
+                          _(">         applied hunk @@ -%lu,%lu +%lu,%lu @@ "
+                                        "with fuzz %d\n"),
+                                        n->hunk_original_start,
+                                        n->hunk_original_length,
+                                        n->hunk_modified_start,
+                                        n->hunk_modified_length,
+                                        n->hunk_fuzz)))
+            goto print_error;
+
+        }
+      break;
+
+    case svn_wc_notify_patch_rejected_hunk:
+      nb->received_some_change = TRUE;
+      if ((err = svn_cmdline_printf(pool,
+                                    _(">         rejected hunk "
+                                      "@@ -%lu,%lu +%lu,%lu @@\n"),
+                                    n->hunk_original_start,
+                                    n->hunk_original_length,
+                                    n->hunk_modified_start,
+                                    n->hunk_modified_length)))
+        goto print_error;
+      break;
+
     case svn_wc_notify_update_update:
+    case svn_wc_notify_merge_record_info:
       {
         if (n->content_state == svn_wc_notify_state_conflicted)
           {
-            nb->in_external ? nb->ext_text_conflicts++
-                            : nb->text_conflicts++;
+            nb->text_conflicts++;
             statchar_buf[0] = 'C';
           }
         else if (n->kind == svn_node_file)
@@ -299,8 +380,7 @@ notify(void *baton, const svn_wc_notify_
 
         if (n->prop_state == svn_wc_notify_state_conflicted)
           {
-            nb->in_external ? nb->ext_prop_conflicts++
-                            : nb->prop_conflicts++;
+            nb->prop_conflicts++;
             statchar_buf[1] = 'C';
           }
         else if (n->prop_state == svn_wc_notify_state_merged)
@@ -345,8 +425,6 @@ notify(void *baton, const svn_wc_notify_
         {
           svn_handle_warning2(stderr, n->err, "svn: ");
           nb->in_external = FALSE;
-          nb->ext_text_conflicts = nb->ext_prop_conflicts
-            = nb->ext_tree_conflicts = nb->ext_skipped_paths = 0;
           if ((err = svn_cmdline_printf(pool, "\n")))
             goto print_error;
         }
@@ -583,6 +661,50 @@ notify(void *baton, const svn_wc_notify_
         goto print_error;
       break;
 
+    case svn_wc_notify_merge_record_info_begin:
+      if (!n->merge_range)
+        {
+          err = svn_cmdline_printf(pool,
+                                   _("--- Recording mergeinfo for merge "
+                                     "between repository URLs into '%s':\n"),
+                                   path_local);
+        }
+      else
+        {
+          if (n->merge_range->start == n->merge_range->end - 1
+              || n->merge_range->start == n->merge_range->end)
+            err = svn_cmdline_printf(
+              pool,
+              _("--- Recording mergeinfo for merge of r%ld into '%s':\n"),
+              n->merge_range->end, path_local);
+          else if (n->merge_range->start - 1 == n->merge_range->end)
+            err = svn_cmdline_printf(
+              pool,
+              _("--- Recording mergeinfo for reverse merge of r%ld into '%s':\n"),
+              n->merge_range->start, path_local);
+           else if (n->merge_range->start < n->merge_range->end)
+             err = svn_cmdline_printf(
+               pool,
+               _("--- Recording mergeinfo for merge of r%ld through r%ld into '%s':\n"),
+               n->merge_range->start + 1, n->merge_range->end, path_local);
+           else /* n->merge_range->start > n->merge_range->end - 1 */
+             err = svn_cmdline_printf(
+               pool,
+               _("--- Recording mergeinfo for reverse merge of r%ld through r%ld into '%s':\n"),
+               n->merge_range->start, n->merge_range->end + 1, path_local);
+
+      if (err)
+        goto print_error;
+        }
+      break;
+
+    case svn_wc_notify_merge_elide_info:
+      if ((err = svn_cmdline_printf(pool,
+                                    _("--- Eliding mergeinfo from '%s':\n"),
+                                    path_local)))
+        goto print_error;
+      break;
+
     case svn_wc_notify_foreign_merge_begin:
       if (n->merge_range == NULL)
         err = svn_cmdline_printf(pool,
@@ -618,8 +740,7 @@ notify(void *baton, const svn_wc_notify_
       break;
 
     case svn_wc_notify_tree_conflict:
-      nb->in_external ? nb->ext_tree_conflicts++
-                      : nb->tree_conflicts++;
+      nb->tree_conflicts++;
       if ((err = svn_cmdline_printf(pool, "   C %s\n", path_local)))
         goto print_error;
       break;
@@ -706,10 +827,6 @@ svn_cl__get_notifier(svn_wc_notify_func2
   nb->prop_conflicts = 0;
   nb->tree_conflicts = 0;
   nb->skipped_paths = 0;
-  nb->ext_text_conflicts = 0;
-  nb->ext_prop_conflicts = 0;
-  nb->ext_tree_conflicts = 0;
-  nb->ext_skipped_paths = 0;
   SVN_ERR(svn_dirent_get_absolute(&nb->path_prefix, "", pool));
 
   *notify_func_p = notify;

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/obliterate-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/obliterate-cmd.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/obliterate-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/obliterate-cmd.c Tue Aug 10 18:06:17 2010
@@ -41,6 +41,48 @@
 /*** Code. ***/
 
 
+struct notify_baton
+{
+  svn_boolean_t had_print_error; /* Used to not keep printing error messages
+                                    when we've already had one print error. */
+};
+
+/* Implements 'svn_wc_notify_func2_t'. */
+static void
+notify(void *baton, const svn_wc_notify_t *n, apr_pool_t *pool)
+{
+  struct notify_baton *nb = baton;
+  svn_error_t *err;
+
+  switch (n->action)
+    {
+    case svn_wc_notify_delete:
+      if ((err = svn_cmdline_printf(pool, _("Obliterate %8ld %s\n"),
+                                    n->revision, n->url)))
+        goto print_error;
+      break;
+
+    default:
+      SVN_ERR_MALFUNCTION_NO_RETURN();
+    }
+
+  if ((err = svn_cmdline_fflush(stdout)))
+    goto print_error;
+
+  return;
+
+ print_error:
+  /* If we had no errors before, print this error to stderr. Else, don't print
+     anything.  The user already knows there were some output errors,
+     so there is no point in flooding her with an error per notification. */
+  if (!nb->had_print_error)
+    {
+      nb->had_print_error = TRUE;
+      svn_handle_error2(err, stderr, FALSE, "svn: ");
+    }
+  svn_error_clear(err);
+}
+
 /* This implements the `svn_opt_subcommand_t' interface. */
 svn_error_t *
 svn_cl__obliterate(apr_getopt_t *os,
@@ -50,6 +92,7 @@ svn_cl__obliterate(apr_getopt_t *os,
   svn_cl__opt_state_t *opt_state = ((svn_cl__cmd_baton_t *) baton)->opt_state;
   svn_client_ctx_t *ctx = ((svn_cl__cmd_baton_t *) baton)->ctx;
   apr_array_header_t *targets;
+  struct notify_baton nb = { FALSE };
   svn_opt_revision_t rev;
   svn_revnum_t revnum;
   const char *url;
@@ -59,6 +102,9 @@ svn_cl__obliterate(apr_getopt_t *os,
                                                       opt_state->targets,
                                                       ctx, pool));
 
+  ctx->notify_func2 = notify;
+  ctx->notify_baton2 = &nb;
+
   /* Parse the argument into TRUEPATH and REVNUM. */
   if (targets->nelts != 1)
     return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
@@ -73,7 +119,7 @@ svn_cl__obliterate(apr_getopt_t *os,
                             _("Target must specify a URL"));
   revnum = rev.value.number;
 
-  SVN_ERR(svn_client__obliterate(url, revnum, ctx, pool));
+  SVN_ERR(svn_client__obliterate_path_rev(url, revnum, ctx, pool));
 
   return SVN_NO_ERROR;
 }

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/patch-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/patch-cmd.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/patch-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/patch-cmd.c Tue Aug 10 18:06:17 2010
@@ -46,37 +46,42 @@ svn_cl__patch(apr_getopt_t *os,
               void *baton,
               apr_pool_t *pool)
 {
-  svn_cl__opt_state_t *opt_state = ((svn_cl__cmd_baton_t *) baton)->opt_state;
-  svn_client_ctx_t *ctx = ((svn_cl__cmd_baton_t *) baton)->ctx;
-  apr_array_header_t *args, *targets;
-  const char *patch_path = NULL, *target_path = NULL;
+  svn_cl__opt_state_t *opt_state;
+  svn_client_ctx_t *ctx;
+  apr_array_header_t *args;
+  apr_array_header_t *targets;
+  const char *abs_patch_path;
+  const char *abs_target_path;
+
+  opt_state = ((svn_cl__cmd_baton_t *)baton)->opt_state;
+  ctx = ((svn_cl__cmd_baton_t *)baton)->ctx;
 
-  /* Get patch file argument. */
   SVN_ERR(svn_opt_parse_num_args(&args, os, 1, pool));
-  SVN_ERR(svn_dirent_get_absolute(&patch_path,
-                                APR_ARRAY_IDX(args, 0, const char *),
-                                pool));
+  SVN_ERR(svn_dirent_get_absolute(&abs_patch_path,
+                                  APR_ARRAY_IDX(args, 0, const char *),
+                                  pool));
 
-  /* Get WCPATH argument */
   SVN_ERR(svn_client_args_to_target_array(&targets, os, opt_state->targets,
                                           ctx, pool));
-
-  /* Error on extra arguments to allow future extension. */
   if (targets->nelts > 1)
     return svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, 0, NULL);
 
   svn_opt_push_implicit_dot_target(targets, pool);
-
   SVN_ERR(svn_opt_eat_peg_revisions(&targets, targets, pool));
-  target_path = APR_ARRAY_IDX(targets, 0, const char *);
+  SVN_ERR(svn_dirent_get_absolute(&abs_target_path,
+                                  APR_ARRAY_IDX(targets, 0, const char *),
+                                  pool));
 
   if (! opt_state->quiet)
     SVN_ERR(svn_cl__get_notifier(&ctx->notify_func2, &ctx->notify_baton2,
                                  FALSE, FALSE, FALSE, pool));
 
-  /* OK we're good. */
-  SVN_ERR(svn_client_patch(patch_path, target_path, opt_state->dry_run,
-                           opt_state->strip_count, ctx, pool));
+  SVN_ERR(svn_client_patch(abs_patch_path, abs_target_path,
+                           opt_state->dry_run, opt_state->strip_count,
+                           opt_state->reverse_diff,
+                           opt_state->include_patterns,
+                           opt_state->exclude_patterns,
+                           NULL, NULL, ctx, pool, pool));
 
   if (! opt_state->quiet)
     SVN_ERR(svn_cl__print_conflict_stats(ctx->notify_baton2, pool));

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/propget-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/propget-cmd.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/propget-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/propget-cmd.c Tue Aug 10 18:06:17 2010
@@ -76,8 +76,8 @@ print_properties_xml(const char *pname,
 
   for (hi = apr_hash_first(pool, props); hi; hi = apr_hash_next(hi))
     {
-      const char *filename = svn_apr_hash_index_key(hi);
-      svn_string_t *propval = svn_apr_hash_index_val(hi);
+      const char *filename = svn__apr_hash_index_key(hi);
+      svn_string_t *propval = svn__apr_hash_index_val(hi);
       svn_stringbuf_t *sb = NULL;
 
       svn_pool_clear(iterpool);
@@ -120,8 +120,8 @@ print_properties(svn_stream_t *out,
 
   for (hi = apr_hash_first(pool, props); hi; hi = apr_hash_next(hi))
     {
-      const char *filename = svn_apr_hash_index_key(hi);
-      svn_string_t *propval = svn_apr_hash_index_val(hi);
+      const char *filename = svn__apr_hash_index_key(hi);
+      svn_string_t *propval = svn__apr_hash_index_val(hi);
 
       svn_pool_clear(iterpool);
 

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/props.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/props.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/props.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/props.c Tue Aug 10 18:06:17 2010
@@ -47,7 +47,7 @@
 
 svn_error_t *
 svn_cl__revprop_prepare(const svn_opt_revision_t *revision,
-                        apr_array_header_t *targets,
+                        const apr_array_header_t *targets,
                         const char **URL,
                         svn_client_ctx_t *ctx,
                         apr_pool_t *pool)
@@ -90,8 +90,8 @@ svn_cl__print_prop_hash(apr_hash_t *prop
 
   for (hi = apr_hash_first(pool, prop_hash); hi; hi = apr_hash_next(hi))
     {
-      const char *pname = svn_apr_hash_index_key(hi);
-      svn_string_t *propval = svn_apr_hash_index_val(hi);
+      const char *pname = svn__apr_hash_index_key(hi);
+      svn_string_t *propval = svn__apr_hash_index_val(hi);
       const char *pname_stdout;
 
       if (svn_prop_needs_translation(pname))
@@ -131,8 +131,8 @@ svn_cl__print_xml_prop_hash(svn_stringbu
 
   for (hi = apr_hash_first(pool, prop_hash); hi; hi = apr_hash_next(hi))
     {
-      const char *pname = svn_apr_hash_index_key(hi);
-      svn_string_t *propval = svn_apr_hash_index_val(hi);
+      const char *pname = svn__apr_hash_index_key(hi);
+      svn_string_t *propval = svn__apr_hash_index_val(hi);
 
       if (names_only)
         {

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/propset-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/propset-cmd.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/propset-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/propset-cmd.c Tue Aug 10 18:06:17 2010
@@ -88,12 +88,11 @@ svn_cl__propset(apr_getopt_t *os,
   if (svn_prop_needs_translation(pname_utf8))
     SVN_ERR(svn_subst_translate_string(&propval, propval,
                                        opt_state->encoding, scratch_pool));
-  else
-    if (opt_state->encoding)
-      return svn_error_create
-        (SVN_ERR_UNSUPPORTED_FEATURE, NULL,
-         _("--encoding option applies only to textual"
-           " Subversion-controlled properties"));
+  else if (opt_state->encoding)
+    return svn_error_create
+      (SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+       _("--encoding option applies only to textual"
+         " Subversion-controlled properties"));
 
   /* Suck up all the remaining arguments into a targets array */
 

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/status-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/status-cmd.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/status-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/status-cmd.c Tue Aug 10 18:06:17 2010
@@ -60,6 +60,11 @@ struct status_baton
   svn_boolean_t had_print_error;  /* To avoid printing lots of errors if we get
                                      errors while printing to stdout */
   svn_boolean_t xml_mode;
+
+  /* Conflict stats. */
+  unsigned int text_conflicts;
+  unsigned int prop_conflicts;
+  unsigned int tree_conflicts;
 };
 
 
@@ -69,6 +74,29 @@ struct status_cache
   svn_wc_status2_t *status;
 };
 
+/* Print conflict stats accumulated in status baton SB.
+ * Do temporary allocations in POOL. */
+static svn_error_t *
+print_conflict_stats(struct status_baton *sb, apr_pool_t *pool)
+{
+  if (sb->text_conflicts > 0 || sb->prop_conflicts > 0 ||
+      sb->tree_conflicts > 0)
+      SVN_ERR(svn_cmdline_printf(pool, "%s", _("Summary of conflicts:\n")));
+
+  if (sb->text_conflicts > 0)
+    SVN_ERR(svn_cmdline_printf
+      (pool, _("  Text conflicts: %u\n"), sb->text_conflicts));
+
+  if (sb->prop_conflicts > 0)
+    SVN_ERR(svn_cmdline_printf
+      (pool, _("  Property conflicts: %u\n"), sb->prop_conflicts));
+
+  if (sb->tree_conflicts > 0)
+    SVN_ERR(svn_cmdline_printf
+      (pool, _("  Tree conflicts: %u\n"), sb->tree_conflicts));
+
+  return SVN_NO_ERROR;
+}
 
 /* Prints XML target element with path attribute TARGET, using POOL for
    temporary allocations. */
@@ -124,6 +152,9 @@ print_status_normal_or_xml(void *baton,
                                 sb->show_last_committed,
                                 sb->skip_unrecognized,
                                 sb->repos_locks,
+                                &sb->text_conflicts,
+                                &sb->prop_conflicts,
+                                &sb->tree_conflicts,
                                 pool);
 }
 
@@ -149,7 +180,7 @@ print_status(void *baton,
       scache->path = apr_pstrdup(sb->cl_pool, path);
       scache->status = svn_wc_dup_status2(status, sb->cl_pool);
 
-      path_array = (apr_array_header_t *)
+      path_array =
         apr_hash_get(sb->cached_changelists, cl_key, APR_HASH_KEY_STRING);
       if (path_array == NULL)
         {
@@ -221,6 +252,9 @@ svn_cl__status(apr_getopt_t *os,
   sb.xml_mode = opt_state->xml;
   sb.cached_changelists = master_cl_hash;
   sb.cl_pool = scratch_pool;
+  sb.text_conflicts = 0;
+  sb.prop_conflicts = 0;
+  sb.tree_conflicts = 0;
 
   SVN_ERR(svn_opt_eat_peg_revisions(&targets, targets, scratch_pool));
 
@@ -272,8 +306,8 @@ svn_cl__status(apr_getopt_t *os,
       for (hi = apr_hash_first(scratch_pool, master_cl_hash); hi;
            hi = apr_hash_next(hi))
         {
-          const char *changelist_name = svn_apr_hash_index_key(hi);
-          apr_array_header_t *path_array = svn_apr_hash_index_val(hi);
+          const char *changelist_name = svn__apr_hash_index_key(hi);
+          apr_array_header_t *path_array = svn__apr_hash_index_val(hi);
           int j;
 
           /* ### TODO: For non-XML output, we shouldn't print the
@@ -313,5 +347,8 @@ svn_cl__status(apr_getopt_t *os,
   if (opt_state->xml && (! opt_state->incremental))
     SVN_ERR(svn_cl__xml_print_footer("status", scratch_pool));
 
+  if (! opt_state->quiet && ! opt_state->xml)
+      SVN_ERR(print_conflict_stats(&sb, scratch_pool));
+
   return SVN_NO_ERROR;
 }

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/status.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/status.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/status.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/status.c Tue Aug 10 18:06:17 2010
@@ -105,6 +105,9 @@ print_status(const char *path,
              svn_boolean_t show_last_committed,
              svn_boolean_t repos_locks,
              const svn_wc_status2_t *status,
+             unsigned int *text_conflicts,
+             unsigned int *prop_conflicts,
+             unsigned int *tree_conflicts,
              apr_pool_t *pool)
 {
   enum svn_wc_status_kind text_status = status->text_status;
@@ -122,6 +125,14 @@ print_status(const char *path,
       svn_cl__get_human_readable_tree_conflict_description(
         &desc, status->tree_conflict, pool);
       tree_desc_line = apr_psprintf(pool, "\n      >   %s", desc);
+      (*tree_conflicts)++;
+    }
+  else
+    {
+      if (text_status == svn_wc_status_conflicted)
+        (*text_conflicts)++;
+      if (status->prop_status == svn_wc_status_conflicted)
+        (*prop_conflicts)++;
     }
 
   if (detailed)
@@ -363,6 +374,9 @@ svn_cl__print_status(const char *path,
                      svn_boolean_t show_last_committed,
                      svn_boolean_t skip_unrecognized,
                      svn_boolean_t repos_locks,
+                     unsigned int *text_conflicts,
+                     unsigned int *prop_conflicts,
+                     unsigned int *tree_conflicts,
                      apr_pool_t *pool)
 {
   if (! status
@@ -373,5 +387,5 @@ svn_cl__print_status(const char *path,
 
   return print_status(svn_dirent_local_style(path, pool),
                       detailed, show_last_committed, repos_locks, status,
-                      pool);
+                      text_conflicts, prop_conflicts, tree_conflicts, pool);
 }

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/svn.1
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/svn.1?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/svn.1 (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/svn.1 Tue Aug 10 18:06:17 2010
@@ -36,7 +36,7 @@ is called the source ``repository''; it 
 to permit extracting previous versions of those files at any time.
 
 For more information about the Subversion project, visit 
-http://subversion.tigris.org.
+http://subversion.apache.org.
 
 Documentation for Subversion and its tools, including detailed usage
 explanations of the \fBsvn\fP, \fBsvnadmin\fP, \fBsvnserve\fP and

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/switch-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/switch-cmd.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/switch-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/switch-cmd.c Tue Aug 10 18:06:17 2010
@@ -40,7 +40,7 @@
 /*** Code. ***/
 
 static svn_error_t *
-rewrite_urls(apr_array_header_t *targets,
+rewrite_urls(const apr_array_header_t *targets,
              svn_boolean_t recurse,
              svn_client_ctx_t *ctx,
              apr_pool_t *pool)

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/util.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/util.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/util.c Tue Aug 10 18:06:17 2010
@@ -1100,7 +1100,7 @@ svn_cl__operation_str_human_readable(svn
 svn_error_t *
 svn_cl__args_to_target_array_print_reserved(apr_array_header_t **targets,
                                             apr_getopt_t *os,
-                                            apr_array_header_t *known_targets,
+                                            const apr_array_header_t *known_targets,
                                             svn_client_ctx_t *ctx,
                                             apr_pool_t *pool)
 {
@@ -1266,6 +1266,12 @@ svn_cl__node_description(const svn_wc_co
   const char *root_str = "^";
   const char *path_str = "...";
 
+  if (!node)
+    /* Printing "(none)" the harder way to ensure conformity (mostly with
+     * translations). */
+    return apr_psprintf(pool, "(%s)",
+                        svn_cl__node_kind_str_human_readable(svn_node_none));
+
   /* Construct a "caret notation" ^/URL if NODE matches WC_REPOS_ROOT_URL.
    * Otherwise show the complete URL, and if we can't, show dots. */
 

Modified: subversion/branches/ignore-mergeinfo/subversion/svn_private_config.hw
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn_private_config.hw?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn_private_config.hw (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn_private_config.hw Tue Aug 10 18:06:17 2010
@@ -30,9 +30,9 @@
 #define SVN_PRIVATE_CONFIG_HW
 
 /* The minimal version of Berkeley DB we want */
-#define SVN_FS_WANT_DB_MAJOR	4
-#define SVN_FS_WANT_DB_MINOR	0
-#define SVN_FS_WANT_DB_PATCH	14
+#define SVN_FS_WANT_DB_MAJOR    4
+#define SVN_FS_WANT_DB_MINOR    0
+#define SVN_FS_WANT_DB_PATCH    14
 
 
 /* Path separator for local filesystem */

Modified: subversion/branches/ignore-mergeinfo/subversion/svnadmin/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svnadmin/main.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svnadmin/main.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svnadmin/main.c Tue Aug 10 18:06:17 2010
@@ -1248,8 +1248,8 @@ subcommand_lslocks(apr_getopt_t *os, voi
   for (hi = apr_hash_first(pool, locks); hi; hi = apr_hash_next(hi))
     {
       const char *cr_date, *exp_date = "";
-      const char *path = svn_apr_hash_index_key(hi);
-      svn_lock_t *lock = svn_apr_hash_index_val(hi);
+      const char *path = svn__apr_hash_index_key(hi);
+      svn_lock_t *lock = svn__apr_hash_index_val(hi);
       int comment_lines = 0;
 
       cr_date = svn_time_to_human_cstring(lock->creation_date, pool);

Modified: subversion/branches/ignore-mergeinfo/subversion/svnadmin/svnadmin.1
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svnadmin/svnadmin.1?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svnadmin/svnadmin.1 (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svnadmin/svnadmin.1 Tue Aug 10 18:06:17 2010
@@ -36,7 +36,7 @@ is called the source ``repository''; it 
 to permit extracting previous versions of those files at any time.
 
 For more information about the Subversion project, visit 
-http://subversion.tigris.org.
+http://subversion.apache.org.
 
 Documentation for Subversion and its tools, including detailed usage
 explanations of the \fBsvn\fP, \fBsvnadmin\fP, \fBsvnserve\fP and

Modified: subversion/branches/ignore-mergeinfo/subversion/svndumpfilter/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svndumpfilter/main.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svndumpfilter/main.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svndumpfilter/main.c Tue Aug 10 18:06:17 2010
@@ -110,7 +110,7 @@ write_prop_to_stringbuf(svn_stringbuf_t 
 
 /* Prefix matching function to compare node-path with set of prefixes. */
 static svn_boolean_t
-ary_prefix_match(apr_array_header_t *pfxlist, const char *path)
+ary_prefix_match(const apr_array_header_t *pfxlist, const char *path)
 {
   int i, pfx_len, path_len = strlen(path);
   const char *pfx;
@@ -133,7 +133,7 @@ ary_prefix_match(apr_array_header_t *pfx
 /* Check whether we need to skip this PATH based on its presence in
    the PREFIXES list, and the DO_EXCLUDE option. */
 static APR_INLINE svn_boolean_t
-skip_path(const char *path, apr_array_header_t *prefixes,
+skip_path(const char *path, const apr_array_header_t *prefixes,
           svn_boolean_t do_exclude, svn_boolean_t glob)
 {
   const svn_boolean_t matches =
@@ -285,8 +285,8 @@ new_revision_record(void **revision_bato
 
   for (hi = apr_hash_first(pool, headers); hi; hi = apr_hash_next(hi))
     {
-      const char *key = svn_apr_hash_index_key(hi);
-      const char *val = svn_apr_hash_index_val(hi);
+      const char *key = svn__apr_hash_index_key(hi);
+      const char *val = svn__apr_hash_index_val(hi);
 
       if ((!strcmp(key, SVN_REPOS_DUMPFILE_CONTENT_LENGTH))
           || (!strcmp(key, SVN_REPOS_DUMPFILE_PROP_CONTENT_LENGTH))
@@ -351,8 +351,8 @@ output_revision(struct revision_baton_t 
            hi;
            hi = apr_hash_next(hi))
         {
-          const char *pname = svn_apr_hash_index_key(hi);
-          const svn_string_t *pval = svn_apr_hash_index_val(hi);
+          const char *pname = svn__apr_hash_index_key(hi);
+          const svn_string_t *pval = svn__apr_hash_index_val(hi);
 
           write_prop_to_stringbuf(&props, pname, pval);
         }
@@ -550,8 +550,8 @@ new_node_record(void **node_baton,
 
       for (hi = apr_hash_first(pool, headers); hi; hi = apr_hash_next(hi))
         {
-          const char *key = svn_apr_hash_index_key(hi);
-          const char *val = svn_apr_hash_index_val(hi);
+          const char *key = svn__apr_hash_index_key(hi);
+          const char *val = svn__apr_hash_index_val(hi);
 
           if ((!strcmp(key, SVN_REPOS_DUMPFILE_CONTENT_LENGTH))
               || (!strcmp(key, SVN_REPOS_DUMPFILE_PROP_CONTENT_LENGTH))
@@ -672,8 +672,8 @@ adjust_mergeinfo(svn_string_t **final_va
   SVN_ERR(svn_mergeinfo_parse(&mergeinfo, initial_val->data, subpool));
   for (hi = apr_hash_first(subpool, mergeinfo); hi; hi = apr_hash_next(hi))
     {
-      const char *merge_source = svn_apr_hash_index_key(hi);
-      apr_array_header_t *rangelist = svn_apr_hash_index_val(hi);
+      const char *merge_source = svn__apr_hash_index_key(hi);
+      apr_array_header_t *rangelist = svn__apr_hash_index_val(hi);
       struct parse_baton_t *pb = rb->pb;
       int i;
 
@@ -1132,7 +1132,7 @@ do_filter(apr_getopt_t *os,
            hi;
            hi = apr_hash_next(hi))
         {
-          const svn_revnum_t *revnum = svn_apr_hash_index_key(hi);
+          const svn_revnum_t *revnum = svn__apr_hash_index_key(hi);
 
           APR_ARRAY_PUSH(keys, svn_revnum_t) = *revnum;
         }
@@ -1176,7 +1176,7 @@ do_filter(apr_getopt_t *os,
            hi;
            hi = apr_hash_next(hi))
         {
-          const char *path = svn_apr_hash_index_key(hi);
+          const char *path = svn__apr_hash_index_key(hi);
 
           APR_ARRAY_PUSH(keys, const char *) = path;
         }

Modified: subversion/branches/ignore-mergeinfo/subversion/svndumpfilter/svndumpfilter.1
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svndumpfilter/svndumpfilter.1?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svndumpfilter/svndumpfilter.1 (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svndumpfilter/svndumpfilter.1 Tue Aug 10 18:06:17 2010
@@ -36,7 +36,7 @@ is called the source ``repository''; it 
 to permit extracting previous versions of those files at any time.
 
 For more information about the Subversion project, visit 
-http://subversion.tigris.org.
+http://subversion.apache.org.
 
 Documentation for Subversion and its tools, including detailed usage
 explanations of the \fBsvn\fP, \fBsvnadmin\fP, \fBsvnserve\fP and

Modified: subversion/branches/ignore-mergeinfo/subversion/svnlook/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svnlook/main.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svnlook/main.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svnlook/main.c Tue Aug 10 18:06:17 2010
@@ -1218,7 +1218,7 @@ print_tree(svn_fs_root_t *root,
       subpool = svn_pool_create(pool);
       for (hi = apr_hash_first(pool, entries); hi; hi = apr_hash_next(hi))
         {
-          svn_fs_dirent_t *entry = svn_apr_hash_index_val(hi);
+          svn_fs_dirent_t *entry = svn__apr_hash_index_val(hi);
 
           svn_pool_clear(subpool);
           SVN_ERR(print_tree(root,
@@ -1685,11 +1685,16 @@ do_plist(svnlook_ctxt_t *c,
       SVN_ERR(verify_path(&kind, root, path, pool));
       SVN_ERR(svn_fs_node_proplist(&props, root, path, pool));
     }
-  else
+  else if (c->is_revision)
     {
       SVN_ERR(svn_fs_revision_proplist(&props, c->fs, c->rev_id, pool));
       revprop = TRUE;
     }
+  else
+    {
+      SVN_ERR(svn_fs_txn_proplist(&props, c->txn, pool));
+      revprop = TRUE;
+    }
 
   if (xml)
     {
@@ -1703,8 +1708,16 @@ do_plist(svnlook_ctxt_t *c,
       if (revprop)
         {
           /* "<revprops ...>" */
-          svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "revprops",
-                                "rev", revstr, NULL);
+          if (c->is_revision)
+            {
+              svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "revprops",
+                                    "rev", revstr, NULL);
+            }
+          else
+            {
+              svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "revprops",
+                                    "txn", c->txn_name, NULL);
+            }
         }
       else
         {
@@ -1716,8 +1729,8 @@ do_plist(svnlook_ctxt_t *c,
 
   for (hi = apr_hash_first(pool, props); hi; hi = apr_hash_next(hi))
     {
-      const char *pname = svn_apr_hash_index_key(hi);
-      svn_string_t *propval = svn_apr_hash_index_val(hi);
+      const char *pname = svn__apr_hash_index_key(hi);
+      svn_string_t *propval = svn__apr_hash_index_val(hi);
 
       SVN_ERR(check_cancel(NULL));
 
@@ -1739,12 +1752,11 @@ do_plist(svnlook_ctxt_t *c,
           else
             printf("  %s : %s\n", pname_stdout, propval->data);
         }
+      else if (xml)
+        svn_xml_make_open_tag(&sb, pool, svn_xml_self_closing, "property",
+                              "name", pname, NULL);
       else
-        if (xml)
-          svn_xml_make_open_tag(&sb, pool, svn_xml_self_closing, "property",
-                                "name", pname, NULL);
-        else
-          printf("  %s\n", pname);
+        printf("  %s\n", pname);
     }
   if (xml)
     {

Modified: subversion/branches/ignore-mergeinfo/subversion/svnlook/svnlook.1
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svnlook/svnlook.1?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svnlook/svnlook.1 (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svnlook/svnlook.1 Tue Aug 10 18:06:17 2010
@@ -36,7 +36,7 @@ is called the source ``repository''; it 
 to permit extracting previous versions of those files at any time.
 
 For more information about the Subversion project, visit 
-http://subversion.tigris.org.
+http://subversion.apache.org.
 
 Documentation for Subversion and its tools, including detailed usage
 explanations of the \fBsvn\fP, \fBsvnadmin\fP, \fBsvnserve\fP and

Modified: subversion/branches/ignore-mergeinfo/subversion/svnserve/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svnserve/main.c?rev=984153&r1=984152&r2=984153&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svnserve/main.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svnserve/main.c Tue Aug 10 18:06:17 2010
@@ -179,6 +179,14 @@ static const apr_getopt_option_t svnserv
         "                             "
         "[mode: daemon, listen-once]")},
 #endif
+    {"prefer-ipv6",      '6', 0,
+     N_("prefer IPv6 when resolving the listen hostname\n"
+        "                             "
+        "[IPv4 is preferred by default. Using IPv4 and IPv6\n"
+        "                             "
+        "at the same time is not supported in daemon mode.\n"
+        "                             "
+        "Use inetd mode or tunnel mode if you need this.]")},
 #ifdef CONNECTION_HAVE_THREAD_OPTION
     /* ### Making the assumption here that WIN32 never has fork and so
      * ### this option never exists when --service exists. */
@@ -380,6 +388,8 @@ int main(int argc, const char *argv[])
   apr_uint16_t port = SVN_RA_SVN_PORT;
   const char *host = NULL;
   int family = APR_INET;
+  apr_int32_t sockaddr_info_flags = 0;
+  svn_boolean_t prefer_v6 = FALSE;
   int mode_opt_count = 0;
   const char *config_filename = NULL;
   const char *pid_filename = NULL;
@@ -429,6 +439,10 @@ int main(int argc, const char *argv[])
         usage(argv[0], pool);
       switch (opt)
         {
+        case '6':
+          prefer_v6 = TRUE;
+          break;
+
         case 'h':
           help(pool);
           break;
@@ -677,10 +691,24 @@ int main(int argc, const char *argv[])
     {
       apr_socket_close(sock);
       family = APR_UNSPEC;
+
+      if (prefer_v6)
+        {
+          if (host == NULL)
+            host = "::";
+          sockaddr_info_flags = APR_IPV6_ADDR_OK;
+        }
+      else
+        {
+          if (host == NULL)
+            host = "0.0.0.0";
+          sockaddr_info_flags = APR_IPV4_ADDR_OK;
+        }
     }
 #endif
 
-  status = apr_sockaddr_info_get(&sa, host, family, port, 0, pool);
+  status = apr_sockaddr_info_get(&sa, host, family, port,
+                                 sockaddr_info_flags, pool);
   if (status)
     {
       err = svn_error_wrap_apr(status, _("Can't get address info"));