Index: subversion/libsvn_ra/wrapper_template.h
===================================================================
--- subversion/libsvn_ra/wrapper_template.h	(revision 16161)
+++ subversion/libsvn_ra/wrapper_template.h	(working copy)
@@ -37,6 +37,27 @@
 #error Missing define for RA compatibility wrapper.
 #endif
 
+/* for compatibility with svn_commit_callback_t */
+struct compat_wrapper_baton {
+  void *baton;
+  svn_commit_callback_t callback;
+};
+
+svn_error_t *compat_wrapper_commit_callback (svn_commit_info_t *commit_info,
+                                              void *baton)
+{
+  struct compat_wrapper_baton *cwb = baton;
+
+  if (cwb->callback)
+    return cwb->callback (commit_info->revision,
+                          commit_info->date,
+                          commit_info->author,
+                          cwb->baton);
+
+  return SVN_NO_ERROR;
+}
+
+
 static svn_error_t *compat_open (void **session_baton,
                                  const char *repos_URL,
                                  const svn_ra_callbacks_t *callbacks,
@@ -128,8 +149,17 @@
                                               void *callback_baton,
                                               apr_pool_t *pool)
 {
+  struct compat_wrapper_baton *cwb
+    = apr_pcalloc (pool, sizeof (*cwb));
+
+  /* Set the user provided old format callback in the baton */
+  cwb->baton = callback_baton;
+  cwb->callback = callback;
+
+  /* Use the wrapper callback and baton */
   return VTBL.get_commit_editor (session_baton, editor, edit_baton, log_msg,
-                                 callback, callback_baton, NULL, TRUE, pool);
+                                 compat_wrapper_commit_callback, cwb,
+                                 NULL, TRUE, pool);
 }
 
 static svn_error_t *compat_get_file (void *session_baton,
Index: subversion/libsvn_ra/ra_loader.c
===================================================================
--- subversion/libsvn_ra/ra_loader.c	(revision 16161)
+++ subversion/libsvn_ra/ra_loader.c	(working copy)
@@ -221,6 +221,26 @@
   return SVN_NO_ERROR;
 }
 
+/* for compatibility with svn_commit_callback_t */
+struct commit_wrapper_baton {
+  void *baton;
+  svn_commit_callback_t callback;
+};
+
+svn_error_t *svn_ra__wrapper_commit_callback (svn_commit_info_t *commit_info,
+                                              void *baton)
+{
+  struct commit_wrapper_baton *cwb = baton;
+
+  if (cwb->callback)
+    return cwb->callback (commit_info->revision,
+                          commit_info->date,
+                          commit_info->author,
+                          cwb->baton);
+
+  return SVN_NO_ERROR;
+}
+
 /* -------------------------------------------------------------- */
 
 /*** Public Interfaces ***/
@@ -362,6 +382,21 @@
   return session->vtable->rev_prop (session, rev, name, value, pool);
 }
 
+svn_error_t *svn_ra_get_commit_editor2 (svn_ra_session_t *session,
+                                        const svn_delta_editor_t **editor,
+                                        void **edit_baton,
+                                        const char *log_msg,
+                                        svn_commit_callback2_t callback,
+                                        void *callback_baton,
+                                        apr_hash_t *lock_tokens,
+                                        svn_boolean_t keep_locks,
+                                        apr_pool_t *pool)
+{
+  return session->vtable->get_commit_editor (session, editor, edit_baton,
+                                             log_msg, callback, callback_baton,
+                                             lock_tokens, keep_locks, pool);
+}
+
 svn_error_t *svn_ra_get_commit_editor (svn_ra_session_t *session,
                                        const svn_delta_editor_t **editor,
                                        void **edit_baton,
@@ -372,9 +407,17 @@
                                        svn_boolean_t keep_locks,
                                        apr_pool_t *pool)
 {
-  return session->vtable->get_commit_editor (session, editor, edit_baton,
-                                             log_msg, callback, callback_baton,
-                                             lock_tokens, keep_locks, pool);
+  struct commit_wrapper_baton *cwb
+    = apr_pcalloc (pool, sizeof (*cwb));
+
+  /* Set the user provided old format callback in the baton */
+  cwb->baton = callback_baton;
+  cwb->callback = callback;
+
+  /* Use the wrapper callback and baton */
+  return svn_ra_get_commit_editor2 (session, editor, edit_baton,
+                                    log_msg, svn_ra__wrapper_commit_callback,
+                                    cwb, lock_tokens, keep_locks, pool);
 }
 
 svn_error_t *svn_ra_get_file (svn_ra_session_t *session,
Index: subversion/libsvn_ra/ra_loader.h
===================================================================
--- subversion/libsvn_ra/ra_loader.h	(revision 16161)
+++ subversion/libsvn_ra/ra_loader.h	(working copy)
@@ -80,7 +80,7 @@
                                      const svn_delta_editor_t **editor,
                                      void **edit_baton,
                                      const char *log_msg,
-                                     svn_commit_callback_t callback,
+                                     svn_commit_callback2_t callback,
                                      void *callback_baton,
                                      apr_hash_t *lock_tokens,
                                      svn_boolean_t keep_locks,
Index: subversion/include/svn_repos.h
===================================================================
--- subversion/include/svn_repos.h	(revision 16161)
+++ subversion/include/svn_repos.h	(working copy)
@@ -678,7 +678,7 @@
                               const char *base_path,
                               const char *user,
                               const char *log_msg,
-                              svn_commit_callback_t callback,
+                              svn_commit_callback2_t callback2,
                               void *callback_baton,
                               svn_repos_authz_callback_t authz_callback,
                               void *authz_baton,
@@ -686,7 +686,8 @@
 
 /**
  * Similar to svn_repos_get_commit_editor3(), but with @a
- * authz_callback and @a authz_baton set to @c NULL.
+ * authz_callback and @a authz_baton set to @c NULL
+ * and without the @a callback2 parameter.
  *
  * @deprecated Provided for backward compatibility with the 1.2 API.
  */
Index: subversion/include/svn_types.h
===================================================================
--- subversion/include/svn_types.h	(revision 16161)
+++ subversion/include/svn_types.h	(working copy)
@@ -398,7 +398,19 @@
  * When a commit succeeds, an instance of this is invoked on the @a
  * new_revision, @a date, and @a author of the commit, along with the
  * @a baton closure.
+ *
+ * @since New in 1.3.
  */
+typedef svn_error_t * (*svn_commit_callback2_t) (
+    svn_commit_info_t *commit_info,
+    void *baton);
+
+
+/** Same as svn_commit_callback2_t, but uses individual
+ * data elements instead of the svn_commit_info_t structure
+ *
+ * @deprecated Provided for backward compatibility with the 1.2 API.
+ */
 typedef svn_error_t * (*svn_commit_callback_t) (
     svn_revnum_t new_revision,
     const char *date,
Index: subversion/include/svn_ra.h
===================================================================
--- subversion/include/svn_ra.h	(revision 16161)
+++ subversion/include/svn_ra.h	(working copy)
@@ -576,8 +576,23 @@
  * 
  * Use @a pool for memory allocation.
  *
- * @since New in 1.2.
+ * @since New in 1.3.
  */
+svn_error_t *svn_ra_get_commit_editor2 (svn_ra_session_t *session,
+                                        const svn_delta_editor_t **editor,
+                                        void **edit_baton,
+                                        const char *log_msg,
+                                        svn_commit_callback2_t callback,
+                                        void *callback_baton,
+                                        apr_hash_t *lock_tokens,
+                                        svn_boolean_t keep_locks,
+                                        apr_pool_t *pool);
+
+/**
+ * Same as svn_ra_get_commit_editor2, but uses svn_commit_callback_t.
+ *
+ * @deprecated Provided for backward compatibility with the 1.2 API.
+ */ 
 svn_error_t *svn_ra_get_commit_editor (svn_ra_session_t *session,
                                        const svn_delta_editor_t **editor,
                                        void **edit_baton,
Index: subversion/libsvn_ra_local/ra_plugin.c
===================================================================
--- subversion/libsvn_ra_local/ra_plugin.c	(revision 16161)
+++ subversion/libsvn_ra_local/ra_plugin.c	(working copy)
@@ -408,7 +408,7 @@
   const char *fs_path;             /* fs-path part of split session URL */
   apr_hash_t *lock_tokens;         /* tokens to unlock, if any */
   apr_pool_t *pool;                /* pool for scratch work */
-  svn_commit_callback_t callback;  /* the original callback */
+  svn_commit_callback2_t callback;  /* the original callback */
   void *callback_baton;            /* the original callback's baton */
 };
 
@@ -417,9 +417,7 @@
    possibly unlocks committed paths.
    BATON is 'struct deltify_etc_baton *'. */
 static svn_error_t * 
-deltify_etc (svn_revnum_t new_revision,
-             const char *date,
-             const char *author,
+deltify_etc (svn_commit_info_t *commit_info,
              void *baton)
 {
   struct deltify_etc_baton *db = baton;
@@ -430,7 +428,7 @@
   /* Invoke the original callback first, in case someone's waiting to
      know the revision number so they can go off and annotate an
      issue or something. */
-  err1 = (*db->callback) (new_revision, date, author, db->callback_baton);
+  err1 = (*db->callback) (commit_info, db->callback_baton);
 
   /* Maybe unlock the paths. */
   if (db->lock_tokens)
@@ -459,7 +457,7 @@
   /* But, deltification shouldn't be stopped just because someone's
      random callback failed, so proceed unconditionally on to
      deltification. */
-  err2 = svn_fs_deltify_revision (db->fs, new_revision, db->pool);
+  err2 = svn_fs_deltify_revision (db->fs, commit_info->revision, db->pool);
 
   /* It's more interesting if the original callback failed, so let
      that one dominate. */
@@ -478,7 +476,7 @@
                                  const svn_delta_editor_t **editor,
                                  void **edit_baton,
                                  const char *log_msg,
-                                 svn_commit_callback_t callback,
+                                 svn_commit_callback2_t callback,
                                  void *callback_baton,
                                  apr_hash_t *lock_tokens,
                                  svn_boolean_t keep_locks,
Index: subversion/libsvn_client/delete.c
===================================================================
--- subversion/libsvn_client/delete.c	(revision 16161)
+++ subversion/libsvn_client/delete.c	(working copy)
@@ -185,11 +185,11 @@
 
   /* Fetch RA commit editor */
   SVN_ERR (svn_client__commit_get_baton (&commit_baton, commit_info, pool));
-  SVN_ERR (svn_ra_get_commit_editor (ra_session, &editor, &edit_baton,
-                                     log_msg, svn_client__commit_callback,
-                                     commit_baton,
-                                     NULL, TRUE, /* No lock tokens */
-                                     pool));
+  SVN_ERR (svn_ra_get_commit_editor2 (ra_session, &editor, &edit_baton,
+                                      log_msg, svn_client__commit_callback,
+                                      commit_baton,
+                                      NULL, TRUE, /* No lock tokens */
+                                      pool));
 
   /* Call the path-based editor driver. */
   err = svn_delta_path_driver (editor, edit_baton, SVN_INVALID_REVNUM, 
Index: subversion/libsvn_client/client.h
===================================================================
--- subversion/libsvn_client/client.h	(revision 16161)
+++ subversion/libsvn_client/client.h	(working copy)
@@ -259,9 +259,7 @@
    pointed by commit_baton. If the commit_info supplied by get_baton
    points to NULL after close_edit, it means the commit is a no-op.
 */
-svn_error_t *svn_client__commit_callback (svn_revnum_t revision,
-                                          const char *date,
-                                          const char *author,
+svn_error_t *svn_client__commit_callback (svn_commit_info_t *commit_info,
                                           void *baton);
 
 /* ---------------------------------------------------------------- */
Index: subversion/libsvn_client/copy.c
===================================================================
--- subversion/libsvn_client/copy.c	(revision 16161)
+++ subversion/libsvn_client/copy.c	(working copy)
@@ -449,11 +449,11 @@
 
   /* Fetch RA commit editor. */
   SVN_ERR (svn_client__commit_get_baton (&commit_baton, commit_info, pool));
-  SVN_ERR (svn_ra_get_commit_editor (ra_session, &editor, &edit_baton, message,
-                                     svn_client__commit_callback,
-                                     commit_baton, 
-                                     NULL, TRUE, /* No lock tokens */
-                                     pool));
+  SVN_ERR (svn_ra_get_commit_editor2 (ra_session, &editor, &edit_baton, message,
+                                      svn_client__commit_callback,
+                                      commit_baton, 
+                                      NULL, TRUE, /* No lock tokens */
+                                      pool));
 
   /* Setup our PATHS for the path-based editor drive. */
   APR_ARRAY_PUSH (paths, const char *) = dst_rel;
@@ -705,12 +705,12 @@
 
   /* Fetch RA commit editor. */
   SVN_ERR (svn_client__commit_get_baton (&commit_baton, commit_info, pool));
-  if ((cmt_err = svn_ra_get_commit_editor (ra_session, &editor, &edit_baton, 
-                                           message,
-                                           svn_client__commit_callback,
-                                           commit_baton, 
-                                           NULL, TRUE, /* No lock tokens */
-                                           pool)))
+  if ((cmt_err = svn_ra_get_commit_editor2 (ra_session, &editor, &edit_baton, 
+                                            message,
+                                            svn_client__commit_callback,
+                                            commit_baton, 
+                                            NULL, TRUE, /* No lock tokens */
+                                            pool)))
     goto cleanup;
 
   /* Make a note that we have a commit-in-progress. */
Index: subversion/libsvn_client/commit_util.c
===================================================================
--- subversion/libsvn_client/commit_util.c	(revision 16161)
+++ subversion/libsvn_client/commit_util.c	(working copy)
@@ -1337,18 +1337,21 @@
   return SVN_NO_ERROR;
 }
 
-svn_error_t *svn_client__commit_callback (svn_revnum_t revision,
-                                          const char *date,
-                                          const char *author,
+svn_error_t *svn_client__commit_callback (svn_commit_info_t *commit_info,
                                           void *baton)
 {
   struct commit_baton *cb = baton;
   svn_commit_info_t **info = cb->info;
 
   *info = svn_create_commit_info (cb->pool);
-  (*info)->date = date ? apr_pstrdup (cb->pool, date) : NULL;
-  (*info)->author = author ? apr_pstrdup (cb->pool, author) : NULL;
-  (*info)->revision = revision;
+  if (commit_info)
+    {
+       (*info)->date = commit_info->date ?
+                         apr_pstrdup (cb->pool, commit_info->date) : NULL;
+       (*info)->author = commit_info->author ?
+                           apr_pstrdup (cb->pool, commit_info->author) : NULL;
+       (*info)->revision = commit_info->revision;
+    }
 
   return SVN_NO_ERROR;
 }
Index: subversion/libsvn_client/add.c
===================================================================
--- subversion/libsvn_client/add.c	(revision 16161)
+++ subversion/libsvn_client/add.c	(working copy)
@@ -589,11 +589,11 @@
 
   /* Fetch RA commit editor */
   SVN_ERR (svn_client__commit_get_baton (&commit_baton, commit_info, pool));
-  SVN_ERR (svn_ra_get_commit_editor (ra_session, &editor, &edit_baton,
-                                     log_msg, svn_client__commit_callback,
-                                     commit_baton, 
-                                       NULL, TRUE, /* No lock tokens */
-                                     pool));
+  SVN_ERR (svn_ra_get_commit_editor2 (ra_session, &editor, &edit_baton,
+                                      log_msg, svn_client__commit_callback,
+                                      commit_baton, 
+                                      NULL, TRUE, /* No lock tokens */
+                                      pool));
   
   /* Call the path-based editor driver. */
   err = svn_delta_path_driver (editor, edit_baton, SVN_INVALID_REVNUM, 
Index: subversion/libsvn_client/commit.c
===================================================================
--- subversion/libsvn_client/commit.c	(revision 16161)
+++ subversion/libsvn_client/commit.c	(working copy)
@@ -623,10 +623,10 @@
   
   /* Fetch RA commit editor. */
   SVN_ERR (svn_client__commit_get_baton (&commit_baton, commit_info, pool));
-  return svn_ra_get_commit_editor (*ra_session, editor, edit_baton, log_msg,
-                                   svn_client__commit_callback,
-                                   commit_baton, lock_tokens, keep_locks,
-                                   pool);
+  return svn_ra_get_commit_editor2 (*ra_session, editor, edit_baton, log_msg,
+                                    svn_client__commit_callback,
+                                    commit_baton, lock_tokens, keep_locks,
+                                    pool);
 }
 
 
Index: subversion/libsvn_repos/commit.c
===================================================================
--- subversion/libsvn_repos/commit.c	(revision 16161)
+++ subversion/libsvn_repos/commit.c	(working copy)
@@ -50,7 +50,7 @@
   const char *log_msg;
 
   /* Callback to run when the commit is done. */
-  svn_commit_callback_t commit_callback;
+  svn_commit_callback2_t commit_callback2;
   void *commit_callback_baton;
 
   /* Callback to check authorizations on paths. */
@@ -119,7 +119,28 @@
 };
 
 
+/* to provide for compatibility with svn_commit_callback_t */
+struct repos_commit_wrapper_baton
+{
+  void *baton;
+  svn_commit_callback_t callback;
+};
 
+svn_error_t *
+repos_wrapper_commit_done (svn_commit_info_t *commit_info,
+                           void *baton)
+{
+  struct repos_commit_wrapper_baton *cwb=baton;
+
+  if (cwb->callback)
+    return cwb->callback (commit_info->revision,
+                          commit_info->date,
+                          commit_info->author,
+                          cwb->baton);
+
+  return SVN_NO_ERROR;
+}
+
 /* Create and return a generic out-of-dateness error. */
 static svn_error_t *
 out_of_date (const char *path, const char *txn_name)
@@ -716,6 +737,7 @@
   {
     svn_string_t *date, *author;
     svn_error_t *err2;
+    svn_commit_info_t *commit_info = NULL;
 
     /* Even if there was a post-commit hook failure, it's more serious
        if one of the calls here fails, so we explicitly check for errors
@@ -730,16 +752,21 @@
                                     eb->pool);
 
     if (! err2)
-      err2 = (*eb->commit_callback) (new_revision, 
-                              date ? date->data : NULL, 
-                              author ? author->data : NULL,
-                              eb->commit_callback_baton);
-    if (err2)
       {
-        svn_error_clear (err);
-        return err2;
+        commit_info = svn_create_commit_info (eb->pool);
+
+        /* fill up the svn_commit_info structure */
+        commit_info->revision = new_revision;
+        commit_info->date = date ? date->data : NULL;
+        commit_info->author = author ? author->data : NULL;
+        err2 = (*eb->commit_callback2) (commit_info, 
+                                eb->commit_callback_baton);
+        if (err2)
+          {
+            svn_error_clear (err);
+            return err2;
+          }
       }
-
   }
 
   return err;
@@ -757,7 +784,6 @@
 }
 
 
-
 
 /*** Public interfaces. ***/
 
@@ -770,7 +796,7 @@
                               const char *base_path,
                               const char *user,
                               const char *log_msg,
-                              svn_commit_callback_t callback,
+                              svn_commit_callback2_t callback2,
                               void *callback_baton,
                               svn_repos_authz_callback_t authz_callback,
                               void *authz_baton,
@@ -815,7 +841,7 @@
   eb->pool = subpool;
   eb->user = user ? apr_pstrdup (subpool, user) : NULL;
   eb->log_msg = apr_pstrdup (subpool, log_msg);
-  eb->commit_callback = callback;
+  eb->commit_callback2 = callback2;
   eb->commit_callback_baton = callback_baton;
   eb->authz_callback = authz_callback;
   eb->authz_baton = authz_baton;
@@ -848,10 +874,18 @@
                               void *callback_baton,
                               apr_pool_t *pool)
 {
+  struct repos_commit_wrapper_baton *cwb
+                     = apr_pcalloc (pool, sizeof (*cwb));
+
+  /* Fill in the wrapper with the baton and the old fmt callback */
+  cwb->callback = callback;
+  cwb->baton = callback_baton;
+  
+  /* use the wrapper baton and callback */
   return svn_repos_get_commit_editor3 (editor, edit_baton, repos, txn,
                                        repos_url, base_path, user,
-                                       log_msg, callback, callback_baton,
-                                       NULL, NULL, pool);
+                                       log_msg, repos_wrapper_commit_done,
+                                       cwb, NULL, NULL, pool);
 }
 
 
@@ -867,8 +901,16 @@
                              void *callback_baton,
                              apr_pool_t *pool)
 {
+  struct repos_commit_wrapper_baton *cwb
+                     = apr_pcalloc (pool, sizeof (*cwb));
+
+  /* Fill in the wrapper with the baton and the old fmt callback */
+  cwb->callback = callback;
+  cwb->baton = callback_baton;
+  
+  /* use the wrapper baton and callback */
   return svn_repos_get_commit_editor3 (editor, edit_baton, repos, NULL,
                                        repos_url, base_path, user,
-                                       log_msg,  callback, callback_baton,
-                                       NULL, NULL, pool);
+                                       log_msg, repos_wrapper_commit_done,
+                                       cwb, NULL, NULL, pool);
 }
Index: subversion/libsvn_ra_svn/client.c
===================================================================
--- subversion/libsvn_ra_svn/client.c	(revision 16161)
+++ subversion/libsvn_ra_svn/client.c	(working copy)
@@ -56,7 +56,7 @@
   ra_svn_session_baton_t *sess_baton;
   apr_pool_t *pool;
   svn_revnum_t *new_rev;
-  svn_commit_callback_t callback;
+  svn_commit_callback2_t callback;
   void *callback_baton;
 } ra_svn_commit_callback_baton_t;
 
@@ -802,18 +802,17 @@
 static svn_error_t *ra_svn_end_commit(void *baton)
 {
   ra_svn_commit_callback_baton_t *ccb = baton;
-  svn_revnum_t new_rev;
-  const char *committed_date;
-  const char *committed_author;
+  svn_commit_info_t *commit_info = NULL;
 
+  commit_info = svn_create_commit_info (ccb->pool);
+
   SVN_ERR(handle_auth_request(ccb->sess_baton, ccb->pool));
   SVN_ERR(svn_ra_svn_read_tuple(ccb->sess_baton->conn, ccb->pool, "r(?c)(?c)",
-                                &new_rev,
-                                &committed_date,
-                                &committed_author));
+                                &(commit_info->revision),
+                                &(commit_info->date),
+                                &(commit_info->author)));
 
-  return ccb->callback(new_rev, committed_date, committed_author,
-                       ccb->callback_baton);
+  return ccb->callback(commit_info, ccb->callback_baton);
 
 }
 
@@ -821,7 +820,7 @@
                                   const svn_delta_editor_t **editor,
                                   void **edit_baton,
                                    const char *log_msg,
-                                  svn_commit_callback_t callback,
+                                  svn_commit_callback2_t callback,
                                   void *callback_baton,
                                   apr_hash_t *lock_tokens,
                                   svn_boolean_t keep_locks,
Index: subversion/libsvn_ra_dav/ra_dav.h
===================================================================
--- subversion/libsvn_ra_dav/ra_dav.h	(revision 16161)
+++ subversion/libsvn_ra_dav/ra_dav.h	(working copy)
@@ -220,7 +220,7 @@
   const svn_delta_editor_t **editor,
   void **edit_baton,
   const char *log_msg,
-  svn_commit_callback_t callback,
+  svn_commit_callback2_t callback,
   void *callback_baton,
   apr_hash_t *lock_tokens,
   svn_boolean_t keep_locks,
Index: subversion/libsvn_ra_dav/commit.c
===================================================================
--- subversion/libsvn_ra_dav/commit.c	(revision 16161)
+++ subversion/libsvn_ra_dav/commit.c	(working copy)
@@ -114,7 +114,7 @@
   const char *log_msg;
 
   /* The commit callback and baton */
-  svn_commit_callback_t callback;
+  svn_commit_callback2_t callback;
   void *callback_baton;
 
   /* The hash of lock-tokens owned by the working copy. */
@@ -1460,13 +1460,14 @@
                                        apr_pool_t *pool)
 {
   commit_ctx_t *cc = edit_baton;
-  svn_revnum_t new_rev;
-  const char *committed_date;
-  const char *committed_author;
+  svn_revnum_t new_rev; 
+  svn_commit_info_t *commit_info = NULL;
 
-  SVN_ERR( svn_ra_dav__merge_activity(&new_rev,
-                                      &committed_date,
-                                      &committed_author,
+  commit_info = svn_create_commit_info (pool);
+
+  SVN_ERR( svn_ra_dav__merge_activity(&(commit_info->revision),
+                                      &(commit_info->date),
+                                      &(commit_info->author),
                                       cc->ras,
                                       cc->ras->root.path,
                                       cc->activity_url,
@@ -1479,8 +1480,7 @@
   SVN_ERR( svn_ra_dav__maybe_store_auth_info(cc->ras) );
 
   if (new_rev != SVN_INVALID_REVNUM)
-    SVN_ERR( cc->callback (new_rev, committed_date, committed_author,
-                           cc->callback_baton));
+    SVN_ERR( cc->callback (commit_info, cc->callback_baton));
 
   return SVN_NO_ERROR;
 }
@@ -1573,7 +1573,7 @@
                                             const svn_delta_editor_t **editor,
                                             void **edit_baton,
                                             const char *log_msg,
-                                            svn_commit_callback_t callback,
+                                            svn_commit_callback2_t callback,
                                             void *callback_baton,
                                             apr_hash_t *lock_tokens,
                                             svn_boolean_t keep_locks,
Index: subversion/svnserve/serve.c
===================================================================
--- subversion/svnserve/serve.c	(revision 16161)
+++ subversion/svnserve/serve.c	(working copy)
@@ -765,14 +765,14 @@
   return SVN_NO_ERROR;
 }
 
-static svn_error_t *commit_done(svn_revnum_t new_rev, const char *date,
-                                const char *author, void *baton)
+static svn_error_t *commit_done(svn_commit_info_t *commit_info,
+                                void *baton)
 {
   commit_callback_baton_t *ccb = baton;
 
-  *ccb->new_rev = new_rev;
-  *ccb->date = date;
-  *ccb->author = author;
+  *ccb->new_rev = commit_info->revision;
+  *ccb->date = commit_info->date;
+  *ccb->author = commit_info->author;
   return SVN_NO_ERROR;
 }
 
