You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by jc...@apache.org on 2011/01/09 23:39:43 UTC

svn commit: r1057044 [3/4] - in /subversion/branches/diff-optimizations-bytes: ./ build/ contrib/client-side/svnmerge/ contrib/hook-scripts/ notes/commit-access-templates/ subversion/bindings/javahl/native/ subversion/bindings/javahl/src/org/apache/sub...

Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/update_editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/update_editor.c?rev=1057044&r1=1057043&r2=1057044&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/update_editor.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/update_editor.c Sun Jan  9 22:39:40 2011
@@ -275,9 +275,6 @@ struct dir_baton
   /* Set if updates to this directory are skipped */
   svn_boolean_t skip_this;
 
-  /* Set if updates to all descendants of this directory are skipped */
-  svn_boolean_t skip_descendants;
-
   /* Set if there was a previous notification for this directory */
   svn_boolean_t already_notified;
 
@@ -1212,7 +1209,6 @@ open_root(void *edit_baton,
   if (already_conflicted)
     {
       db->skip_this = TRUE;
-      db->skip_descendants = TRUE;
       db->already_notified = TRUE;
       db->bump_info->skipped = TRUE;
 
@@ -2082,13 +2078,8 @@ delete_entry(const char *path,
 
   local_abspath = svn_dirent_join(pb->local_abspath, base, pool);
 
-  if (pb->skip_descendants)
-    {
-      if (!pb->skip_this)
-        SVN_ERR(remember_skipped_tree(pb->edit_baton, local_abspath));
-
-      return SVN_NO_ERROR;
-    }
+  if (pb->skip_this)
+    return SVN_NO_ERROR;
 
   SVN_ERR(check_path_under_root(pb->local_abspath, base, pool));
 
@@ -2126,13 +2117,9 @@ add_directory(const char *path,
   SVN_ERR(make_dir_baton(&db, path, eb, pb, TRUE, pool));
   *child_baton = db;
 
-  if (pb->skip_descendants)
+  if (pb->skip_this)
     {
-      if (!pb->skip_this)
-        SVN_ERR(remember_skipped_tree(eb, db->local_abspath));
-
       db->skip_this = TRUE;
-      db->skip_descendants = TRUE;
       db->already_notified = TRUE;
 
       return SVN_NO_ERROR;
@@ -2229,7 +2216,6 @@ add_directory(const char *path,
       SVN_ERR(remember_skipped_tree(eb, db->local_abspath));
 
       db->skip_this = TRUE;
-      db->skip_descendants = TRUE;
       db->already_notified = TRUE;
 
       /* ### TODO: Also print victim_path in the skip msg. */
@@ -2414,7 +2400,6 @@ add_directory(const char *path,
       SVN_ERR(remember_skipped_tree(eb, db->local_abspath));
 
       db->skip_this = TRUE;
-      db->skip_descendants = TRUE;
       db->already_notified = TRUE;
 
       do_notification(eb, db->local_abspath, svn_node_unknown,
@@ -2484,13 +2469,9 @@ open_directory(const char *path,
   /* We should have a write lock on every directory touched.  */
   SVN_ERR(svn_wc__write_check(eb->db, db->local_abspath, pool));
 
-  if (pb->skip_descendants)
+  if (pb->skip_this)
     {
-      if (!pb->skip_this)
-        SVN_ERR(remember_skipped_tree(eb, db->local_abspath));
-
       db->skip_this = TRUE;
-      db->skip_descendants = TRUE;
       db->already_notified = TRUE;
 
       db->bump_info->skipped = TRUE;
@@ -2527,7 +2508,6 @@ open_directory(const char *path,
       SVN_ERR(remember_skipped_tree(eb, db->local_abspath));
 
       db->skip_this = TRUE;
-      db->skip_descendants = TRUE;
       db->already_notified = TRUE;
 
       do_notification(eb, db->local_abspath, svn_node_unknown,
@@ -2564,7 +2544,6 @@ open_directory(const char *path,
           tree_conflict->reason != svn_wc_conflict_reason_replaced)
         {
           SVN_ERR(remember_skipped_tree(eb, db->local_abspath));
-          db->skip_descendants = TRUE;
           db->skip_this = TRUE;
 
           return SVN_NO_ERROR;
@@ -3033,14 +3012,10 @@ add_file(const char *path,
   SVN_ERR(make_file_baton(&fb, pb, path, TRUE, pool));
   *file_baton = fb;
 
-  if (pb->skip_descendants)
+  if (pb->skip_this)
     {
-      if (!pb->skip_this)
-        SVN_ERR(remember_skipped_tree(eb, fb->local_abspath));
-
       fb->skip_this = TRUE;
       fb->already_notified = TRUE;
-
       return SVN_NO_ERROR;
     }
 
@@ -3320,14 +3295,10 @@ open_file(const char *path,
   SVN_ERR(make_file_baton(&fb, pb, path, FALSE, pool));
   *file_baton = fb;
 
-  if (pb->skip_descendants)
+  if (pb->skip_this)
     {
-      if (!pb->skip_this)
-        SVN_ERR(remember_skipped_tree(eb, fb->local_abspath));
-
       fb->skip_this = TRUE;
       fb->already_notified = TRUE;
-
       return SVN_NO_ERROR;
     }
 

Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc-metadata.sql
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc-metadata.sql?rev=1057044&r1=1057043&r2=1057044&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc-metadata.sql (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc-metadata.sql Sun Jan  9 22:39:40 2011
@@ -492,9 +492,9 @@ INSERT INTO NODES (
        changed_revision, changed_date, changed_author,
        checksum, properties, translated_size, last_mod_time,
        dav_cache, symlink_target, file_external )
-SELECT wc_id, local_relpath, 0 AS op_depth, parent_relpath,
+SELECT wc_id, local_relpath, 0 /*op_depth*/, parent_relpath,
        repos_id, repos_relpath, revnum,
-       presence, depth, NULL AS moved_here, NULL AS moved_to, kind,
+       presence, depth, NULL /*moved_here*/, NULL /*moved_to*/, kind,
        changed_rev, changed_date, changed_author,
        checksum, properties, translated_size, last_mod_time,
        dav_cache, symlink_target, file_external
@@ -506,12 +506,12 @@ INSERT INTO NODES (
        changed_revision, changed_date, changed_author,
        checksum, properties, translated_size, last_mod_time,
        dav_cache, symlink_target, file_external )
-SELECT wc_id, local_relpath, 2 AS op_depth, parent_relpath,
+SELECT wc_id, local_relpath, 2 /*op_depth*/, parent_relpath,
        copyfrom_repos_id, copyfrom_repos_path, copyfrom_revnum,
-       presence, depth, NULL AS moved_here, NULL AS moved_to, kind,
+       presence, depth, NULL /*moved_here*/, NULL /*moved_to*/, kind,
        changed_rev, changed_date, changed_author,
        checksum, properties, translated_size, last_mod_time,
-       NULL AS dav_cache, symlink_target, NULL AS file_external
+       NULL /*dav_cache*/, symlink_target, NULL /*file_external*/
 FROM WORKING_NODE;
 
 DROP TABLE BASE_NODE;

Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc-queries.sql
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc-queries.sql?rev=1057044&r1=1057043&r2=1057044&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc-queries.sql (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc-queries.sql Sun Jan  9 22:39:40 2011
@@ -426,11 +426,6 @@ WHERE md5_checksum = ?1
 -- STMT_SELECT_ANY_PRISTINE_REFERENCE
 SELECT 1 FROM nodes
   WHERE checksum = ?1 OR checksum = ?2
-UNION ALL
-SELECT 1 FROM actual_node
-  WHERE older_checksum = ?1 OR older_checksum = ?2
-    OR  left_checksum  = ?1 OR left_checksum  = ?2
-    OR  right_checksum = ?1 OR right_checksum = ?2
 LIMIT 1
 
 -- STMT_SELECT_UNREFERENCED_PRISTINES
@@ -439,15 +434,6 @@ FROM pristine
 EXCEPT
 SELECT checksum FROM nodes
   WHERE checksum IS NOT NULL
-EXCEPT
-SELECT older_checksum FROM actual_node
-  WHERE older_checksum IS NOT NULL
-EXCEPT
-SELECT left_checksum FROM actual_node
-  WHERE left_checksum  IS NOT NULL
-EXCEPT
-SELECT right_checksum FROM actual_node
-  WHERE right_checksum IS NOT NULL
 
 -- STMT_DELETE_PRISTINE
 DELETE FROM pristine
@@ -516,7 +502,7 @@ INSERT OR REPLACE INTO nodes (
     wc_id, local_relpath, op_depth, parent_relpath, presence, kind, checksum,
     changed_revision, changed_date, changed_author, depth, symlink_target,
     translated_size, last_mod_time, properties)
-SELECT wc_id, local_relpath, ?3 AS op_depth, parent_relpath, ?4 AS presence,
+SELECT wc_id, local_relpath, ?3 /*op_depth*/, parent_relpath, ?4 /*presence*/,
        kind, checksum, changed_revision, changed_date, changed_author, depth,
        symlink_target, translated_size, last_mod_time, properties
 FROM nodes
@@ -527,7 +513,7 @@ INSERT OR REPLACE INTO nodes (
     wc_id, local_relpath, op_depth, parent_relpath, presence, kind, checksum,
     changed_revision, changed_date, changed_author, depth, symlink_target,
     translated_size, last_mod_time, properties)
-SELECT wc_id, local_relpath, ?3 AS op_depth, parent_relpath, ?4 AS presence,
+SELECT wc_id, local_relpath, ?3 /*op_depth*/, parent_relpath, ?4 /*presence*/,
        kind, checksum, changed_revision, changed_date, changed_author, depth,
        symlink_target, translated_size, last_mod_time, properties
 FROM nodes
@@ -541,7 +527,7 @@ INSERT INTO nodes (
     revision, presence, depth, kind, changed_revision, changed_date,
     changed_author, checksum, properties, translated_size, last_mod_time,
     symlink_target )
-SELECT wc_id, local_relpath, ?3 AS op_depth, parent_relpath, repos_id,
+SELECT wc_id, local_relpath, ?3 /*op_depth*/, parent_relpath, repos_id,
     repos_path, revision, presence, depth, kind, changed_revision,
     changed_date, changed_author, checksum, properties, translated_size,
     last_mod_time, symlink_target
@@ -554,8 +540,8 @@ INSERT INTO nodes (
     revision, presence, depth, kind, changed_revision, changed_date,
     changed_author, checksum, properties, translated_size, last_mod_time,
     symlink_target )
-SELECT wc_id, local_relpath, ?3 AS op_depth, parent_relpath, repos_id,
-    repos_path, revision, ?4 AS presence, depth, kind, changed_revision,
+SELECT wc_id, local_relpath, ?3 /*op_depth*/, parent_relpath, repos_id,
+    repos_path, revision, ?4 /*presence*/, depth, kind, changed_revision,
     changed_date, changed_author, checksum, properties, translated_size,
     last_mod_time, symlink_target
 FROM nodes
@@ -607,8 +593,8 @@ INSERT OR REPLACE INTO nodes (
     repos_path, revision, presence, depth, kind, changed_revision,
     changed_date, changed_author, checksum, properties, translated_size,
     last_mod_time, symlink_target )
-SELECT wc_id, ?3 AS local_relpath, ?4 AS op_depth, ?5 AS parent_relpath,
-    ?6 AS repos_id, ?7 AS repos_path, ?8 AS revision, ?9 AS presence, depth,
+SELECT wc_id, ?3 /*local_relpath*/, ?4 /*op_depth*/, ?5 /*parent_relpath*/,
+    ?6 /*repos_id*/, ?7 /*repos_path*/, ?8 /*revision*/, ?9 /*presence*/, depth,
     kind, changed_revision, changed_date, changed_author, checksum, properties,
     translated_size, last_mod_time, symlink_target
 FROM nodes
@@ -620,8 +606,8 @@ INSERT OR REPLACE INTO nodes (
     revision, presence, depth, kind, changed_revision, changed_date,
     changed_author, checksum, properties, translated_size, last_mod_time,
     symlink_target )
-SELECT wc_id, ?3 AS local_relpath, ?4 AS op_depth, ?5 AS parent_relpath,
-    ?6 AS repos_id, ?7 AS repos_path, ?8 AS revision, ?9 AS presence, depth,
+SELECT wc_id, ?3 /*local_relpath*/, ?4 /*op_depth*/, ?5 /*parent_relpath*/,
+    ?6 /*repos_id*/, ?7 /*repos_path*/, ?8 /*revision*/, ?9 /*presence*/, depth,
     kind, changed_revision, changed_date, changed_author, checksum, properties,
     translated_size, last_mod_time, symlink_target
 FROM nodes
@@ -634,7 +620,7 @@ INSERT OR REPLACE INTO actual_node (
      wc_id, local_relpath, parent_relpath, properties,
      conflict_old, conflict_new, conflict_working,
      prop_reject, changelist, text_mod, tree_conflict_data )
-SELECT wc_id, ?3 AS local_relpath, ?4 AS parent_relpath, properties,
+SELECT wc_id, ?3 /*local_relpath*/, ?4 /*parent_relpath*/, properties,
      conflict_old, conflict_new, conflict_working,
      prop_reject, changelist, text_mod, tree_conflict_data
 FROM actual_node

Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc_db.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc_db.c?rev=1057044&r1=1057043&r2=1057044&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc_db.c Sun Jan  9 22:39:40 2011
@@ -856,11 +856,12 @@ insert_base_node(void *baton, svn_sqlite
                             (pibb->kind == svn_wc__db_kind_symlink) ?
                                 pibb->target : NULL)); /* 19 */
 
-  if (pibb->kind == svn_wc__db_kind_file) {
-    SVN_ERR(svn_sqlite__bind_checksum(stmt, 14, pibb->checksum, scratch_pool));
-    if (pibb->translated_size != SVN_INVALID_FILESIZE)
-      SVN_ERR(svn_sqlite__bind_int64(stmt, 16, pibb->translated_size));
-  }
+  if (pibb->kind == svn_wc__db_kind_file)
+    {
+      SVN_ERR(svn_sqlite__bind_checksum(stmt, 14, pibb->checksum, scratch_pool));
+      if (pibb->translated_size != SVN_INVALID_FILESIZE)
+        SVN_ERR(svn_sqlite__bind_int64(stmt, 16, pibb->translated_size));
+    }
 
   SVN_ERR(svn_sqlite__bind_properties(stmt, 15, pibb->props,
                                       scratch_pool));
@@ -2489,10 +2490,10 @@ svn_wc__db_pristine_get_sha1(const svn_c
 }
 
 
-/* Delete the pristine text referenced by SHA1_CHECKSUM in the database
- * referenced by PDH. */
+/* Delete the pristine text referenced by SHA1_CHECKSUM from the pristine
+ * store of WCROOT.  Delete both the database row and the file on disk. */
 static svn_error_t *
-pristine_remove(svn_wc__db_pdh_t *pdh,
+pristine_remove(svn_wc__db_wcroot_t *wcroot,
                 const svn_checksum_t *sha1_checksum,
                 apr_pool_t *scratch_pool)
 {
@@ -2500,13 +2501,13 @@ pristine_remove(svn_wc__db_pdh_t *pdh,
   const char *pristine_abspath;
 
   /* Remove the DB row. */
-  SVN_ERR(svn_sqlite__get_statement(&stmt, pdh->wcroot->sdb,
+  SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
                                     STMT_DELETE_PRISTINE));
   SVN_ERR(svn_sqlite__bind_checksum(stmt, 1, sha1_checksum, scratch_pool));
   SVN_ERR(svn_sqlite__update(NULL, stmt));
 
   /* Remove the file */
-  SVN_ERR(get_pristine_fname(&pristine_abspath, pdh->wcroot->abspath,
+  SVN_ERR(get_pristine_fname(&pristine_abspath, wcroot->abspath,
                              sha1_checksum, TRUE /* create_subdir */,
                              scratch_pool, scratch_pool));
   SVN_ERR(svn_io_remove_file2(pristine_abspath, TRUE /* ignore_enoent */,
@@ -2577,31 +2578,21 @@ svn_wc__db_pristine_remove(svn_wc__db_t 
   /* If not referenced, remove the PRISTINE table row and the file. */
   if (! is_referenced)
     {
-      SVN_ERR(pristine_remove(pdh, sha1_checksum, scratch_pool));
+      SVN_ERR(pristine_remove(pdh->wcroot, sha1_checksum, scratch_pool));
     }
 
   return SVN_NO_ERROR;
 }
 
 
-svn_error_t *
-svn_wc__db_pristine_cleanup(svn_wc__db_t *db,
-                            const char *wri_abspath,
-                            apr_pool_t *scratch_pool)
+static svn_error_t *
+pristine_cleanup_wcroot(svn_wc__db_wcroot_t *wcroot,
+                        apr_pool_t *scratch_pool)
 {
-  svn_wc__db_pdh_t *pdh;
-  const char *local_relpath;
   svn_sqlite__stmt_t *stmt;
 
-  SVN_ERR_ASSERT(svn_dirent_is_absolute(wri_abspath));
-
-  SVN_ERR(svn_wc__db_pdh_parse_local_abspath(&pdh, &local_relpath, db,
-                              wri_abspath, svn_sqlite__mode_readonly,
-                              scratch_pool, scratch_pool));
-  VERIFY_USABLE_PDH(pdh);
-
   /* Find each unreferenced pristine in the DB and remove it. */
-  SVN_ERR(svn_sqlite__get_statement(&stmt, pdh->wcroot->sdb,
+  SVN_ERR(svn_sqlite__get_statement(&stmt, wcroot->sdb,
                                     STMT_SELECT_UNREFERENCED_PRISTINES));
   while (1)
     {
@@ -2614,7 +2605,7 @@ svn_wc__db_pristine_cleanup(svn_wc__db_t
 
       SVN_ERR(svn_sqlite__column_checksum(&sha1_checksum, stmt, 0,
                                           scratch_pool));
-      SVN_ERR(pristine_remove(pdh, sha1_checksum, scratch_pool));
+      SVN_ERR(pristine_remove(wcroot, sha1_checksum, scratch_pool));
     }
   SVN_ERR(svn_sqlite__reset(stmt));
 
@@ -2623,6 +2614,27 @@ svn_wc__db_pristine_cleanup(svn_wc__db_t
 
 
 svn_error_t *
+svn_wc__db_pristine_cleanup(svn_wc__db_t *db,
+                            const char *wri_abspath,
+                            apr_pool_t *scratch_pool)
+{
+  svn_wc__db_pdh_t *pdh;
+  const char *local_relpath;
+
+  SVN_ERR_ASSERT(svn_dirent_is_absolute(wri_abspath));
+
+  SVN_ERR(svn_wc__db_pdh_parse_local_abspath(&pdh, &local_relpath, db,
+                              wri_abspath, svn_sqlite__mode_readonly,
+                              scratch_pool, scratch_pool));
+  VERIFY_USABLE_PDH(pdh);
+
+  SVN_ERR(pristine_cleanup_wcroot(pdh->wcroot, scratch_pool));
+
+  return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
 svn_wc__db_pristine_check(svn_boolean_t *present,
                           svn_wc__db_t *db,
                           const char *wri_abspath,
@@ -4051,17 +4063,18 @@ svn_wc__db_op_revert_actual(svn_wc__db_t
   SVN_ERR(svn_sqlite__bindf(stmt, "is", pdh->wcroot->wc_id, local_relpath));
   SVN_ERR(svn_sqlite__update(&affected_rows, stmt));
 
-  if (affected_rows == 0) {
-    /* Failed to delete the row.
-       Presumably because there was a changelist set on it */
+  if (affected_rows == 0)
+    {
+      /* Failed to delete the row.
+         Presumably because there was a changelist set on it */
 
-    SVN_ERR(svn_sqlite__get_statement(&stmt, pdh->wcroot->sdb,
-                               STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST));
-    SVN_ERR(svn_sqlite__bindf(stmt, "is", pdh->wcroot->wc_id, local_relpath));
-    SVN_ERR(svn_sqlite__step_done(stmt));
-    /* We're not interested here if there was an affected row or not:
-       If there isn't by now, then there simply was no row to begin with */
-  }
+      SVN_ERR(svn_sqlite__get_statement(&stmt, pdh->wcroot->sdb,
+                                 STMT_CLEAR_ACTUAL_NODE_LEAVING_CHANGELIST));
+      SVN_ERR(svn_sqlite__bindf(stmt, "is", pdh->wcroot->wc_id, local_relpath));
+      SVN_ERR(svn_sqlite__step_done(stmt));
+      /* We're not interested here if there was an affected row or not:
+         If there isn't by now, then there simply was no row to begin with */
+    }
 
   /* Some entries have cached the above values. Kapow!!  */
   SVN_ERR(flush_entries(db, pdh, local_abspath, scratch_pool));

Modified: subversion/branches/diff-optimizations-bytes/subversion/po/zh_CN.po
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/po/zh_CN.po?rev=1057044&r1=1057043&r2=1057044&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/po/zh_CN.po [UTF-8] (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/po/zh_CN.po [UTF-8] Sun Jan  9 22:39:40 2011
@@ -55,8 +55,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: subversion 1.7\n"
 "Report-Msgid-Bugs-To: dev@subversion.apache.org\n"
-"POT-Creation-Date: 2010-12-26 22:59+0800\n"
-"PO-Revision-Date: 2010-12-26 22:59+0800\n"
+"POT-Creation-Date: 2011-01-03 22:24+0800\n"
+"PO-Revision-Date: 2011-01-03 22:27+0800\n"
 "Last-Translator: Subversion Developers <de...@subversion.apache.org>\n"
 "Language-Team: Simplified Chinese <de...@subversion.apache.org>\n"
 "Language: \n"
@@ -931,6 +931,9 @@ msgstr "处理一个或更多的外部� msgid "Assertion failure"
 msgstr "断言失败"
 
+msgid "No non-tracing links found in the error chain"
+msgstr "没有发现错误链中的非跟踪链接"
+
 msgid "GNOME Keyring is locked and we are non-interactive"
 msgstr "GNOME Keyring 被锁定,并且我们处于非交互方式"
 
@@ -1189,6 +1192,10 @@ msgid ""
 msgstr ""
 "不能在 “%s” 删除外部引用的文件;请修改或删除创建它的属性 “svn:externals”"
 
+#, c-format
+msgid "URL '%s' does not exist"
+msgstr "URL '%s' 不存在"
+
 msgid "Cannot specify revisions (except HEAD) with move operations"
 msgstr "移动操作不能指定版本"
 
@@ -1581,6 +1588,10 @@ msgid "The repository at '%s' has uuid '
 msgstr "版本库 “%s” 的 uuid 是 “%s”,但是工作副本的是 “%s”"
 
 #, c-format
+msgid "'%s' is not a versioned directory"
+msgstr "'%s' 不是已版本控制的目录"
+
+#, c-format
 msgid "Path '%s' has no committed revision"
 msgstr "路径 “%s” 没有提交过"
 
@@ -1683,9 +1694,8 @@ msgstr "svndiff 输入意料结束"
 msgid "The file '%s' changed unexpectedly during diff"
 msgstr "文件“%s”在比较期间意外改变"
 
-#, fuzzy
 msgid "Error in options to internal diff"
-msgstr "将编辑内容规格化为内部格式出错"
+msgstr "内部比较的选项错误"
 
 #, c-format
 msgid "Invalid argument '%s' in diff options"
@@ -2558,9 +2568,9 @@ msgstr "“%s” 的 origin 节点取值
 msgid "No such transaction"
 msgstr "无此事务"
 
-#, fuzzy, c-format
+#, c-format
 msgid "FSFS format (%d) too old to pack, please upgrade."
-msgstr "要打包的文件系统格式太旧,请升级。"
+msgstr "要打包的文件系统格式(%d)太旧,请升级。"
 
 #, c-format
 msgid "Corrupt lockfile for path '%s' in filesystem '%s'"
@@ -2578,9 +2588,8 @@ msgstr "不能解析锁/条目的哈希� msgid "Lock failed: newer version of '%s' exists"
 msgstr "加锁失败: “%s”的新版本已经存在"
 
-#, fuzzy
 msgid "Couldn't open rep-cache database"
-msgstr "无法打开版本库"
+msgstr "无法打开缓存数据库"
 
 msgid "Only SHA1 checksums can be used as keys in the rep_cache table.\n"
 msgstr "在表 rep_cache 中,只有 SHA1 校验和才能用作键。\n"
@@ -2687,13 +2696,13 @@ msgstr "无法识别的URL方案(一般� msgid "Retrieval of mergeinfo unsupported by '%s'"
 msgstr "“%s” 不支持取回合并信息"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Lock was stolen by '%s'; unable to remove it"
-msgstr "svnsync 的锁被窃;不能删除"
+msgstr "锁被 '%s' 窃取;不能删除"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Unable to determine local hostname"
-msgstr "无法获取本地主机名"
+msgstr "无法确定本地主机名称"
 
 #, c-format
 msgid "Couldn't get lock on destination repos after %d attempts"
@@ -3096,6 +3105,15 @@ msgstr "无法连接到服务器"
 msgid "timed out waiting for server"
 msgstr "等待服务器超时"
 
+#. ### This is a translation nightmare. Make sure to compose full strings
+#. and mark those for translation.
+#, c-format
+msgid "%s: %s (%s://%s)"
+msgstr "%s: %s (%s://%s)"
+
+msgid "General svn error from server"
+msgstr "来自服务器的一般 svn 错误"
+
 #, c-format
 msgid "Can't calculate the request body size"
 msgstr "无法计算请求主体大小"
@@ -3108,9 +3126,31 @@ msgstr "%s 请求的响应返回无效 X
 msgid "Error reading spooled %s request response"
 msgstr "读取请求 %s 响应的脱机数据时出现错误"
 
+#, c-format
+msgid "%s Authentication failed"
+msgstr "%s 认证失败"
+
+#, c-format
+msgid ""
+"%s authentication not supported.\n"
+"Authentication failed"
+msgstr ""
+"不支持 %s 认证。\n"
+"认证失败"
+
 msgid "Missing 'realm' attribute in Authorization header"
 msgstr "授权头丢失属性 “realm”"
 
+msgid ""
+"No more credentials or we tried too many times.\n"
+"Authentication failed"
+msgstr ""
+"没有凭证或已经试了太多次。\n"
+"认证失败"
+
+msgid "Proxy authentication failed"
+msgstr "代理认证失败"
+
 msgid "Incorrect response-digest in Authentication-Info header."
 msgstr "认证信息头中的 response-digest 错误"
 
@@ -3124,6 +3164,10 @@ msgstr ""
 " %s\n"
 " %s\n"
 
+#, c-format
+msgid "%s of '%s': %d %s"
+msgstr "%s 于 '%s': %d %s"
+
 msgid "No Location header received"
 msgstr "没有收到位置头"
 
@@ -3233,15 +3277,13 @@ msgstr "获取报告出错(%d)"
 msgid "Error running context"
 msgstr "执行上下文错误"
 
-msgid ""
-"No more credentials or we tried too many times.\n"
-"Authentication failed"
-msgstr ""
-"没有凭证或已经试了太多次。\n"
-"认证失败"
+#, c-format
+msgid "Malformed DAV:status CDATA '%s'"
+msgstr "非法 DAV:status CDATA '%s'"
 
-msgid "Proxy authentication failed"
-msgstr "代理认证失败"
+#, c-format
+msgid "XML parsing failed: (%d %s)"
+msgstr "XML 解析失败: (%d %s)"
 
 #, c-format
 msgid "Premature EOF seen from server (http status=%d)"
@@ -3261,6 +3303,14 @@ msgid "'%s': no lock token available"
 msgstr "“%s”:没有可用的锁定令牌"
 
 #, c-format
+msgid "SSPI Initialization failed."
+msgstr "SSPI初始化失败"
+
+#, c-format
+msgid "Authentication failed with error 0x%x."
+msgstr "认证失败,错误代码 0x%x 。"
+
+#, c-format
 msgid "Unknown hostname '%s'"
 msgstr "未知的主机“%s”"
 
@@ -3936,6 +3986,10 @@ msgid "'%s' is not a file in revision %l
 msgstr "“%s” 不是文件,版本 %ld"
 
 #, c-format
+msgid "No provider registered for '%s' credentials"
+msgstr "没有提供程序为 '%s' 凭据注册"
+
+#, c-format
 msgid "Invalid config: unknown password store '%s'"
 msgstr "无效配置: 未知的密码存储 “%s”"
 
@@ -4534,13 +4588,13 @@ msgstr ""
 "\n"
 
 msgid ""
-"Copyright (C) 2010 The Apache Software Foundation.\n"
+"Copyright (C) 2011 The Apache Software Foundation.\n"
 "This software consists of contributions made by many people;\n"
 "see the NOTICE file for more information.\n"
 "Subversion is open source software, see http://subversion.apache.org/\n"
 "\n"
 msgstr ""
-"版权所有 (C) 2010 Apache 软件基金会。\n"
+"版权所有 (C) 2011 Apache 软件基金会。\n"
 "此软件包含了许多人的贡献;请查看文件 NOTICE 以获得更多信息。\n"
 "Subversion 是开放源代码软件,请参阅 http://subversion.apache.org/ 站点。\n"
 "\n"
@@ -5240,13 +5294,13 @@ msgstr ""
 "试图删除属性 '%s',取值为 '%s',\n"
 "但是它已经在本地被删除,取值为 '%s'。"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Trying to delete property '%s' with value '%s',\n"
 "but the local value is '%s'."
 msgstr ""
 "试图删除属性 '%s',取值为 '%s',\n"
-"但是已经本地增加此属性,取值为 “%s”。"
+"但是本地取值为 “%s”。"
 
 #, c-format
 msgid ""
@@ -5526,16 +5580,18 @@ msgstr "有日志存在时无法升级� msgid "(unreleased development version)"
 msgstr "(未发布的开发版本)"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Working copy '%s' is too old (format %d, created by Subversion %s)"
-msgstr "'%s' 的工作副本格式太旧 (%d); 请执行 'svn upgrade'"
+msgstr "工作副本 '%s' 格式太旧 (格式 %d, Subversion %s 创建)"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "Working copy '%s' is an old development version (format %d); to upgrade it, "
 "use a format 18 client, then use 'tools/dev/wc-ng/bump-to-19.py', then use "
 "the current client"
-msgstr "工作副本 '%s' 的格式是 18; 请使用 'tools/dev/wc-ng/bump-to-19.py' 升级"
+msgstr ""
+"工作副本 '%s' 是旧开发版本的格式(%d); 请使用格式 18 客户端清理后, 再使用 "
+"'tools/dev/wc-ng/bump-to-19.py' 升级,最后使用当前客户端"
 
 #, c-format
 msgid "Cannot upgrade '%s' as it is not a pre-1.7 working copy root"
@@ -5629,9 +5685,9 @@ msgstr "'%s' 已经通过 '%s' 锁定。
 msgid "Working copy not locked at '%s'."
 msgstr "工作副本 '%s' 未被锁定。"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Modification of '%s' already exists"
-msgstr "目的 “%s” 已存在"
+msgstr "“%s” 的修改已存在"
 
 #, c-format
 msgid "'%s' has no BASE_NODE"
@@ -5945,7 +6001,6 @@ msgid ""
 "overwrite"
 msgstr "目的目录已存在;请删除目录或用 --force 来覆盖目录"
 
-#, fuzzy
 msgid "Failure occurred processing one or more externals definitions"
 msgstr "处理一个或更多的外部定义失败"
 
@@ -6223,9 +6278,8 @@ msgstr "只有在 XML 模式 “with-rev
 msgid "'diff' option is not supported in XML mode"
 msgstr "在 XML 模式不支持 'diff' 选项"
 
-#, fuzzy
 msgid "'quiet' and 'diff' options are mutually exclusive"
-msgstr "--relocate 与 --depth 是互斥的"
+msgstr "'quiet' 与 'diff' 选项是互斥的"
 
 msgid "'diff-cmd' option requires 'diff' option"
 msgstr "'diff-cmd' 选项需要 'diff' 选项"
@@ -7708,13 +7762,12 @@ msgstr ""
 "\n"
 "  使用“--set-depth”选项设置此操作目标的工作副本之新深度。\n"
 
-#, fuzzy
 msgid ""
 "Upgrade the metadata storage format for a working copy.\n"
 "usage: upgrade WCPATH...\n"
 msgstr ""
 "升级工作副本的元数据存储格式。\n"
-"用法: upgrade TARGET...\n"
+"用法: upgrade WCPATH...\n"
 
 msgid "Caught signal"
 msgstr "捕捉到信号"
@@ -7997,9 +8050,9 @@ msgstr ""
 msgid "Error handling externals definition for '%s':"
 msgstr "处理外部引用“%s”时出错:"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Updating '%s' ...\n"
-msgstr "已升级的“%s”。\n"
+msgstr "正在升级“%s” ...\n"
 
 #, c-format
 msgid "Exported external at revision %ld.\n"
@@ -8103,44 +8156,44 @@ msgstr "“%s”解除锁定。\n"
 
 #, c-format
 msgid "--- Merging differences between repository URLs into '%s':\n"
-msgstr "--- 正在合并版本库 URL 之间的差异到 “%s”:\n"
+msgstr "--- 正在合并版本库 URL 之间的差异到“%s”:\n"
 
 #, c-format
 msgid "--- Merging r%ld into '%s':\n"
-msgstr "--- 正在合并 r%ld 到 “%s”:\n"
+msgstr "--- 正在合并 r%ld 到“%s”:\n"
 
 #, c-format
 msgid "--- Reverse-merging r%ld into '%s':\n"
-msgstr "--- 正在反向合并 r%ld 到 “%s”:\n"
+msgstr "--- 正在反向合并 r%ld 到“%s”:\n"
 
 #, c-format
 msgid "--- Merging r%ld through r%ld into '%s':\n"
-msgstr "--- 正在合并 r%ld,经由 r%ld,到 “%s”:\n"
+msgstr "--- 正在合并 r%ld,经由 r%ld,到“%s”:\n"
 
 #, c-format
 msgid "--- Reverse-merging r%ld through r%ld into '%s':\n"
-msgstr "--- 正在反向合并 r%ld,经由 r%ld,到 “%s”:\n"
+msgstr "--- 正在反向合并 r%ld,经由 r%ld,到“%s”:\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "--- Recording mergeinfo for merge between repository URLs into '%s':\n"
-msgstr "--- 正在合并版本库 URL 之间的差异到 “%s”:\n"
+msgstr "--- 记录版本库 URL 之间的合并信息到“%s”:\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "--- Recording mergeinfo for merge of r%ld into '%s':\n"
-msgstr "--- 正在反向合并 r%ld 到 “%s”:\n"
+msgstr "--- 记录合并 r%ld 到“%s”的信息:\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "--- Recording mergeinfo for reverse merge of r%ld into '%s':\n"
-msgstr "--- 正在反向合并(从外部版本库) r%ld 到 “%s”:\n"
+msgstr "--- 记录反向合并 r%ld 到“%s”的信息:\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid "--- Recording mergeinfo for merge of r%ld through r%ld into '%s':\n"
-msgstr "--- 正在反向合并 r%ld,经由 r%ld,到 “%s”:\n"
+msgstr "--- 记录合并 r%ld,经由 r%ld,到“%s”的信息:\n"
 
-#, fuzzy, c-format
+#, c-format
 msgid ""
 "--- Recording mergeinfo for reverse merge of r%ld through r%ld into '%s':\n"
-msgstr "--- 正在反向合并 r%ld,经由 r%ld,到 “%s”:\n"
+msgstr "--- 记录反向合并 r%ld,经由 r%ld,到“%s”的信息:\n"
 
 #, c-format
 msgid "--- Eliding mergeinfo from '%s':\n"
@@ -8243,6 +8296,9 @@ msgstr "“%s”不像是工作副本路
 msgid "No changes to property '%s' on '%s'\n"
 msgstr "属性 “%s” 于 “%s” 没有改变\n"
 
+msgid "Error writing to stream"
+msgstr "写入流出错"
+
 #, c-format
 msgid "Properties on '%s':\n"
 msgstr "“%s” 上的属性: \n"
@@ -8336,16 +8392,16 @@ msgstr "未版本控制"
 msgid "local %s, incoming %s upon %s"
 msgstr "本地 %s,动作 %s,操作 %s"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Summary of updates:\n"
-msgstr "冲突概要:\n"
+msgstr "更新概要:\n"
 
 #. Print an update summary for this target, removing the current
 #. working directory prefix from PATH (if PATH is at or under
 #. $CWD), and converting the path to local style for display.
-#, fuzzy, c-format
+#, c-format
 msgid "  Updated '%s' to r%ld.\n"
-msgstr "更新到版本 %ld。\n"
+msgstr "更新 '%s' 到版本 %ld。\n"
 
 #, c-format
 msgid ""
@@ -8422,6 +8478,10 @@ msgstr "将编辑内容规格化为内� msgid "Log message contains a zero byte"
 msgstr "日志信息中有一个零字节"
 
+#, c-format
+msgid "   '%s'"
+msgstr "   '%s'"
+
 msgid "Your commit message was left in a temporary file:"
 msgstr "您的提交信息保留在临时文件中: "
 
@@ -9447,6 +9507,9 @@ msgstr "“%s”是 URL,也许应该� msgid "Path '%s' is not a file"
 msgstr "路径“%s”不是文件"
 
+msgid "History item limit reached"
+msgstr "达到历史项目限制"
+
 #, c-format
 msgid ""
 "REVISION   PATH <ID>\n"
@@ -9547,14 +9610,11 @@ msgstr "请使用“svnlook help”以� msgid "Failed to get lock on destination repos, currently held by '%s'\n"
 msgstr "从目标版本库获得锁失败,当前被“%s”持有\n"
 
-#, fuzzy
 msgid ""
 "Target server does not support atomic revision property edits; consider "
 "upgrading it to 1.7."
-msgstr ""
-"目标服务器不支持原子版本的属性编辑; 请考虑升级到 1.7 或者使用外部加锁程序"
+msgstr "目标服务器不支持原子版本的属性编辑; 请考虑升级到 1.7 。"
 
-#, fuzzy
 msgid ""
 "usage: svnrdump dump URL [-r LOWER[:UPPER]]\n"
 "\n"
@@ -9600,25 +9660,25 @@ msgstr ""
 "                             例如:\n"
 "                                 servers:global:http-library=serf"
 
-#, fuzzy
 msgid ""
 "general usage: svnrdump SUBCOMMAND URL [-r LOWER[:UPPER]]\n"
 "Type 'svnrdump help <subcommand>' for help on a specific subcommand.\n"
+"Type 'svnrdump --version' to see the program version and RA modules.\n"
 "\n"
 "Available subcommands:\n"
 msgstr ""
-"一般用法: svndumpfilter SUBCOMMAND [ARGS & OPTIONS ...]\n"
-"请使用 “svndumpfilter help <subcommand>”获得指定子命令的帮助信息。\n"
-"请使用 “svndumpfilter --version”获得本程序版本。\n"
+"一般用法: svnrdump SUBCOMMAND URL [-r LOWER[:UPPER]]\n"
+"使用 “svnrdump help <subcommand>” 得到子命令的帮助信息。\n"
+"使用 “svnrdump --version” 察看程序的版本号和版本库访问模块。\n"
 "\n"
 "可用的子命令: \n"
 
 msgid "Unsupported revision specifier used; use only integer values or 'HEAD'"
 msgstr "使用了不支持的版本格式;请只使用 'HEAD' 或整数"
 
-#, fuzzy, c-format
+#, c-format
 msgid "Revision '%ld' does not exist"
-msgstr "版本 %ld 不存在。\n"
+msgstr "版本 '%ld' 不存在"
 
 msgid ""
 "LOWER revision cannot be greater than UPPER revision; consider reversing your "
@@ -10145,9 +10205,8 @@ msgstr ""
 "不能将 --username 或 --password 与 --source-username, --source-password, --"
 "sync-username, 或 --sync-password 一起使用。\n"
 
-#, fuzzy
 msgid "--disable-locking and --steal-lock are mutually exclusive"
-msgstr "--diff-cmd 与 --internal-diff 是互斥的"
+msgstr "--disable-locking 与 --steal-lock 是互斥的"
 
 #, c-format
 msgid ""
@@ -10250,474 +10309,484 @@ msgstr "“%s” 的类型未知\n"
 msgid "Uncommitted local addition, copy or move%s"
 msgstr "未提交的本地增加,复制或移动 %s"
 
-#~ msgid "Removing '%s' from changelist '%s'."
-#~ msgstr "删除 “%s”,从修改列表 “%s”。"
+#~ msgid "post-commit hook failed with no error message."
+#~ msgstr "调用 post-commit 钩子失败,没有错误信息"
 
-#~ msgid "Error getting file size on '%s'"
-#~ msgstr "取得“%s”的文件大小出错"
+#~ msgid "Parent(s) of '%s' should have repository information."
+#~ msgstr "'%s' 的父亲应该包含版本库的信息。"
+
+#~ msgid "Entry '%s' has illegal schedule"
+#~ msgstr "条目“%s”有非法调度"
 
 #~ msgid ""
-#~ "merge only mergeinfo differences\n"
-#~ "                             [alias: --ro]"
+#~ "set new working copy depth to ARG ('exclude',\n"
+#~ "                            'empty', 'files', 'immediates', or "
+#~ "'infinity')\n"
+#~ "                            [alias: --sd]"
 #~ msgstr ""
-#~ "只合并修改信息的差异\n"
-#~ "                             [alias: --ro]"
-
-#~ msgid "Unable to make any directories"
-#~ msgstr "无法创建任何目录"
+#~ "设置工作副本的新深度为 ARG(“exclude”,\n"
+#~ "                            “empty”,“files”,“immediates” 或“infinity”)\n"
+#~ "                            [alias: --sd]"
 
-#~ msgid "Parent(s) of '%s' should have been present."
-#~ msgstr "'%s' 的父亲应该存在。"
+#~ msgid "Can't create pipe for hook '%s'"
+#~ msgstr "无法为钩子“%s”创建管道"
 
-#~ msgid "Missing path argument"
-#~ msgstr "丢失路径参数"
+#~ msgid "Given source URL invalid"
+#~ msgstr "提供的源 URL 非法"
 
-#~ msgid ""
-#~ "usage: svnsync copy-revprops DEST_URL [REV[:REV2]]\n"
-#~ "\n"
-#~ "Copy the revision properties in a given range of revisions to the\n"
-#~ "destination from the source with which it was initialized.\n"
-#~ "\n"
-#~ "If REV and REV2 are provided, copy properties for the revisions\n"
-#~ "specified by that range, inclusively.  If only REV is provided,\n"
-#~ "copy properties for that revision alone.  If REV is not provided,\n"
-#~ "copy properties for all revisions previously transferred to the\n"
-#~ "destination.\n"
-#~ "\n"
-#~ "REV and REV2 must be revisions which were previously transferred\n"
-#~ "to the destination.  You may use \"HEAD\" for either revision to\n"
-#~ "mean \"the last revision transferred\".\n"
-#~ msgstr ""
-#~ "用法: svnsync copy-revprops DEST_URL [REV[:REV2]]\n"
-#~ "\n"
-#~ "从已经初始化的源版本库复制指定版本范围的版本属性到目的版本库。\n"
-#~ "\n"
-#~ "如果给出了 REV 和 REV2,那么复制给定的版本范围,包含边界。如果\n"
-#~ "只给出了 REV,那么单独复制此版本属性。如果没有给出 REV,那么就\n"
-#~ "复制已经传输的所有版本的属性。\n"
-#~ "\n"
-#~ "REV 和 REV2 必须是已经传输到目的版本库的版本。你可以使用 \"HEAD\" \n"
-#~ "来指代最后一个传输的版本。\n"
+#~ msgid "Can't make pipe write handle non-inherited for hook '%s'"
+#~ msgstr "无法为钩子“%s”创建非继承的管道写句柄"
 
-#~ msgid "Missing 'timestamp' attribute in '%s'"
-#~ msgstr "“%s”丢失“timestamp”属性"
+#~ msgid "Error comparing '%s' and '%s'"
+#~ msgstr "比较“%s”与“%s”出错"
 
-#~ msgid ""
-#~ "ignore externals definitions\n"
-#~ "                             [alias: --ie]"
-#~ msgstr ""
-#~ "忽略外部定义\n"
-#~ "                             [alias: --ie]"
+#~ msgid "Could not find node '%s' for recording file information."
+#~ msgstr "不能为记录文件信息找到节点“%s”"
 
-#~ msgid "'%s' is marked as absent, so it cannot be scheduled for addition"
-#~ msgstr "“%s”被标记为不存在,所以无法加入增加调度"
+#~ msgid "Non-numeric strip argument given"
+#~ msgstr "提供的修剪参数不是数字"
 
-#~ msgid ""
-#~ "Can't replace '%s' in deleted directory; try undeleting its parent "
-#~ "directory first"
-#~ msgstr "无法在已删除的目录中替换“%s”;请先恢复其父目录"
+#~ msgid "\"svnrdump load\"'s lock was stolen; can't remove it"
+#~ msgstr "\"svnrdump load\" 的锁被窃;不能删除"
 
 #~ msgid ""
-#~ "read user configuration files from directory ARG\n"
-#~ "                             [alias: --cd]"
+#~ "specify automatic conflict resolution action\n"
+#~ "                            ('postpone', 'base', 'mine-conflict',\n"
+#~ "                             'theirs-conflict', 'mine-full', 'theirs-"
+#~ "full',\n"
+#~ "                             'edit', 'launch')"
 #~ msgstr ""
-#~ "从目录 ARG 读取用户配置文件\n"
-#~ "                             [alias: --cd]"
+#~ "指定自动解决冲突动作\n"
+#~ "                            ('postpone', 'base', 'mine-conflict',\n"
+#~ "                             'theirs-conflict', 'mine-full', 'theirs-"
+#~ "full',\n"
+#~ "                             'edit', 'launch')"
 
-#~ msgid "Path '%s' is not a child of '%s'"
-#~ msgstr "路径 '%s' 不是 '%s' 的孩子"
+#~ msgid "Unrecognized logfile element '%s' in '%s'"
+#~ msgstr "有无法识别的日志文件元素 “%s” 在 “%s” 中"
 
-#~ msgid ""
-#~ "use a different EOL marker than the standard\n"
-#~ "                             system marker for files with the svn:eol-"
-#~ "style\n"
-#~ "                             property set to 'native'.\n"
-#~ "                             ARG may be one of 'LF', 'CR', 'CRLF'"
-#~ msgstr ""
-#~ "使用非标准的 EOL 标记\n"
-#~ "                系统中立的文件标记 svn:eol-style 属性取值为 “native”。\n"
-#~ "                ARG 可以是以下之一“LF”,“CR”,“CRLF”"
+#~ msgid "Failed to add directory '%s': copyfrom arguments not yet supported"
+#~ msgstr "无法增加目录“%s”:尚不支持 copyfrom 参数"
 
-#~ msgid "Deleted: %s\n"
-#~ msgstr "已删除: %s\n"
+#~ msgid "Error modifying entry of '%s'"
+#~ msgstr "修改“%s”的入口出错"
 
-#~ msgid "Error replacing text-base of '%s'"
-#~ msgstr "替换“%s”的文件参考基础出错"
+#~ msgid "Error modifying entry for '%s'"
+#~ msgstr "修改“%s”的入口出错"
 
 #~ msgid ""
-#~ "specify automatic conflict resolution source\n"
-#~ "                            ('base', 'working', 'mine-conflict',\n"
-#~ "                             'theirs-conflict', 'mine-full', 'theirs-full')"
-#~ msgstr ""
-#~ "指定自动解决冲突动作的源\n"
-#~ "                            ('base', 'working', 'mine-conflict',\n"
-#~ "                             'theirs-conflict', 'mine-full', 'theirs-full')"
+#~ "Failed to add file '%s': a file from another repository with the same name "
+#~ "already exists"
+#~ msgstr "无法新增文件“%s”: 来自其它版本库的同名文件对象已存在"
 
-#~ msgid ""
-#~ "usage: svnsync synchronize DEST_URL\n"
-#~ "\n"
-#~ "Transfer all pending revisions to the destination from the source\n"
-#~ "with which it was initialized.\n"
-#~ msgstr ""
-#~ "用法: svnsync synchronize DEST_URL\n"
-#~ "\n"
-#~ "从已经初始化的源版本库传输所有未决的版本到目标版本库。\n"
+#~ msgid "No WC table entry"
+#~ msgstr "没有 WC 表入口"
 
-#~ msgid "Target lists to diff may not contain both working copy paths and URLs"
-#~ msgstr "差异比较目标不可同时包含工作副本路径与URL"
+#~ msgid "Error removing lock from entry for '%s'"
+#~ msgstr "删除条目“%s”的锁出错"
 
 #~ msgid ""
-#~ "number of leading path components to strip\n"
-#~ "                             from pathnames. Specifying -p0 gives the "
-#~ "entire\n"
-#~ "                             path unmodified. Specifying -p1 causes the "
-#~ "path\n"
-#~ "                                 doc/fudge/crunchy.html\n"
-#~ "                             to be interpreted as\n"
-#~ "                                 fudge/crunchy.html\n"
-#~ "                             while -p2 would give just crunchy.html"
+#~ "Default: '-u'. When Subversion is invoking an\n"
+#~ "                             external diff program, ARG is simply passed "
+#~ "along\n"
+#~ "                             to the program. But when Subversion is using "
+#~ "its\n"
+#~ "                             default internal diff implementation, or "
+#~ "when\n"
+#~ "                             Subversion is displaying blame annotations, "
+#~ "ARG\n"
+#~ "                             could be any of the following:\n"
+#~ "                                -u (--unified):\n"
+#~ "                                   Output 3 lines of unified context.\n"
+#~ "                                -b (--ignore-space-change):\n"
+#~ "                                   Ignore changes in the amount of white "
+#~ "space.\n"
+#~ "                                -w (--ignore-all-space):\n"
+#~ "                                   Ignore all white space.\n"
+#~ "                                --ignore-eol-style:\n"
+#~ "                                   Ignore changes in EOL style.\n"
+#~ "                                -p (--show-c-function):\n"
+#~ "                                   Show C function name in diff output."
 #~ msgstr ""
-#~ "需要从路径中裁剪的前导路径组件数量。\n"
-#~ "                指定 -p0 不修改路径。指定 -p1 会将路径 doc/fudge/crunchy."
-#~ "html\n"
-#~ "                被转换为 fudge/crunchy.html。指定 -p2 会得到 crunchy."
-#~ "html 。"
+#~ "缺省: “-u”。当 Subversion 调用外部比较程序时,ARG 直接传给它。但是当\n"
+#~ "                             Subversion 使用缺省的内置比较实现,或者正\n"
+#~ "                             显示追溯时, ARG 可以是: \n"
+#~ "                                -u (--unified):\n"
+#~ "                                   输出三行统一上下文。\n"
+#~ "                                -b (--ignore-space-change):\n"
+#~ "                                   忽略空白数量的修改。\n"
+#~ "                                -w (--ignore-all-space):\n"
+#~ "                                   忽略所有的空白。\n"
+#~ "                                --ignore-eol-style:\n"
+#~ "                                   忽略行尾样式的改"
+#~ "变。                            -p (--show-c-function):\n"
+#~ "                                   在比较输出中显示 C 函数名称。"
 
-#~ msgid "Can't make pipe read handle non-inherited for hook '%s'"
-#~ msgstr "无法为钩子“%s”创建非继承的管道读句柄"
+#~ msgid "Can't chmod '%s'"
+#~ msgstr "无法修改“%s”的存取权限"
 
-#~ msgid "URL '%s' is not properly URI-encoded"
-#~ msgstr "URL“%s”不是正确的URI编码"
+#~ msgid "Can't close directory '%s'"
+#~ msgstr "无法关闭目录 “%s”"
+
+#~ msgid "In directory '%s'"
+#~ msgstr "在目录“%s”中"
 
-#, fuzzy
 #~ msgid ""
-#~ "don't expand keywords\n"
-#~ "                             [alias: --ik]"
+#~ "do not print differences for deleted files\n"
+#~ "                             [alias: --ndd]"
 #~ msgstr ""
-#~ "忽略外部定义\n"
-#~ "                             [aliases: --ie]"
-
-#~ msgid "Modified: %s\n"
-#~ msgstr "已修改: %s\n"
+#~ "对于已经删除的文件,不要显示差异\n"
+#~ "                             [alias: --ndd]"
 
-#~ msgid "Error writing to '%s'"
-#~ msgstr "写入“%s”出错"
+#~ msgid ""
+#~ "Failed to add file '%s': a non-file object of the same name already exists"
+#~ msgstr "无法新增文件“%s”: 同名非文件对象已存在"
 
 #~ msgid ""
-#~ "ARG (some commands also take ARG1:ARG2 range)\n"
-#~ "                             A revision argument can be one of:\n"
-#~ "                                NUMBER       revision number\n"
-#~ "                                '{' DATE '}' revision at start of the "
-#~ "date\n"
-#~ "                                'HEAD'       latest in repository\n"
-#~ "                                'BASE'       base rev of item's working "
-#~ "copy\n"
-#~ "                                'COMMITTED'  last commit at or before "
-#~ "BASE\n"
-#~ "                                'PREV'       revision just before COMMITTED"
+#~ "do not cache authentication tokens\n"
+#~ "                             [alias: --nac]"
 #~ msgstr ""
-#~ "ARG (一些命令也接受ARG1:ARG2范围)\n"
-#~ "                             版本参数可以是如下之一: \n"
-#~ "                                NUMBER       版本号\n"
-#~ "                                '{' DATE '}' 在指定时间以后的版本\n"
-#~ "                                'HEAD'       版本库中的最新版本\n"
-#~ "                                'BASE'       工作副本的基线版本\n"
-#~ "                                'COMMITTED'  最后提交或基线之前\n"
-#~ "                                'PREV'       COMMITTED的前一版本"
+#~ "不要缓存认证令牌\n"
+#~ "                             [alias: --nac]"
+
+#~ msgid "Path '%s' is now a member of changelist '%s'.\n"
+#~ msgstr "路径“%s”现在是修改列表“%s”的成员。\n"
+
+#~ msgid "Unknown or unexpected kind for path '%s'"
+#~ msgstr "路径“%s”的种类未知或意外"
+
+#~ msgid "There is no work queue for '%s'."
+#~ msgstr "没有 '%s' 的工作队列。"
+
+#~ msgid "'svn upgrade' can only be run from the root of the working copy."
+#~ msgstr "只能在工作副本的根目录执行 'svn upgrade'"
+
+#~ msgid "'%s' has no WORKING_NODE"
+#~ msgstr "“%s” 没有 WORKING_NODE"
+
+#~ msgid "Entry '%s' is already under version control"
+#~ msgstr "条目“%s”已纳入版本控制"
+
+#~ msgid "Did not expect '%s' to be a working copy root"
+#~ msgstr "不期望 “%s” 是工作副本根目录"
+
+#~ msgid "'%s' is not a valid revision range"
+#~ msgstr "“%s”不是有效的版本范围"
+
+#~ msgid "Error in post-commit clean-up (details follow):"
+#~ msgstr "清理 post-commit 出错 (细节如下): "
 
 #, fuzzy
 #~ msgid ""
-#~ "keep path in working copy\n"
-#~ "                             [alias: --kl]"
+#~ "apply the unidiff in reverse\n"
+#~ "                             [alias: --rd]"
 #~ msgstr ""
 #~ "忽略外部定义\n"
 #~ "                             [aliases: --ie]"
 
-#~ msgid "Error getting 'affected time' for '%s'"
-#~ msgstr "取得“%s”的“affected time”出错"
-
 #~ msgid ""
-#~ "Failed to add directory '%s': an unversioned directory of the same name "
-#~ "already exists"
-#~ msgstr "无法新增目录“%s”: 同名未版本控制目录对象已存在"
-
-#~ msgid "Cannot reintegrate into a working copy not entirely at infinite depth"
-#~ msgstr "不能复兴到非全部无限制深度的工作副本"
+#~ "Can't add '%s' to deleted directory; try undeleting its parent directory "
+#~ "first"
+#~ msgstr "无法增加“%s”至已删除的目录;请先恢复其父目录"
 
-#~ msgid ""
-#~ "the change made by revision ARG (like -r ARG-1:ARG)\n"
-#~ "                             If ARG is negative this is like -r ARG:ARG-1"
-#~ msgstr ""
-#~ "在ARG版本(如同 -r ARG-1:ARG)作的修改\n"
-#~ "                             如果ARG为负数则等价于 -r ARG:ARG-1"
+#~ msgid "Added: %s\n"
+#~ msgstr "已增加: %s\n"
 
-#~ msgid ""
-#~ "Only SHA1 checksums can be used as keys in the pristine file storage.\n"
-#~ msgstr "在原始的文件存储中,只有 SHA1 校验和才能用作键。\n"
+#~ msgid "Error getting 'affected time' of '%s'"
+#~ msgstr "取得“%s”的“affected time”出错"
 
-#~ msgid "Error recording tree conflict on '%s'"
-#~ msgstr "在 '%s' 中记录树冲突出错"
+#~ msgid "Stream doesn't support resetting"
+#~ msgstr "流不支持重置操作"
 
 #, fuzzy
 #~ msgid ""
-#~ "specify which collection of revisions to display\n"
-#~ "                             ('merged', 'eligible')\n"
-#~ "                             [alias: --sr]"
+#~ "lump-merge all of source URL's unmerged changes\n"
+#~ "                             [alias: --ri]"
 #~ msgstr ""
-#~ "指定显示哪个版本集合\n"
-#~ "                             ('merged', 'eligible')"
-
-#~ msgid ""
-#~ "Cannot revert addition of current directory; please try again from the "
-#~ "parent directory"
-#~ msgstr "无法恢复增加的当前目录;请从父目录重试"
+#~ "只能对修改列表 ARG 成员操作\n"
+#~ "                             [aliases: --cl]"
 
-#~ msgid "Path '%s' is no longer a member of a changelist.\n"
-#~ msgstr "路径“%s”不再是修改列表的成员。\n"
+#~ msgid "Error getting 'affected time' on '%s'"
+#~ msgstr "取得“%s”的“affected time”出错"
 
 #~ msgid ""
-#~ "Entry for '%s' is marked as 'copied' but is not itself scheduled\n"
-#~ "for addition.  Perhaps you're committing a target that is\n"
-#~ "inside an unversioned (or not-yet-versioned) directory?"
-#~ msgstr ""
-#~ "条目 “%s” 被标记为“已复制”,但是本身尚未加入增加调度。也许您提交的\n"
-#~ "目标在未纳入版本控制的目录中?"
+#~ "Failed to add file '%s': an unversioned file of the same name already "
+#~ "exists"
+#~ msgstr "增加文件 '%s' 失败: 同名未版本控制的文件已存在"
 
 #~ msgid ""
-#~ "set revision property ARG in new revision\n"
-#~ "                             using the name[=value] format"
+#~ "Can't replace '%s' with a node of a differing type; the deletion must be "
+#~ "committed and the parent updated before adding '%s'"
 #~ msgstr ""
-#~ "在新版本设置版本属性 ARG\n"
-#~ "                使用格式 name[=value]"
+#~ "无法以不同类型的节点来替换 “%s”;在增加 “%s” 前必须提交删除操作并更新父目录"
 
-#~ msgid "LOWER cannot be greater than UPPER.\n"
-#~ msgstr "LOWER 不能大于 UPPER。\n"
+#~ msgid "Error parsing diff options"
+#~ msgstr "解析 diff 参数出错"
 
-#~ msgid "Error during add of '%s'"
-#~ msgstr "增加 “%s” 时出错"
+#~ msgid "No fetch_func supplied to update_editor"
+#~ msgstr "没有为 update_editor 提供 fetch_func"
 
-#~ msgid "Error closing write end of stderr pipe"
-#~ msgstr "关闭写标准错误管道出错"
+#~ msgid "Revision file '%s' does not exist, and r%ld is not packed"
+#~ msgstr "版本文件 “%s” 不存在,并且 r%ld 没有被打包"
 
 #~ msgid "Can't move source to dest"
 #~ msgstr "无法移动源至目的"
 
-#~ msgid "Revision file '%s' does not exist, and r%ld is not packed"
-#~ msgstr "版本文件 “%s” 不存在,并且 r%ld 没有被打包"
+#~ msgid "Error closing write end of stderr pipe"
+#~ msgstr "关闭写标准错误管道出错"
 
-#~ msgid "No fetch_func supplied to update_editor"
-#~ msgstr "没有为 update_editor 提供 fetch_func"
+#~ msgid "Error during add of '%s'"
+#~ msgstr "增加 “%s” 时出错"
 
-#~ msgid "Error parsing diff options"
-#~ msgstr "解析 diff 参数出错"
+#~ msgid "LOWER cannot be greater than UPPER.\n"
+#~ msgstr "LOWER 不能大于 UPPER。\n"
 
 #~ msgid ""
-#~ "Can't replace '%s' with a node of a differing type; the deletion must be "
-#~ "committed and the parent updated before adding '%s'"
+#~ "set revision property ARG in new revision\n"
+#~ "                             using the name[=value] format"
 #~ msgstr ""
-#~ "无法以不同类型的节点来替换 “%s”;在增加 “%s” 前必须提交删除操作并更新父目录"
+#~ "在新版本设置版本属性 ARG\n"
+#~ "                使用格式 name[=value]"
 
 #~ msgid ""
-#~ "Failed to add file '%s': an unversioned file of the same name already "
-#~ "exists"
-#~ msgstr "增加文件 '%s' 失败: 同名未版本控制的文件已存在"
+#~ "Entry for '%s' is marked as 'copied' but is not itself scheduled\n"
+#~ "for addition.  Perhaps you're committing a target that is\n"
+#~ "inside an unversioned (or not-yet-versioned) directory?"
+#~ msgstr ""
+#~ "条目 “%s” 被标记为“已复制”,但是本身尚未加入增加调度。也许您提交的\n"
+#~ "目标在未纳入版本控制的目录中?"
 
-#~ msgid "Error getting 'affected time' on '%s'"
-#~ msgstr "取得“%s”的“affected time”出错"
+#~ msgid "Path '%s' is no longer a member of a changelist.\n"
+#~ msgstr "路径“%s”不再是修改列表的成员。\n"
+
+#~ msgid ""
+#~ "Cannot revert addition of current directory; please try again from the "
+#~ "parent directory"
+#~ msgstr "无法恢复增加的当前目录;请从父目录重试"
 
 #, fuzzy
 #~ msgid ""
-#~ "lump-merge all of source URL's unmerged changes\n"
-#~ "                             [alias: --ri]"
+#~ "specify which collection of revisions to display\n"
+#~ "                             ('merged', 'eligible')\n"
+#~ "                             [alias: --sr]"
 #~ msgstr ""
-#~ "只能对修改列表 ARG 成员操作\n"
-#~ "                             [aliases: --cl]"
-
-#~ msgid "Stream doesn't support resetting"
-#~ msgstr "流不支持重置操作"
+#~ "指定显示哪个版本集合\n"
+#~ "                             ('merged', 'eligible')"
 
-#~ msgid "Error getting 'affected time' of '%s'"
-#~ msgstr "取得“%s”的“affected time”出错"
+#~ msgid "Error recording tree conflict on '%s'"
+#~ msgstr "在 '%s' 中记录树冲突出错"
 
-#~ msgid "Added: %s\n"
-#~ msgstr "已增加: %s\n"
+#~ msgid ""
+#~ "Only SHA1 checksums can be used as keys in the pristine file storage.\n"
+#~ msgstr "在原始的文件存储中,只有 SHA1 校验和才能用作键。\n"
 
 #~ msgid ""
-#~ "Can't add '%s' to deleted directory; try undeleting its parent directory "
-#~ "first"
-#~ msgstr "无法增加“%s”至已删除的目录;请先恢复其父目录"
+#~ "the change made by revision ARG (like -r ARG-1:ARG)\n"
+#~ "                             If ARG is negative this is like -r ARG:ARG-1"
+#~ msgstr ""
+#~ "在ARG版本(如同 -r ARG-1:ARG)作的修改\n"
+#~ "                             如果ARG为负数则等价于 -r ARG:ARG-1"
+
+#~ msgid "Cannot reintegrate into a working copy not entirely at infinite depth"
+#~ msgstr "不能复兴到非全部无限制深度的工作副本"
+
+#~ msgid ""
+#~ "Failed to add directory '%s': an unversioned directory of the same name "
+#~ "already exists"
+#~ msgstr "无法新增目录“%s”: 同名未版本控制目录对象已存在"
+
+#~ msgid "Error getting 'affected time' for '%s'"
+#~ msgstr "取得“%s”的“affected time”出错"
 
 #, fuzzy
 #~ msgid ""
-#~ "apply the unidiff in reverse\n"
-#~ "                             [alias: --rd]"
+#~ "keep path in working copy\n"
+#~ "                             [alias: --kl]"
 #~ msgstr ""
 #~ "忽略外部定义\n"
 #~ "                             [aliases: --ie]"
 
-#~ msgid "Error in post-commit clean-up (details follow):"
-#~ msgstr "清理 post-commit 出错 (细节如下): "
-
-#~ msgid "'%s' is not a valid revision range"
-#~ msgstr "“%s”不是有效的版本范围"
-
-#~ msgid "Did not expect '%s' to be a working copy root"
-#~ msgstr "不期望 “%s” 是工作副本根目录"
-
-#~ msgid "Entry '%s' is already under version control"
-#~ msgstr "条目“%s”已纳入版本控制"
-
-#~ msgid "'%s' has no WORKING_NODE"
-#~ msgstr "“%s” 没有 WORKING_NODE"
+#~ msgid ""
+#~ "ARG (some commands also take ARG1:ARG2 range)\n"
+#~ "                             A revision argument can be one of:\n"
+#~ "                                NUMBER       revision number\n"
+#~ "                                '{' DATE '}' revision at start of the "
+#~ "date\n"
+#~ "                                'HEAD'       latest in repository\n"
+#~ "                                'BASE'       base rev of item's working "
+#~ "copy\n"
+#~ "                                'COMMITTED'  last commit at or before "
+#~ "BASE\n"
+#~ "                                'PREV'       revision just before COMMITTED"
+#~ msgstr ""
+#~ "ARG (一些命令也接受ARG1:ARG2范围)\n"
+#~ "                             版本参数可以是如下之一: \n"
+#~ "                                NUMBER       版本号\n"
+#~ "                                '{' DATE '}' 在指定时间以后的版本\n"
+#~ "                                'HEAD'       版本库中的最新版本\n"
+#~ "                                'BASE'       工作副本的基线版本\n"
+#~ "                                'COMMITTED'  最后提交或基线之前\n"
+#~ "                                'PREV'       COMMITTED的前一版本"
 
-#~ msgid "'svn upgrade' can only be run from the root of the working copy."
-#~ msgstr "只能在工作副本的根目录执行 'svn upgrade'"
+#~ msgid "Modified: %s\n"
+#~ msgstr "已修改: %s\n"
 
-#~ msgid "There is no work queue for '%s'."
-#~ msgstr "没有 '%s' 的工作队列。"
+#, fuzzy
+#~ msgid ""
+#~ "don't expand keywords\n"
+#~ "                             [alias: --ik]"
+#~ msgstr ""
+#~ "忽略外部定义\n"
+#~ "                             [aliases: --ie]"
 
-#~ msgid "Unknown or unexpected kind for path '%s'"
-#~ msgstr "路径“%s”的种类未知或意外"
+#~ msgid "URL '%s' is not properly URI-encoded"
+#~ msgstr "URL“%s”不是正确的URI编码"
 
-#~ msgid "Path '%s' is now a member of changelist '%s'.\n"
-#~ msgstr "路径“%s”现在是修改列表“%s”的成员。\n"
+#~ msgid "Can't make pipe read handle non-inherited for hook '%s'"
+#~ msgstr "无法为钩子“%s”创建非继承的管道读句柄"
 
 #~ msgid ""
-#~ "do not cache authentication tokens\n"
-#~ "                             [alias: --nac]"
+#~ "number of leading path components to strip\n"
+#~ "                             from pathnames. Specifying -p0 gives the "
+#~ "entire\n"
+#~ "                             path unmodified. Specifying -p1 causes the "
+#~ "path\n"
+#~ "                                 doc/fudge/crunchy.html\n"
+#~ "                             to be interpreted as\n"
+#~ "                                 fudge/crunchy.html\n"
+#~ "                             while -p2 would give just crunchy.html"
 #~ msgstr ""
-#~ "不要缓存认证令牌\n"
-#~ "                             [alias: --nac]"
+#~ "需要从路径中裁剪的前导路径组件数量。\n"
+#~ "                指定 -p0 不修改路径。指定 -p1 会将路径 doc/fudge/crunchy."
+#~ "html\n"
+#~ "                被转换为 fudge/crunchy.html。指定 -p2 会得到 crunchy."
+#~ "html 。"
 
-#~ msgid ""
-#~ "Failed to add file '%s': a non-file object of the same name already exists"
-#~ msgstr "无法新增文件“%s”: 同名非文件对象已存在"
+#~ msgid "Target lists to diff may not contain both working copy paths and URLs"
+#~ msgstr "差异比较目标不可同时包含工作副本路径与URL"
 
 #~ msgid ""
-#~ "do not print differences for deleted files\n"
-#~ "                             [alias: --ndd]"
+#~ "usage: svnsync synchronize DEST_URL\n"
+#~ "\n"
+#~ "Transfer all pending revisions to the destination from the source\n"
+#~ "with which it was initialized.\n"
 #~ msgstr ""
-#~ "对于已经删除的文件,不要显示差异\n"
-#~ "                             [alias: --ndd]"
-
-#~ msgid "In directory '%s'"
-#~ msgstr "在目录“%s”中"
-
-#~ msgid "Can't close directory '%s'"
-#~ msgstr "无法关闭目录 “%s”"
-
-#~ msgid "Can't chmod '%s'"
-#~ msgstr "无法修改“%s”的存取权限"
+#~ "用法: svnsync synchronize DEST_URL\n"
+#~ "\n"
+#~ "从已经初始化的源版本库传输所有未决的版本到目标版本库。\n"
 
 #~ msgid ""
-#~ "Default: '-u'. When Subversion is invoking an\n"
-#~ "                             external diff program, ARG is simply passed "
-#~ "along\n"
-#~ "                             to the program. But when Subversion is using "
-#~ "its\n"
-#~ "                             default internal diff implementation, or "
-#~ "when\n"
-#~ "                             Subversion is displaying blame annotations, "
-#~ "ARG\n"
-#~ "                             could be any of the following:\n"
-#~ "                                -u (--unified):\n"
-#~ "                                   Output 3 lines of unified context.\n"
-#~ "                                -b (--ignore-space-change):\n"
-#~ "                                   Ignore changes in the amount of white "
-#~ "space.\n"
-#~ "                                -w (--ignore-all-space):\n"
-#~ "                                   Ignore all white space.\n"
-#~ "                                --ignore-eol-style:\n"
-#~ "                                   Ignore changes in EOL style.\n"
-#~ "                                -p (--show-c-function):\n"
-#~ "                                   Show C function name in diff output."
+#~ "specify automatic conflict resolution source\n"
+#~ "                            ('base', 'working', 'mine-conflict',\n"
+#~ "                             'theirs-conflict', 'mine-full', 'theirs-full')"
 #~ msgstr ""
-#~ "缺省: “-u”。当 Subversion 调用外部比较程序时,ARG 直接传给它。但是当\n"
-#~ "                             Subversion 使用缺省的内置比较实现,或者正\n"
-#~ "                             显示追溯时, ARG 可以是: \n"
-#~ "                                -u (--unified):\n"
-#~ "                                   输出三行统一上下文。\n"
-#~ "                                -b (--ignore-space-change):\n"
-#~ "                                   忽略空白数量的修改。\n"
-#~ "                                -w (--ignore-all-space):\n"
-#~ "                                   忽略所有的空白。\n"
-#~ "                                --ignore-eol-style:\n"
-#~ "                                   忽略行尾样式的改"
-#~ "变。                            -p (--show-c-function):\n"
-#~ "                                   在比较输出中显示 C 函数名称。"
+#~ "指定自动解决冲突动作的源\n"
+#~ "                            ('base', 'working', 'mine-conflict',\n"
+#~ "                             'theirs-conflict', 'mine-full', 'theirs-full')"
 
-#~ msgid "Error removing lock from entry for '%s'"
-#~ msgstr "删除条目“%s”的锁出错"
+#~ msgid "Error replacing text-base of '%s'"
+#~ msgstr "替换“%s”的文件参考基础出错"
 
-#~ msgid "No WC table entry"
-#~ msgstr "没有 WC 表入口"
+#~ msgid "Deleted: %s\n"
+#~ msgstr "已删除: %s\n"
 
 #~ msgid ""
-#~ "Failed to add file '%s': a file from another repository with the same name "
-#~ "already exists"
-#~ msgstr "无法新增文件“%s”: 来自其它版本库的同名文件对象已存在"
+#~ "use a different EOL marker than the standard\n"
+#~ "                             system marker for files with the svn:eol-"
+#~ "style\n"
+#~ "                             property set to 'native'.\n"
+#~ "                             ARG may be one of 'LF', 'CR', 'CRLF'"
+#~ msgstr ""
+#~ "使用非标准的 EOL 标记\n"
+#~ "                系统中立的文件标记 svn:eol-style 属性取值为 “native”。\n"
+#~ "                ARG 可以是以下之一“LF”,“CR”,“CRLF”"
 
-#~ msgid "Error modifying entry for '%s'"
-#~ msgstr "修改“%s”的入口出错"
+#~ msgid "Path '%s' is not a child of '%s'"
+#~ msgstr "路径 '%s' 不是 '%s' 的孩子"
 
-#~ msgid "Error modifying entry of '%s'"
-#~ msgstr "修改“%s”的入口出错"
+#~ msgid ""
+#~ "read user configuration files from directory ARG\n"
+#~ "                             [alias: --cd]"
+#~ msgstr ""
+#~ "从目录 ARG 读取用户配置文件\n"
+#~ "                             [alias: --cd]"
 
-#~ msgid "Failed to add directory '%s': copyfrom arguments not yet supported"
-#~ msgstr "无法增加目录“%s”:尚不支持 copyfrom 参数"
+#~ msgid ""
+#~ "Can't replace '%s' in deleted directory; try undeleting its parent "
+#~ "directory first"
+#~ msgstr "无法在已删除的目录中替换“%s”;请先恢复其父目录"
 
-#~ msgid "Unrecognized logfile element '%s' in '%s'"
-#~ msgstr "有无法识别的日志文件元素 “%s” 在 “%s” 中"
+#~ msgid "'%s' is marked as absent, so it cannot be scheduled for addition"
+#~ msgstr "“%s”被标记为不存在,所以无法加入增加调度"
 
 #~ msgid ""
-#~ "specify automatic conflict resolution action\n"
-#~ "                            ('postpone', 'base', 'mine-conflict',\n"
-#~ "                             'theirs-conflict', 'mine-full', 'theirs-"
-#~ "full',\n"
-#~ "                             'edit', 'launch')"
+#~ "ignore externals definitions\n"
+#~ "                             [alias: --ie]"
 #~ msgstr ""
-#~ "指定自动解决冲突动作\n"
-#~ "                            ('postpone', 'base', 'mine-conflict',\n"
-#~ "                             'theirs-conflict', 'mine-full', 'theirs-"
-#~ "full',\n"
-#~ "                             'edit', 'launch')"
-
-#~ msgid "\"svnrdump load\"'s lock was stolen; can't remove it"
-#~ msgstr "\"svnrdump load\" 的锁被窃;不能删除"
-
-#~ msgid "Non-numeric strip argument given"
-#~ msgstr "提供的修剪参数不是数字"
+#~ "忽略外部定义\n"
+#~ "                             [alias: --ie]"
 
-#~ msgid "Could not find node '%s' for recording file information."
-#~ msgstr "不能为记录文件信息找到节点“%s”"
+#~ msgid "Missing 'timestamp' attribute in '%s'"
+#~ msgstr "“%s”丢失“timestamp”属性"
 
-#~ msgid "Error comparing '%s' and '%s'"
-#~ msgstr "比较“%s”与“%s”出错"
+#~ msgid ""
+#~ "usage: svnsync copy-revprops DEST_URL [REV[:REV2]]\n"
+#~ "\n"
+#~ "Copy the revision properties in a given range of revisions to the\n"
+#~ "destination from the source with which it was initialized.\n"
+#~ "\n"
+#~ "If REV and REV2 are provided, copy properties for the revisions\n"
+#~ "specified by that range, inclusively.  If only REV is provided,\n"
+#~ "copy properties for that revision alone.  If REV is not provided,\n"
+#~ "copy properties for all revisions previously transferred to the\n"
+#~ "destination.\n"
+#~ "\n"
+#~ "REV and REV2 must be revisions which were previously transferred\n"
+#~ "to the destination.  You may use \"HEAD\" for either revision to\n"
+#~ "mean \"the last revision transferred\".\n"
+#~ msgstr ""
+#~ "用法: svnsync copy-revprops DEST_URL [REV[:REV2]]\n"
+#~ "\n"
+#~ "从已经初始化的源版本库复制指定版本范围的版本属性到目的版本库。\n"
+#~ "\n"
+#~ "如果给出了 REV 和 REV2,那么复制给定的版本范围,包含边界。如果\n"
+#~ "只给出了 REV,那么单独复制此版本属性。如果没有给出 REV,那么就\n"
+#~ "复制已经传输的所有版本的属性。\n"
+#~ "\n"
+#~ "REV 和 REV2 必须是已经传输到目的版本库的版本。你可以使用 \"HEAD\" \n"
+#~ "来指代最后一个传输的版本。\n"
 
-#~ msgid "Can't make pipe write handle non-inherited for hook '%s'"
-#~ msgstr "无法为钩子“%s”创建非继承的管道写句柄"
+#~ msgid "Missing path argument"
+#~ msgstr "丢失路径参数"
 
-#~ msgid "Given source URL invalid"
-#~ msgstr "提供的源 URL 非法"
+#~ msgid "Parent(s) of '%s' should have been present."
+#~ msgstr "'%s' 的父亲应该存在。"
 
-#~ msgid "Can't create pipe for hook '%s'"
-#~ msgstr "无法为钩子“%s”创建管道"
+#~ msgid "Unable to make any directories"
+#~ msgstr "无法创建任何目录"
 
 #~ msgid ""
-#~ "set new working copy depth to ARG ('exclude',\n"
-#~ "                            'empty', 'files', 'immediates', or "
-#~ "'infinity')\n"
-#~ "                            [alias: --sd]"
+#~ "merge only mergeinfo differences\n"
+#~ "                             [alias: --ro]"
 #~ msgstr ""
-#~ "设置工作副本的新深度为 ARG(“exclude”,\n"
-#~ "                            “empty”,“files”,“immediates” 或“infinity”)\n"
-#~ "                            [alias: --sd]"
+#~ "只合并修改信息的差异\n"
+#~ "                             [alias: --ro]"
 
-#~ msgid "Entry '%s' has illegal schedule"
-#~ msgstr "条目“%s”有非法调度"
+#~ msgid "Error getting file size on '%s'"
+#~ msgstr "取得“%s”的文件大小出错"
 
-#~ msgid "Parent(s) of '%s' should have repository information."
-#~ msgstr "'%s' 的父亲应该包含版本库的信息。"
+#~ msgid "Removing '%s' from changelist '%s'."
+#~ msgstr "删除 “%s”,从修改列表 “%s”。"
 
-#~ msgid "post-commit hook failed with no error message."
-#~ msgstr "调用 post-commit 钩子失败,没有错误信息"
+#, fuzzy
+#~ msgid ""
+#~ "general usage: svnrdump SUBCOMMAND URL [-r LOWER[:UPPER]]\n"
+#~ "Type 'svnrdump help <subcommand>' for help on a specific subcommand.\n"
+#~ "\n"
+#~ "Available subcommands:\n"
+#~ msgstr ""
+#~ "一般用法: svndumpfilter SUBCOMMAND [ARGS & OPTIONS ...]\n"
+#~ "请使用 “svndumpfilter help <subcommand>”获得指定子命令的帮助信息。\n"
+#~ "请使用 “svndumpfilter --version”获得本程序版本。\n"
+#~ "\n"
+#~ "可用的子命令: \n"

Modified: subversion/branches/diff-optimizations-bytes/subversion/svn/info-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/svn/info-cmd.c?rev=1057044&r1=1057043&r2=1057044&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/svn/info-cmd.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/svn/info-cmd.c Sun Jan  9 22:39:40 2011
@@ -566,24 +566,11 @@ svn_cl__info(apr_getopt_t *os,
         {
           /* If one of the targets is a non-existent URL or wc-entry,
              don't bail out.  Just warn and move on to the next target. */
-          if (err->apr_err == SVN_ERR_UNVERSIONED_RESOURCE
-              || err->apr_err == SVN_ERR_ENTRY_NOT_FOUND)
+          if (err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND ||
+              err->apr_err == SVN_ERR_RA_ILLEGAL_URL)
             {
-              SVN_ERR(svn_cmdline_fprintf
-                      (stderr, subpool,
-                       _("%s:  (Not a versioned resource)\n\n"),
-                       svn_path_is_url(truepath)
-                         ? truepath
-                         : svn_dirent_local_style(truepath, pool)));
-            }
-          else if (err->apr_err == SVN_ERR_RA_ILLEGAL_URL)
-            {
-              SVN_ERR(svn_cmdline_fprintf
-                      (stderr, subpool,
-                       _("%s:  (Not a valid URL)\n\n"),
-                       svn_path_is_url(truepath)
-                         ? truepath
-                         : svn_dirent_local_style(truepath, pool)));
+              svn_handle_warning2(stderr, err, "svn: ");
+              svn_error_clear(svn_cmdline_fprintf(stderr, subpool, "\n"));
             }
           else
             {

Modified: subversion/branches/diff-optimizations-bytes/subversion/svn/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/svn/main.c?rev=1057044&r1=1057043&r2=1057044&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/svn/main.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/svn/main.c Sun Jan  9 22:39:40 2011
@@ -1188,7 +1188,7 @@ const svn_opt_subcommand_desc2_t svn_cl_
   { "upgrade", svn_cl__upgrade, {0}, N_
     ("Upgrade the metadata storage format for a working copy.\n"
      "usage: upgrade WCPATH...\n"),
-    {0} },
+    { 'q' } },
 
   { NULL, NULL, {0}, NULL, {0} }
 };

Modified: subversion/branches/diff-optimizations-bytes/subversion/svn/propset-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/svn/propset-cmd.c?rev=1057044&r1=1057043&r2=1057044&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/svn/propset-cmd.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/svn/propset-cmd.c Sun Jan  9 22:39:40 2011
@@ -85,8 +85,9 @@ svn_cl__propset(apr_getopt_t *os,
   /* We only want special Subversion property values to be in UTF-8
      and LF line endings.  All other propvals are taken literally. */
   if (svn_prop_needs_translation(pname_utf8))
-    SVN_ERR(svn_subst_translate_string(&propval, propval,
-                                       opt_state->encoding, scratch_pool));
+    SVN_ERR(svn_subst_translate_string2(&propval, NULL, NULL, propval,
+                                        opt_state->encoding, scratch_pool,
+                                        scratch_pool));
   else if (opt_state->encoding)
     return svn_error_create
       (SVN_ERR_UNSUPPORTED_FEATURE, NULL,

Modified: subversion/branches/diff-optimizations-bytes/subversion/svnadmin/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/svnadmin/main.c?rev=1057044&r1=1057043&r2=1057044&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/svnadmin/main.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/svnadmin/main.c Sun Jan  9 22:39:40 2011
@@ -926,7 +926,8 @@ subcommand_help(apr_getopt_t *os, void *
 
   SVN_ERR(svn_opt_print_help3(os, "svnadmin",
                               opt_state ? opt_state->version : FALSE,
-                              FALSE, version_footer->data,
+                              opt_state ? opt_state->quiet : FALSE,
+                              version_footer->data,
                               header, cmd_table, options_table, NULL, NULL,
                               pool));
 
@@ -1182,7 +1183,8 @@ set_revprop(const char *prop_name, const
   prop_value->data = file_contents->data;
   prop_value->len = file_contents->len;
 
-  SVN_ERR(svn_subst_translate_string(&prop_value, prop_value, NULL, pool));
+  SVN_ERR(svn_subst_translate_string2(&prop_value, NULL, NULL, prop_value,
+                                      NULL, pool, pool));
 
   /* Open the filesystem  */
   SVN_ERR(open_repos(&repos, opt_state->repository_path, pool));
@@ -1765,6 +1767,7 @@ main(int argc, const char *argv[])
               static const svn_opt_subcommand_desc2_t pseudo_cmd =
                 { "--version", subcommand_help, {0}, "",
                   {svnadmin__version,  /* must accept its own option */
+                   'q',  /* --quiet */
                   } };
 
               subcommand = &pseudo_cmd;

Modified: subversion/branches/diff-optimizations-bytes/subversion/svndumpfilter/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/svndumpfilter/main.c?rev=1057044&r1=1057043&r2=1057044&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/svndumpfilter/main.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/svndumpfilter/main.c Sun Jan  9 22:39:40 2011
@@ -1054,7 +1054,7 @@ subcommand_help(apr_getopt_t *os, void *
 
   SVN_ERR(svn_opt_print_help3(os, "svndumpfilter",
                               opt_state ? opt_state->version : FALSE,
-                              FALSE, NULL,
+                              opt_state ? opt_state->quiet : FALSE, NULL,
                               header, cmd_table, options_table, NULL,
                               NULL, pool));
 
@@ -1336,6 +1336,7 @@ main(int argc, const char *argv[])
           break;
         case svndumpfilter__version:
           opt_state.version = TRUE;
+          break;
         case svndumpfilter__quiet:
           opt_state.quiet = TRUE;
           break;
@@ -1385,6 +1386,7 @@ main(int argc, const char *argv[])
               static const svn_opt_subcommand_desc2_t pseudo_cmd =
                 { "--version", subcommand_help, {0}, "",
                   {svndumpfilter__version,  /* must accept its own option */
+                   svndumpfilter__quiet,
                   } };
 
               subcommand = &pseudo_cmd;

Modified: subversion/branches/diff-optimizations-bytes/subversion/svnlook/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/svnlook/main.c?rev=1057044&r1=1057043&r2=1057044&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/svnlook/main.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/svnlook/main.c Sun Jan  9 22:39:40 2011
@@ -147,34 +147,37 @@ static const apr_getopt_option_t options
   {"xml",               svnlook__xml_opt, 0,
    N_("output in XML")},
 
-  {"extensions",    'x', 1,
-                    N_("Default: '-u'. When Subversion is invoking an\n"
-                       "                            "
-                       " external diff program, ARG is simply passed along\n"
-                       "                            "
-                       " to the program. But when Subversion is using its\n"
-                       "                            "
-                       " default internal diff implementation, or when\n"
-                       "                            "
-                       " Subversion is displaying blame annotations, ARG\n"
-                       "                            "
-                       " could be any of the following:\n"
-                       "                            "
-                       "    -u (--unified):\n"
-                       "                            "
-                       "       Output 3 lines of unified context.\n"
-                       "                            "
-                       "    -b (--ignore-space-change):\n"
-                       "                            "
-                       "       Ignore changes in the amount of white space.\n"
-                       "                            "
-                       "    -w (--ignore-all-space):\n"
-                       "                            "
-                       "       Ignore all white space.\n"
-                       "                            "
-                       "    --ignore-eol-style:\n"
-                       "                            "
-                       "       Ignore changes in EOL style")},
+  {"extensions",        'x', 1,
+   N_("Default: '-u'. When Subversion is invoking an\n"
+      "                            "
+      " external diff program, ARG is simply passed along\n"
+      "                            "
+      " to the program. But when Subversion is using its\n"
+      "                            "
+      " default internal diff implementation, or when\n"
+      "                            "
+      " Subversion is displaying blame annotations, ARG\n"
+      "                            "
+      " could be any of the following:\n"
+      "                            "
+      "    -u (--unified):\n"
+      "                            "
+      "       Output 3 lines of unified context.\n"
+      "                            "
+      "    -b (--ignore-space-change):\n"
+      "                            "
+      "       Ignore changes in the amount of white space.\n"
+      "                            "
+      "    -w (--ignore-all-space):\n"
+      "                            "
+      "       Ignore all white space.\n"
+      "                            "
+      "    --ignore-eol-style:\n"
+      "                            "
+      "       Ignore changes in EOL style")},
+
+  {"quiet",             'q', 0,
+   N_("no progress (only errors) to stderr")},
 
   {0,                   0, 0, 0}
 };
@@ -310,6 +313,7 @@ struct svnlook_opt_state
   svn_boolean_t non_recursive;    /* --non-recursive */
   svn_boolean_t xml;              /* --xml */
   const char *extensions;         /* diff extension args (UTF-8!) */
+  svn_boolean_t quiet;            /* --quiet */
 };
 
 
@@ -821,7 +825,7 @@ display_prop_diffs(const apr_array_heade
 
   for (i = 0; i < prop_diffs->nelts; i++)
     {
-      const char *header_fmt;
+      const char *header_label;
       const svn_string_t *orig_value;
       const svn_prop_t *pc = &APR_ARRAY_IDX(prop_diffs, i, svn_prop_t);
 
@@ -833,12 +837,12 @@ display_prop_diffs(const apr_array_heade
         orig_value = NULL;
 
       if (! orig_value)
-        header_fmt = "Added: %s\n";
+        header_label = "Added";
       else if (! pc->value)
-        header_fmt = "Deleted: %s\n";
+        header_label = "Deleted";
       else
-        header_fmt = "Modified: %s\n";
-      SVN_ERR(svn_cmdline_printf(pool, header_fmt, pc->name));
+        header_label = "Modified";
+      SVN_ERR(svn_cmdline_printf(pool, "%s: %s\n", header_label, pc->name));
 
       /* Flush stdout before we open a stream to it below. */
       SVN_ERR(svn_cmdline_fflush(stdout));
@@ -2021,7 +2025,8 @@ subcommand_help(apr_getopt_t *os, void *
 
   SVN_ERR(svn_opt_print_help3(os, "svnlook",
                               opt_state ? opt_state->version : FALSE,
-                              FALSE, version_footer->data,
+                              opt_state ? opt_state->quiet : FALSE,
+                              version_footer->data,
                               header, cmd_table, options_table, NULL,
                               NULL, pool));
 
@@ -2326,6 +2331,10 @@ main(int argc, const char *argv[])
           opt_state.help = TRUE;
           break;
 
+        case 'q':
+          opt_state.quiet = TRUE;
+          break;
+
         case svnlook__revprop_opt:
           opt_state.revprop = TRUE;
           break;
@@ -2419,6 +2428,7 @@ main(int argc, const char *argv[])
               static const svn_opt_subcommand_desc2_t pseudo_cmd =
                 { "--version", subcommand_help, {0}, "",
                   {svnlook__version,  /* must accept its own option */
+                   'q',
                   } };
 
               subcommand = &pseudo_cmd;

Modified: subversion/branches/diff-optimizations-bytes/subversion/svnrdump/svnrdump.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/svnrdump/svnrdump.c?rev=1057044&r1=1057043&r2=1057044&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/svnrdump/svnrdump.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/svnrdump/svnrdump.c Sun Jan  9 22:39:40 2011
@@ -159,6 +159,7 @@ typedef struct opt_baton_t {
   svn_ra_session_t *session;
   const char *url;
   svn_boolean_t help;
+  svn_boolean_t version;
   svn_opt_revision_t start_revision;
   svn_opt_revision_t end_revision;
   svn_boolean_t quiet;
@@ -483,6 +484,7 @@ usage(const char *progname,
  */
 static svn_error_t *
 version(const char *progname,
+        svn_boolean_t quiet,
         apr_pool_t *pool)
 {
   svn_stringbuf_t *version_footer =
@@ -492,7 +494,7 @@ version(const char *progname,
 
   SVN_ERR(svn_ra_print_modules(version_footer, pool));
   return svn_opt_print_help3(NULL, ensure_appname(progname, pool),
-                             TRUE, FALSE, version_footer->data,
+                             TRUE, quiet, version_footer->data,
                              NULL, NULL, NULL, NULL, NULL, pool);
 }
 
@@ -547,6 +549,7 @@ help_cmd(apr_getopt_t *os,
   const char *header =
     _("general usage: svnrdump SUBCOMMAND URL [-r LOWER[:UPPER]]\n"
       "Type 'svnrdump help <subcommand>' for help on a specific subcommand.\n"
+      "Type 'svnrdump --version' to see the program version and RA modules.\n"
       "\n"
       "Available subcommands:\n");
 
@@ -747,8 +750,7 @@ main(int argc, const char **argv)
           config_dir = opt_arg;
           break;
         case opt_version:
-          SVNRDUMP_ERR(version(argv[0], pool));
-          exit(EXIT_SUCCESS);
+          opt_baton->version = TRUE;
           break;
         case 'h':
           opt_baton->help = TRUE;
@@ -785,13 +787,27 @@ main(int argc, const char **argv)
       subcommand = svn_opt_get_canonical_subcommand2(svnrdump__cmd_table,
                                                      "help");
     }
-  else
+  if (subcommand == NULL)
     {
       if (os->ind >= os->argc)
         {
-          SVNRDUMP_ERR(help_cmd(NULL, NULL, pool));
-          svn_pool_destroy(pool);
-          exit(EXIT_FAILURE);
+          if (opt_baton->version)
+            {
+              /* Use the "help" subcommand to handle the "--version" option. */
+              static const svn_opt_subcommand_desc2_t pseudo_cmd =
+                { "--version", help_cmd, {0}, "",
+                  {opt_version,  /* must accept its own option */
+                   'q',  /* --quiet */
+                  } };
+              subcommand = &pseudo_cmd;
+            }
+
+          else
+            { 
+              SVNRDUMP_ERR(help_cmd(NULL, NULL, pool));
+              svn_pool_destroy(pool);
+              exit(EXIT_FAILURE);
+            }
         }
       else
         {
@@ -812,7 +828,7 @@ main(int argc, const char **argv)
               svn_pool_destroy(pool);
               exit(EXIT_FAILURE);
             }
-         }
+        }
     }
 
   /* Check that the subcommand wasn't passed any inappropriate options. */
@@ -847,6 +863,13 @@ main(int argc, const char **argv)
         }
     }
 
+  if (subcommand && strcmp(subcommand->name, "--version") == 0)
+    {
+      SVNRDUMP_ERR(version(argv[0], opt_baton->quiet, pool));
+      svn_pool_destroy(pool);
+      exit(EXIT_SUCCESS);
+    }
+
   if (subcommand && strcmp(subcommand->name, "help") == 0)
     {
       SVNRDUMP_ERR(help_cmd(os, opt_baton, pool));