blob: ce258ec490ca6b45bd9b8ed62fc608014e97c11f [file] [log] [blame]
"Single DB" in this context means one SQLite DB in the root of each working
copy.
Build and Test
==============
To build with experimental single-DB support:
define SINGLE_DB ("CFLAGS=-DSINGLE_DB configure ...")
define SVN_WC__VERSION to 18 in wc.h
Current test results (r960984):
most/all C tests pass
half of the Python tests fail; common errors are
Wrong results but no error message.
Error: columns wc_id, local_dir_relpath are not unique
Error: No write-lock in '...'
Crash.
Upgrade: Migration of DB tables from subdir DBs to wcroot DB
============================================================
"Move into wcroot's table" means move each row into the same table in the WC
root's DB; we expect the primary key to be unique - not already in the
wcroot table.
REPOSITORY
Merge into wcroot's table:
move the row into the wcroot's REPOSITORY table, unless a row that's
identical (apart from its id) is already present, in which case take the
existing wcroot row's id.
Change all repos id's accordingly in the other tables being migrated:
BASE_NODE.repos_id
WORKING_NODE.copyfrom_repos_id
LOCK.repos_id
# and in tree conflict info?
Note: The existence of more than one repository id in a working copy
arises when "svn switch --relocate" is used. A new repository table row
is created, with the new repository URL and a new id (say repos_id = 2).
Any new versioned directories that are created after that have the new
repository URL but with repos-id = 1. Hence the need to merge the tables.
WCROOT
Ignore this table. (It always has just one row, with a default id and a
null local_abspath.)
BASE_NODE
Move into wcroot's table;
omit if .kind == subdir
change .local_relpath
set .parent_relpath
WORKING_NODE
Move into wcroot's table;
omit if .kind == subdir (?)
change .local_relpath
set .parent_relpath
Note from Greg:
Generally, ignoring subdir might be okay in these two tables [BASE_NODE,
WORKING_NODE], but the not-present value is used/important.
ACTUAL_NODE
Move into wcroot's table;
change .local_relpath
set .parent_relpath
LOCK
Move into wcroot's table.
PRISTINE
Move into wcroot's table.
Move the corresponding pristine text files into wcroot's 'pristine' dir.
Change wcroot's pristine directory to sharded (or this could be a
separate upgrade).
WC_LOCK
Ignore this table. (Ensure it is empty. If not, 'svn cleanup' should be
run.)
WORK_QUEUE
Ignore this table. (Ensure it is empty. If not, 'svn cleanup' should be
run.)
Code Changes Required
=====================
Greg says: An area to examine is all of the uses of db_status_obstructed,
db_status_obstructed_(add|delete). Those should not occur in single-db, so
anything that sets those status values or checks for them is suspect. (I'd
#ifdef them away, for example, then patch all references).