Author: hwright Date: Wed Aug 17 13:55:22 2011 New Revision: 1158709 URL: http://svn.apache.org/viewvc?rev=1158709&view=rev Log: Merge r1154982, r1155124 from trunk:
* r1154982, r1155124 Stop returning APR_EGENERAL from serf for unexpected data. Justification: Clients like AnkhSVN can't see what kind of error this is so they can only show a dialog with an error which in some cases is even not clear to normal users. Notes: r1154982 improves the generic errors and r1155124 restores some specific 'svn lock' behavior that was broken by r1154982. Votes: +1: rhuijben, stsp, cmpilato Modified: subversion/branches/1.7.x/ (props changed) subversion/branches/1.7.x/STATUS subversion/branches/1.7.x/subversion/libsvn_ra_serf/locks.c subversion/branches/1.7.x/subversion/libsvn_ra_serf/merge.c subversion/branches/1.7.x/subversion/libsvn_ra_serf/serf.c subversion/branches/1.7.x/subversion/libsvn_ra_serf/util.c subversion/branches/1.7.x/subversion/tests/cmdline/lock_tests.py Propchange: subversion/branches/1.7.x/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Wed Aug 17 13:55:22 2011 @@ -56,4 +56,4 @@ /subversion/branches/tree-conflicts:868291-873154 /subversion/branches/tree-conflicts-notify:873926-874008 /subversion/branches/uris-as-urls:1060426-1064427 -/subversion/trunk:1146013,1146121,1146219,1146222,1146274,1146492,1146555,1146606,1146620,1146684,1146781,1146832,1146834,1146870,1146899,1146904,1147293,1147309,1147882,1148071,1148131,1148374,1148424,1148566,1148588,1148853,1148877,1148882,1148936,1149105,1149141,1149160,1149228,1149240,1149343,1149371-1149372,1149377,1149398,1149401,1149539,1149572,1149627,1149675,1149701,1149713,1150242,1150254,1150260-1150261,1150266,1150302,1150327,1150368,1150372,1150441,1150506,1150812,1150853,1151036,1151177,1151610,1151906,1151911,1152129,1152140,1152189-1152190,1152282,1152726,1153138,1153141,1153416,1153799,1153807,1153968,1154009,1154023,1154121,1154165,1154273,1154461,1154717-1154718,1154733,1154908,1155015,1155044,1155313,1155334,1156085,1156098,1156216,1156312,1156527,1156717,1156721,1156750,1156827,1156838,1157416,1158193-1158194,1158285,1158288,1158303,1158421,1158436,1158455 +/subversion/trunk:1146013,1146121,1146219,1146222,1146274,1146492,1146555,1146606,1146620,1146684,1146781,1146832,1146834,1146870,1146899,1146904,1147293,1147309,1147882,1148071,1148131,1148374,1148424,1148566,1148588,1148853,1148877,1148882,1148936,1149105,1149141,1149160,1149228,1149240,1149343,1149371-1149372,1149377,1149398,1149401,1149539,1149572,1149627,1149675,1149701,1149713,1150242,1150254,1150260-1150261,1150266,1150302,1150327,1150368,1150372,1150441,1150506,1150812,1150853,1151036,1151177,1151610,1151906,1151911,1152129,1152140,1152189-1152190,1152282,1152726,1153138,1153141,1153416,1153799,1153807,1153968,1154009,1154023,1154121,1154165,1154273,1154461,1154717-1154718,1154733,1154908,1154982,1155015,1155044,1155124,1155313,1155334,1156085,1156098,1156216,1156312,1156527,1156717,1156721,1156750,1156827,1156838,1157416,1158193-1158194,1158285,1158288,1158303,1158421,1158436,1158455 Modified: subversion/branches/1.7.x/STATUS URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/STATUS?rev=1158709&r1=1158708&r2=1158709&view=diff ============================================================================== --- subversion/branches/1.7.x/STATUS (original) +++ subversion/branches/1.7.x/STATUS Wed Aug 17 13:55:22 2011 @@ -148,18 +148,6 @@ Veto-blocked changes: Approved changes: ================= - * r1154982, r1155124 - Stop returning APR_EGENERAL from serf for unexpected data. - Justification: - Clients like AnkhSVN can't see what kind of error this is so they can - only show a dialog with an error which in some cases is even not clear - to normal users. - Notes: - r1154982 improves the generic errors and r1155124 restores some - specific 'svn lock' behavior that was broken by r1154982. - Votes: - +1: rhuijben, stsp, cmpilato - * r1155131 Cleanup the xml parser in serf in unexpected conditions. Justification: Modified: subversion/branches/1.7.x/subversion/libsvn_ra_serf/locks.c URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/subversion/libsvn_ra_serf/locks.c?rev=1158709&r1=1158708&r2=1158709&view=diff ============================================================================== --- subversion/branches/1.7.x/subversion/libsvn_ra_serf/locks.c (original) +++ subversion/branches/1.7.x/subversion/libsvn_ra_serf/locks.c Wed Aug 17 13:55:22 2011 @@ -385,14 +385,6 @@ handle_lock(serf_request_t *request, return err; } - /* 405 == Method Not Allowed (Occurs when trying to lock a working - copy path which no longer exists at HEAD in the repository. */ - if (sl.code == 405) - return svn_error_createf(SVN_ERR_FS_OUT_OF_DATE, - NULL, - _("Lock request failed: %d %s"), - ctx->status_code, ctx->reason); - headers = serf_bucket_response_get_headers(response); val = serf_bucket_headers_get(headers, SVN_DAV_LOCK_OWNER_HEADER); Modified: subversion/branches/1.7.x/subversion/libsvn_ra_serf/merge.c URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/subversion/libsvn_ra_serf/merge.c?rev=1158709&r1=1158708&r2=1158709&view=diff ============================================================================== --- subversion/branches/1.7.x/subversion/libsvn_ra_serf/merge.c (original) +++ subversion/branches/1.7.x/subversion/libsvn_ra_serf/merge.c Wed Aug 17 13:55:22 2011 @@ -294,8 +294,7 @@ end_merge(svn_ra_serf__xml_parser_t *par href = apr_hash_get(info->props, "href", APR_HASH_KEY_STRING); if (! svn_urlpath__is_ancestor(ctx->merge_url, href)) { - /* ### need something better than APR_EGENERAL */ - return svn_error_createf(APR_EGENERAL, NULL, + return svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL, _("A MERGE response for '%s' is not " "a child of the destination ('%s')"), href, ctx->merge_url); Modified: subversion/branches/1.7.x/subversion/libsvn_ra_serf/serf.c URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/subversion/libsvn_ra_serf/serf.c?rev=1158709&r1=1158708&r2=1158709&view=diff ============================================================================== --- subversion/branches/1.7.x/subversion/libsvn_ra_serf/serf.c (original) +++ subversion/branches/1.7.x/subversion/libsvn_ra_serf/serf.c Wed Aug 17 13:55:22 2011 @@ -1028,7 +1028,7 @@ svn_ra_serf__get_uuid(svn_ra_session_t * SVN_ERR(svn_ra_serf__discover_vcc(&vcc_url, session, NULL, pool)); if (!session->uuid) { - return svn_error_create(APR_EGENERAL, NULL, + return svn_error_create(SVN_ERR_RA_DAV_RESPONSE_HEADER_BADNESS, NULL, _("The UUID property was not found on the " "resource or any of its parents")); } Modified: subversion/branches/1.7.x/subversion/libsvn_ra_serf/util.c URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/subversion/libsvn_ra_serf/util.c?rev=1158709&r1=1158708&r2=1158709&view=diff ============================================================================== --- subversion/branches/1.7.x/subversion/libsvn_ra_serf/util.c (original) +++ subversion/branches/1.7.x/subversion/libsvn_ra_serf/util.c Wed Aug 17 13:55:22 2011 @@ -757,7 +757,7 @@ start_error(svn_ra_serf__xml_parser_t *p } else { - ctx->error->apr_err = APR_EGENERAL; + ctx->error->apr_err = SVN_ERR_RA_DAV_REQUEST_FAILED; } /* Start collecting cdata. */ @@ -1803,17 +1803,27 @@ handle_response(serf_request_t *request, ctx->conn->last_status_code = sl.code; - if (sl.code == 409 || sl.code >= 500) + if (sl.code == 405 || sl.code == 409 || sl.code >= 500) { - /* 409 Conflict: can indicate a hook error. + /* 405 Method Not allowed. + 409 Conflict: can indicate a hook error. 5xx (Internal) Server error. */ SVN_ERR(svn_ra_serf__handle_server_error(request, response, pool)); if (!ctx->session->pending_error) { + apr_status_t apr_err = SVN_ERR_RA_DAV_REQUEST_FAILED; + + /* 405 == Method Not Allowed (Occurs when trying to lock a working + copy path which no longer exists at HEAD in the repository. */ + + if (sl.code == 405 && !strcmp(ctx->method, "LOCK")) + apr_err = SVN_ERR_FS_OUT_OF_DATE; + return - svn_error_createf(APR_EGENERAL, NULL, - _("Unspecified error message: %d %s"), sl.code, sl.reason); + svn_error_createf(apr_err, NULL, + _("%s request on '%s' failed: %d %s"), + ctx->method, ctx->path, sl.code, sl.reason); } return SVN_NO_ERROR; /* Error is set in caller */ Modified: subversion/branches/1.7.x/subversion/tests/cmdline/lock_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/subversion/tests/cmdline/lock_tests.py?rev=1158709&r1=1158708&r2=1158709&view=diff ============================================================================== --- subversion/branches/1.7.x/subversion/tests/cmdline/lock_tests.py (original) +++ subversion/branches/1.7.x/subversion/tests/cmdline/lock_tests.py Wed Aug 17 13:55:22 2011 @@ -1499,9 +1499,9 @@ def lock_path_not_in_head(sbox): svntest.actions.run_and_verify_svn(None, None, [], 'commit', '-m', 'Some deletions', wc_dir) svntest.actions.run_and_verify_svn(None, None, [], 'up', '-r1', wc_dir) - expected_lock_fail_err_re = "svn:.*" \ + expected_lock_fail_err_re = "svn: warning: W160042: " \ "((Path .* doesn't exist in HEAD revision)" \ - "|(Lock request failed: 405 Method Not Allowed))" + "|(L(ock|OCK) request (on '.*' )?failed: 405 Method Not Allowed))" # Issue #3524 These lock attemtps were triggering an assert over ra_serf: # # working_copies\lock_tests-37>svn lock A\D