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/12/30 22:27:54 UTC

svn commit: r1054005 [7/11] - in /subversion/branches/ignore-mergeinfo: ./ build/ build/ac-macros/ build/generator/ build/generator/swig/ contrib/client-side/svn_load_dirs/ contrib/server-side/ contrib/server-side/mod_dontdothat/ contrib/server-side/sv...

Modified: subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/dav_svn.h
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/dav_svn.h?rev=1054005&r1=1054004&r2=1054005&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/dav_svn.h (original)
+++ subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/dav_svn.h Thu Dec 30 21:27:46 2010
@@ -73,7 +73,7 @@ extern "C" {
  * ### only a single FS open; otherwise, it will have to work a bit harder
  * ### to keep the things in sync.
  */
-typedef struct {
+typedef struct dav_svn_repos {
   apr_pool_t *pool;     /* request_rec -> pool */
 
   /* Remember the root URL path of this repository (just a path; no
@@ -175,7 +175,7 @@ enum dav_svn_private_restype {
 
 
 /* store info about a root in a repository */
-typedef struct {
+typedef struct dav_svn_root {
   /* If a root within the FS has been opened, the value is stored here.
      Otherwise, this field is NULL. */
   svn_fs_root_t *root;
@@ -572,7 +572,7 @@ dav_error *
 dav_svn__merge_response(ap_filter_t *output,
                         const dav_svn_repos *repos,
                         svn_revnum_t new_rev,
-                        char *post_commit_err,
+                        const char *post_commit_err,
                         apr_xml_elem *prop_elem,
                         svn_boolean_t disable_merge_response,
                         apr_pool_t *pool);
@@ -662,7 +662,7 @@ dav_svn__post_create_txn(const dav_resou
 /*** authz.c ***/
 
 /* A baton needed by dav_svn__authz_read_func(). */
-typedef struct
+typedef struct dav_svn__authz_read_baton
 {
   /* The original request, needed to generate a subrequest. */
   request_rec *r;
@@ -748,9 +748,9 @@ dav_svn__new_error(apr_pool_t *pool,
    string constant. */
 dav_error *
 dav_svn__convert_err(svn_error_t *serr,
-                    int status,
-                    const char *message,
-                    apr_pool_t *pool);
+                     int status,
+                     const char *message,
+                     apr_pool_t *pool);
 
 
 /* Compare (PATH in ROOT) to (PATH in ROOT/PATH's created_rev).
@@ -809,7 +809,7 @@ dav_svn__build_uri(const dav_svn_repos *
    ### URIs which we may need to parse. it also ignores any scheme, host,
    ### and port in the URI and simply assumes it refers to the same server.
 */
-typedef struct {
+typedef struct dav_svn__uri_info {
   svn_revnum_t rev;
   const char *repos_path;
   const char *activity_id;

Modified: subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/deadprops.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/deadprops.c?rev=1054005&r1=1054004&r2=1054005&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/deadprops.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/deadprops.c Thu Dec 30 21:27:46 2010
@@ -180,7 +180,7 @@ save_value(dav_db *db, const dav_prop_na
       else
         return dav_svn__new_error(db->p, HTTP_CONFLICT, 0,
                                   "Properties may only be defined in the "
-                                  SVN_DAV_PROP_NS_SVN " and " 
+                                  SVN_DAV_PROP_NS_SVN " and "
                                   SVN_DAV_PROP_NS_CUSTOM " namespaces.");
     }
 
@@ -222,17 +222,21 @@ save_value(dav_db *db, const dav_prop_na
                                                resource->pool);
 
           /* Prepare any hook failure message to get sent over the wire */
-          serr = svn_error_purge_tracing(serr);
-          if (serr && serr->apr_err == SVN_ERR_REPOS_HOOK_FAILURE)
-            serr->message = apr_xml_quote_string(serr->pool, serr->message, 1);
-
-          /* mod_dav doesn't handle the returned error very well, it
-             generates its own generic error that will be returned to
-             the client.  Cache the detailed error here so that it can
-             be returned a second time when the rollback mechanism
-             triggers. */
           if (serr)
-            resource->info->revprop_error = svn_error_dup(serr);
+            {
+              svn_error_t *purged_serr = svn_error_purge_tracing(serr);
+              if (purged_serr->apr_err == SVN_ERR_REPOS_HOOK_FAILURE)
+                purged_serr->message = apr_xml_quote_string
+                                         (purged_serr->pool,
+                                          purged_serr->message, 1);
+
+              /* mod_dav doesn't handle the returned error very well, it
+                 generates its own generic error that will be returned to
+                 the client.  Cache the detailed error here so that it can
+                 be returned a second time when the rollback mechanism
+                 triggers. */
+              resource->info->revprop_error = svn_error_dup(purged_serr);
+            }
 
           /* Tell the logging subsystem about the revprop change. */
           dav_svn__operational_log(resource->info,
@@ -499,7 +503,7 @@ db_store(dav_db *db,
   if (absent && ! elem->first_child)
     /* ### better error check */
     return dav_svn__new_error(pool, HTTP_INTERNAL_SERVER_ERROR, 0,
-                              apr_psprintf(pool, 
+                              apr_psprintf(pool,
                                            "'%s' cannot be specified on the "
                                            "value without specifying an "
                                            "expectation",
@@ -758,7 +762,7 @@ db_apply_rollback(dav_db *db, dav_deadpr
 
   if (! db->resource->info->revprop_error)
     return NULL;
-  
+
   /* Returning the original revprop change error here will cause this
      detailed error to get returned to the client in preference to the
      more generic error created by mod_dav. */

Modified: subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/lock.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/lock.c?rev=1054005&r1=1054004&r2=1054005&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/lock.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/lock.c Thu Dec 30 21:27:46 2010
@@ -713,15 +713,28 @@ append_locks(dav_lockdb *lockdb,
                                     "Could not create empty file.",
                                     resource->pool);
 
-      if ((serr = svn_repos_fs_commit_txn(&conflict_msg, repos->repos,
-                                          &new_rev, txn, resource->pool)))
+      serr = svn_repos_fs_commit_txn(&conflict_msg, repos->repos,
+                                     &new_rev, txn, resource->pool);
+      if (SVN_IS_VALID_REVNUM(new_rev))
+        {
+          svn_error_clear(serr);
+        }
+      else
         {
           svn_error_clear(svn_fs_abort_txn(txn, resource->pool));
-          return dav_svn__convert_err(serr, HTTP_CONFLICT,
-                                      apr_psprintf(resource->pool,
-                                                   "Conflict when committing "
-                                                   "'%s'.", conflict_msg),
-                                      resource->pool);
+          if (serr)
+            return dav_svn__convert_err(serr, HTTP_CONFLICT,
+                                        apr_psprintf(resource->pool,
+                                                     "Conflict when "
+                                                     "committing '%s'.",
+                                                     conflict_msg),
+                                        resource->pool);
+          else
+            return dav_svn__new_error(resource->pool,
+                                      HTTP_INTERNAL_SERVER_ERROR,
+                                      0,
+                                      "Commit failed but there was no error "
+                                      "provided.");
         }
     }
 

Modified: subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/merge.c?rev=1054005&r1=1054004&r2=1054005&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/merge.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/merge.c Thu Dec 30 21:27:46 2010
@@ -209,7 +209,7 @@ dav_error *
 dav_svn__merge_response(ap_filter_t *output,
                         const dav_svn_repos *repos,
                         svn_revnum_t new_rev,
-                        char *post_commit_err,
+                        const char *post_commit_err,
                         apr_xml_elem *prop_elem,
                         svn_boolean_t disable_merge_response,
                         apr_pool_t *pool)

Modified: subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/mod_dav_svn.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/mod_dav_svn.c?rev=1054005&r1=1054004&r2=1054005&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/mod_dav_svn.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/mod_dav_svn.c Thu Dec 30 21:27:46 2010
@@ -50,7 +50,7 @@
 #define PATHAUTHZ_BYPASS_ARG "short_circuit"
 
 /* per-server configuration */
-typedef struct {
+typedef struct server_conf_t {
   const char *special_uri;
 } server_conf_t;
 
@@ -73,7 +73,7 @@ enum path_authz_conf {
 };
 
 /* per-dir configuration */
-typedef struct {
+typedef struct dir_conf_t {
   const char *fs_path;               /* path to the SVN FS */
   const char *repo_name;             /* repository name */
   const char *xslt_uri;              /* XSL transform URI */
@@ -663,7 +663,7 @@ merge_xml_filter_insert(request_rec *r)
 }
 
 
-typedef struct {
+typedef struct merge_ctx_t {
   apr_bucket_brigade *bb;
   apr_xml_parser *parser;
   apr_pool_t *pool;

Modified: subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/reports/replay.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/reports/replay.c?rev=1054005&r1=1054004&r2=1054005&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/reports/replay.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/reports/replay.c Thu Dec 30 21:27:46 2010
@@ -42,7 +42,7 @@
 #include "../dav_svn.h"
 
 
-typedef struct {
+typedef struct edit_baton_t {
   apr_bucket_brigade *bb;
   ap_filter_t *output;
   svn_boolean_t started;

Modified: subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/reports/update.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/reports/update.c?rev=1054005&r1=1054004&r2=1054005&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/reports/update.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/reports/update.c Thu Dec 30 21:27:46 2010
@@ -43,7 +43,7 @@
 #include "../dav_svn.h"
 
 
-typedef struct {
+typedef struct update_ctx_t {
   const dav_resource *resource;
 
   /* the revision we are updating to. used to generated IDs. */

Modified: subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/repos.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/repos.c?rev=1054005&r1=1054004&r2=1054005&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/repos.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/repos.c Thu Dec 30 21:27:46 2010
@@ -71,7 +71,7 @@ struct dav_stream {
 
 /* Convenience structure that facilitates combined memory allocation of
    a dav_resource and dav_resource_private pair. */
-typedef struct {
+typedef struct dav_resource_combined {
   dav_resource res;
   dav_resource_private priv;
 } dav_resource_combined;
@@ -279,7 +279,7 @@ parse_vcc_uri(dav_resource_combined *com
     {
       /* a specific Version Resource; in this case, a Baseline */
 
-      int revnum;
+      svn_revnum_t revnum;
 
       if (label != NULL)
         {
@@ -347,7 +347,7 @@ parse_baseline_coll_uri(dav_resource_com
                         int use_checked_in)
 {
   const char *slash;
-  int revnum;
+  svn_revnum_t revnum;
 
   /* format: REVISION/REPOS_PATH */
 
@@ -385,7 +385,7 @@ parse_baseline_uri(dav_resource_combined
                    const char *label,
                    int use_checked_in)
 {
-  int revnum;
+  svn_revnum_t revnum;
 
   /* format: REVISION */
 
@@ -3049,7 +3049,7 @@ set_headers(request_rec *r, const dav_re
 }
 
 
-typedef struct {
+typedef struct diff_ctx_t {
   ap_filter_t *output;
   apr_pool_t *pool;
 } diff_ctx_t;
@@ -3932,7 +3932,7 @@ move_resource(dav_resource *src,
 }
 
 
-typedef struct {
+typedef struct walker_ctx_t {
   /* the input walk parameters */
   const dav_walk_params *params;
 
@@ -4054,7 +4054,7 @@ do_walk(walker_ctx_t *ctx, int depth)
       if (params->walk_type & DAV_WALKTYPE_AUTH)
         {
           const char *repos_relpath =
-            apr_pstrcat(iterpool, 
+            apr_pstrcat(iterpool,
                         apr_pstrmemdup(iterpool,
                                        ctx->repos_path->data,
                                        ctx->repos_path->len),
@@ -4103,7 +4103,7 @@ do_walk(walker_ctx_t *ctx, int depth)
       ctx->uri->len = uri_len;
       ctx->repos_path->len = repos_len;
     }
-  
+
   svn_pool_destroy(iterpool);
 
   return NULL;
@@ -4379,7 +4379,7 @@ int dav_svn__method_post(request_rec *r)
      the client with (hopefully) some helpful information. */
   if (derr)
     return dav_svn__error_response_tag(r, derr);
-    
+
   return OK;
 }
 

Modified: subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/util.c?rev=1054005&r1=1054004&r2=1054005&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/util.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/util.c Thu Dec 30 21:27:46 2010
@@ -111,7 +111,7 @@ dav_svn__convert_err(svn_error_t *serr,
     /* Remove the trace-only error chain links.  We need predictable
        protocol behavior regardless of whether or not we're in a
        debugging build. */
-    serr = svn_error_purge_tracing(serr);
+    svn_error_t *purged_serr = svn_error_purge_tracing(serr);
 
     /* ### someday mod_dav_svn will send back 'rich' error tags, much
        finer grained than plain old svn_error_t's.  But for now, all
@@ -122,7 +122,7 @@ dav_svn__convert_err(svn_error_t *serr,
        appropriate HTTP status code.  If no more appropriate HTTP
        status code maps to the Subversion error code, use the one
        suggested status provided by the caller. */
-    switch (serr->apr_err)
+    switch (purged_serr->apr_err)
       {
       case SVN_ERR_FS_NOT_FOUND:
         status = HTTP_NOT_FOUND;
@@ -139,11 +139,12 @@ dav_svn__convert_err(svn_error_t *serr,
         /* add other mappings here */
       }
 
-    derr = build_error_chain(pool, serr, status);
+    derr = build_error_chain(pool, purged_serr, status);
     if (message != NULL
-        && serr->apr_err != SVN_ERR_REPOS_HOOK_FAILURE)
+        && purged_serr->apr_err != SVN_ERR_REPOS_HOOK_FAILURE)
       /* Don't hide hook failures; we might hide the error text */
-      derr = dav_push_error(pool, status, serr->apr_err, message, derr);
+      derr = dav_push_error(pool, status, purged_serr->apr_err,
+                            message, derr);
 
     /* Now, destroy the Subversion error. */
     svn_error_clear(serr);
@@ -716,20 +717,20 @@ request_body_to_string(svn_string_t **re
         {
           const char *data;
           apr_size_t len;
-          
+
           if (APR_BUCKET_IS_EOS(bucket))
             {
               seen_eos = 1;
               break;
             }
-          
+
           if (APR_BUCKET_IS_METADATA(bucket))
             continue;
-          
+
           status = apr_bucket_read(bucket, &data, &len, APR_BLOCK_READ);
           if (status != APR_SUCCESS)
             goto cleanup;
-          
+
           total_read += len;
           if (limit_req_body && total_read > limit_req_body)
             {
@@ -739,10 +740,10 @@ request_body_to_string(svn_string_t **re
               result = HTTP_REQUEST_ENTITY_TOO_LARGE;
               goto cleanup;
             }
-          
+
           svn_stringbuf_appendbytes(buf, data, len);
         }
-      
+
       apr_brigade_cleanup(brigade);
     }
   while (!seen_eos);
@@ -757,7 +758,7 @@ request_body_to_string(svn_string_t **re
 
  cleanup:
   apr_brigade_destroy(brigade);
-  
+
   /* Apache will supply a default error, plus the error log above. */
   return result;
 }

Modified: subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/version.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/version.c?rev=1054005&r1=1054004&r2=1054005&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/version.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/mod_dav_svn/version.c Thu Dec 30 21:27:46 2010
@@ -37,6 +37,7 @@
 #include "svn_props.h"
 #include "svn_dav.h"
 #include "svn_base64.h"
+#include "private/svn_repos_private.h"
 #include "private/svn_dav_protocol.h"
 #include "private/svn_log.h"
 
@@ -917,30 +918,57 @@ dav_svn__checkin(dav_resource *resource,
                                      resource->info->root.txn,
                                      resource->pool);
 
-      if (serr != NULL)
+      if (SVN_IS_VALID_REVNUM(new_rev))
+        {
+          if (serr)
+            {
+              const char *post_commit_err = svn_repos__post_commit_error_str
+                                              (serr, resource->pool);
+              ap_log_perror(APLOG_MARK, APLOG_ERR, serr->apr_err,
+                            resource->pool,
+                            "commit of r%ld succeeded, but an error occurred "
+                            "after the commit: '%s'",
+                            new_rev,
+                            post_commit_err);
+              svn_error_clear(serr);
+              serr = SVN_NO_ERROR;
+            }
+        }
+      else
         {
           const char *msg;
           svn_error_clear(svn_fs_abort_txn(resource->info->root.txn,
                                            resource->pool));
 
-          if (serr->apr_err == SVN_ERR_FS_CONFLICT)
-            {
-              msg = apr_psprintf(resource->pool,
-                                 "A conflict occurred during the CHECKIN "
-                                 "processing. The problem occurred with  "
-                                 "the \"%s\" resource.",
-                                 conflict_msg);
-            }
-          else
-            msg = "An error occurred while committing the transaction.";
-
           /* Attempt to destroy the shared activity. */
           dav_svn__delete_activity(resource->info->repos, shared_activity);
           apr_pool_userdata_set(NULL, DAV_SVN__AUTOVERSIONING_ACTIVITY,
                                 NULL, resource->info->r->pool);
 
-          return dav_svn__convert_err(serr, HTTP_CONFLICT, msg,
-                                      resource->pool);
+          if (serr)
+            {
+              if (serr->apr_err == SVN_ERR_FS_CONFLICT)
+                {
+                  msg = apr_psprintf(resource->pool,
+                                     "A conflict occurred during the CHECKIN "
+                                     "processing. The problem occurred with  "
+                                     "the \"%s\" resource.",
+                                     conflict_msg);
+                }
+              else
+                msg = "An error occurred while committing the transaction.";
+
+              return dav_svn__convert_err(serr, HTTP_CONFLICT, msg,
+                                          resource->pool);
+            }
+          else
+            {
+              return dav_svn__new_error(resource->pool,
+                                        HTTP_INTERNAL_SERVER_ERROR,
+                                        0,
+                                        "Commit failed but there was no error "
+                                        "provided.");
+            }
         }
 
       /* Attempt to destroy the shared activity. */
@@ -1322,7 +1350,7 @@ merge(dav_resource *target,
   svn_fs_txn_t *txn;
   const char *conflict;
   svn_error_t *serr;
-  char *post_commit_err = NULL;
+  const char *post_commit_err = NULL;
   svn_revnum_t new_rev;
   apr_hash_t *locks;
   svn_boolean_t disable_merge_response = FALSE;
@@ -1381,36 +1409,51 @@ merge(dav_resource *target,
   serr = svn_repos_fs_commit_txn(&conflict, source->info->repos->repos,
                                  &new_rev, txn, pool);
 
-  /* If the error was just a post-commit hook failure, we ignore it.
-     Otherwise, we deal with it.
-     ### TODO: Figure out if the MERGE response can grow a means by
+  /* ### TODO: Figure out if the MERGE response can grow a means by
      which to marshal back both the success of the commit (and its
      commit info) and the failure of the post-commit hook.  */
-  if (serr && (serr->apr_err != SVN_ERR_REPOS_POST_COMMIT_HOOK_FAILED))
+  if (SVN_IS_VALID_REVNUM(new_rev))
+    {
+      if (serr)
+        {
+          /* ### Any error from svn_fs_commit_txn() itself, and not
+             ### the post-commit script, should be reported to the
+             ### client some other way than hijacking the post-commit
+             ### error message.*/
+          post_commit_err = svn_repos__post_commit_error_str(serr, pool);
+          svn_error_clear(serr);
+          serr = SVN_NO_ERROR;
+        }
+    }
+  else
     {
-      const char *msg;
       svn_error_clear(svn_fs_abort_txn(txn, pool));
 
-      if (serr->apr_err == SVN_ERR_FS_CONFLICT)
+      if (serr)
         {
-          /* ### we need to convert the conflict path into a URI */
-          msg = apr_psprintf(pool,
-                             "A conflict occurred during the MERGE "
-                             "processing. The problem occurred with the "
-                             "\"%s\" resource.",
-                             conflict);
+          const char *msg;
+          if (serr->apr_err == SVN_ERR_FS_CONFLICT)
+            {
+              /* ### we need to convert the conflict path into a URI */
+              msg = apr_psprintf(pool,
+                                 "A conflict occurred during the MERGE "
+                                 "processing. The problem occurred with the "
+                                 "\"%s\" resource.",
+                                 conflict);
+            }
+          else
+            msg = "An error occurred while committing the transaction.";
+
+          return dav_svn__convert_err(serr, HTTP_CONFLICT, msg, pool);
         }
       else
-        msg = "An error occurred while committing the transaction.";
-
-      return dav_svn__convert_err(serr, HTTP_CONFLICT, msg, pool);
-    }
-  else if (serr)
-    {
-      serr = svn_error_purge_tracing(serr);
-      if (serr->child && serr->child->message)
-        post_commit_err = apr_pstrdup(pool, serr->child->message);
-      svn_error_clear(serr);
+        {
+          return dav_svn__new_error(pool,
+                                    HTTP_INTERNAL_SERVER_ERROR,
+                                    0,
+                                    "Commit failed but there was no error "
+                                    "provided.");
+        }
     }
 
   /* Commit was successful, so schedule deltification. */

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=1054005&r1=1054004&r2=1054005&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] Thu Dec 30 21:27:46 2010
@@ -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-11-13 23:36+0800\n"
-"PO-Revision-Date: 2010-11-13 15:59+0800\n"
+"POT-Creation-Date: 2010-12-26 22:59+0800\n"
+"PO-Revision-Date: 2010-12-26 22:59+0800\n"
 "Last-Translator: Subversion Developers <de...@subversion.apache.org>\n"
 "Language-Team: Simplified Chinese <de...@subversion.apache.org>\n"
 "Language: \n"
@@ -951,10 +951,6 @@ msgid "'%s' is not a local path"
 msgstr "“%s”不是本地路径"
 
 #, c-format
-msgid "Illegal repository URL '%s'"
-msgstr "非法版本库 URL “%s”"
-
-#, c-format
 msgid "Cannot calculate blame information for binary file '%s'"
 msgstr "无法为二进制文件 “%s” 计算追溯信息"
 
@@ -1127,10 +1123,6 @@ msgid ""
 msgstr "来源与目标似乎不在同一版本库。"
 
 #, c-format
-msgid "Cannot move URL '%s' into itself"
-msgstr "无法移动 URL “%s” 到本身"
-
-#, c-format
 msgid "Path '%s' does not exist in revision %ld"
 msgstr "路径 “%s” 不在版本 %ld 中"
 
@@ -1171,6 +1163,10 @@ msgid "Moves between the working copy an
 msgstr "不支持在工作副本和版本库之间移动"
 
 #, c-format
+msgid "Cannot move URL '%s' into itself"
+msgstr "无法移动 URL “%s” 到本身"
+
+#, c-format
 msgid "Cannot move path '%s' into itself"
 msgstr "无法移动路径 “%s” 到本身"
 
@@ -1193,10 +1189,6 @@ msgid ""
 msgstr ""
 "不能在 “%s” 删除外部引用的文件;请修改或删除创建它的属性 “svn:externals”"
 
-#, c-format
-msgid "Cannot mix repository and working copy targets"
-msgstr "不能混合版本库和工作副本目标"
-
 msgid "Cannot specify revisions (except HEAD) with move operations"
 msgstr "移动操作不能指定版本"
 
@@ -1622,6 +1614,10 @@ msgstr ""
 msgid "URL '%s' is not a child of repository root URL '%s'"
 msgstr "URL “%s” 不是版本库根 URL “%s” 的子节点"
 
+#, c-format
+msgid "Cannot mix repository and working copy targets"
+msgstr "不能混合版本库和工作副本目标"
+
 msgid "Compression of svndiff data failed"
 msgstr "压缩 svndiff 数据失败"
 
@@ -2340,10 +2336,6 @@ msgid "Unsupported FS loader version (%d
 msgstr "不支持的FSFS之FS加载器版本 (%d)"
 
 #, c-format
-msgid "Revision file '%s' does not exist, and r%ld is not packed"
-msgstr "版本文件 “%s” 不存在,并且 r%ld 没有被打包"
-
-#, c-format
 msgid "Can't grab FSFS txn list mutex"
 msgstr "不能获取文件系统事务列表互斥体"
 
@@ -2566,7 +2558,8 @@ msgstr "“%s” 的 origin 节点取值
 msgid "No such transaction"
 msgstr "无此事务"
 
-msgid "FS format too old to pack, please upgrade."
+#, fuzzy, c-format
+msgid "FSFS format (%d) too old to pack, please upgrade."
 msgstr "要打包的文件系统格式太旧,请升级。"
 
 #, c-format
@@ -2585,6 +2578,10 @@ msgstr "不能解析锁/条目的哈希� msgid "Lock failed: newer version of '%s' exists"
 msgstr "加锁失败: “%s”的新版本已经存在"
 
+#, fuzzy
+msgid "Couldn't open rep-cache database"
+msgstr "无法打开版本库"
+
 msgid "Only SHA1 checksums can be used as keys in the rep_cache table.\n"
 msgstr "在表 rep_cache 中,只有 SHA1 校验和才能用作键。\n"
 
@@ -2645,6 +2642,10 @@ msgid "Mismatched RA version for '%s': f
 msgstr "“%s” 的 RA 版本不匹配: 找到 %d.%d.%d%s,期望 %d.%d.%d%s"
 
 #, c-format
+msgid "Illegal repository URL '%s'"
+msgstr "非法版本库 URL “%s”"
+
+#, c-format
 msgid "Invalid config: unknown HTTP library '%s'"
 msgstr "无效配置: 未知的 HTTP 库“%s”"
 
@@ -2686,6 +2687,18 @@ msgstr "无法识别的URL方案(一般� msgid "Retrieval of mergeinfo unsupported by '%s'"
 msgstr "“%s” 不支持取回合并信息"
 
+#, fuzzy, c-format
+msgid "Lock was stolen by '%s'; unable to remove it"
+msgstr "svnsync 的锁被窃;不能删除"
+
+#, fuzzy, c-format
+msgid "Unable to determine local hostname"
+msgstr "无法获取本地主机名"
+
+#, c-format
+msgid "Couldn't get lock on destination repos after %d attempts"
+msgstr "尝试 %d 次后,对目标版本库加锁失败"
+
 #. ----------------------------------------------------------------
 #. ** The RA vtable routines **
 msgid "Module for accessing a repository on local disk."
@@ -3505,6 +3518,23 @@ msgstr ""
 "结果的校验和不匹配: \n"
 "(%s)"
 
+msgid "(no error)"
+msgstr "(没有错误)"
+
+msgid "post-commit hook failed with no error message"
+msgstr "调用 post-commit 钩子失败,没有错误信息"
+
+#, c-format
+msgid "post commit FS processing had error '%s' and %s"
+msgstr "调用 post-commit 钩子失败,错误是 '%s' 和 %s"
+
+msgid "(no error message)"
+msgstr "(没有错误信息)"
+
+#, c-format
+msgid "post-commit FS processing had error '%s'."
+msgstr "调用 post-commit 钩子失败,错误是 '%s'。"
+
 msgid "Unable to open root of edit"
 msgstr "无法打开根来编辑"
 
@@ -3694,26 +3724,10 @@ msgid " with no output."
 msgstr " 没有输出。"
 
 #, c-format
-msgid "Can't create pipe for hook '%s'"
-msgstr "无法为钩子“%s”创建管道"
-
-#, c-format
-msgid "Can't make pipe read handle non-inherited for hook '%s'"
-msgstr "无法为钩子“%s”创建非继承的管道读句柄"
-
-#, c-format
-msgid "Can't make pipe write handle non-inherited for hook '%s'"
-msgstr "无法为钩子“%s”创建非继承的管道写句柄"
-
-#, c-format
 msgid "Can't create null stdout for hook '%s'"
 msgstr "无法为钩子“%s”创建空标准输出"
 
 #, c-format
-msgid "Error closing write end of stderr pipe"
-msgstr "关闭写标准错误管道出错"
-
-#, c-format
 msgid "Failed to start '%s' hook"
 msgstr "启动钩子“%s”失败"
 
@@ -4605,9 +4619,15 @@ msgstr "“%s”的密码: "
 msgid "yes"
 msgstr "yes"
 
+msgid "y"
+msgstr "y"
+
 msgid "no"
 msgstr "no"
 
+msgid "n"
+msgstr "n"
+
 msgid "Please type 'yes' or 'no': "
 msgstr "请输入 'yes' 或 'no': "
 
@@ -5049,6 +5069,10 @@ msgid "'%s' is not of the right kind"
 msgstr "“%s” 的类型错误"
 
 #, c-format
+msgid "No copyfrom URL for '%s'"
+msgstr "'%s' 没有 copyfrom URL"
+
+#, c-format
 msgid "No default entry in directory '%s'"
 msgstr "在目录“%s”中没有默认入口"
 
@@ -5065,10 +5089,6 @@ msgid "Path '%s' ends in '%s', which is 
 msgstr "路径“%s”以“%s”结束,此操作不支持"
 
 #, c-format
-msgid "Working copy format of '%s' is too old (%d); please run 'svn upgrade'"
-msgstr "'%s' 的工作副本格式太旧 (%d); 请执行 'svn upgrade'"
-
-#, c-format
 msgid "Working copy '%s' locked"
 msgstr "工作副本“%s”已经锁定"
 
@@ -5490,15 +5510,31 @@ msgstr "由于没有 URL,所以工作� msgid "Error parsing tree conflict skel"
 msgstr "解析树冲突骨架出错"
 
+#, c-format
+msgid ""
+"The working copy at '%s' is format 22 with WORKING nodes; use a format 22 "
+"client to diff/revert before using this client"
+msgstr ""
+"位于 '%s' 的工作副本是有 WORKING 节点的格式 22;请先使用支持格式 22 的客户端比"
+"较/还原后,再使用此客户端"
+
 msgid ""
 "Cannot upgrade with existing logs; please run 'svn cleanup' with Subversion "
 "1.6"
 msgstr "有日志存在时无法升级;请使用 Subversion 1.6 执行“svn cleanup”"
 
-#, c-format
+msgid "(unreleased development version)"
+msgstr "(未发布的开发版本)"
+
+#, fuzzy, c-format
+msgid "Working copy '%s' is too old (format %d, created by Subversion %s)"
+msgstr "'%s' 的工作副本格式太旧 (%d); 请执行 'svn upgrade'"
+
+#, fuzzy, c-format
 msgid ""
-"The working copy '%s' is at format 18; use 'tools/dev/wc-ng/bump-to-19.py' to "
-"upgrade it"
+"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' 升级"
 
 #, c-format
@@ -5556,10 +5592,6 @@ msgid "Corrupt data for '%s'"
 msgstr "'%s' 的数据损坏"
 
 #, c-format
-msgid "Could not find node '%s' for recording file information."
-msgstr "不能为记录文件信息找到节点“%s”"
-
-#, c-format
 msgid "Expected node '%s' to be added."
 msgstr "期望节点“%s”被增加。"
 
@@ -5574,6 +5606,10 @@ msgid ""
 msgstr "'%s' 的属性处于不确定的状态,不能更新。详情参见问题 #2530。"
 
 #, c-format
+msgid "Insufficient NODES rows for '%s'"
+msgstr "'%s' 的节点行数不足"
+
+#, c-format
 msgid "Repository '%s' not found in the database"
 msgstr "在数据库中找不到版本库“%s”"
 
@@ -5593,6 +5629,10 @@ msgstr "'%s' 已经通过 '%s' 锁定。
 msgid "Working copy not locked at '%s'."
 msgstr "工作副本 '%s' 未被锁定。"
 
+#, fuzzy, c-format
+msgid "Modification of '%s' already exists"
+msgstr "目的 “%s” 已存在"
+
 #, c-format
 msgid "'%s' has no BASE_NODE"
 msgstr "“%s” 没有 BASE_NODE"
@@ -5905,7 +5945,8 @@ msgid ""
 "overwrite"
 msgstr "目的目录已存在;请删除目录或用 --force 来覆盖目录"
 
-msgid "Failure occured processing one or more externals definitions"
+#, fuzzy
+msgid "Failure occurred processing one or more externals definitions"
 msgstr "处理一个或更多的外部定义失败"
 
 #, c-format
@@ -7179,10 +7220,14 @@ msgid ""
 "    svn:externals  - A newline separated list of module specifiers,\n"
 "      each of which consists of a URL and a relative directory path,\n"
 "      similar to the syntax of the 'svn checkout' command:\n"
-"        http://example.com/repos/zag foo/bar\n"
-"      An optional peg revision may be appended to the URL to pin the\n"
+"        http://example.com/repos/zig foo/bar\n"
+"      A revision to check out can optionally be specified to pin the\n"
 "      external to a known revision:\n"
-"        http://example.com/repos/zig@42 foo\n"
+"        -r25 http://example.com/repos/zig foo/bar\n"
+"      To unambiguously identify an element at a path which has been\n"
+"      deleted (possibly even deleted multiple times in its history),\n"
+"      an optional peg revision can be appended to the URL:\n"
+"        -r25 http://example.com/repos/zig@42 foo/bar\n"
 "      Relative URLs are indicated by starting the URL with one\n"
 "      of the following strings:\n"
 "        ../  to the parent directory of the extracted external\n"
@@ -7815,6 +7860,9 @@ msgstr "--accept=%s 与 --non-interactiv
 msgid "Try 'svn help' for more info"
 msgstr "请使用 “svn help” 以得到更多信息"
 
+msgid "Please see the 'svn upgrade' command"
+msgstr "请参阅命令 'svn upgrade'"
+
 msgid ""
 "svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)\n"
 msgstr "svn: 运行“svn cleanup”删除锁定 (输入“svn help cleanup”得到用法)\n"
@@ -7949,6 +7997,10 @@ msgstr ""
 msgid "Error handling externals definition for '%s':"
 msgstr "处理外部引用“%s”时出错:"
 
+#, fuzzy, c-format
+msgid "Updating '%s' ...\n"
+msgstr "已升级的“%s”。\n"
+
 #, c-format
 msgid "Exported external at revision %ld.\n"
 msgstr "已导出版本 %ld 的外部项目。\n"
@@ -8284,6 +8336,17 @@ msgstr "未版本控制"
 msgid "local %s, incoming %s upon %s"
 msgstr "本地 %s,动作 %s,操作 %s"
 
+#, fuzzy, c-format
+msgid "Summary of updates:\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
+msgid "  Updated '%s' to r%ld.\n"
+msgstr "更新到版本 %ld。\n"
+
 #, c-format
 msgid ""
 "\n"
@@ -8436,6 +8499,9 @@ msgstr "在转存输出中使用差异"
 msgid "bypass the repository hook system"
 msgstr "跳过版本库钩子系统"
 
+msgid "bypass property validation logic"
+msgstr "跳过属性校验逻辑"
+
 msgid "no progress (only errors) to stderr"
 msgstr "在标准错误输出不显示进度 (仅错误)"
 
@@ -8821,6 +8887,13 @@ msgstr ""
 "\n"
 
 msgid ""
+"Invalid property value found in dumpstream; consider repairing the source or "
+"using --bypass-prop-validation while loading."
+msgstr ""
+"在转储流中发现非法的属性值;考虑修复,或者在加载时使用选项 '--bypass-prop-"
+"validation' 。"
+
+msgid ""
 "Failed to get exclusive repository access; perhaps another process\n"
 "such as httpd, svnserve or svn has it open?"
 msgstr ""
@@ -9402,7 +9475,6 @@ msgstr "属性 “%s” 不在路径 “
 msgid "Property '%s' not found on path '%s' in transaction %s"
 msgstr "属性 “%s” 不在路径 “%s” 中,事务 “%s”"
 
-#, c-format
 msgid "Missing repository path argument"
 msgstr "未提供版本库路径参数"
 
@@ -9424,9 +9496,6 @@ msgstr ""
 "\n"
 "可用的子命令: \n"
 
-msgid "Missing path argument"
-msgstr "丢失路径参数"
-
 #, c-format
 msgid ""
 "Comment (%i line):\n"
@@ -9474,33 +9543,24 @@ msgstr ""
 msgid "Try 'svnlook help' for more info"
 msgstr "请使用“svnlook help”以得到更多信息"
 
-msgid ""
-"Target server does not support atomic revision property edits; consider "
-"upgrading it to 1.7 or using an external locking program"
-msgstr ""
-"目标服务器不支持原子版本的属性编辑; 请考虑升级到 1.7 或者使用外部加锁程序"
-
-#, c-format
-msgid "Can't get local hostname"
-msgstr "无法获取本地主机名"
-
 #, c-format
 msgid "Failed to get lock on destination repos, currently held by '%s'\n"
 msgstr "从目标版本库获得锁失败,当前被“%s”持有\n"
 
-#, c-format
-msgid "Couldn't get lock on destination repos after %d attempts"
-msgstr "尝试 %d 次后,对目标版本库加锁失败"
-
-msgid "\"svnrdump load\"'s lock was stolen; can't remove it"
-msgstr "\"svnrdump load\" 的锁被窃;不能删除"
+#, fuzzy
+msgid ""
+"Target server does not support atomic revision property edits; consider "
+"upgrading it to 1.7."
+msgstr ""
+"目标服务器不支持原子版本的属性编辑; 请考虑升级到 1.7 或者使用外部加锁程序"
 
+#, fuzzy
 msgid ""
 "usage: svnrdump dump URL [-r LOWER[:UPPER]]\n"
 "\n"
-"Dump revisions LOWER to UPPER of repository at remote URL to stdout in a "
-"'dumpfile' portable format.\n"
-"If only LOWER is given, dump that one revision.\n"
+"Dump revisions LOWER to UPPER of repository at remote URL to stdout\n"
+"in a 'dumpfile' portable format.  If only LOWER is given, dump that\n"
+"one revision.\n"
 msgstr ""
 "用法: svnrdump dump URL [-r LOWER[:UPPER]]\n"
 "\n"
@@ -9553,13 +9613,25 @@ msgstr ""
 "\n"
 "可用的子命令: \n"
 
-#, c-format
-msgid "Revision %ld does not exist.\n"
+msgid "Unsupported revision specifier used; use only integer values or 'HEAD'"
+msgstr "使用了不支持的版本格式;请只使用 'HEAD' 或整数"
+
+#, fuzzy, c-format
+msgid "Revision '%ld' does not exist"
 msgstr "版本 %ld 不存在。\n"
 
+msgid ""
+"LOWER revision cannot be greater than UPPER revision; consider reversing your "
+"revision range"
+msgstr "LOWER 版本号不能大于 UPPER 版本号;考虑将你的版本范围翻转"
+
 #, c-format
-msgid "LOWER cannot be greater than UPPER.\n"
-msgstr "LOWER 不能大于 UPPER。\n"
+msgid ""
+"Subcommand '%s' doesn't accept option '%s'\n"
+"Type 'svnrdump help %s' for usage.\n"
+msgstr ""
+"子命令“%s”不接受选项“%s”\n"
+"输入“svnrdump help %s”得到用法。\n"
 
 #, c-format
 msgid "Can't get hostname"
@@ -9581,10 +9653,10 @@ msgid "tunnel mode"
 msgstr "隧道模式"
 
 msgid "listen-once mode (useful for debugging)"
-msgstr "监听一次方式(调试用)"
+msgstr "监听一次模式(调试用)"
 
 msgid "Windows service mode (Service Control Manager)"
-msgstr "Windows 服务方式(服务管理器)"
+msgstr "Windows 服务模式(服务管理器)"
 
 msgid "root of directory to serve"
 msgstr "服务的根目录"
@@ -9600,28 +9672,28 @@ msgid ""
 "                             [mode: daemon, service, listen-once]"
 msgstr ""
 "监听端口\n"
-"                             [方式: daemon, service, listen-once]"
+"                             [模式: daemon, service, listen-once]"
 
 msgid ""
 "listen port\n"
 "                             [mode: daemon, listen-once]"
 msgstr ""
 "监听端口\n"
-"                             [方式: daemon, listen-once]"
+"                             [模式: daemon, listen-once]"
 
 msgid ""
 "listen hostname or IP address\n"
 "                             [mode: daemon, service, listen-once]"
 msgstr ""
 "监听主机名称或IP地址\n"
-"                             [方式: daemon, service, listen-once]"
+"                             [模式: daemon, service, listen-once]"
 
 msgid ""
 "listen hostname or IP address\n"
 "                             [mode: daemon, listen-once]"
 msgstr ""
 "监听主机名称或IP地址\n"
-"                             [方式: daemon, listen-once]"
+"                             [模式: daemon, listen-once]"
 
 msgid ""
 "prefer IPv6 when resolving the listen hostname\n"
@@ -9631,18 +9703,22 @@ msgid ""
 "mode.\n"
 "                             Use inetd mode or tunnel mode if you need this.]"
 msgstr ""
+"在使用主机名称监听时,首选 IPv6\n"
+"                             [默认首选 IPv4。不支持在守护进程模式中同时使用 "
+"IPv4 和 IPv6\n"
+"                             如果需要,请使用 inetd 模式或隧道模式。]"
 
 #. ### Making the assumption here that WIN32 never has fork and so
 #. * ### this option never exists when --service exists.
 msgid "use threads instead of fork [mode: daemon]"
-msgstr "使用线程代替进程 [方式: daemon]"
+msgstr "使用线程代替进程 [模式: 守护进程]"
 
 msgid ""
 "run in foreground (useful for debugging)\n"
 "                             [mode: daemon]"
 msgstr ""
 "在前台运行(调试用)\n"
-"                             [方式: daemon]"
+"                             [模式: daemon]"
 
 msgid "svnserve log file"
 msgstr "svnserve 日志文件"
@@ -9652,21 +9728,21 @@ msgid ""
 "                             [mode: daemon, listen-once, service]"
 msgstr ""
 "写进程 PID 到文件 ARG\n"
-"                             [方式: daemon, listen-once, service]"
+"                             [模式: daemon, listen-once, service]"
 
 msgid ""
 "write server process ID to file ARG\n"
 "                             [mode: daemon, listen-once]"
 msgstr ""
 "写进程 PID 到文件 ARG\n"
-"                             [方式: daemon, listen-once]"
+"                             [模式: daemon, listen-once]"
 
 msgid ""
 "tunnel username (default is current uid's name)\n"
 "                             [mode: tunnel]"
 msgstr ""
 "隧道用户名(默认是当前UID对应的用户名)\n"
-"                             [方式: tunnel]"
+"                             [模式: tunnel]"
 
 #, c-format
 msgid "Type '%s --help' for usage.\n"
@@ -9879,6 +9955,10 @@ msgid ""
 "                                 NUMBER       revision number\n"
 "                                 'HEAD'       latest in repository"
 msgstr ""
+"对版本 ARG (或版本范围 ARG1:ARG2) 操作\n"
+"                             版本可以是下述格式之一:\n"
+"                                 整数         版本号\n"
+"                                 'HEAD'       最新版本"
 
 msgid "allow a non-empty destination repository"
 msgstr "允许非空目标版本库"
@@ -9915,14 +9995,35 @@ msgid "connect to sync repository with p
 msgstr "使用密码 ARG 连接目的版本库"
 
 msgid ""
-"Disable built-in locking. Use of this option can\n"
+"Disable built-in locking.  Use of this option can\n"
 "                             corrupt the mirror unless you ensure that no "
 "other\n"
 "                             instance of svnsync is running concurrently."
 msgstr ""
+"禁用内置锁。使用此选项可能\n"
+"                             会损坏镜像,除非你能确认没有其它 svnsync\n"
+"                             实例同时运行。"
 
-msgid "svnsync's lock was stolen; can't remove it"
-msgstr "svnsync 的锁被窃;不能删除"
+msgid ""
+"Steal locks as necessary.  Use, with caution,\n"
+"                             if your mirror repository contains stale locks\n"
+"                             and is not being concurrently accessed by "
+"another\n"
+"                             svnsync instance."
+msgstr ""
+"在需要时窃取锁。请小心使用\n"
+"                             如果你的镜像包含过时的锁,并且没有其它 svnsync\n"
+"                             实例同时运行。"
+
+msgid ""
+"Target server does not support atomic revision property edits; consider "
+"upgrading it to 1.7 or using an external locking program"
+msgstr ""
+"目标服务器不支持原子版本的属性编辑; 请考虑升级到 1.7 或者使用外部加锁程序"
+
+#, c-format
+msgid "Stole lock previously held by '%s'\n"
+msgstr "窃取被 '%s' 持有的锁\n"
 
 #, c-format
 msgid "Session is rooted at '%s' but the repos root is '%s'"
@@ -10001,7 +10102,7 @@ msgstr "无效的版本号 (%ld)"
 msgid ""
 "Cannot specify revisions via both command-line arguments and the --revision (-"
 "r) option"
-msgstr ""
+msgstr "不能同时使用 "
 
 #, c-format
 msgid "Invalid revision range '%s' provided"
@@ -10044,6 +10145,10 @@ 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 是互斥的"
+
 #, c-format
 msgid ""
 "Subcommand '%s' doesn't accept option '%s'\n"
@@ -10059,7 +10164,7 @@ msgstr "请使用 “svnsync help” 以
 msgid "Type 'svnversion --help' for usage.\n"
 msgstr "使用 “svnversion --help” 得到用法。\n"
 
-#, c-format
+#, fuzzy, c-format
 msgid ""
 "usage: svnversion [OPTIONS] [WC_PATH [TRAIL_URL]]\n"
 "\n"
@@ -10083,8 +10188,10 @@ msgid ""
 "   4123P         partial working copy, from a sparse checkout\n"
 "   4123:4168MS   mixed revision, modified, switched working copy\n"
 "\n"
-"  If invoked on a directory that is not a working copy, an\n"
-"  exported directory say, the program will output 'exported'.\n"
+"  If WC_PATH is an unversioned path, the program will output\n"
+"  'Unversioned directory' or 'Unversioned file'.  If WC_PATH is\n"
+"  an added or copied or moved path, the program will output\n"
+"  'Uncommitted local addition, copy or move'.\n"
 "\n"
 "  If invoked without arguments WC_PATH will be the current directory.\n"
 "\n"
@@ -10143,94 +10250,27 @@ msgstr "“%s” 的类型未知\n"
 msgid "Uncommitted local addition, copy or move%s"
 msgstr "未提交的本地增加,复制或移动 %s"
 
-#~ msgid "Unrecognized logfile element '%s' in '%s'"
-#~ msgstr "有无法识别的日志文件元素 “%s” 在 “%s” 中"
-
-#~ msgid "Target lists to diff may not contain both working copy paths and URLs"
-#~ msgstr "差异比较目标不可同时包含工作副本路径与URL"
-
-#~ msgid "Error modifying entry of '%s'"
-#~ msgstr "修改“%s”的入口出错"
-
-#~ 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"
-#~ "目标在未纳入版本控制的目录中?"
-
-#~ msgid ""
-#~ "Failed to add file '%s': a file from another repository with the same name "
-#~ "already exists"
-#~ msgstr "无法新增文件“%s”: 来自其它版本库的同名文件对象已存在"
-
-#~ msgid ""
-#~ "ignore externals definitions\n"
-#~ "                             [alias: --ie]"
-#~ msgstr ""
-#~ "忽略外部定义\n"
-#~ "                             [alias: --ie]"
-
-#~ msgid "Error removing lock from entry for '%s'"
-#~ msgstr "删除条目“%s”的锁出错"
-
-#~ msgid ""
-#~ "Cannot revert addition of current directory; please try again from the "
-#~ "parent directory"
-#~ msgstr "无法恢复增加的当前目录;请从父目录重试"
+#~ msgid "Removing '%s' from changelist '%s'."
+#~ msgstr "删除 “%s”,从修改列表 “%s”。"
 
-#~ msgid "Can't chmod '%s'"
-#~ msgstr "无法修改“%s”的存取权限"
+#~ msgid "Error getting file size on '%s'"
+#~ msgstr "取得“%s”的文件大小出错"
 
 #~ msgid ""
-#~ "specify automatic conflict resolution source\n"
-#~ "                            ('base', 'working', 'mine-conflict',\n"
-#~ "                             'theirs-conflict', 'mine-full', 'theirs-full')"
+#~ "merge only mergeinfo differences\n"
+#~ "                             [alias: --ro]"
 #~ msgstr ""
-#~ "指定自动解决冲突动作的源\n"
-#~ "                            ('base', 'working', 'mine-conflict',\n"
-#~ "                             'theirs-conflict', 'mine-full', 'theirs-full')"
-
-#~ msgid "In directory '%s'"
-#~ msgstr "在目录“%s”中"
-
-#~ msgid "Error recording tree conflict on '%s'"
-#~ msgstr "在 '%s' 中记录树冲突出错"
+#~ "只合并修改信息的差异\n"
+#~ "                             [alias: --ro]"
 
-#~ msgid ""
-#~ "Failed to add file '%s': a non-file object of the same name already exists"
-#~ msgstr "无法新增文件“%s”: 同名非文件对象已存在"
+#~ msgid "Unable to make any directories"
+#~ msgstr "无法创建任何目录"
 
 #~ msgid "Parent(s) of '%s' should have been present."
 #~ msgstr "'%s' 的父亲应该存在。"
 
-#~ msgid "Path '%s' is now a member of changelist '%s'.\n"
-#~ msgstr "路径“%s”现在是修改列表“%s”的成员。\n"
-
-#~ 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 "There is no work queue for '%s'."
-#~ msgstr "没有 '%s' 的工作队列。"
-
-#~ msgid "Deleted: %s\n"
-#~ msgstr "已删除: %s\n"
-
-#~ msgid "'%s' has no WORKING_NODE"
-#~ msgstr "“%s” 没有 WORKING_NODE"
-
-#~ msgid ""
-#~ "Failed to add directory '%s': an unversioned directory of the same name "
-#~ "already exists"
-#~ msgstr "无法新增目录“%s”: 同名未版本控制目录对象已存在"
-
-#~ msgid "Did not expect '%s' to be a working copy root"
-#~ msgstr "不期望 “%s” 是工作副本根目录"
+#~ msgid "Missing path argument"
+#~ msgstr "丢失路径参数"
 
 #~ msgid ""
 #~ "usage: svnsync copy-revprops DEST_URL [REV[:REV2]]\n"
@@ -10259,46 +10299,95 @@ msgstr "未提交的本地增加,复� #~ "REV 和 REV2 必须是已经传输到目的版本库的版本。你可以使用 \"HEAD\" \n"
 #~ "来指代最后一个传输的版本。\n"
 
-#~ msgid "Error in post-commit clean-up (details follow):"
-#~ msgstr "清理 post-commit 出错 (细节如下): "
+#~ msgid "Missing 'timestamp' attribute in '%s'"
+#~ msgstr "“%s”丢失“timestamp”属性"
 
-#, fuzzy
 #~ msgid ""
-#~ "keep path in working copy\n"
-#~ "                             [alias: --kl]"
+#~ "ignore externals definitions\n"
+#~ "                             [alias: --ie]"
 #~ msgstr ""
 #~ "忽略外部定义\n"
-#~ "                             [aliases: --ie]"
+#~ "                             [alias: --ie]"
+
+#~ msgid "'%s' is marked as absent, so it cannot be scheduled for addition"
+#~ msgstr "“%s”被标记为不存在,所以无法加入增加调度"
 
 #~ msgid ""
-#~ "Can't add '%s' to deleted directory; try undeleting its parent directory "
-#~ "first"
-#~ msgstr "无法增加“%s”至已删除的目录;请先恢复其父目录"
+#~ "Can't replace '%s' in deleted directory; try undeleting its parent "
+#~ "directory first"
+#~ msgstr "无法在已删除的目录中替换“%s”;请先恢复其父目录"
+
+#~ msgid ""
+#~ "read user configuration files from directory ARG\n"
+#~ "                             [alias: --cd]"
+#~ msgstr ""
+#~ "从目录 ARG 读取用户配置文件\n"
+#~ "                             [alias: --cd]"
 
 #~ msgid "Path '%s' is not a child of '%s'"
 #~ msgstr "路径 '%s' 不是 '%s' 的孩子"
 
-#~ msgid "Error getting 'affected time' of '%s'"
-#~ msgstr "取得“%s”的“affected time”出错"
+#~ 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 "Error writing to '%s'"
-#~ msgstr "写入“%s”出错"
+#~ msgid "Deleted: %s\n"
+#~ msgstr "已删除: %s\n"
+
+#~ msgid "Error replacing text-base of '%s'"
+#~ msgstr "替换“%s”的文件参考基础出错"
 
-#, fuzzy
 #~ msgid ""
-#~ "lump-merge all of source URL's unmerged changes\n"
-#~ "                             [alias: --ri]"
+#~ "specify automatic conflict resolution source\n"
+#~ "                            ('base', 'working', 'mine-conflict',\n"
+#~ "                             'theirs-conflict', 'mine-full', 'theirs-full')"
 #~ msgstr ""
-#~ "只能对修改列表 ARG 成员操作\n"
-#~ "                             [aliases: --cl]"
+#~ "指定自动解决冲突动作的源\n"
+#~ "                            ('base', 'working', 'mine-conflict',\n"
+#~ "                             'theirs-conflict', 'mine-full', 'theirs-full')"
 
-#~ msgid "Unable to make any directories"
-#~ msgstr "无法创建任何目录"
+#~ 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 "Target lists to diff may not contain both working copy paths and URLs"
+#~ msgstr "差异比较目标不可同时包含工作副本路径与URL"
 
 #~ msgid ""
-#~ "Failed to add file '%s': an unversioned file of the same name already "
-#~ "exists"
-#~ msgstr "增加文件 '%s' 失败: 同名未版本控制的文件已存在"
+#~ "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"
+#~ "                指定 -p0 不修改路径。指定 -p1 会将路径 doc/fudge/crunchy."
+#~ "html\n"
+#~ "                被转换为 fudge/crunchy.html。指定 -p2 会得到 crunchy."
+#~ "html 。"
+
+#~ msgid "Can't make pipe read handle non-inherited for hook '%s'"
+#~ msgstr "无法为钩子“%s”创建非继承的管道读句柄"
+
+#~ msgid "URL '%s' is not properly URI-encoded"
+#~ msgstr "URL“%s”不是正确的URI编码"
 
 #, fuzzy
 #~ msgid ""
@@ -10308,57 +10397,217 @@ msgstr "未提交的本地增加,复� #~ "忽略外部定义\n"
 #~ "                             [aliases: --ie]"
 
+#~ msgid "Modified: %s\n"
+#~ msgstr "已修改: %s\n"
+
+#~ msgid "Error writing to '%s'"
+#~ 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"
+#~ msgstr ""
+#~ "ARG (一些命令也接受ARG1:ARG2范围)\n"
+#~ "                             版本参数可以是如下之一: \n"
+#~ "                                NUMBER       版本号\n"
+#~ "                                '{' DATE '}' 在指定时间以后的版本\n"
+#~ "                                'HEAD'       版本库中的最新版本\n"
+#~ "                                'BASE'       工作副本的基线版本\n"
+#~ "                                'COMMITTED'  最后提交或基线之前\n"
+#~ "                                'PREV'       COMMITTED的前一版本"
+
+#, fuzzy
+#~ msgid ""
+#~ "keep path in working copy\n"
+#~ "                             [alias: --kl]"
+#~ 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 "不能复兴到非全部无限制深度的工作副本"
+
+#~ 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 ""
+#~ "Only SHA1 checksums can be used as keys in the pristine file storage.\n"
+#~ msgstr "在原始的文件存储中,只有 SHA1 校验和才能用作键。\n"
+
+#~ msgid "Error recording tree conflict on '%s'"
+#~ msgstr "在 '%s' 中记录树冲突出错"
+
+#, fuzzy
+#~ msgid ""
+#~ "specify which collection of revisions to display\n"
+#~ "                             ('merged', 'eligible')\n"
+#~ "                             [alias: --sr]"
+#~ msgstr ""
+#~ "指定显示哪个版本集合\n"
+#~ "                             ('merged', 'eligible')"
+
+#~ msgid ""
+#~ "Cannot revert addition of current directory; please try again from the "
+#~ "parent directory"
+#~ msgstr "无法恢复增加的当前目录;请从父目录重试"
+
+#~ msgid "Path '%s' is no longer a member of a changelist.\n"
+#~ msgstr "路径“%s”不再是修改列表的成员。\n"
+
+#~ 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"
+#~ "目标在未纳入版本控制的目录中?"
+
+#~ msgid ""
+#~ "set revision property ARG in new revision\n"
+#~ "                             using the name[=value] format"
+#~ msgstr ""
+#~ "在新版本设置版本属性 ARG\n"
+#~ "                使用格式 name[=value]"
+
+#~ msgid "LOWER cannot be greater than UPPER.\n"
+#~ msgstr "LOWER 不能大于 UPPER。\n"
+
+#~ msgid "Error during add of '%s'"
+#~ msgstr "增加 “%s” 时出错"
+
+#~ msgid "Error closing write end of stderr pipe"
+#~ msgstr "关闭写标准错误管道出错"
+
+#~ 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 "No fetch_func supplied to update_editor"
+#~ msgstr "没有为 update_editor 提供 fetch_func"
+
 #~ msgid "Error parsing diff options"
 #~ msgstr "解析 diff 参数出错"
 
 #~ msgid ""
-#~ "Can't replace '%s' in deleted directory; try undeleting its parent "
-#~ "directory first"
-#~ msgstr "无法在已删除的目录中替换“%s”;请先恢复其父目录"
+#~ "Can't replace '%s' with a node of a differing type; the deletion must be "
+#~ "committed and the parent updated before adding '%s'"
+#~ msgstr ""
+#~ "无法以不同类型的节点来替换 “%s”;在增加 “%s” 前必须提交删除操作并更新父目录"
 
-#~ msgid "Entry '%s' has illegal schedule"
-#~ msgstr "条目“%s”有非法调度"
+#~ msgid ""
+#~ "Failed to add file '%s': an unversioned file of the same name already "
+#~ "exists"
+#~ msgstr "增加文件 '%s' 失败: 同名未版本控制的文件已存在"
 
+#~ msgid "Error getting 'affected time' on '%s'"
+#~ msgstr "取得“%s”的“affected time”出错"
+
+#, fuzzy
 #~ msgid ""
-#~ "set new working copy depth to ARG ('exclude',\n"
-#~ "                            'empty', 'files', 'immediates', or "
-#~ "'infinity')\n"
-#~ "                            [alias: --sd]"
+#~ "lump-merge all of source URL's unmerged changes\n"
+#~ "                             [alias: --ri]"
 #~ msgstr ""
-#~ "设置工作副本的新深度为 ARG(“exclude”,\n"
-#~ "                            “empty”,“files”,“immediates” 或“infinity”)\n"
-#~ "                            [alias: --sd]"
+#~ "只能对修改列表 ARG 成员操作\n"
+#~ "                             [aliases: --cl]"
 
-#~ msgid "Given source URL invalid"
-#~ msgstr "提供的源 URL 非法"
+#~ msgid "Stream doesn't support resetting"
+#~ msgstr "流不支持重置操作"
 
-#~ msgid "Error comparing '%s' and '%s'"
-#~ msgstr "比较“%s”与“%s”出错"
+#~ msgid "Error getting 'affected time' of '%s'"
+#~ msgstr "取得“%s”的“affected time”出错"
 
-#~ msgid "Non-numeric strip argument given"
-#~ msgstr "提供的修剪参数不是数字"
+#~ msgid "Added: %s\n"
+#~ msgstr "已增加: %s\n"
 
 #~ msgid ""
-#~ "specify automatic conflict resolution action\n"
-#~ "                            ('postpone', 'base', 'mine-conflict',\n"
-#~ "                             'theirs-conflict', 'mine-full', 'theirs-"
-#~ "full',\n"
-#~ "                             'edit', 'launch')"
+#~ "Can't add '%s' to deleted directory; try undeleting its parent directory "
+#~ "first"
+#~ msgstr "无法增加“%s”至已删除的目录;请先恢复其父目录"
+
+#, fuzzy
+#~ msgid ""
+#~ "apply the unidiff in reverse\n"
+#~ "                             [alias: --rd]"
 #~ msgstr ""
-#~ "指定自动解决冲突动作\n"
-#~ "                            ('postpone', 'base', 'mine-conflict',\n"
-#~ "                             'theirs-conflict', 'mine-full', 'theirs-"
-#~ "full',\n"
-#~ "                             'edit', 'launch')"
+#~ "忽略外部定义\n"
+#~ "                             [aliases: --ie]"
 
-#~ msgid "Failed to add directory '%s': copyfrom arguments not yet supported"
-#~ msgstr "无法增加目录“%s”:尚不支持 copyfrom 参数"
+#~ msgid "Error in post-commit clean-up (details follow):"
+#~ msgstr "清理 post-commit 出错 (细节如下): "
 
-#~ msgid "Error modifying entry for '%s'"
-#~ msgstr "修改“%s”的入口出错"
+#~ msgid "'%s' is not a valid revision range"
+#~ msgstr "“%s”不是有效的版本范围"
 
-#~ msgid "No WC table entry"
-#~ msgstr "没有 WC 表入口"
+#~ 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 "'svn upgrade' can only be run from the root of the working copy."
+#~ msgstr "只能在工作副本的根目录执行 'svn upgrade'"
+
+#~ msgid "There is no work queue for '%s'."
+#~ msgstr "没有 '%s' 的工作队列。"
+
+#~ msgid "Unknown or unexpected kind for path '%s'"
+#~ msgstr "路径“%s”的种类未知或意外"
+
+#~ msgid "Path '%s' is now a member of changelist '%s'.\n"
+#~ msgstr "路径“%s”现在是修改列表“%s”的成员。\n"
+
+#~ msgid ""
+#~ "do not cache authentication tokens\n"
+#~ "                             [alias: --nac]"
+#~ msgstr ""
+#~ "不要缓存认证令牌\n"
+#~ "                             [alias: --nac]"
+
+#~ msgid ""
+#~ "Failed to add file '%s': a non-file object of the same name already exists"
+#~ msgstr "无法新增文件“%s”: 同名非文件对象已存在"
+
+#~ msgid ""
+#~ "do not print differences for deleted files\n"
+#~ "                             [alias: --ndd]"
+#~ 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”的存取权限"
 
 #~ msgid ""
 #~ "Default: '-u'. When Subversion is invoking an\n"
@@ -10397,190 +10646,78 @@ msgstr "未提交的本地增加,复� #~ "变。                            -p (--show-c-function):\n"
 #~ "                                   在比较输出中显示 C 函数名称。"
 
-#~ msgid "Can't close directory '%s'"
-#~ msgstr "无法关闭目录 “%s”"
-
-#~ msgid ""
-#~ "do not print differences for deleted files\n"
-#~ "                             [alias: --ndd]"
-#~ msgstr ""
-#~ "对于已经删除的文件,不要显示差异\n"
-#~ "                             [alias: --ndd]"
-
-#~ msgid ""
-#~ "do not cache authentication tokens\n"
-#~ "                             [alias: --nac]"
-#~ msgstr ""
-#~ "不要缓存认证令牌\n"
-#~ "                             [alias: --nac]"
-
-#~ msgid "Unknown or unexpected kind for path '%s'"
-#~ msgstr "路径“%s”的种类未知或意外"
-
-#~ msgid "'svn upgrade' can only be run from the root of the working copy."
-#~ msgstr "只能在工作副本的根目录执行 'svn upgrade'"
-
-#~ msgid "Entry '%s' is already under version control"
-#~ msgstr "条目“%s”已纳入版本控制"
-
-#~ msgid "'%s' is not a valid revision range"
-#~ msgstr "“%s”不是有效的版本范围"
-
-#, fuzzy
-#~ msgid ""
-#~ "apply the unidiff in reverse\n"
-#~ "                             [alias: --rd]"
-#~ msgstr ""
-#~ "忽略外部定义\n"
-#~ "                             [aliases: --ie]"
-
-#~ msgid "Added: %s\n"
-#~ msgstr "已增加: %s\n"
-
-#~ msgid "Stream doesn't support resetting"
-#~ msgstr "流不支持重置操作"
-
-#~ msgid "Error getting 'affected time' on '%s'"
-#~ msgstr "取得“%s”的“affected time”出错"
-
-#~ msgid ""
-#~ "Can't replace '%s' with a node of a differing type; the deletion must be "
-#~ "committed and the parent updated before adding '%s'"
-#~ msgstr ""
-#~ "无法以不同类型的节点来替换 “%s”;在增加 “%s” 前必须提交删除操作并更新父目录"
-
-#~ msgid "No fetch_func supplied to update_editor"
-#~ msgstr "没有为 update_editor 提供 fetch_func"
-
-#~ msgid "Can't move source to dest"
-#~ msgstr "无法移动源至目的"
+#~ msgid "Error removing lock from entry for '%s'"
+#~ msgstr "删除条目“%s”的锁出错"
 
-#~ msgid "Error during add of '%s'"
-#~ msgstr "增加 “%s” 时出错"
+#~ msgid "No WC table entry"
+#~ msgstr "没有 WC 表入口"
 
 #~ msgid ""
-#~ "set revision property ARG in new revision\n"
-#~ "                             using the name[=value] format"
-#~ msgstr ""
-#~ "在新版本设置版本属性 ARG\n"
-#~ "                使用格式 name[=value]"
-
-#~ msgid "Path '%s' is no longer a member of a changelist.\n"
-#~ msgstr "路径“%s”不再是修改列表的成员。\n"
+#~ "Failed to add file '%s': a file from another repository with the same name "
+#~ "already exists"
+#~ msgstr "无法新增文件“%s”: 来自其它版本库的同名文件对象已存在"
 
-#, fuzzy
-#~ msgid ""
-#~ "specify which collection of revisions to display\n"
-#~ "                             ('merged', 'eligible')\n"
-#~ "                             [alias: --sr]"
-#~ msgstr ""
-#~ "指定显示哪个版本集合\n"
-#~ "                             ('merged', 'eligible')"
+#~ msgid "Error modifying entry for '%s'"
+#~ msgstr "修改“%s”的入口出错"
 
-#~ msgid ""
-#~ "Only SHA1 checksums can be used as keys in the pristine file storage.\n"
-#~ msgstr "在原始的文件存储中,只有 SHA1 校验和才能用作键。\n"
+#~ msgid "Error modifying entry of '%s'"
+#~ msgstr "修改“%s”的入口出错"
 
-#~ msgid "Cannot reintegrate into a working copy not entirely at infinite depth"
-#~ msgstr "不能复兴到非全部无限制深度的工作副本"
+#~ msgid "Failed to add directory '%s': copyfrom arguments not yet supported"
+#~ msgstr "无法增加目录“%s”:尚不支持 copyfrom 参数"
 
-#~ msgid "Error getting 'affected time' for '%s'"
-#~ msgstr "取得“%s”的“affected time”出错"
+#~ msgid "Unrecognized logfile element '%s' in '%s'"
+#~ msgstr "有无法识别的日志文件元素 “%s” 在 “%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"
+#~ "specify automatic conflict resolution action\n"
+#~ "                            ('postpone', 'base', 'mine-conflict',\n"
+#~ "                             'theirs-conflict', 'mine-full', 'theirs-"
+#~ "full',\n"
+#~ "                             'edit', 'launch')"
 #~ msgstr ""
-#~ "ARG (一些命令也接受ARG1:ARG2范围)\n"
-#~ "                             版本参数可以是如下之一: \n"
-#~ "                                NUMBER       版本号\n"
-#~ "                                '{' DATE '}' 在指定时间以后的版本\n"
-#~ "                                'HEAD'       版本库中的最新版本\n"
-#~ "                                'BASE'       工作副本的基线版本\n"
-#~ "                                'COMMITTED'  最后提交或基线之前\n"
-#~ "                                'PREV'       COMMITTED的前一版本"
-
-#~ msgid "Modified: %s\n"
-#~ msgstr "已修改: %s\n"
+#~ "指定自动解决冲突动作\n"
+#~ "                            ('postpone', 'base', 'mine-conflict',\n"
+#~ "                             'theirs-conflict', 'mine-full', 'theirs-"
+#~ "full',\n"
+#~ "                             'edit', 'launch')"
 
-#~ msgid "URL '%s' is not properly URI-encoded"
-#~ msgstr "URL“%s”不是正确的URI编码"
+#~ msgid "\"svnrdump load\"'s lock was stolen; can't remove it"
+#~ msgstr "\"svnrdump load\" 的锁被窃;不能删除"
 
-#~ 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"
-#~ msgstr ""
-#~ "需要从路径中裁剪的前导路径组件数量。\n"
-#~ "                指定 -p0 不修改路径。指定 -p1 会将路径 doc/fudge/crunchy."
-#~ "html\n"
-#~ "                被转换为 fudge/crunchy.html。指定 -p2 会得到 crunchy."
-#~ "html 。"
+#~ msgid "Non-numeric strip argument given"
+#~ msgstr "提供的修剪参数不是数字"
 
-#~ 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 "Could not find node '%s' for recording file information."
+#~ msgstr "不能为记录文件信息找到节点“%s”"
 
-#~ msgid "Error replacing text-base of '%s'"
-#~ msgstr "替换“%s”的文件参考基础出错"
+#~ msgid "Error comparing '%s' and '%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 "Can't make pipe write handle non-inherited for hook '%s'"
+#~ msgstr "无法为钩子“%s”创建非继承的管道写句柄"
 
-#~ msgid ""
-#~ "read user configuration files from directory ARG\n"
-#~ "                             [alias: --cd]"
-#~ msgstr ""
-#~ "从目录 ARG 读取用户配置文件\n"
-#~ "                             [alias: --cd]"
-
-#~ msgid "'%s' is marked as absent, so it cannot be scheduled for addition"
-#~ msgstr "“%s”被标记为不存在,所以无法加入增加调度"
+#~ msgid "Given source URL invalid"
+#~ msgstr "提供的源 URL 非法"
 
-#~ msgid "Missing 'timestamp' attribute in '%s'"
-#~ msgstr "“%s”丢失“timestamp”属性"
+#~ msgid "Can't create pipe for hook '%s'"
+#~ 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 "Error getting file size on '%s'"
-#~ msgstr "取得“%s”的文件大小出错"
+#~ "设置工作副本的新深度为 ARG(“exclude”,\n"
+#~ "                            “empty”,“files”,“immediates” 或“infinity”)\n"
+#~ "                            [alias: --sd]"
 
-#~ msgid "Removing '%s' from changelist '%s'."
-#~ msgstr "删除 “%s”,从修改列表 “%s”。"
+#~ msgid "Entry '%s' has illegal schedule"
+#~ msgstr "条目“%s”有非法调度"
 
 #~ msgid "Parent(s) of '%s' should have repository information."
 #~ msgstr "'%s' 的父亲应该包含版本库的信息。"
+
+#~ msgid "post-commit hook failed with no error message."
+#~ msgstr "调用 post-commit 钩子失败,没有错误信息"

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/blame-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/blame-cmd.c?rev=1054005&r1=1054004&r2=1054005&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/blame-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/blame-cmd.c Thu Dec 30 21:27:46 2010
@@ -37,7 +37,7 @@
 
 #include "svn_private_config.h"
 
-typedef struct
+typedef struct blame_baton_t
 {
   svn_cl__opt_state_t *opt_state;
   svn_stream_t *out;

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/cl.h
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/cl.h?rev=1054005&r1=1054004&r2=1054005&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/cl.h (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/cl.h Thu Dec 30 21:27:46 2010
@@ -47,7 +47,7 @@ extern "C" {
 /*** Option processing ***/
 
 /* --accept actions */
-typedef enum
+typedef enum svn_cl__accept_t
 {
   /* invalid accept action */
   svn_cl__accept_invalid = -2,
@@ -112,7 +112,7 @@ svn_cl__accept_from_word(const char *wor
 /*** Mergeinfo flavors. ***/
 
 /* --show-revs values */
-typedef enum {
+typedef enum svn_cl__show_revs_t {
   svn_cl__show_revs_invalid = -1,
   svn_cl__show_revs_merged,
   svn_cl__show_revs_eligible
@@ -234,7 +234,7 @@ typedef struct svn_cl__opt_state_t
 } svn_cl__opt_state_t;
 
 
-typedef struct
+typedef struct svn_cl__cmd_baton_t
 {
   svn_cl__opt_state_t *opt_state;
   svn_client_ctx_t *ctx;
@@ -325,7 +325,7 @@ svn_cl__check_cancel(void *baton);
 
 /* Various conflict-resolution callbacks. */
 
-typedef struct {
+typedef struct svn_cl__conflict_baton_t {
   svn_cl__accept_t accept_which;
   apr_hash_t *config;
   const char *editor_cmd;

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/commit-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/commit-cmd.c?rev=1054005&r1=1054004&r2=1054005&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/commit-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/commit-cmd.c Thu Dec 30 21:27:46 2010
@@ -34,6 +34,7 @@
 #include "svn_wc.h"
 #include "svn_client.h"
 #include "svn_path.h"
+#include "svn_dirent_uri.h"
 #include "svn_error.h"
 #include "svn_config.h"
 #include "cl.h"
@@ -78,11 +79,8 @@ svn_cl__commit(apr_getopt_t *os,
   SVN_ERR(svn_cl__eat_peg_revisions(&targets, targets, pool));
 
   /* Condense the targets (like commit does)... */
-  SVN_ERR(svn_path_condense_targets(&base_dir,
-                                    &condensed_targets,
-                                    targets,
-                                    TRUE,
-                                    pool));
+  SVN_ERR(svn_dirent_condense_targets(&base_dir, &condensed_targets, targets,
+                                      TRUE, pool, pool));
 
   if ((! condensed_targets) || (! condensed_targets->nelts))
     {
@@ -111,7 +109,7 @@ svn_cl__commit(apr_getopt_t *os,
                                  "directories in a separate commit.\n"),
                                svn_depth_to_word(opt_state->depth),
                                svn_depth_to_word(svn_depth_infinity)));
-    
+
   cfg = apr_hash_get(ctx->config, SVN_CONFIG_CATEGORY_CONFIG,
                      APR_HASH_KEY_STRING);
   if (cfg)

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=1054005&r1=1054004&r2=1054005&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/log-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/log-cmd.c Thu Dec 30 21:27:46 2010
@@ -283,7 +283,7 @@ log_entry_receiver(void *baton,
 
       /* Fall back to "" to get options initialized either way. */
       if (lb->diff_extensions)
-        diff_options = svn_cstring_split(lb->diff_extensions, " \t\n\r", 
+        diff_options = svn_cstring_split(lb->diff_extensions, " \t\n\r",
                                          TRUE, pool);
       else
         diff_options = 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=1054005&r1=1054004&r2=1054005&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/main.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/main.c Thu Dec 30 21:27:46 2010
@@ -64,7 +64,7 @@
 /* Add an identifier here for long options that don't have a short
    option. Options that have both long and short options should just
    use the short option letter as identifier.  */
-typedef enum {
+typedef enum svn_cl__longopt_t {
   opt_ancestor_path = SVN_OPT_FIRST_LONGOPT_ID,
   opt_auth_password,
   opt_auth_username,
@@ -143,11 +143,11 @@ const apr_getopt_option_t svn_cl__option
   {"quiet",         'q', 0, N_("print nothing, or only summary information")},
   {"recursive",     'R', 0, N_("descend recursively, same as --depth=infinity")},
   {"non-recursive", 'N', 0, N_("obsolete; try --depth=files or --depth=immediates")},
-  {"change",        'c', 1, 
+  {"change",        'c', 1,
                     N_("the change made by revision ARG (like -r ARG-1:ARG)\n"
                        SVN_CL__OPTION_CONTINUATION_INDENT
                        "If ARG is negative this is like -r ARG:ARG-1")},
-  {"revision",      'r', 1, 
+  {"revision",      'r', 1,
                     N_("ARG (some commands also take ARG1:ARG2 range)\n"
                        SVN_CL__OPTION_CONTINUATION_INDENT
                        "A revision argument can be one of:\n"
@@ -1332,7 +1332,8 @@ main(int argc, const char *argv[])
       const char *utf8_opt_arg;
 
       /* Parse the next option. */
-      apr_status_t apr_err = apr_getopt_long(os, svn_cl__options, &opt_id, &opt_arg);
+      apr_status_t apr_err = apr_getopt_long(os, svn_cl__options, &opt_id,
+                                             &opt_arg);
       if (APR_STATUS_IS_EOF(apr_err))
         break;
       else if (apr_err)
@@ -1409,7 +1410,8 @@ main(int argc, const char *argv[])
                 {
                   if (changeno < 0 || is_negative)
                     {
-                      err = svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
+                      err = svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR,
+                                              NULL,
                                               _("Negative number in range (%s)"
                                                 " not supported with -c"),
                                               change_str);
@@ -1580,8 +1582,8 @@ main(int argc, const char *argv[])
             return svn_cmdline_handle_exit_error
               (svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
                                  _("'%s' is not a valid depth; try "
-                                   "'exclude', 'empty', 'files', 'immediates', "
-                                   "or 'infinity'"),
+                                   "'exclude', 'empty', 'files', "
+                                   "'immediates', or 'infinity'"),
                                  utf8_opt_arg), pool, "svn: ");
           }
         break;
@@ -1684,7 +1686,8 @@ main(int argc, const char *argv[])
       case opt_config_options:
         if (!opt_state.config_options)
           opt_state.config_options =
-                   apr_array_make(pool, 1, sizeof(svn_cmdline__config_argument_t*));
+                   apr_array_make(pool, 1,
+                                  sizeof(svn_cmdline__config_argument_t*));
 
         err = svn_utf_cstring_to_utf8(&opt_arg, opt_arg, pool);
         if (!err)
@@ -2176,7 +2179,8 @@ main(int argc, const char *argv[])
   if (opt_state.config_options)
     {
       svn_error_clear(
-          svn_cmdline__apply_config_options(ctx->config, opt_state.config_options,
+          svn_cmdline__apply_config_options(ctx->config,
+                                            opt_state.config_options,
                                             "svn: ", "--config-option"));
     }
 
@@ -2385,6 +2389,11 @@ main(int argc, const char *argv[])
           err = svn_error_quick_wrap(err,
                                      _("Try 'svn help' for more info"));
         }
+      if (err->apr_err == SVN_ERR_WC_UPGRADE_REQUIRED)
+        {
+          err = svn_error_quick_wrap(err,
+                                     _("Please see the 'svn upgrade' command"));
+        }
       svn_handle_error2(err, stderr, FALSE, "svn: ");
 
       /* Tell the user about 'svn cleanup' if any error on the stack

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/notify.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/notify.c?rev=1054005&r1=1054004&r2=1054005&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/notify.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/notify.c Thu Dec 30 21:27:46 2010
@@ -548,7 +548,7 @@ notify(void *baton, const svn_wc_notify_
       break;
 
     case svn_wc_notify_update_started:
-      if (! (nb->suppress_summary_lines || 
+      if (! (nb->suppress_summary_lines ||
              nb->in_external ||
              nb->is_checkout ||
              nb->is_export))

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/proplist-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/proplist-cmd.c?rev=1054005&r1=1054004&r2=1054005&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/proplist-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/proplist-cmd.c Thu Dec 30 21:27:46 2010
@@ -39,7 +39,7 @@
 
 #include "svn_private_config.h"
 
-typedef struct
+typedef struct proplist_baton_t
 {
   svn_cl__opt_state_t *opt_state;
   svn_boolean_t is_url;

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/props.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/props.c?rev=1054005&r1=1054004&r2=1054005&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/props.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/props.c Thu Dec 30 21:27:46 2010
@@ -104,7 +104,7 @@ svn_cl__print_prop_hash(svn_stream_t *ou
 
       if (out)
         {
-          pname_stdout = apr_psprintf(pool, "  %s\n", pname_stdout); 
+          pname_stdout = apr_psprintf(pool, "  %s\n", pname_stdout);
           SVN_ERR(svn_subst_translate_cstring2(pname_stdout, &pname_stdout,
                                               APR_EOL_STR,  /* 'native' eol */
                                               FALSE, /* no repair */

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/resolve-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/resolve-cmd.c?rev=1054005&r1=1054004&r2=1054005&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/resolve-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/resolve-cmd.c Thu Dec 30 21:27:46 2010
@@ -104,7 +104,7 @@ svn_cl__resolve(apr_getopt_t *os,
         return svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
                                  _("'%s' is not a local path"), target);
     }
-  
+
   iterpool = svn_pool_create(scratch_pool);
   for (i = 0; i < targets->nelts; i++)
     {

Modified: subversion/branches/ignore-mergeinfo/subversion/svn/resolved-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/ignore-mergeinfo/subversion/svn/resolved-cmd.c?rev=1054005&r1=1054004&r2=1054005&view=diff
==============================================================================
--- subversion/branches/ignore-mergeinfo/subversion/svn/resolved-cmd.c (original)
+++ subversion/branches/ignore-mergeinfo/subversion/svn/resolved-cmd.c Thu Dec 30 21:27:46 2010
@@ -74,7 +74,7 @@ svn_cl__resolved(apr_getopt_t *os,
         return svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL,
                                  _("'%s' is not a local path"), target);
     }
-  
+
   iterpool = svn_pool_create(scratch_pool);
   for (i = 0; i < targets->nelts; i++)
     {