svn_error_t *svn_ra_do_status2(svn_ra_session_t *session, const svn_ra_reporter3_t **reporter, void **report_baton, const char *status_target, svn_revnum_t revision, svn_depth_t depth, const svn_delta_editor_t *status_editor, void *status_baton, apr_pool_t *pool) { SVN_ERR_ASSERT(svn_path_is_empty(status_target) || svn_path_is_single_path_component(status_target)); return session->vtable->do_status(session, reporter, report_baton, status_target, revision, depth, status_editor, status_baton, pool); }
svn_error_t *svn_ra_do_update2(svn_ra_session_t *session, const svn_ra_reporter3_t **reporter, void **report_baton, svn_revnum_t revision_to_update_to, const char *update_target, svn_depth_t depth, svn_boolean_t send_copyfrom_args, const svn_delta_editor_t *update_editor, void *update_baton, apr_pool_t *pool) { SVN_ERR_ASSERT(svn_path_is_empty(update_target) || svn_path_is_single_path_component(update_target)); return session->vtable->do_update(session, reporter, report_baton, revision_to_update_to, update_target, depth, send_copyfrom_args, update_editor, update_baton, pool); }
svn_error_t *svn_ra_do_diff3(svn_ra_session_t *session, const svn_ra_reporter3_t **reporter, void **report_baton, svn_revnum_t revision, const char *diff_target, svn_depth_t depth, svn_boolean_t ignore_ancestry, svn_boolean_t text_deltas, const char *versus_url, const svn_delta_editor_t *diff_editor, void *diff_baton, apr_pool_t *pool) { SVN_ERR_ASSERT(svn_path_is_empty(diff_target) || svn_path_is_single_path_component(diff_target)); return session->vtable->do_diff(session, reporter, report_baton, revision, diff_target, depth, ignore_ancestry, text_deltas, versus_url, diff_editor, diff_baton, pool); }
svn_error_t * svn_ra_neon__search_for_starting_props(svn_ra_neon__resource_t **rsrc, const char **missing_path, svn_ra_neon__session_t *sess, const char *url, apr_pool_t *pool) { svn_error_t *err = SVN_NO_ERROR; apr_size_t len; svn_stringbuf_t *path_s; ne_uri parsed_url; svn_stringbuf_t *lopped_path = svn_stringbuf_create(url, pool); /* initialize to make sure it'll fit without reallocating */ apr_pool_t *iterpool = svn_pool_create(pool); /* Split the url into its component pieces (scheme, host, path, etc). We want the path part. */ ne_uri_parse(url, &parsed_url); if (parsed_url.path == NULL) { ne_uri_free(&parsed_url); return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL, _("Neon was unable to parse URL '%s'"), url); } svn_stringbuf_setempty(lopped_path); path_s = svn_stringbuf_create(parsed_url.path, pool); ne_uri_free(&parsed_url); /* Try to get the starting_props from the public url. If the resource no longer exists in HEAD, we'll get a failure. That's fine: just keep removing components and trying to get the starting_props from parent directories. */ while (! svn_path_is_empty(path_s->data)) { svn_pool_clear(iterpool); err = svn_ra_neon__get_starting_props(rsrc, sess, path_s->data, NULL, iterpool); if (! err) break; /* found an existing parent! */ if (err->apr_err != SVN_ERR_FS_NOT_FOUND) return err; /* found a _real_ error */ /* else... lop off the basename and try again. */ svn_stringbuf_set(lopped_path, svn_path_join(svn_path_basename(path_s->data, iterpool), lopped_path->data, iterpool)); len = path_s->len; svn_path_remove_component(path_s); /* if we detect an infinite loop, get out. */ if (path_s->len == len) return svn_error_quick_wrap (err, _("The path was not part of a repository")); svn_error_clear(err); } /* error out if entire URL was bogus (not a single part of it exists in the repository!) */ if (svn_path_is_empty(path_s->data)) return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL, _("No part of path '%s' was found in " "repository HEAD"), parsed_url.path); /* Duplicate rsrc out of iterpool into pool */ { apr_hash_index_t *hi; svn_ra_neon__resource_t *tmp = apr_pcalloc(pool, sizeof(*tmp)); tmp->url = apr_pstrdup(pool, (*rsrc)->url); tmp->is_collection = (*rsrc)->is_collection; tmp->pool = pool; tmp->propset = apr_hash_make(pool); for (hi = apr_hash_first(iterpool, (*rsrc)->propset); hi; hi = apr_hash_next(hi)) { const void *key; void *val; apr_hash_this(hi, &key, NULL, &val); apr_hash_set(tmp->propset, apr_pstrdup(pool, key), APR_HASH_KEY_STRING, svn_string_dup(val, pool)); } *rsrc = tmp; } *missing_path = lopped_path->data; svn_pool_destroy(iterpool); return SVN_NO_ERROR; }