You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Chia-liang Kao <cl...@clkao.org> on 2006/12/08 04:48:44 UTC
[PATCH] Fix svn_repos_replay2 for txn root
Is there a way to get the txn base revision from txn root without reopening
the txn?
[[[
* subversion/libsvn_repos/replay.c:
(svn_repos_replay2) When used with txn_root, set compare_root in baton
to the base of the txn.
]]]
=== subversion/libsvn_repos/replay.c
==================================================================
--- subversion/libsvn_repos/replay.c (revision 22155)
+++ subversion/libsvn_repos/replay.c (local)
@@ -710,10 +710,25 @@
cb_baton.low_water_mark = low_water_mark;
if (send_deltas)
- SVN_ERR(svn_fs_revision_root(&cb_baton.compare_root,
- svn_fs_root_fs(root),
- svn_fs_revision_root_revision(root) - 1,
- pool));
+ {
+ svn_revnum_t revision = svn_fs_revision_root_revision(root);
+ svn_revnum_t compare_root_revision;
+ if (revision == -1)
+ {
+ svn_fs_txn_t *txn;
+ const char *txn_name = svn_fs_txn_root_name(root, pool);
+ SVN_ERR(svn_fs_open_txn(&txn, svn_fs_root_fs(root),
+ txn_name, pool));
+ compare_root_revision = svn_fs_txn_base_revision(txn);
+ }
+ else
+ compare_root_revision = revision - 1;
+
+ SVN_ERR(svn_fs_revision_root(&cb_baton.compare_root,
+ svn_fs_root_fs(root),
+ compare_root_revision,
+ pool));
+ }
else
cb_baton.compare_root = NULL;
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Re: [PATCH] Fix svn_repos_replay2 for txn root
Posted by "C. Michael Pilato" <cm...@collab.net>.
Chia-liang Kao wrote:
> Is there a way to get the txn base revision from txn root without reopening
> the txn?
>
> [[[
>
> * subversion/libsvn_repos/replay.c:
> (svn_repos_replay2) When used with txn_root, set compare_root in baton
> to the base of the txn.
>
> ]]]
>
> === subversion/libsvn_repos/replay.c
> ==================================================================
> --- subversion/libsvn_repos/replay.c (revision 22155)
> +++ subversion/libsvn_repos/replay.c (local)
> @@ -710,10 +710,25 @@
> cb_baton.low_water_mark = low_water_mark;
>
> if (send_deltas)
> - SVN_ERR(svn_fs_revision_root(&cb_baton.compare_root,
> - svn_fs_root_fs(root),
> - svn_fs_revision_root_revision(root) - 1,
> - pool));
> + {
> + svn_revnum_t revision = svn_fs_revision_root_revision(root);
> + svn_revnum_t compare_root_revision;
> + if (revision == -1)
if (!SVN_IS_VALID_REVNUM(revision))
> + {
> + svn_fs_txn_t *txn;
> + const char *txn_name = svn_fs_txn_root_name(root, pool);
> + SVN_ERR(svn_fs_open_txn(&txn, svn_fs_root_fs(root),
> + txn_name, pool));
> + compare_root_revision = svn_fs_txn_base_revision(txn);
There's a bunch of code that does this exact stuff. We outta just have
svn_fs_txn_root_base_revision(). I'll see what I can put together.
> + }
> + else
> + compare_root_revision = revision - 1;
> +
> + SVN_ERR(svn_fs_revision_root(&cb_baton.compare_root,
> + svn_fs_root_fs(root),
> + compare_root_revision,
> + pool));
> + }
> else
> cb_baton.compare_root = NULL;
--
C. Michael Pilato <cm...@collab.net>
CollabNet <> www.collab.net <> Distributed Development On Demand