Hi,
stsp mentioned that this code might actually be useful for externals
that are kept in Git, so I've been looking more closely at the code and
found a quick fix I could make.
[[[
On the 'ra-git' branch: Remove unnecessary code in libsvn_ra_git
* subversion/libsvn_ra_git/ra_plugin.c
(do_git_fetch): no need for explicit connect before fetching
(svn_ra_git__stat): look up the bob/tree as a generic object, which is
what map_obj_to_direct() wants.
]]]
Cheers,
cmn
Index: subversion/libsvn_ra_git/ra_plugin.c
===================================================================
--- subversion/libsvn_ra_git/ra_plugin.c (revision 1601633)
+++ subversion/libsvn_ra_git/ra_plugin.c (working copy)
@@ -203,13 +203,6 @@ do_git_fetch(svn_ra_git__session_baton_t *sess)
if (sess->fetch_done)
return SVN_NO_ERROR;
- if (!git_remote_connected(sess->remote))
- {
- git_err = git_remote_connect(sess->remote, GIT_DIRECTION_FETCH);
- if (git_err)
- return svn_error_trace(svn_ra_git__wrap_git_error());
- }
-
SVN_DBG(("fetching from %s\n", git_remote_url(sess->remote)));
git_err = git_remote_fetch(sess->remote);
@@ -1974,11 +1967,10 @@ svn_ra_git__stat(svn_ra_session_t *session,
}
type = git_tree_entry_type(entry);
- if (type == GIT_OBJ_TREE)
- {
- git_tree *this_tree;
-
- git_err = git_tree_lookup(&this_tree, sess->repos, git_tree_entry_id(entry));
+ if (type == GIT_OBJ_TREE || type == GIT_OBJ_BLOB)
+ {
+ git_object *object;
+ git_err = git_object_lookup(&object, sess->repos, git_tree_entry_id(entry), type);
if (git_err)
{
git_tree_entry_free(entry);
@@ -1989,25 +1981,9 @@ svn_ra_git__stat(svn_ra_session_t *session,
}
SVN_ERR(map_obj_to_dirent(dirent, sess->revmap, path, revision, SVN_DIRENT_ALL,
- sess->repos, commit, (git_object *)this_tree, pool));
- git_tree_free(this_tree);
- }
- else if (type == GIT_OBJ_BLOB)
- {
- git_blob *blob;
-
- git_err = git_blob_lookup(&blob, sess->repos, git_tree_entry_id(entry));
- if (git_err)
- {
- git_tree_free(tree);
- git_commit_free(commit);
- return svn_error_trace(svn_ra_git__wrap_git_error());
- }
-
- SVN_ERR(map_obj_to_dirent(dirent, sess->revmap, path, revision, SVN_DIRENT_ALL,
- sess->repos, commit, (git_object *)blob, pool));
- git_blob_free(blob);
- }
+ sess->repos, commit, object, pool));
+ git_object_free(object);
+ }
else
{
git_tree_entry_free(entry);