* Before moving a large number of files, the workspace state is saved with information about files in the source and target locations, allowing recovery of files in either location.
* The workspace state can be tagged as dirty, meaning that some cache or workspace items may not be correct. If a workspace is loaded with this flag, we check integrity of all files in each category before continuing.
* Gathering files to add and remove is done in a two separate operations.
* Workspace state is captured after every 256mb is synced, to avoid large resyncs if an error occurs.
* If any attempt to move a file from the cache, or copy a file within the workspace fails, we fall back to re-syncing the item from Perforce.
Also other minor improvements:
* Always write out log file, and keep old log files for 3 days.
* Added dump command, to list contents of workspace and cache.
#rb none
[CL 4133164 by Ben Marsh in Dev-Core branch]
As part of this change, the console no longer has to be added as a dedicated trace listener. Since we already special-case this listener when formatting log output, it's easier to just keep the implementation separate to the other trace listeners.
#rb none
[CL 4111304 by Ben Marsh in Dev-Core branch]