"Bert Huijben" <b...@qqmail.nl> writes:

> This type of changes should be handled outside the WQ operation. 
>
> All workqueue operations must be able to cope with restarting multiple times.
>
> This operation can delete the entry from the local_abspath. (One of
> the tiny details in fold_scheduling :( )
>
> In that case you can get yourself a workqueue item that can never
> complete, because it can't find the entry.

In my defence I think I just moved that bug from the previous loggy
code :)

>
> The model for this kind of operations we defined to handle this was:
> * Open SqLite Transaction
> * Perform database updates
> * Insert WQ operation(s)
> * Commit Transaction.
> * Run WQ operation.
>
> This way you always have a consistent database.

OK.

>
> I'm running tests on a change that moves all entry scheduling
> changes to svn_wc_schedule_delete to a single
> svn_wc__db_temp_op_delete() operation.  (The reason that it is a
> temp_op and not the normal op is that it isn't recursive)
>
> It is starting to look like my helper function handles the current
> corner cases.

Issue 3584, deleting a grandchild of a copied parent creates a base
node:

   svnadmin create repo
   svn import -mm Makefile file://`pwd`/repo/A/B/f
   svn co file://`pwd`/repo wc
   svn cp wc/A wc/A2
   svn rm wc/A2/B/f

Your new code doesn't fix that:

  sqlite wc/A2/B/.svn/wc.db "select *, kind from base_node"

gives

  1|f|1|A2/B/f||normal|file|2|$md5 
$2a1af3fc2b77590499e437b2f1cbaa48|34536|2|1266486946928742|pm|infinity||1266486947000000||||

-- 
Philip

Reply via email to