On Tue, 2010-08-10 at 16:26 +0100, Julian Foad wrote: > On Tue, 2010-08-10 at 15:31 +0100, Julian Foad wrote: > > Upgrading a WC to single-DB: > > > > upgrade_to_wcng() calls > > > > svn_wc__db_upgrade_begin() to create a new DB, and then > > svn_wc__db_wclock_obtain() and then > > svn_wc__write_upgraded_entries() > > > > The _wclock_obtain() fails because it checks that the node with relpath > > "" exists. Normally in libsvn_wc a new DB is created with > > svn_wc__db_init() which inserts a row for relpath "", but > > svn_wc__db_upgrade_begin() doesn't. > > > > What's the best solution here? Not lock it? Have > > svn_wc__db_upgrade_begin() create an initial "" row? Have > > svn_wc__db_wclock_obtain() NOT check for existence of a "" row? The > > first and last options don't sound right. Creating an initial "" row > > does sound right, and requires (presumably) a modification of > > svn_wc__write_upgraded_entries(). > > The upgrade function is creating new DBs (or a new single-DB). Should > it perhaps be asking for a lock on the DB as a whole, as distinct from a > recursive lock on the WC root directory? In normal operation, those two > mean the same, but maybe here we need to distinguish these as two > different concepts.
Or should it ... - read the fields of the 'this-dir' entry from 'entries', - create a DB with an initial row initialized from those fields, - lock that '' dir, - read+translate+write the rest of the 'entries' ? - Julian