Post-commit processing is still node-by-node and goes through invalid database states. svnadmin create repo svn mkdir --parents file://`pwd`/repo/A/B/C svn co file://`pwd`/repo wc svn cp wc/A wc/X svn ci -mm wc Interrupt the post-commit processing at the start of the second call to commit_node(). Run "svn cleanup wc". Now: $ sqlite3 wc/.svn/wc.db "select op_depth, local_relpath, presence from nodes order by op_depth, local_relpath" 0||normal 0|A|normal 0|A/B|normal 0|A/B/C|normal 0|X|normal 0|X/B|normal 1|X/B/C|normal The workqueue causes X/B to go through post-commit processing, but not X/B/C. The database state is invalid: X/B/C op-depth=1. Ideally moving the copied tree from WORK to BASE should happen in a single transaction.