You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2015/12/07 14:02:36 UTC
svn commit: r1718343 -
/subversion/branches/ra-git/subversion/libsvn_ra_git/session.c
Author: rhuijben
Date: Mon Dec 7 13:02:36 2015
New Revision: 1718343
URL: http://svn.apache.org/viewvc?rev=1718343&view=rev
Log:
On the ra-git branch: Properly use the vtable to access ra apis in the
internal session to avoid introducing a circular library dependency.
* subversion/libsvn_ra_git/session.c
(*): Use call via the vtable instead of via the public ra api,
which we can't use from here.
Modified:
subversion/branches/ra-git/subversion/libsvn_ra_git/session.c
Modified: subversion/branches/ra-git/subversion/libsvn_ra_git/session.c
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/libsvn_ra_git/session.c?rev=1718343&r1=1718342&r2=1718343&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/libsvn_ra_git/session.c (original)
+++ subversion/branches/ra-git/subversion/libsvn_ra_git/session.c Mon Dec 7 13:02:36 2015
@@ -103,6 +103,13 @@ ra_git_reporter_link_path(void *report_b
svn_ra_git__session_t *sess = grb->session->priv;
const char *repos_relpath;
+ repos_relpath = svn_uri_skip_ancestor(sess->repos_root_url, url,
+ pool);
+ if (!repos_relpath)
+ return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
+ _("'%s' isn't a child of repository root "
+ "URL '%s'"),
+ url, sess->repos_root_url);
SVN_ERR(svn_ra_get_path_relative_to_root(grb->session,
&repos_relpath,
url, pool));
@@ -323,14 +330,16 @@ ensure_local_session(svn_ra_session_t *s
sess->config, session->pool));
if (sess->repos_relpath_buf->len)
- SVN_ERR(svn_ra_reparent(sess->local_session,
+ SVN_ERR(sess->local_session->vtable->reparent(
+ sess->local_session,
svn_path_url_add_component2(
sess->local_repos_root_url,
sess->repos_relpath_buf->data,
scratch_pool),
scratch_pool));
- SVN_ERR(svn_ra_get_latest_revnum(sess->local_session, &rev, scratch_pool));
+ SVN_ERR(sess->local_session->vtable->get_latest_revnum(
+ sess->local_session, &rev, scratch_pool));
if (rev <= 0)
SVN_ERR(svn_ra_git__git_fetch(session, TRUE, scratch_pool));
@@ -399,7 +408,8 @@ ra_git_reparent(svn_ra_session_t *sessio
if (strcmp(sess->session_url_buf->data, url) == 0)
return NULL;
- SVN_ERR(svn_ra_reparent(sess->local_session,
+ SVN_ERR(sess->local_session->vtable->reparent(
+ sess->local_session,
svn_path_url_add_component2(sess->local_repos_root_url,
relpath, pool),
pool));
@@ -431,7 +441,8 @@ ra_git_get_latest_revnum(svn_ra_session_
SVN_ERR(ensure_local_session(session, pool));
return svn_error_trace(
- svn_ra_get_latest_revnum(sess->local_session, latest_revnum, pool));
+ sess->local_session->vtable->get_latest_revnum(sess->local_session,
+ latest_revnum, pool));
}
static svn_error_t *
@@ -465,7 +476,8 @@ ra_git_get_dated_revision(svn_ra_session
SVN_ERR(ensure_local_session(session, pool));
return svn_error_trace(
- svn_ra_get_dated_revision(sess->local_session, revision, tm, pool));
+ sess->local_session->vtable->get_dated_revision(sess->local_session,
+ revision, tm, pool));
}
static svn_error_t *
@@ -481,7 +493,8 @@ ra_git_change_rev_prop(svn_ra_session_t
SVN_ERR(ensure_local_session(session, pool));
return svn_error_trace(
- svn_ra_change_rev_prop2(sess->local_session, rev, name, old_value_p,
+ sess->local_session->vtable->change_rev_prop(
+ sess->local_session, rev, name, old_value_p,
value, pool));
}
@@ -518,7 +531,8 @@ ra_git_rev_proplist(svn_ra_session_t *se
SVN_ERR(ensure_local_session(session, pool));
return svn_error_trace(
- svn_ra_rev_proplist(sess->local_session, rev, props, pool));
+ sess->local_session->vtable->rev_proplist(sess->local_session, rev, props,
+ pool));
}
static svn_error_t *
@@ -533,7 +547,8 @@ ra_git_rev_prop(svn_ra_session_t *sessio
SVN_ERR(ensure_local_session(session, pool));
return svn_error_trace(
- svn_ra_rev_prop(sess->local_session, rev, name, value, pool));
+ sess->local_session->vtable->rev_prop(sess->local_session, rev, name,
+ value, pool));
}
static svn_error_t *
@@ -565,8 +580,9 @@ ra_git_get_mergeinfo(svn_ra_session_t *s
SVN_ERR(ensure_local_session(session, pool));
return svn_error_trace(
- svn_ra_get_mergeinfo(sess->local_session, catalog, paths, revision,
- inherit, include_descendants, pool));
+ sess->local_session->vtable->get_mergeinfo(sess->local_session, catalog,
+ paths, revision, inherit,
+ include_descendants, pool));
}
@@ -589,7 +605,8 @@ ra_git_do_update(svn_ra_session_t *sessi
SVN_ERR(ensure_local_session(session, scratch_pool));
SVN_ERR(svn_ra_git__git_fetch(session, FALSE, scratch_pool));
- SVN_ERR(svn_ra_do_update3(sess->local_session,
+ SVN_ERR(sess->local_session->vtable->do_update(
+ sess->local_session,
reporter, report_baton,
update_revision, update_target, depth,
send_copyfrom_args, ignore_ancestry,
@@ -624,13 +641,19 @@ ra_git_do_switch(svn_ra_session_t *sessi
SVN_ERR(ensure_local_session(session, scratch_pool));
SVN_ERR(svn_ra_git__git_fetch(session, FALSE, scratch_pool));
- SVN_ERR(svn_ra_get_path_relative_to_root(session, &repos_relpath,
- switch_url, scratch_pool));
+ repos_relpath = svn_uri_skip_ancestor(sess->repos_root_url, switch_url,
+ scratch_pool);
+ if (!repos_relpath)
+ return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
+ _("'%s' isn't a child of repository root "
+ "URL '%s'"),
+ switch_url, sess->repos_root_url);
switch_url = svn_path_url_add_component2(sess->local_repos_root_url,
repos_relpath, scratch_pool);
- SVN_ERR(svn_ra_do_switch3(sess->local_session,
+ SVN_ERR(sess->local_session->vtable->do_switch(
+ sess->local_session,
reporter, report_baton,
update_revision, update_target, depth,
switch_url, send_copyfrom_args,
@@ -663,7 +686,8 @@ ra_git_do_status(svn_ra_session_t *sessi
SVN_ERR(ensure_local_session(session, sess->scratch_pool));
SVN_ERR(svn_ra_git__git_fetch(session, FALSE, sess->scratch_pool));
- SVN_ERR(svn_ra_do_status2(sess->local_session,
+ SVN_ERR(sess->local_session->vtable->do_status(
+ sess->local_session,
reporter, report_baton,
status_target, revision, depth,
status_editor, status_baton, pool));
@@ -698,13 +722,19 @@ ra_git_do_diff(svn_ra_session_t *session
SVN_ERR(svn_ra_git__git_fetch(session, TRUE, sess->scratch_pool));
- SVN_ERR(svn_ra_get_path_relative_to_root(session, &repos_relpath,
- switch_url, sess->scratch_pool));
+ repos_relpath = svn_uri_skip_ancestor(sess->repos_root_url, switch_url,
+ sess->scratch_pool);
+ if (!repos_relpath)
+ return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL,
+ _("'%s' isn't a child of repository root "
+ "URL '%s'"),
+ switch_url, sess->repos_root_url);
switch_url = svn_path_url_add_component2(sess->local_repos_root_url,
repos_relpath, sess->scratch_pool);
- SVN_ERR(svn_ra_do_diff3(sess->local_session,
+ SVN_ERR(sess->local_session->vtable->do_diff(
+ sess->local_session,
reporter, report_baton,
update_revision, update_target, depth,
ignore_ancestry, text_deltas, switch_url,
@@ -739,7 +769,8 @@ ra_git_get_log(svn_ra_session_t *session
SVN_ERR(svn_ra_git__git_fetch(session, FALSE, sess->scratch_pool));
return svn_error_trace(
- svn_ra_get_log2(sess->local_session, paths, start, end,
+ sess->local_session->vtable->get_log(
+ sess->local_session, paths, start, end,
limit, discover_changed_paths, strict_node_history,
include_merged_revisions, revprops,
receiver, receiver_baton, pool));
@@ -761,7 +792,8 @@ ra_git_do_check_path(svn_ra_session_t *s
/* ### TODO: Check if we can use the branch name cache for easy result */
return svn_error_trace(
- svn_ra_check_path(sess->local_session, path, revision, kind, pool));
+ sess->local_session->vtable->check_path(sess->local_session, path,
+ revision, kind, pool));
}
@@ -779,7 +811,8 @@ ra_git_stat(svn_ra_session_t *session,
SVN_ERR(svn_ra_git__git_fetch(session, FALSE, sess->scratch_pool));
return svn_error_trace(
- svn_ra_stat(sess->local_session, path, revision, dirent, pool));
+ sess->local_session->vtable->stat(sess->local_session, path, revision,
+ dirent, pool));
}
/* Getting just one file. */
@@ -799,8 +832,8 @@ ra_git_get_file(svn_ra_session_t *sessio
SVN_ERR(svn_ra_git__git_fetch(session, FALSE, sess->scratch_pool));
return svn_error_trace(
- svn_ra_get_file(sess->local_session, path, revision, stream, fetched_rev,
- props, pool));
+ sess->local_session->vtable->get_file(sess->local_session, path, revision,
+ stream, fetched_rev, props, pool));
}
/* Getting a directory's entries */
@@ -821,8 +854,9 @@ ra_git_get_dir(svn_ra_session_t *session
SVN_ERR(svn_ra_git__git_fetch(session, FALSE, sess->scratch_pool));
return svn_error_trace(
- svn_ra_get_dir2(sess->local_session, dirents, fetched_rev, props,
- path, revision, dirent_fields, pool));
+ sess->local_session->vtable->get_dir(sess->local_session, dirents,
+ fetched_rev, props, path, revision,
+ dirent_fields, pool));
}
@@ -841,8 +875,9 @@ ra_git_get_locations(svn_ra_session_t *s
SVN_ERR(svn_ra_git__git_fetch(session, FALSE, sess->scratch_pool));
return svn_error_trace(
- svn_ra_get_locations(sess->local_session, locations, path, peg_revision,
- location_revisions, pool));
+ sess->local_session->vtable->get_locations(sess->local_session, locations,
+ path, peg_revision,
+ location_revisions, pool));
}
@@ -863,7 +898,8 @@ ra_git_get_location_segments(svn_ra_sess
SVN_ERR(svn_ra_git__git_fetch(session, FALSE, sess->scratch_pool));
return svn_error_trace(
- svn_ra_get_location_segments(sess->local_session, path, peg_revision,
+ sess->local_session->vtable->get_location_segments(
+ sess->local_session, path, peg_revision,
start_rev, end_rev, receiver, receiver_baton,
pool));
}
@@ -883,8 +919,9 @@ ra_git_lock(svn_ra_session_t *session,
SVN_ERR(ensure_local_session(session, sess->scratch_pool));
return svn_error_trace(
- svn_ra_lock(sess->local_session, path_revs, comment, steal_lock, lock_func,
- lock_baton, pool));
+ sess->local_session->vtable->lock(sess->local_session, path_revs, comment,
+ steal_lock, lock_func, lock_baton,
+ pool));
}
@@ -902,8 +939,9 @@ ra_git_unlock(svn_ra_session_t *session,
SVN_ERR(ensure_local_session(session, sess->scratch_pool));
return svn_error_trace(
- svn_ra_unlock(sess->local_session, path_tokens, break_lock,
- lock_func, lock_baton, pool));
+ sess->local_session->vtable->unlock(sess->local_session, path_tokens,
+ break_lock, lock_func, lock_baton,
+ pool));
}
static svn_error_t *
@@ -918,7 +956,8 @@ ra_git_get_lock(svn_ra_session_t *sessio
SVN_ERR(ensure_local_session(session, sess->scratch_pool));
return svn_error_trace(
- svn_ra_get_lock(sess->local_session, lock, path, pool));
+ sess->local_session->vtable->get_lock(sess->local_session, lock, path,
+ pool));
}
static svn_error_t *
@@ -934,7 +973,8 @@ ra_git_get_locks(svn_ra_session_t *sessi
SVN_ERR(ensure_local_session(session, sess->scratch_pool));
return svn_error_trace(
- svn_ra_get_locks2(sess->local_session, locks, path, depth, pool));
+ sess->local_session->vtable->get_locks(sess->local_session, locks, path,
+ depth, pool));
}
@@ -954,8 +994,9 @@ ra_git_replay(svn_ra_session_t *session,
SVN_ERR(svn_ra_git__git_fetch(session, FALSE, sess->scratch_pool));
return svn_error_trace(
- svn_ra_replay(sess->local_session, revision, low_water_mark, send_deltas,
- editor, edit_baton, pool));
+ sess->local_session->vtable->replay(sess->local_session, revision,
+ low_water_mark, send_deltas,
+ editor, edit_baton, pool));
}
@@ -977,10 +1018,11 @@ ra_git_replay_range(svn_ra_session_t *se
SVN_ERR(svn_ra_git__git_fetch(session, FALSE, sess->scratch_pool));
return svn_error_trace(
- svn_ra_replay_range(sess->local_session, start_revision, end_revision,
- low_water_mark, send_deltas,
- revstart_func, revfinish_func, replay_baton,
- pool));
+ sess->local_session->vtable->replay_range(sess->local_session,
+ start_revision, end_revision,
+ low_water_mark, send_deltas,
+ revstart_func, revfinish_func,
+ replay_baton, pool));
}
static svn_error_t *
@@ -1004,7 +1046,8 @@ ra_git_has_capability(svn_ra_session_t *
}
return svn_error_trace(
- svn_ra_has_capability(sess->local_session, has, capability, pool));
+ sess->local_session->vtable->has_capability(sess->local_session, has,
+ capability, pool));
}
static svn_error_t *
@@ -1022,9 +1065,9 @@ ra_git_get_deleted_rev(svn_ra_session_t
SVN_ERR(svn_ra_git__git_fetch(session, FALSE, sess->scratch_pool));
return svn_error_trace(
- svn_ra_get_deleted_rev(sess->local_session, path,
- peg_revision, end_revision,
- revision_deleted, pool));
+ sess->local_session->vtable->get_deleted_rev(sess->local_session, path,
+ peg_revision, end_revision,
+ revision_deleted, pool));
}
static svn_error_t *
@@ -1042,7 +1085,8 @@ ra_git_get_inherited_props(svn_ra_sessio
SVN_ERR(svn_ra_git__git_fetch(session, FALSE, sess->scratch_pool));
return svn_error_trace(
- svn_ra_get_inherited_props(sess->local_session, iprops, path, revision,
+ sess->local_session->vtable->get_inherited_props(
+ sess->local_session, iprops, path, revision,
result_pool, scratch_pool));
}
@@ -1056,7 +1100,8 @@ ra_git_register_editor_shim_callbacks(sv
SVN_ERR(ensure_local_session(session, sess->scratch_pool));
return svn_error_trace(
- svn_ra__register_editor_shim_callbacks(sess->local_session, callbacks));
+ sess->local_session->vtable->register_editor_shim_callbacks(
+ sess->local_session, callbacks));
}