Files that have been removed from the filesystem, but not svn rm'd, have
absent status, which shows up as a `?' in the leftmost column in status
reports. Try this:
$ svn co http://svn.collab.net/repos/svn -d repro
$ cd repro
$ rm README
$ svn st -n
$ svn st
$ svn st -nv
$ svn st -v
In all of those status outputs, README is correctly printed with a ?.
But if you run any combination that includes the -u switch:
$ svn st -u
$ svn st -vu
$ svn st -nu
$ svn st -nvu
... you will see README printed out like this:
_ * - README
... when it should be:
? 174 README
... or possibly:
? * 174 README
if it has also been modified in the repository.
The cause of the problem is that the update reporter reports a missing
file as a `delete', eventually resulting in the ra layer driving an add_file
in the update edit. There is no reason for the repository to resend the
file if it's not modified in the repository, though! The crawler should just
keep a list of what was missing from disk, and during the update phase, copy
those files out of text base. It should never report to the repository that
the file was missing, it should merely report the entry's revision number, so
the repository can return any genuine updates. This would fix two problems:
the fact that an update can cause a file to be sent that the client actually
had locally all along, and the fact that adding -u to status screws up the
reporting of missing files.