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/03 14:04:57 UTC
svn commit: r1717755 [3/4] - in
/subversion/branches/ra-git/subversion/libsvn_ra_git: fetch.c ra_git.h
ra_plugin.c reporter.c session.c
Modified: subversion/branches/ra-git/subversion/libsvn_ra_git/ra_git.h
URL: http://svn.apache.org/viewvc/subversion/branches/ra-git/subversion/libsvn_ra_git/ra_git.h?rev=1717755&r1=1717754&r2=1717755&view=diff
==============================================================================
--- subversion/branches/ra-git/subversion/libsvn_ra_git/ra_git.h (original)
+++ subversion/branches/ra-git/subversion/libsvn_ra_git/ra_git.h Thu Dec 3 13:04:57 2015
@@ -24,88 +24,96 @@
#ifndef SVN_LIBSVN_RA_GIT_H
#define SVN_LIBSVN_RA_GIT_H
-/* We compile in C89 mode, so the 'inline' keyword used by libgit2 isn't supported. */
-#define inline APR_INLINE
+typedef struct svn_ra_git__session_t
+{
+ /* Callbacks/baton passed to svn_ra_open. */
+ const svn_ra_callbacks2_t *callbacks;
+ void *callback_baton;
-#include <git2.h>
+ /* Stashed config */
+ apr_hash_t *config;
-svn_error_t *
-svn_ra_git__wrap_git_error(void);
+ /* The URL of the session. */
+ const char *repos_root_url;
-svn_error_t *
-svn_ra_git__check_path(svn_node_kind_t *kind, git_tree *tree, const char *path);
+ /* The file:/// session backing the git session*/
+ svn_ra_session_t *local_session;
+ const char *local_repos_abspath;
+ const char *local_repos_root_url;
+
+ /* The UUID associated with REPOS (faked) */
+ const char *uuid;
+
+ /* The URL of the remote in git format. */
+ const char *git_remote_url;
+ svn_boolean_t fetch_done;
+
+ /* The relative path in the tree the session is rooted at. */
+ svn_stringbuf_t *repos_relpath_buf;
+
+ /* The relative path in the tree the session is rooted at. */
+ svn_stringbuf_t *session_url_buf;
+
+ apr_pool_t *scratch_pool;
-apr_hash_t *
-svn_ra_git__make_revprops_hash(git_commit *commit, apr_pool_t *pool);
+ /* Cached reference to svn_ra_open() to allow opening our
+ ra_local session */
+ svn_ra__open_func_t svn_ra_open;
+
+ apr_uint64_t progress_bytes;
+} svn_ra_git__session_t;
svn_error_t *
-svn_ra_git__find_last_changed(svn_revnum_t *last_changed,
- apr_hash_t *revmap,
- const char *path,
- svn_revnum_t pegrev,
- git_repository *repos,
- apr_pool_t *pool);
+svn_ra_git__wrap_git_error(void);
+
+#define GIT2_ERR(expr) \
+ do { \
+ int svn_err__git_temp = (expr); \
+ if (svn_err__git_temp) \
+ return svn_ra_git__wrap_git_error(); \
+ } while (0)
+
+#define GIT2_ERR_NOTFOUND(x, expr) \
+ do { \
+ int svn_err__git_temp = (expr); \
+ if (svn_err__git_temp == GIT_ENOTFOUND) \
+ { \
+ giterr_clear(); \
+ *x = NULL; \
+ } \
+ else if (svn_err__git_temp) \
+ return svn_ra_git__wrap_git_error(); \
+ } while (0)
/* Git repositories don't have a UUID so a static UUID is as good as any. */
#define RA_GIT_UUID "a62d4ba0-b83e-11e3-8621-8f162a3365eb"
/* ---------------------------------------------------------------*/
-
-/* Reporting the state of a working copy, for updates. */
-/* Like svn_repos_begin_report3() but for git repositories. */
-svn_error_t *
-svn_ra_git__reporter_begin_report(void **report_baton,
- svn_revnum_t revnum,
- git_repository *repos,
- apr_hash_t *revmap,
- const char *fs_base,
- const char *target,
- const char *tgt_path,
- svn_boolean_t text_deltas,
- svn_depth_t depth,
- svn_boolean_t ignore_ancestry,
- svn_boolean_t send_copyfrom_args,
- const svn_delta_editor_t *editor,
- void *edit_baton,
- apr_size_t zero_copy_limit,
- apr_pool_t *pool);
+typedef struct svn_ra_git_branch_t
+{
+ const char *name;
+ const char *symref_target;
+} svn_ra_git_branch_t;
-/* Like svn_repos_set_path3() but for git repositories. */
-svn_error_t *
-svn_ra_git__reporter_set_path(void *report_baton,
- const char *path,
- svn_revnum_t revision,
- svn_depth_t depth,
- svn_boolean_t start_empty,
- const char *lock_token,
- apr_pool_t *pool);
-
-/* Like svn_repos_link_path3() but for git repositories. */
-svn_error_t *
-svn_ra_git__reporter_link_path(void *report_baton,
- const char *path,
- const char *link_path,
- svn_revnum_t revision,
- svn_depth_t depth,
- svn_boolean_t start_empty,
- const char *lock_token,
- apr_pool_t *pool);
-/* Like svn_repos_delete_path() but for git repositories. */
svn_error_t *
-svn_ra_git__reporter_delete_path(void *report_baton,
- const char *path,
- apr_pool_t *pool);
+svn_ra_git__split_url(const char **repos_root_url,
+ const char **repos_relpath,
+ const char **git_remote_url,
+ apr_array_header_t **branches,
+ svn_ra_git__session_t *session,
+ const char *url,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool);
-/* Like svn_repos_finish_report() but for git repositories. */
svn_error_t *
-svn_ra_git__reporter_finish_report(void *report_baton,
- apr_pool_t *pool);
+svn_ra_git__ensure_local_session(svn_ra_session_t *session,
+ apr_pool_t *scratch_pool);
-/* Like svn_repos_finish_report() but for git repositories. */
svn_error_t *
-svn_ra_git__reporter_abort_report(void *report_baton,
- apr_pool_t *pool);
+svn_ra_git__git_fetch(svn_ra_session_t *session,
+ svn_boolean_t refresh,
+ apr_pool_t *scratch_pool);
#endif /* SVN_LIBSVN_RA_GIT_H */