Alien-SVN
view release on metacpan or search on metacpan
src/subversion/subversion/libsvn_ra_serf/util.c view on Meta::CPAN
/* An error occurred on conns. serf 0.4.0 remembers that
the connection had a problem. We need to reset it, in
order to use it again. */
serf_connection_reset(conn->conn);
}
}
}
while ((path[0] != '\0')
&& (! (path[0] == '/' && path[1] == '\0')));
if (!*vcc_url)
{
return svn_error_create(SVN_ERR_RA_DAV_OPTIONS_REQ_FAILED, NULL,
_("The PROPFIND response did not include the "
"requested version-controlled-configuration "
"value"));
}
/* Store our VCC in our cache. */
if (!session->vcc_url)
{
session->vcc_url = apr_pstrdup(session->pool, *vcc_url);
}
/* Update our cached repository root URL. */
if (!session->repos_root_str)
{
svn_stringbuf_t *url_buf;
url_buf = svn_stringbuf_create(path, pool);
svn_path_remove_components(url_buf,
svn_path_component_count(relative_path));
/* Now recreate the root_url. */
session->repos_root = session->session_url;
session->repos_root.path =
(char *)svn_fspath__canonicalize(url_buf->data, session->pool);
session->repos_root_str =
svn_urlpath__canonicalize(apr_uri_unparse(session->pool,
&session->repos_root, 0),
session->pool);
}
/* Store the repository UUID in the cache. */
if (!session->uuid)
{
session->uuid = apr_pstrdup(session->pool, uuid);
}
return SVN_NO_ERROR;
}
svn_error_t *
svn_ra_serf__get_relative_path(const char **rel_path,
const char *orig_path,
svn_ra_serf__session_t *session,
svn_ra_serf__connection_t *conn,
apr_pool_t *pool)
{
const char *decoded_root, *decoded_orig;
if (! session->repos_root.path)
{
const char *vcc_url;
/* This should only happen if we haven't detected HTTP v2
support from the server. */
assert(! SVN_RA_SERF__HAVE_HTTPV2_SUPPORT(session));
/* We don't actually care about the VCC_URL, but this API
promises to populate the session's root-url cache, and that's
what we really want. */
SVN_ERR(svn_ra_serf__discover_vcc(&vcc_url, session,
conn ? conn : session->conns[0],
pool));
}
decoded_root = svn_path_uri_decode(session->repos_root.path, pool);
decoded_orig = svn_path_uri_decode(orig_path, pool);
*rel_path = svn_urlpath__skip_ancestor(decoded_root, decoded_orig);
SVN_ERR_ASSERT(*rel_path != NULL);
return SVN_NO_ERROR;
}
svn_error_t *
svn_ra_serf__report_resource(const char **report_target,
svn_ra_serf__session_t *session,
svn_ra_serf__connection_t *conn,
apr_pool_t *pool)
{
/* If we have HTTP v2 support, we want to report against the 'me'
resource. */
if (SVN_RA_SERF__HAVE_HTTPV2_SUPPORT(session))
*report_target = apr_pstrdup(pool, session->me_resource);
/* Otherwise, we'll use the default VCC. */
else
SVN_ERR(svn_ra_serf__discover_vcc(report_target, session, conn, pool));
return SVN_NO_ERROR;
}
svn_error_t *
svn_ra_serf__error_on_status(serf_status_line sline,
const char *path,
const char *location)
{
switch(sline.code)
{
case 301:
case 302:
case 307:
return svn_error_createf(SVN_ERR_RA_DAV_RELOCATED, NULL,
(sline.code == 301)
? _("Repository moved permanently to '%s';"
" please relocate")
: _("Repository moved temporarily to '%s';"
" please relocate"), location);
case 403:
return svn_error_createf(SVN_ERR_RA_DAV_FORBIDDEN, NULL,
_("Access to '%s' forbidden"), path);
case 404:
return svn_error_createf(SVN_ERR_FS_NOT_FOUND, NULL,
_("'%s' path not found"), path);
case 423:
return svn_error_createf(SVN_ERR_FS_NO_LOCK_TOKEN, NULL,
_("'%s': no lock token available"), path);
case 411:
return svn_error_createf(SVN_ERR_RA_DAV_REQUEST_FAILED, NULL,
_("DAV request failed: 411 Content length required. The "
"server or an intermediate proxy does not accept "
"chunked encoding. Try setting 'http-chunked-requests' "
"to 'auto' or 'no' in your client configuration."));
case 501:
return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
_("The requested feature is not supported by "
"'%s'"), path);
}
( run in 1.929 second using v1.01-cache-2.11-cpan-677af5a14d3 )