aboutsummaryrefslogtreecommitdiff
path: root/subversion/include/private/svn_branch_compat.h
diff options
context:
space:
mode:
Diffstat (limited to 'subversion/include/private/svn_branch_compat.h')
-rw-r--r--subversion/include/private/svn_branch_compat.h273
1 files changed, 273 insertions, 0 deletions
diff --git a/subversion/include/private/svn_branch_compat.h b/subversion/include/private/svn_branch_compat.h
new file mode 100644
index 000000000000..8c7d0b2a04dc
--- /dev/null
+++ b/subversion/include/private/svn_branch_compat.h
@@ -0,0 +1,273 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ *
+ * @file svn_branch_compat.h
+ * @brief Compatibility with svn_delta_editor_t etc.
+ *
+ * @since New in ???.
+ */
+
+#ifndef SVN_BRANCH_COMPAT_H
+#define SVN_BRANCH_COMPAT_H
+
+#include <apr_pools.h>
+
+#include "svn_types.h"
+#include "svn_error.h"
+#include "svn_delta.h"
+#include "svn_ra.h"
+#include "private/svn_branch.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/** Callback to retrieve a node's kind and content. This is
+ * needed by the various editor shims in order to effect backwards
+ * compatibility.
+ *
+ * Implementations should set @a *kind to the node kind of @a repos_relpath
+ * in @a revision.
+ *
+ * Implementations should set @a *props to the hash of properties
+ * associated with @a repos_relpath in @a revision, allocating that hash
+ * and its contents in @a result_pool. Only the 'regular' props should be
+ * included, not special props such as 'entry props'.
+ *
+ * Implementations should set @a *filename to the name of a file
+ * suitable for use as a delta base for @a repos_relpath in @a revision
+ * (allocating @a *filename from @a result_pool), or to @c NULL if the
+ * base stream is empty.
+ *
+ * Any output argument may be NULL if the output is not wanted.
+ *
+ * @a baton is an implementation-specific closure.
+ * @a repos_relpath is relative to the repository root.
+ * The implementation should ensure that @a new_content, including any
+ * file therein, lives at least for the life time of @a result_pool.
+ * @a scratch_pool is provided for temporary allocations.
+ */
+typedef svn_error_t *(*svn_branch__compat_fetch_func_t)(
+ svn_node_kind_t *kind,
+ apr_hash_t **props,
+ svn_stringbuf_t **file_text,
+ apr_hash_t **children_names,
+ void *baton,
+ const char *repos_relpath,
+ svn_revnum_t revision,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool
+ );
+
+/*
+ */
+svn_error_t *
+svn_branch__compat_fetch(svn_element__payload_t **payload_p,
+ svn_branch__txn_t *txn,
+ svn_element__branch_ref_t branch_ref,
+ svn_branch__compat_fetch_func_t fetch_func,
+ void *fetch_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* An object for communicating out-of-band details between an Ev1-to-Ev3
+ * shim and an Ev3-to-Ev1 shim. */
+typedef struct svn_branch__compat_shim_connector_t svn_branch__compat_shim_connector_t;
+
+/* Return an Ev3 editor in *EDITOR_P which will drive the Ev1 delta
+ * editor DEDITOR/DEDIT_BATON.
+ *
+ * This editor buffers all the changes and then drives the Ev1 when the
+ * returned editor's "close" method is called.
+ *
+ * This editor converts moves into copy-and-delete. It presently makes a
+ * one-way (lossy) conversion.
+ *
+ * TODO: Option to pass the 'move' information through as some sort of
+ * metadata so that it can be preserved in an Ev3-Ev1-Ev3 round-trip
+ * conversion.
+ * - Use 'entry-props'?
+ * - Send copy-and-delete with copy-from-rev = -1?
+ *
+ * This editor implements the "independent per-element changes" variant
+ * of the Ev3 commit editor interface.
+ *
+ * Use *BRANCHING_TXN as the branching state info ...
+ *
+ * SHIM_CONNECTOR can be used to enable a more exact round-trip conversion
+ * from an Ev1 drive to Ev3 and back to Ev1. The caller should pass the
+ * returned *SHIM_CONNECTOR value to svn_delta__delta_from_ev3_for_commit().
+ * SHIM_CONNECTOR may be null if not wanted.
+ *
+ * REPOS_ROOT_URL is the repository root URL.
+ *
+ * FETCH_FUNC/FETCH_BATON is a callback by which the shim may retrieve the
+ * original or copy-from kind/properties/text for a path being committed.
+ *
+ * CANCEL_FUNC / CANCEL_BATON: The usual cancellation callback; folded
+ * into the produced editor. May be NULL/NULL if not wanted.
+ *
+ * Allocate the new editor in RESULT_POOL, which may become large and must
+ * live for the lifetime of the edit. Use SCRATCH_POOL for temporary
+ * allocations.
+ */
+svn_error_t *
+svn_branch__compat_txn_from_delta_for_commit(
+ svn_branch__txn_t **txn_p,
+ svn_branch__compat_shim_connector_t **shim_connector,
+ const svn_delta_editor_t *deditor,
+ void *dedit_baton,
+ svn_branch__txn_t *branching_txn,
+ const char *repos_root_url,
+ svn_branch__compat_fetch_func_t fetch_func,
+ void *fetch_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Return a delta editor in DEDITOR/DEDITOR_BATON which will drive EDITOR.
+ *
+ * REPOS_ROOT_URL is the repository root URL, and BASE_RELPATH is the
+ * relative path within the repository of the root directory of the edit.
+ * (An Ev1 edit must be rooted at a directory, not at a file.)
+ *
+ * FETCH_FUNC/FETCH_BATON is a callback by which the shim may retrieve the
+ * original or copy-from kind/properties/text for a path being committed.
+ *
+ * SHIM_CONNECTOR can be used to enable a more exact round-trip conversion
+ * from an Ev1 drive to Ev3 and back to Ev1. It must live for the lifetime
+ * of the edit. It may be null if not wanted.
+ *
+ * Allocate the new editor in RESULT_POOL, which may become large and must
+ * live for the lifetime of the edit. Use SCRATCH_POOL for temporary
+ * allocations.
+ */
+svn_error_t *
+svn_branch__compat_delta_from_txn_for_commit(
+ const svn_delta_editor_t **deditor,
+ void **dedit_baton,
+ svn_branch__txn_t *edit_txn,
+ const char *repos_root_url,
+ const char *base_relpath,
+ svn_branch__compat_fetch_func_t fetch_func,
+ void *fetch_baton,
+ const svn_branch__compat_shim_connector_t *shim_connector,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Return in NEW_DEDITOR/NEW_DETIT_BATON a delta editor that wraps
+ * OLD_DEDITOR/OLD_DEDIT_BATON, inserting a pair of shims that convert
+ * Ev1 to Ev3 and back to Ev1.
+ *
+ * REPOS_ROOT_URL is the repository root URL, and BASE_RELPATH is the
+ * relative path within the repository of the root directory of the edit.
+ *
+ * FETCH_FUNC/FETCH_BATON is a callback by which the shim may retrieve the
+ * original or copy-from kind/properties/text for a path being committed.
+ */
+svn_error_t *
+svn_branch__compat_insert_shims(
+ const svn_delta_editor_t **new_deditor,
+ void **new_dedit_baton,
+ const svn_delta_editor_t *old_deditor,
+ void *old_dedit_baton,
+ const char *repos_root,
+ const char *base_relpath,
+ svn_branch__compat_fetch_func_t fetch_func,
+ void *fetch_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* A callback for declaring the target revision of an update or switch.
+ */
+typedef svn_error_t *(*svn_branch__compat_set_target_revision_func_t)(
+ void *baton,
+ svn_revnum_t target_revision,
+ apr_pool_t *scratch_pool);
+
+/* An update (or switch) editor.
+ *
+ * This consists of a plain Ev3 editor and the additional methods or
+ * resources needed for use as an update or switch editor.
+ */
+typedef struct svn_branch__compat_update_editor3_t {
+ /* The txn we're driving. */
+ svn_branch__txn_t *edit_txn;
+
+ /* A method to communicate the target revision of the update (or switch),
+ * to be called before driving the editor. It has its own baton, rather
+ * than using the editor's baton, so that the editor can be replaced (by
+ * a wrapper editor, typically) without having to wrap this callback. */
+ svn_branch__compat_set_target_revision_func_t set_target_revision_func;
+ void *set_target_revision_baton;
+} svn_branch__compat_update_editor3_t;
+
+/* Like svn_delta__ev3_from_delta_for_commit() but for an update editor.
+ */
+svn_error_t *
+svn_branch__compat_txn_from_delta_for_update(
+ svn_branch__compat_update_editor3_t **editor_p,
+ const svn_delta_editor_t *deditor,
+ void *dedit_baton,
+ svn_branch__txn_t *branching_txn,
+ const char *repos_root_url,
+ const char *base_repos_relpath,
+ svn_branch__compat_fetch_func_t fetch_func,
+ void *fetch_baton,
+ svn_cancel_func_t cancel_func,
+ void *cancel_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* Like svn_delta__delta_from_ev3_for_commit() but for an update editor.
+ */
+svn_error_t *
+svn_branch__compat_delta_from_txn_for_update(
+ const svn_delta_editor_t **deditor,
+ void **dedit_baton,
+ svn_branch__compat_update_editor3_t *update_editor,
+ const char *repos_root_url,
+ const char *base_repos_relpath,
+ svn_branch__compat_fetch_func_t fetch_func,
+ void *fetch_baton,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
+
+/* An Ev1 editor that drives (heuristically) a move-tracking editor.
+ */
+svn_error_t *
+svn_branch__compat_get_migration_editor(
+ const svn_delta_editor_t **old_editor,
+ void **old_edit_baton,
+ svn_branch__txn_t *edit_txn,
+ svn_ra_session_t *from_session,
+ svn_revnum_t revision,
+ apr_pool_t *result_pool);
+
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* SVN_BRANCH_COMPAT_H */