Hi,

I'm looking into fixing issue #4023. I'd like to have some feedback on
a possible solution, and some hints on how to best implement it.

The problem
-----------
- 'svn rm missingItem' (while there is a 'MissingItem' on disk, and
not a 'missingItem') will eventually call
adm.ops.c#svn_wc__delete_many, with 'missingItem' as one of the
targets (so far so good).

- svn_wc__delete_many, after updating wc.db, will eventually call
erase_unversioned_from_wc, which will call
svn_io_remove_file2('missingItem').

- At this point, we have a problem, because
svn_io_remove_file2('missingItem') will eventually call the Windows
API DeleteFileW, which will happily delete 'MissingItem' when given
the 'missingItem' argument.


Proposed solution
-----------------
Inside svn_wc__delete_many, we could find out that 'missingItem' is,
you know, missing, before we try to delete it from disk. In that case,
there is no need to call erase_unversioned_from_wc, so no call to
DeleteFileW occurs.


I can't come up with a better way, but if someone has other ideas, shoot.

If this is indeed the way to proceed, then I'd appreciate a small
hint/pointer: how do I find out (as cheaply as possible) whether the
target in question is missing? In the beginning of
svn_wc__delete_many, a call is done to svn_wc__db_read_info, but this
doesn't seem to give this information (status == normal, kind == file,
whether or not the file in question is missing from disk).


-- 
Johan

Reply via email to