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