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