Hi,

Based on feedback from Daniel Shahaf, I've made the build system care
about which version of libgit2 we're trying to link against. I copied
what apache.m4 was doing, which I figured was a good template.

[[[
On the ‘ra-git’ branch: update to libgit2 v0.21

* build/ac-macros/libgit2.m4:
  Check for the exact version we need to build against

* subversion/libsvn_ra_git/ra_plugin.c:
  (split_url): remotes which are not in the config are now called
anonymous.
  (do_git_fetch): pass NULL to git_remote_fetch() to get default reflog
entries.
  (remote_progress_cb, svn_ra_git__open): the progress callback has been
    renamed to sideband_progress. Rename our callback function to
    remote_sideband_progress_cb to match libgit2 naming.
  (compare_git_tree_entries): git_tree_entry_byoid is now
git_tree_entry_byid.

* subversion/libsvn_ra_git/reporter.c:
  (blob_relatedness_cb): delta file field oid has been renamed to id.
]]]

Index: build/ac-macros/libgit2.m4
===================================================================
--- build/ac-macros/libgit2.m4	(revision 1606591)
+++ build/ac-macros/libgit2.m4	(working copy)
@@ -26,6 +26,8 @@ dnl
 AC_DEFUN(SVN_LIB_GIT2,
 [
   libgit2_found=no
+  LIBGIT2_WANTED_MAJOR_VERSION=0
+  LIBGIT2_WANTED_MINOR_VERSION=21
 
   AC_ARG_WITH(libgit2,AS_HELP_STRING([--with-libgit2=PREFIX],
                                   [libgit2 library]),
@@ -57,6 +59,17 @@ AC_DEFUN(SVN_LIB_GIT2,
     LDFLAGS="$LDFLAGS `SVN_REMOVE_STANDARD_LIB_DIRS(-L$libgit2_prefix/lib)`"
   fi
 
+  AC_MSG_CHECKING([libgit2 version])
+  AC_EGREP_CPP(VERSION_OKAY,
+          [
+#include "$libgit2_prefix/include/git2/version.h"
+#if LIBGIT2_VER_MAJOR == $LIBGIT2_WANTED_MAJOR_VERSION && LIBGIT2_VER_MINOR == $LIBGIT2_WANTED_MINOR_VERSION
+VERSION_OKAY
+#endif],
+        [AC_MSG_RESULT([correct])],
+        [AC_MSG_ERROR([wrong version, need $LIBGIT2_WANTED_MAJOR_VERSION.$LIBGIT2_WANTED_MINOR_VERSION])]
+        )
+
   SVN_LIBGIT2_LIBS="-lgit2"
 
   AC_SUBST(SVN_LIBGIT2_INCLUDES)
Index: subversion/libsvn_ra_git/ra_plugin.c
===================================================================
--- subversion/libsvn_ra_git/ra_plugin.c	(revision 1606591)
+++ subversion/libsvn_ra_git/ra_plugin.c	(working copy)
@@ -144,9 +144,9 @@ split_url(const char **remote_url,
       SVN_DBG(("trying remote url '%s'", remote_url_buf->data));
 
       /* Create an in-memory remote... */
-      git_err = git_remote_create_inmemory(&remote, repos,
-                                           RA_GIT_DEFAULT_REFSPEC,
-                                           remote_url_buf->data);
+      git_err = git_remote_create_anonymous(&remote, repos,
+                                            remote_url_buf->data,
+                                            RA_GIT_DEFAULT_REFSPEC);
       if (git_err)
         return svn_error_trace(svn_ra_git__wrap_git_error());
 
@@ -205,7 +205,7 @@ do_git_fetch(svn_ra_git__session_baton_t *sess)
 
   SVN_DBG(("fetching from %s\n", git_remote_url(sess->remote)));
 
-  git_err = git_remote_fetch(sess->remote);
+  git_err = git_remote_fetch(sess->remote, NULL, NULL);
   if (git_err)
     return svn_error_trace(svn_ra_git__wrap_git_error());
 
@@ -609,7 +609,7 @@ check_cancel_stop_remote(svn_ra_git__session_baton
     }
 }
 
-static int remote_progress_cb(const char *str, int len, void *data)
+static int remote_sideband_progress_cb(const char *str, int len, void *data)
 {
   svn_ra_git__session_baton_t *sess = data;
   svn_string_t *s;
@@ -981,7 +981,7 @@ svn_ra_git__open(svn_ra_session_t *session,
 
   remote_callbacks = apr_pcalloc(session->pool, sizeof(*remote_callbacks));
   remote_callbacks->version = GIT_REMOTE_CALLBACKS_VERSION;
-  remote_callbacks->progress = remote_progress_cb;
+  remote_callbacks->sideband_progress = remote_sideband_progress_cb;
   remote_callbacks->transfer_progress = remote_transfer_progress_cb;
   remote_callbacks->update_tips = remote_update_tips_cb;
   remote_callbacks->payload = sess;
@@ -1475,7 +1475,7 @@ compare_git_tree_entries(apr_hash_t *changed_paths
               const char *entry_relpath;
 
               changed_path = svn_log_changed_path2_create(pool);
-              other_entry = git_tree_entry_byoid(other_tree, other_oid);
+              other_entry = git_tree_entry_byid(other_tree, other_oid);
               if (git_tree_entry_type(other_entry) == GIT_OBJ_BLOB)
                 changed_path->action = 'M';
               else
@@ -1526,7 +1526,7 @@ compare_git_tree_entries(apr_hash_t *changed_paths
                                   other_entry_name, pool),
           svn_hash_sets(changed_paths, other_entry_relpath, changed_path);
 
-          other_entry = git_tree_entry_byoid(other_tree, other_entry_id);
+          other_entry = git_tree_entry_byid(other_tree, other_entry_id);
           if (git_tree_entry_type(other_entry) == GIT_OBJ_TREE)
             {
               git_tree *added_tree;
Index: subversion/libsvn_ra_git/reporter.c
===================================================================
--- subversion/libsvn_ra_git/reporter.c	(revision 1606591)
+++ subversion/libsvn_ra_git/reporter.c	(working copy)
@@ -780,12 +780,12 @@ blob_relatedness_cb(const git_diff_delta *delta, f
   
   /* At least one of the oids should match, else we're not looking
    * at the right blob. */
-  if (!git_oid_equal(&delta->old_file.oid, git_blob_id(b->blob)) &&
-      !git_oid_equal(&delta->new_file.oid, git_blob_id(b->other_blob)))
+  if (!git_oid_equal(&delta->old_file.id, git_blob_id(b->blob)) &&
+      !git_oid_equal(&delta->new_file.id, git_blob_id(b->other_blob)))
     return 0;
 
-  if (git_oid_iszero(&delta->old_file.oid) ||
-      git_oid_iszero(&delta->new_file.oid))
+  if (git_oid_iszero(&delta->old_file.id) ||
+      git_oid_iszero(&delta->new_file.id))
     {
       /* A zero oid means the blob doesn't actually exist on one side. */
       b->distance = -1;

Reply via email to