--- file_not_specified_in_diff +++ file_not_specified_in_diff @@ -, +, @@ --- subversion/include/svn_error_codes.h +++ subversion/include/svn_error_codes.h @@ -774,6 +774,9 @@ SVN_ERR_RA_DAV_CATEGORY_START + 6, "Invalid configuration value") + /** @deprecated To improve consistency between ra layers, this error code + is replaced in ra_{neon|serf} by SVN_ERR_FS_NOT_FOUND. + Slated for removal in the next major release. */ SVN_ERRDEF(SVN_ERR_RA_DAV_PATH_NOT_FOUND, SVN_ERR_RA_DAV_CATEGORY_START + 7, "HTTP Path Not Found") --- subversion/libsvn_client/merge.c +++ subversion/libsvn_client/merge.c @@ -450,7 +450,6 @@ if (err) { if (err->apr_err == SVN_ERR_CLIENT_UNRELATED_RESOURCES - || err->apr_err == SVN_ERR_RA_DAV_PATH_NOT_FOUND || err->apr_err == SVN_ERR_FS_NOT_FOUND) { /* PATH@TARGET_ENTRY->REVISION didn't exist at @@ -2142,7 +2141,6 @@ if (err) { if (err->apr_err == SVN_ERR_FS_NOT_FOUND - || err->apr_err == SVN_ERR_RA_DAV_PATH_NOT_FOUND || err->apr_err == SVN_ERR_CLIENT_UNRELATED_RESOURCES) svn_error_clear(err); else @@ -3413,7 +3411,6 @@ ### consistent in the error it returns(?) */ if (err->apr_err == SVN_ERR_FS_NOT_FOUND - || err->apr_err == SVN_ERR_RA_DAV_PATH_NOT_FOUND || err->apr_err == SVN_ERR_CLIENT_UNRELATED_RESOURCES) svn_error_clear(err); else --- subversion/libsvn_ra_neon/commit.c +++ subversion/libsvn_ra_neon/commit.c @@ -1045,7 +1045,7 @@ _("File '%s' already exists"), file->rsrc->url); } - else if (err->apr_err == SVN_ERR_RA_DAV_PATH_NOT_FOUND) + else if (err->apr_err == SVN_ERR_FS_NOT_FOUND) { svn_error_clear(err); } --- subversion/libsvn_ra_neon/get_locks.c +++ subversion/libsvn_ra_neon/get_locks.c @@ -370,7 +370,7 @@ svn_pool_destroy(baton.scratchpool); - if (err && err->apr_err == SVN_ERR_RA_DAV_PATH_NOT_FOUND) + if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND) { svn_error_clear(err); *locks = baton.lock_hash; --- subversion/libsvn_ra_neon/props.c +++ subversion/libsvn_ra_neon/props.c @@ -623,7 +623,7 @@ if (value == NULL) { /* ### need an SVN_ERR here */ - return svn_error_createf(SVN_ERR_RA_DAV_PROPS_NOT_FOUND, NULL, + return svn_error_createf(SVN_ERR_FS_NOT_FOUND, NULL, _("'%s' was not present on the resource"), name); } @@ -710,7 +710,7 @@ if (! err) break; /* found an existing parent! */ - if (err->apr_err != SVN_ERR_RA_DAV_PATH_NOT_FOUND) + if (err->apr_err != SVN_ERR_FS_NOT_FOUND) return err; /* found a _real_ error */ /* else... lop off the basename and try again. */ @@ -1211,7 +1211,7 @@ else *kind = svn_node_file; } - else if (err->apr_err == SVN_ERR_RA_DAV_PATH_NOT_FOUND) + else if (err->apr_err == SVN_ERR_FS_NOT_FOUND) { svn_error_clear(err); @@ -1256,7 +1256,7 @@ url, revision, pool); if (err) { - if (err->apr_err == SVN_ERR_RA_DAV_PATH_NOT_FOUND) + if (err->apr_err == SVN_ERR_FS_NOT_FOUND) { /* easy out: */ svn_error_clear(err); @@ -1277,7 +1277,7 @@ NULL, NULL /* all props */, pool); if (err) { - if (err->apr_err == SVN_ERR_RA_DAV_PATH_NOT_FOUND) + if (err->apr_err == SVN_ERR_FS_NOT_FOUND) { /* easy out: */ svn_error_clear(err); --- subversion/libsvn_ra_neon/session.c +++ subversion/libsvn_ra_neon/session.c @@ -878,8 +878,7 @@ svn_error_clear(err); cap_result = capability_no; } - else if (err->apr_err == SVN_ERR_FS_NOT_FOUND - || err->apr_err == SVN_ERR_RA_DAV_PATH_NOT_FOUND) + else if (err->apr_err == SVN_ERR_FS_NOT_FOUND) { /* Mergeinfo requests use relative paths, and anyway we're in r0, so this is a likely error, --- subversion/libsvn_ra_neon/util.c +++ subversion/libsvn_ra_neon/util.c @@ -540,7 +540,7 @@ switch (req->code) { case 404: - return svn_error_create(SVN_ERR_RA_DAV_PATH_NOT_FOUND, NULL, + return svn_error_create(SVN_ERR_FS_NOT_FOUND, NULL, apr_psprintf(pool, _("'%s' path not found"), req->url)); --- subversion/libsvn_ra_serf/blame.c +++ subversion/libsvn_ra_serf/blame.c @@ -391,8 +391,6 @@ svn_ra_serf__handler_t *handler; svn_ra_serf__xml_parser_t *parser_ctx; serf_bucket_t *buckets, *tmp; - apr_hash_t *props; - const char *lopped_path, *remaining_path; const char *vcc_url, *relative_url, *baseline_url, *basecoll_url, *req_url; int status_code; svn_error_t *err; @@ -447,41 +445,17 @@ session->bkt_alloc); serf_bucket_aggregate_append(buckets, tmp); - props = apr_hash_make(pool); - /* Get the VCC from file url, or if the file doesn't exist in HEAD, from its closest existing parent. */ - SVN_ERR(svn_ra_serf__search_for_base_props(props, &remaining_path, - &lopped_path, - session, session->conns[0], - session->repos_url.path, pool)); - vcc_url = svn_ra_serf__get_prop(props, remaining_path, - "DAV:", "version-controlled-configuration"); - - if (!vcc_url) - { - return svn_error_create(SVN_ERR_RA_DAV_OPTIONS_REQ_FAILED, NULL, - _("The OPTIONS response did not include the " - "requested version-controlled-configuration " - "value")); - } - - /* Send the request to the baseline URL */ - relative_url = svn_ra_serf__get_prop(props, remaining_path, - SVN_DAV_PROP_NS_DAV, - "baseline-relative-path"); - if (!relative_url) - { - return svn_error_create(SVN_ERR_RA_DAV_OPTIONS_REQ_FAILED, NULL, - _("The OPTIONS response did not include the " - "requested baseline-relative-path value")); - } - relative_url = svn_path_join(relative_url, - svn_path_uri_decode(lopped_path, pool), - pool); + SVN_ERR(svn_ra_serf__discover_root(&vcc_url, + &relative_url, + session, session->conns[0], + session->repos_url.path, pool)); if (end == SVN_INVALID_REVNUM) { + apr_hash_t *props = apr_hash_make(pool); + /* Use the "checked-in" property to determine the baseline url of the HEAD revision. */ SVN_ERR(svn_ra_serf__retrieve_props(props, session, session->conns[0], @@ -506,6 +480,8 @@ } else { + apr_hash_t *props = apr_hash_make(pool); + /* We're asking for a specific revision. No need to use "checked-in" here, request the baseline-collection property with the specified revision in the 'Label' header (added in svn_ra_serf__retrieve_props). @@ -559,11 +535,7 @@ SVN_ERR(parser_ctx->error); } - if (status_code == 404) - { - return svn_error_createf(SVN_ERR_RA_DAV_PATH_NOT_FOUND, NULL, - "'%s' path not found", - handler->path); - } + SVN_ERR(svn_ra_serf__error_on_status(status_code, handler->path)); + return err; } --- subversion/libsvn_ra_serf/commit.c +++ subversion/libsvn_ra_serf/commit.c @@ -413,16 +413,10 @@ if (checkout_ctx->progress.status != 201) { - if (checkout_ctx->progress.status == 404) - { - return svn_error_createf(SVN_ERR_RA_DAV_PATH_NOT_FOUND, - return_response_err(handler, - &checkout_ctx->progress), - _("Path '%s' not present"), - dir->name); - } + SVN_ERR(svn_ra_serf__error_on_status(checkout_ctx->progress.status, + dir->name)); - return svn_error_createf(SVN_ERR_RA_DAV_PATH_NOT_FOUND, + return svn_error_createf(SVN_ERR_FS_CONFLICT, return_response_err(handler, &checkout_ctx->progress), _("Directory '%s' is out of date; try updating"), @@ -495,12 +489,14 @@ SVN_ERR(svn_ra_serf__wait_for_props(propfind_ctx, session, pool)); + /* We wouldn't get here if the url wasn't found (404), so the checked-in + property should have been set. */ root_checkout = svn_ra_serf__get_ver_prop(props, session->repos_url.path, base_revision, "DAV:", "checked-in"); if (!root_checkout) - return svn_error_createf(SVN_ERR_RA_DAV_PATH_NOT_FOUND, NULL, + return svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL, _("Path '%s' not present"), session->repos_url.path); } @@ -594,16 +590,10 @@ if (file->checkout->progress.status != 201) { - if (file->checkout->progress.status == 404) - { - return svn_error_createf(SVN_ERR_RA_DAV_PATH_NOT_FOUND, - return_response_err(handler, - &file->checkout->progress), - _("Path '%s' not present"), - file->name); - } + SVN_ERR(svn_ra_serf__error_on_status(file->checkout->progress.status, + file->name)); - return svn_error_createf(SVN_ERR_RA_DAV_PATH_NOT_FOUND, + return svn_error_createf(SVN_ERR_FS_CONFLICT, return_response_err(handler, &file->checkout->progress), _("File '%s' is out of date; try updating"), --- subversion/libsvn_ra_serf/getlocations.c +++ subversion/libsvn_ra_serf/getlocations.c @@ -274,12 +274,7 @@ SVN_ERR(parser_ctx->error); } - if (loc_ctx->status_code == 404) - { - return svn_error_create(SVN_ERR_RA_DAV_PATH_NOT_FOUND, NULL, - apr_psprintf(pool, _("'%s' path not found"), - req_url)); - } + SVN_ERR(svn_ra_serf__error_on_status(loc_ctx->status_code, req_url)); return err; } --- subversion/libsvn_ra_serf/getlocationsegments.c +++ subversion/libsvn_ra_serf/getlocationsegments.c @@ -225,16 +225,13 @@ } if (gls_ctx->inside_report) + err = svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL, _("Location segment report failed on '%s'@'%ld'"), path, peg_revision); - if (gls_ctx->status_code == 404) - { - return svn_error_create(SVN_ERR_RA_DAV_PATH_NOT_FOUND, NULL, - apr_psprintf(pool, _("'%s' path not found"), - req_url)); - } + SVN_ERR(svn_ra_serf__error_on_status(gls_ctx->status_code, handler->path)); + svn_pool_destroy(gls_ctx->subpool); --- subversion/libsvn_ra_serf/mergeinfo.c +++ subversion/libsvn_ra_serf/mergeinfo.c @@ -232,7 +232,7 @@ svn_boolean_t include_descendants, apr_pool_t *pool) { - svn_error_t *err; + svn_error_t *err, *err2; int status_code; mergeinfo_context_t *mergeinfo_ctx; @@ -285,12 +285,13 @@ err = svn_ra_serf__context_run_wait(&mergeinfo_ctx->done, session, pool); - if (status_code == 404) + err2 = svn_ra_serf__error_on_status(status_code, handler->path); + + if (err2) { svn_error_clear(err); - return svn_error_createf(SVN_ERR_RA_DAV_PATH_NOT_FOUND, NULL, - _("'%s' path not found"), handler->path); - } + SVN_ERR(err2); + } if (parser_ctx->error) { @@ -300,12 +301,6 @@ else SVN_ERR(err); - if (status_code == 404) - { - return svn_error_createf(SVN_ERR_RA_DAV_PATH_NOT_FOUND, NULL, - _("'%s' path not found"), handler->path); - } - if (mergeinfo_ctx->done) *catalog = mergeinfo_ctx->result_catalog; --- subversion/libsvn_ra_serf/property.c +++ subversion/libsvn_ra_serf/property.c @@ -612,6 +612,9 @@ svn_error_clear(err); SVN_ERR(prop_ctx->parser_ctx->error); } + + SVN_ERR(svn_ra_serf__error_on_status(prop_ctx->status_code, prop_ctx->path)); + return err; } @@ -640,53 +643,6 @@ return SVN_NO_ERROR; } -svn_error_t * -svn_ra_serf__search_for_base_props(apr_hash_t *props, - const char **remaining_path, - const char **missing_path, - svn_ra_serf__session_t *session, - svn_ra_serf__connection_t *conn, - const char *url, - apr_pool_t *pool) -{ - const char *path = url, *present_path = ""; - const char *vcc_url; - - do - { - SVN_ERR(svn_ra_serf__retrieve_props(props, session, conn, - path, SVN_INVALID_REVNUM, - "0", base_props, pool)); - vcc_url = - svn_ra_serf__get_ver_prop(props, path, - SVN_INVALID_REVNUM, - "DAV:", - "version-controlled-configuration"); - if (vcc_url) - break; - - /* This happens when the file is missing in HEAD. */ - - /* Okay, strip off. */ - present_path = svn_path_join(svn_path_basename(path, pool), - present_path, pool); - path = svn_path_dirname(path, pool); - } - while (!svn_path_is_empty(path)); - - /* Error out if entire URL was bogus (not a single part of it exists - in the repository!) */ - if (svn_path_is_empty(path)) - return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL, - _("No part of path '%s' was found in " - "repository HEAD"), url); - - *missing_path = present_path; - *remaining_path = path; - - return SVN_NO_ERROR; -} - void svn_ra_serf__walk_all_props(apr_hash_t *props, const char *name, --- subversion/libsvn_ra_serf/ra_serf.h +++ subversion/libsvn_ra_serf/ra_serf.h @@ -195,6 +195,9 @@ /* SSL server certificates */ svn_boolean_t trust_default_ca; const char *ssl_authorities; + + /* Repository UUID */ + const char *uuid; }; /* @@ -798,27 +801,6 @@ svn_ra_serf__session_t *sess, apr_pool_t *pool); -/* Shared helper func: given a public URL which may not exist in HEAD, - use SESSION to search up parent directories until we can retrieve a - *PROPS (allocated in POOL) containing a standard set of base props: - {VCC, resourcetype, baseline-relative-path}. - - Also return: - *MISSING_PATH (allocated in POOL), which is the trailing portion of - the URL that did not exist. If an error occurs, *MISSING_PATH isn't - changed. - *REMAINING_PATH (allocated in POOL), which is the parent path on which - we found the PROPS. - */ -svn_error_t * -svn_ra_serf__search_for_base_props(apr_hash_t *props, - const char **remaining_path, - const char **missing_path, - svn_ra_serf__session_t *session, - svn_ra_serf__connection_t *conn, - const char *url, - apr_pool_t *pool); - /* * This is a blocking version of deliver_props. */ @@ -987,13 +969,14 @@ const char *path, apr_pool_t *pool); -/* Try to discover our current root @a vcc_url and the resultant @a rel_path - * based on @a orig_path for the @a session on @a conn. +/* Try to discover our current root @a VCC_URL and the resultant @a REL_PATH + * based on @a ORIG_PATH for the @a SESSION on @a CONN. + * REL_PATH will be URI decoded. * - * @a rel_path may be NULL if the caller is not interested in the relative + * @a REL_PATH may be NULL if the caller is not interested in the relative * path. * - * All temporary allocations will be made in @a pool. + * All temporary allocations will be made in @a POOL. */ svn_error_t * svn_ra_serf__discover_root(const char **vcc_url, @@ -1005,6 +988,8 @@ /* Set *BC_URL to the baseline collection url, and set *BC_RELATIVE to * the path relative to that url for URL in REVISION using SESSION. + * BC_RELATIVE will be URI decoded. + * * REVISION may be SVN_INVALID_REVNUM (to mean "the current HEAD * revision"). If URL is NULL, use SESSION's session url. * Use POOL for all allocations. @@ -1207,7 +1192,6 @@ const char *capability, apr_pool_t *pool); - /*** Authentication handler declarations ***/ /** @@ -1293,4 +1277,15 @@ apr_size_t data_len, apr_pool_t *pool); + +/*** General utility functions ***/ + +/** + * Convert an HTTP status code resulting from a WebDAV request to the relevant + * error code. + */ +svn_error_t * +svn_ra_serf__error_on_status(int status_code, const char *path); + + #endif /* SVN_LIBSVN_RA_SERF_RA_SERF_H */ --- subversion/libsvn_ra_serf/serf.c +++ subversion/libsvn_ra_serf/serf.c @@ -257,8 +257,7 @@ svn_error_clear(err); cap_result = capability_no; } - else if (err->apr_err == SVN_ERR_FS_NOT_FOUND - || err->apr_err == SVN_ERR_RA_DAV_PATH_NOT_FOUND) + else if (err->apr_err == SVN_ERR_FS_NOT_FOUND) { /* Mergeinfo requests use relative paths, and anyway we're in r0, so this is a likely error, @@ -839,16 +838,21 @@ const char *path, *res_type; svn_revnum_t fetched_rev; - SVN_ERR(fetch_path_props(&prop_ctx, &props, &path, &fetched_rev, - session, rel_path, - revision, check_path_props, pool)); + svn_error_t *err = fetch_path_props(&prop_ctx, &props, &path, &fetched_rev, + session, rel_path, + revision, check_path_props, pool); - if (prop_ctx && (svn_ra_serf__propfind_status_code(prop_ctx) == 404)) + if (err && err->apr_err == SVN_ERR_FS_NOT_FOUND) { + svn_error_clear(err); *kind = svn_node_none; } else { + /* Any other error, raise to caller. */ + if (err) + return err; + res_type = svn_ra_serf__get_ver_prop(props, path, fetched_rev, "DAV:", "resourcetype"); if (!res_type) @@ -976,9 +980,21 @@ const char *path; svn_revnum_t fetched_rev; svn_dirent_t *entry; + svn_error_t *err; - SVN_ERR(fetch_path_props(&prop_ctx, &props, &path, &fetched_rev, - session, rel_path, revision, all_props, pool)); + err = fetch_path_props(&prop_ctx, &props, &path, &fetched_rev, + session, rel_path, revision, all_props, pool); + if (err) + { + if (err->apr_err == SVN_ERR_FS_NOT_FOUND) + { + svn_error_clear(err); + *dirent = NULL; + return SVN_NO_ERROR; + } + else + return err; + } entry = apr_pcalloc(pool, sizeof(*entry)); @@ -1006,7 +1022,7 @@ path = session->repos_url.path; - /* If we have a relative path, append it. */ + /* If we have a relative path, URI encode and append it. */ if (rel_path) { path = svn_path_url_add_component(path, rel_path, pool); @@ -1117,6 +1133,15 @@ return SVN_NO_ERROR; } +/* TODO: to fetch the uuid from the repository, we need: + 1. a path that exists in HEAD + 2. a path that's readable + + get_uuid handles the case where a path doesn't exist in HEAD and also the + case where the root of the repository is not readable. + However, it does not handle the case where we're fetching path not existing + in HEAD of a repository with unreadable root directory. + */ static svn_error_t * svn_ra_serf__get_uuid(svn_ra_session_t *ra_session, const char **uuid, @@ -1127,19 +1152,25 @@ props = apr_hash_make(pool); - SVN_ERR(svn_ra_serf__retrieve_props(props, session, session->conns[0], - session->repos_url_str, - SVN_INVALID_REVNUM, "0", uuid_props, - pool)); - *uuid = svn_ra_serf__get_prop(props, session->repos_url_str, - SVN_DAV_PROP_NS_DAV, "repository-uuid"); - - if (!*uuid) - { - return svn_error_create(APR_EGENERAL, NULL, - _("The UUID property was not found on the " - "resource or any of its parents")); + if (!session->uuid) + { + const char *vcc_url, *relative_url; + + /* We're not interested in vcc_url and relative_url, but this call also + stores the repository's uuid in the session. */ + SVN_ERR(svn_ra_serf__discover_root(&vcc_url, + &relative_url, + session, session->conns[0], + session->repos_url.path, pool)); + if (!session->uuid) + { + return svn_error_create(APR_EGENERAL, NULL, + _("The UUID property was not found on the " + "resource or any of its parents")); + } } + + *uuid = session->uuid; return SVN_NO_ERROR; } --- subversion/libsvn_ra_serf/update.c +++ subversion/libsvn_ra_serf/update.c @@ -971,12 +971,11 @@ serf_bucket_response_status(response, &sl); /* Woo-hoo. Nothing here to see. */ - if (sl.code == 404) + fetch_ctx->err = svn_ra_serf__error_on_status(sl.code, fetch_ctx->info->name); + if (fetch_ctx->err) { fetch_ctx->done = TRUE; - fetch_ctx->err = svn_error_createf(SVN_ERR_RA_DAV_PATH_NOT_FOUND, NULL, - "'%s' path not found", - fetch_ctx->info->name); + return svn_ra_serf__handle_discard_body(request, response, NULL, pool); } --- subversion/libsvn_ra_serf/util.c +++ subversion/libsvn_ra_serf/util.c @@ -1344,7 +1344,7 @@ apr_pool_t *pool) { apr_hash_t *props; - const char *path, *relative_path, *present_path = ""; + const char *path, *relative_path, *present_path = "", *uuid; /* If we're only interested in our VCC, just return it. */ if (session->vcc_url && !rel_path) @@ -1356,33 +1356,49 @@ props = apr_hash_make(pool); path = orig_path; *vcc_url = NULL; + uuid = NULL; do { - SVN_ERR(svn_ra_serf__retrieve_props(props, session, conn, - path, SVN_INVALID_REVNUM, - "0", base_props, pool)); - *vcc_url = - svn_ra_serf__get_ver_prop(props, path, - SVN_INVALID_REVNUM, - "DAV:", - "version-controlled-configuration"); - - if (*vcc_url) + svn_error_t *err = svn_ra_serf__retrieve_props(props, session, conn, + path, SVN_INVALID_REVNUM, + "0", base_props, pool); + if (! err) { + *vcc_url = + svn_ra_serf__get_ver_prop(props, path, + SVN_INVALID_REVNUM, + "DAV:", + "version-controlled-configuration"); + relative_path = svn_ra_serf__get_ver_prop(props, path, SVN_INVALID_REVNUM, SVN_DAV_PROP_NS_DAV, "baseline-relative-path"); + + uuid = svn_ra_serf__get_ver_prop(props, path, + SVN_INVALID_REVNUM, + SVN_DAV_PROP_NS_DAV, + "repository-uuid"); break; } - - /* This happens when the file is missing in HEAD. */ - - /* Okay, strip off. */ - present_path = svn_path_join(svn_path_basename(path, pool), - present_path, pool); - path = svn_path_dirname(path, pool); + else + { + if (err->apr_err != SVN_ERR_FS_NOT_FOUND) + { + return err; /* found a _real_ error */ + } + else + { + /* This happens when the file is missing in HEAD. */ + svn_error_clear(err); + + /* Okay, strip off. */ + present_path = svn_path_join(svn_path_basename(path, pool), + present_path, pool); + path = svn_path_dirname(path, pool); + } + } } while (!svn_path_is_empty(path)); @@ -1419,12 +1435,21 @@ session->pool); } + /* Store the repository UUID in the cache. */ + if (!session->uuid) + { + session->uuid = apr_pstrdup(session->pool, uuid); + } + if (rel_path) { if (present_path[0] != '\0') { - *rel_path = svn_path_url_add_component(relative_path, - present_path, pool); + /* The relative path is supposed to be URI decoded, so decode + present_path before joining both together. */ + *rel_path = svn_path_join(relative_path, + svn_path_uri_decode(present_path, pool), + pool); } else { @@ -1434,3 +1459,16 @@ return SVN_NO_ERROR; } + +svn_error_t * +svn_ra_serf__error_on_status(int status_code, const char *path) +{ + switch(status_code) + { + case 404: + return svn_error_createf(SVN_ERR_FS_NOT_FOUND, NULL, + _("'%s' path not found"), path); + } + + return SVN_NO_ERROR; +} --- subversion/svn/mkdir-cmd.c +++ subversion/svn/mkdir-cmd.c @@ -87,8 +87,7 @@ else if (!(opt_state->parents) && (APR_STATUS_IS_ENOENT(err->apr_err) || /* in wc */ err->apr_err == SVN_ERR_FS_NOT_DIRECTORY || - err->apr_err == SVN_ERR_FS_NOT_FOUND || /* ra_local and ra_svn */ - err->apr_err == SVN_ERR_RA_DAV_PATH_NOT_FOUND /* ra_neon */)) + err->apr_err == SVN_ERR_FS_NOT_FOUND /* all ra layers */)) return svn_error_quick_wrap (err, _("Try 'svn mkdir --parents' instead?")); else