> -----Original Message----- > From: rhuij...@apache.org [mailto:rhuij...@apache.org] > Sent: woensdag 25 november 2015 22:31 > To: comm...@subversion.apache.org > Subject: svn commit: r1716548 - > /subversion/trunk/subversion/tests/libsvn_fs/fs-test.c > > Author: rhuijben > Date: Wed Nov 25 21:31:20 2015 > New Revision: 1716548 > > URL: http://svn.apache.org/viewvc?rev=1716548&view=rev > Log: > Create simpler reproduction recipe for BDB issue julian found using > svnmover+BDB+ra_serf.
Any BDB hackers around that know the background behind this? The question is: Why isn't the base revision properly saved in the txn when the HEAD revision is a no-op commit? I'm guessing that we safe something else and then accidentally fetch the last modified revision of that and use it as the BASE revision of the transaction. Bert > > * subversion/tests/libsvn_fs/fs-test.c > (reopen_trivial_transaction): Extend test. > > Modified: > subversion/trunk/subversion/tests/libsvn_fs/fs-test.c > > Modified: subversion/trunk/subversion/tests/libsvn_fs/fs-test.c > URL: > http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_fs/ > fs-test.c?rev=1716548&r1=1716547&r2=1716548&view=diff > ========================================================== > ==================== > --- subversion/trunk/subversion/tests/libsvn_fs/fs-test.c (original) > +++ subversion/trunk/subversion/tests/libsvn_fs/fs-test.c Wed Nov 25 > 21:31:20 2015 > @@ -225,6 +225,8 @@ reopen_trivial_transaction(const svn_tes > /* Don't use the subpool, txn_name must persist beyond the current txn */ > SVN_ERR(svn_fs_txn_name(&txn_name, txn, pool)); > > + SVN_TEST_ASSERT(svn_fs_txn_base_revision(txn) == 0); > + > /* Create a third transaction - we don't want that one to reopen. */ > SVN_ERR(svn_fs_begin_txn(&txn, fs, 0, subpool)); > > @@ -238,7 +240,43 @@ reopen_trivial_transaction(const svn_tes > SVN_ERR(svn_fs_txn_root(&root, txn, subpool)); > SVN_TEST_STRING_ASSERT(svn_fs_txn_root_name(root, subpool), > txn_name); > > + SVN_TEST_ASSERT(svn_fs_txn_base_revision(txn) == 0); > + > + { > + const char *conflict; > + svn_revnum_t new_rev; > + SVN_ERR(svn_fs_commit_txn(&conflict, &new_rev, txn, subpool)); > + SVN_TEST_STRING_ASSERT(conflict, NULL); > + SVN_TEST_ASSERT(new_rev == 1); > + } > + > /* Close the transaction ... again. */ > + svn_pool_clear(subpool); > + > + /* Begin another transaction that is based on revision 1. */ > + SVN_ERR(svn_fs_begin_txn(&txn, fs, 1, subpool)); > + > + /* Don't use the subpool, txn_name must persist beyond the current txn > */ > + SVN_ERR(svn_fs_txn_name(&txn_name, txn, pool)); > + > + SVN_TEST_ASSERT(svn_fs_txn_base_revision(txn) == 1); > + > + /* Keep the txn name in pool */ > + SVN_ERR(svn_fs_txn_name(&txn_name, txn, pool)); > + > + /* Close the transaction ... again. */ > + svn_pool_clear(subpool); > + > + /* Reopen the transaction by name ... again */ > + SVN_ERR(svn_fs_open_txn(&txn, fs, txn_name, subpool)); > + > + /* Does it have the same name? ... */ > + SVN_ERR(svn_fs_txn_root(&root, txn, subpool)); > + SVN_TEST_STRING_ASSERT(svn_fs_txn_root_name(root, subpool), > txn_name); > + > + /* And the same base revision? */ > + SVN_TEST_ASSERT(svn_fs_txn_base_revision(txn) == 1); > + > svn_pool_destroy(subpool); > > return SVN_NO_ERROR; >