Author: hwright
Date: Wed Sep 29 14:20:23 2010
New Revision: 1002644

URL: http://svn.apache.org/viewvc?rev=1002644&view=rev
Log:
Reintegrate the 1.6.x-r997457 branch:

 * r997457, r997466
   Fix some error transmission problems in svnserve.
   Justification:
     It's hard to automatically react to a particular error code when
     you can't accurately receive it from the server.
   Notes:
     r997457 fixes svnserve to send only the "real" error across the
     wire in places where there is more than one level of magic
     wrapping errors.
     r997466 teaches the client to forgive still-broken servers by
     ignoring wrapping errors and digging down to find the "real"
     error itself.  And forgiveness is, as they say, divine.
   Branch:
     ^/subversion/branches/1.6.x-r997457
   Votes:
     +1: cmpilato, danielsh, pburba

Modified:
    subversion/branches/1.6.x/   (props changed)
    subversion/branches/1.6.x/CHANGES   (props changed)
    subversion/branches/1.6.x/STATUS
    subversion/branches/1.6.x/subversion/libsvn_ra_svn/editorp.c
    subversion/branches/1.6.x/subversion/libsvn_ra_svn/marshal.c
    subversion/branches/1.6.x/subversion/libsvn_ra_svn/ra_svn.h
    subversion/branches/1.6.x/subversion/tests/cmdline/merge_tests.py   (props 
changed)

Propchange: subversion/branches/1.6.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Sep 29 14:20:23 2010
@@ -56,6 +56,7 @@
 /subversion/branches/1.6.x-r979045:987702-997248
 /subversion/branches/1.6.x-r980811:980813-987709
 /subversion/branches/1.6.x-r981921:981922-997253
+/subversion/branches/1.6.x-r997457:997808-1002642
 /subversion/branches/1.6.x-wc-ng-check-override:910213-923776
 /subversion/branches/1.6.x-wc-ng-error:929379-929636
 /subversion/branches/bdb-reverse-deltas:872050-872529
@@ -90,4 +91,4 @@
 /subversion/branches/tc_url_rev:874351-874483
 /subversion/branches/tree-conflicts:868291-873154
 /subversion/branches/tree-conflicts-notify:873926-874008
-/subversion/trunk:875965,875968,876004,876012,876017,876019,876022,876024,876032,876041-876042,876048,876051,876055-876056,876059,876083,876091,876097,876101,876104,876109,876123-876125,876129,876132,876138,876160,876167,876175,876180,876185,876205,876223-876225,876230,876233,876245,876252,876256,876283,876287,876312,876326-876327,876330,876366,876372,876374,876376,876383,876386,876442,876456-876457,876462-876464,876467,876469,876480,876486,876495-876497,876516-876518,876524,876526,876583,876601,876614-876615,876628,876633,876641,876659,876687,876689,876705,876715,876726,876760,876763,876794,876804,876815-876816,876821,876825,876837,876840-876841,876843,876849,876857-876858,876862,876873,876890,876897,876905,876908,876925,876931,876934,876948-876949,876953,876987,876993,877011,877014,877016,877028-877029,877038,877119,877127,877146,877157,877191,877195,877203,877211,877230,877234,877237,877243,877249,877259,877261,877304,877319,877407,877437,877441-877442,877453,877459,87747
 
2,877544,877553,877565,877568,877573,877593,877595,877597,877601,877612,877665,877667,877681,877692,877696,877701,877720,877730,877784,877793,877797,877809,877815,877819,877821,877842,877848,877853,877867,877869,877873,877901,877909,877916,877931,877942,877953,877964,877968,877970,877981-877982,878005,878013,878015,878020,878046,878053,878062,878074,878080,878089,878091,878093,878095,878127,878129,878131,878142,878173-878176,878216,878240,878242,878255,878269,878272,878279,878296-878297,878303,878321,878335,878338,878341,878343,878353,878364,878367-878368,878385,878399,878423,878426,878447,878462,878484,878491,878498,878532,878595,878646,878659,878673,878682-878683,878690-878691,878693,878723,878760-878761,878873,878875,878877,878879,878905,878910-878911,878915-878916,878924-878925,878946,878949,878955,878960,878970,878981,879001,879033,879056,879074,879076,879081-879082,879093,879105,879126,879148,879170,879198-879199,879201,879271,879293,879357,879375-879376,879403,879631,
 
879635-879636,879688,879709-879711,879747,879902,879916,879954,879961,879966,879971,880082,880095,880105,880162,880226,880274-880275,880370,880450,880461,880474,880525-880526,880552,881905,884842,886164,886197,888715,888979,889081,889840,891672,892050,892085,895514,895653,896522,896915,898048,898963,899826,899828,900797,901304,901752,902093,904301,904394,904594,905303,905326,906256,906305,906587,908980-908981,917640,918211,922516,923389,923391,926151,926167,927323,927328,931209,931211,931392,931568,932942,933299,934599,934603,935631,935992,935996,937610,939375-939376,944635,945350,946767,948916,950931,950933,951753,952992,953317,955369,957507,958024,959004,959760,961055,961970,964167,964767,965405,965469,965508,979045,979429,980811,981449,981921,984928,984931
+/subversion/trunk:875965,875968,876004,876012,876017,876019,876022,876024,876032,876041-876042,876048,876051,876055-876056,876059,876083,876091,876097,876101,876104,876109,876123-876125,876129,876132,876138,876160,876167,876175,876180,876185,876205,876223-876225,876230,876233,876245,876252,876256,876283,876287,876312,876326-876327,876330,876366,876372,876374,876376,876383,876386,876442,876456-876457,876462-876464,876467,876469,876480,876486,876495-876497,876516-876518,876524,876526,876583,876601,876614-876615,876628,876633,876641,876659,876687,876689,876705,876715,876726,876760,876763,876794,876804,876815-876816,876821,876825,876837,876840-876841,876843,876849,876857-876858,876862,876873,876890,876897,876905,876908,876925,876931,876934,876948-876949,876953,876987,876993,877011,877014,877016,877028-877029,877038,877119,877127,877146,877157,877191,877195,877203,877211,877230,877234,877237,877243,877249,877259,877261,877304,877319,877407,877437,877441-877442,877453,877459,87747
 
2,877544,877553,877565,877568,877573,877593,877595,877597,877601,877612,877665,877667,877681,877692,877696,877701,877720,877730,877784,877793,877797,877809,877815,877819,877821,877842,877848,877853,877867,877869,877873,877901,877909,877916,877931,877942,877953,877964,877968,877970,877981-877982,878005,878013,878015,878020,878046,878053,878062,878074,878080,878089,878091,878093,878095,878127,878129,878131,878142,878173-878176,878216,878240,878242,878255,878269,878272,878279,878296-878297,878303,878321,878335,878338,878341,878343,878353,878364,878367-878368,878385,878399,878423,878426,878447,878462,878484,878491,878498,878532,878595,878646,878659,878673,878682-878683,878690-878691,878693,878723,878760-878761,878873,878875,878877,878879,878905,878910-878911,878915-878916,878924-878925,878946,878949,878955,878960,878970,878981,879001,879033,879056,879074,879076,879081-879082,879093,879105,879126,879148,879170,879198-879199,879201,879271,879293,879357,879375-879376,879403,879631,
 
879635-879636,879688,879709-879711,879747,879902,879916,879954,879961,879966,879971,880082,880095,880105,880162,880226,880274-880275,880370,880450,880461,880474,880525-880526,880552,881905,884842,886164,886197,888715,888979,889081,889840,891672,892050,892085,895514,895653,896522,896915,898048,898963,899826,899828,900797,901304,901752,902093,904301,904394,904594,905303,905326,906256,906305,906587,908980-908981,917640,918211,922516,923389,923391,926151,926167,927323,927328,931209,931211,931392,931568,932942,933299,934599,934603,935631,935992,935996,937610,939375-939376,944635,945350,946767,948916,950931,950933,951753,952992,953317,955369,957507,958024,959004,959760,961055,961970,964167,964767,965405,965469,965508,979045,979429,980811,981449,981921,984928,984931,997457,997466

Propchange: subversion/branches/1.6.x/CHANGES
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Sep 29 14:20:23 2010
@@ -56,6 +56,7 @@
 /subversion/branches/1.6.x-r979045/CHANGES:987702-997248
 /subversion/branches/1.6.x-r980811/CHANGES:980813-987709
 /subversion/branches/1.6.x-r981921/CHANGES:981922-997253
+/subversion/branches/1.6.x-r997457/CHANGES:997808-1002642
 /subversion/branches/1.6.x-wc-ng-check-override/CHANGES:910213-923776
 /subversion/branches/1.6.x-wc-ng-error/CHANGES:929379-929636
 /subversion/branches/bdb-reverse-deltas/CHANGES:872050-872529

Modified: subversion/branches/1.6.x/STATUS
URL: 
http://svn.apache.org/viewvc/subversion/branches/1.6.x/STATUS?rev=1002644&r1=1002643&r2=1002644&view=diff
==============================================================================
--- subversion/branches/1.6.x/STATUS (original)
+++ subversion/branches/1.6.x/STATUS Wed Sep 29 14:20:23 2010
@@ -295,20 +295,3 @@ Veto-blocked changes:
 
 Approved changes:
 =================
-
- * r997457, r997466
-   Fix some error transmission problems in svnserve.
-   Justification:
-     It's hard to automatically react to a particular error code when
-     you can't accurately receive it from the server.
-   Notes:
-     r997457 fixes svnserve to send only the "real" error across the
-     wire in places where there is more than one level of magic
-     wrapping errors.
-     r997466 teaches the client to forgive still-broken servers by
-     ignoring wrapping errors and digging down to find the "real"
-     error itself.  And forgiveness is, as they say, divine.
-   Branch:
-     ^/subversion/branches/1.6.x-r997457
-   Votes:
-     +1: cmpilato, danielsh, pburba

Modified: subversion/branches/1.6.x/subversion/libsvn_ra_svn/editorp.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/1.6.x/subversion/libsvn_ra_svn/editorp.c?rev=1002644&r1=1002643&r2=1002644&view=diff
==============================================================================
--- subversion/branches/1.6.x/subversion/libsvn_ra_svn/editorp.c (original)
+++ subversion/branches/1.6.x/subversion/libsvn_ra_svn/editorp.c Wed Sep 29 
14:20:23 2010
@@ -899,7 +899,9 @@ svn_error_t *svn_ra_svn_drive_editor2(sv
               svn_error_clear(editor->abort_edit(edit_baton, subpool));
               svn_ra_svn__set_block_handler(conn, blocked_write, &state);
             }
-          write_err = svn_ra_svn_write_cmd_failure(conn, subpool, err->child);
+          write_err = svn_ra_svn_write_cmd_failure(
+                          conn, subpool,
+                          svn_ra_svn__locate_real_error_child(err));
           if (!write_err)
             write_err = svn_ra_svn_flush(conn, subpool);
           svn_ra_svn__set_block_handler(conn, NULL, NULL);

Modified: subversion/branches/1.6.x/subversion/libsvn_ra_svn/marshal.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/1.6.x/subversion/libsvn_ra_svn/marshal.c?rev=1002644&r1=1002643&r2=1002644&view=diff
==============================================================================
--- subversion/branches/1.6.x/subversion/libsvn_ra_svn/marshal.c (original)
+++ subversion/branches/1.6.x/subversion/libsvn_ra_svn/marshal.c Wed Sep 29 
14:20:23 2010
@@ -826,6 +826,21 @@ svn_error_t *svn_ra_svn_parse_proplist(a
 
 /* --- READING AND WRITING COMMANDS AND RESPONSES --- */
 
+svn_error_t *svn_ra_svn__locate_real_error_child(svn_error_t *err)
+{
+  svn_error_t *this_link;
+
+  SVN_ERR_ASSERT(err);
+
+  for (this_link = err;
+       this_link && (this_link->apr_err == SVN_ERR_RA_SVN_CMD_ERR);
+       this_link = this_link->child)
+    ;
+
+  SVN_ERR_ASSERT(this_link);
+  return this_link;
+}
+
 svn_error_t *svn_ra_svn__handle_failure_status(apr_array_header_t *params,
                                                apr_pool_t *pool)
 {
@@ -854,12 +869,27 @@ svn_error_t *svn_ra_svn__handle_failure_
          easily change that, so "" means a nonexistent message. */
       if (!*message)
         message = NULL;
-      err = svn_error_create((apr_status_t)apr_err, err, message);
-      err->file = apr_pstrdup(err->pool, file);
-      err->line = (long)line;
+      
+      /* Skip over links in the error chain that were intended only to
+         exist on the server (to wrap real errors intended for the
+         client) but accidentally got included in the server's actual
+         response. */
+      if ((apr_status_t)apr_err != SVN_ERR_RA_SVN_CMD_ERR)
+        {
+          err = svn_error_create((apr_status_t)apr_err, err, message);
+          err->file = apr_pstrdup(err->pool, file);
+          err->line = (long)line;
+        }
     }
 
   svn_pool_destroy(subpool);
+
+  /* If we get here, then we failed to find a real error in the error
+     chain that the server proported to be sending us.  That's bad. */
+  if (! err)
+    err = svn_error_create(SVN_ERR_RA_SVN_MALFORMED_DATA, NULL,
+                           _("Malformed error list"));
+    
   return err;
 }
 
@@ -935,7 +965,9 @@ svn_error_t *svn_ra_svn_handle_commands2
 
       if (err && err->apr_err == SVN_ERR_RA_SVN_CMD_ERR)
         {
-          write_err = svn_ra_svn_write_cmd_failure(conn, iterpool, err->child);
+          write_err = svn_ra_svn_write_cmd_failure(
+                          conn, iterpool,
+                          svn_ra_svn__locate_real_error_child(err));
           svn_error_clear(err);
           if (write_err)
             return write_err;

Modified: subversion/branches/1.6.x/subversion/libsvn_ra_svn/ra_svn.h
URL: 
http://svn.apache.org/viewvc/subversion/branches/1.6.x/subversion/libsvn_ra_svn/ra_svn.h?rev=1002644&r1=1002643&r2=1002644&view=diff
==============================================================================
--- subversion/branches/1.6.x/subversion/libsvn_ra_svn/ra_svn.h (original)
+++ subversion/branches/1.6.x/subversion/libsvn_ra_svn/ra_svn.h Wed Sep 29 
14:20:23 2010
@@ -117,6 +117,11 @@ svn_error_t *svn_ra_svn__cram_client(svn
                                      const char *user, const char *password,
                                      const char **message);
 
+/* Return a pointer to the error chain child of ERR which contains the
+ * first "real" error message, not merely one of the
+ * SVN_ERR_RA_SVN_CMD_ERR wrapper errors. */
+svn_error_t *svn_ra_svn__locate_real_error_child(svn_error_t *err);
+
 /* Return an error chain based on @a params (which contains a
  * command response indicating failure).  The error chain will be
  * in the same order as the errors indicated in @a params.  Use

Propchange: subversion/branches/1.6.x/subversion/tests/cmdline/merge_tests.py
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Sep 29 14:20:23 2010
@@ -56,6 +56,7 @@
 
/subversion/branches/1.6.x-r979045/subversion/tests/cmdline/merge_tests.py:987702-997248
 
/subversion/branches/1.6.x-r980811/subversion/tests/cmdline/merge_tests.py:980813-987709
 
/subversion/branches/1.6.x-r981921/subversion/tests/cmdline/merge_tests.py:981922-997253
+/subversion/branches/1.6.x-r997457/subversion/tests/cmdline/merge_tests.py:997808-1002642
 
/subversion/branches/1.6.x-wc-ng-check-override/subversion/tests/cmdline/merge_tests.py:910213-923776
 
/subversion/branches/1.6.x-wc-ng-error/subversion/tests/cmdline/merge_tests.py:929379-929636
 
/subversion/branches/bdb-reverse-deltas/subversion/tests/cmdline/merge_tests.py:872050-872529


Reply via email to