I'm looking at the upgrade process. I haven't looked at implementing the DB table rows migration described in <notes/wc-ng/single-db-per-wc>; instead I'm trying to see how that fits into the overall DB open-and-upgrade code flow.
Here's the upgrade code for 1.6 to 1.7: svn_client_upgrade() // upgrade a whole WC to latest | svn_wc_upgrade() // upgrade a whole WC | svn_wc__db_open(no auto-upgrade), upgrade_working_copy() // upgrade a whole WC by recursing | upgrade_to_wcng() // upgrade an individual subdirectory to F12 | svn_wc__write_upgraded_entries(), svn_wc__db_upgrade_apply_dav_cache(), migrate_text_bases(), ... Inside svn_wc_upgrade(), everything that gets written to a DB must get written into the single WC-root DB. That looks like it requires no significant changes in the functions shown above, as it should all happen invisibly within the wc-db management code, in conjunction with the auto-upgrade part below. (The migrate_text_bases() step may need modifying to ensure they migrate to the WC root.) The auto-upgrade code, currently used for 1.7-dev to 1.7-dev, is invoked when opening a versioned directory: wc_db.c:*() | svn_wc__db_pdh_parse_local_abspath() | svn_wc__db_pdh_create_wcroot(sdb) // create *or find* a db_wcroot_t | svn_wc__upgrade_sdb() // upgrade an SDB from F>=12 to latest | bump_to_XX(), ..., bump_to_19() // migrate an SDB to the WC-root The term "wcroot" becomes confusing, because in the existing code each individual directory has its own db_wcroot_t structure, rather than a single one at the root of the WC which is what we are moving to. When I say "the WC-root SDB", I mean the one at the root of the whole WC. (Some renaming of data and/or functions named "wcroot" might be useful as a precursor to the transition, but I can't yet see what exactly would be useful.) So a possible way is: * bump_to_19() needs to migrate the contents of the SDB (and pristine store) down into the WC-root SDB, and delete the SDB (and pristine store), or do nothing if it is the WC-root SDB. * svn_wc__db_pdh_create_wcroot() needs to return not a new wcroot_t object but a pointer to the existing one for the real WC-root, except of course when it is creating the real WC-root object. * And in which function will we search for and find the WC root directory? I can't see us using any of the existing functions such as svn_wc__db_is_wcroot(), svn_wc__strictly_is_wc_root(), because they all invoke svn_wc__db_pdh_parse_local_abspath(). I anticipate not getting much further with this before I go on holiday at the end of tomorrow, so anybody willing to jump in is most welcome to do so. - Julian