UI performance improvements when working with large repositories
Created originally on Bitbucket by colin-hurley (Colin Hurley)
Was already merged in Bitbucket before import, marked as merged by the import user
This changeset implements in-memory processing for "any child" status queries, which check all child resources of the selection for a particular status. The "any child" status processing is a relatively expensive check compared to the other status queries since it checks the entire selection tree recursively, rather than a single selected resource. The query has been refactored so it (hopefully) executes entirely in-memory, which eliminates a disk I/O bottleneck that severely compromised MercurialEclipse usability on large repositories containing many files.
In addition, the computed results for these queries are cached for a short time so duplicate queries can return immediately instead of recalculating the same result repeatedly. The caching should be especially helpful to mitigate performance issues observed with the toolbar commands enabled. For some reason, Eclipse seems to execute many extra duplicate enablement checks when the toolbar is enabled. This seems to be the case even on a simple "Hello World" project, so this behavior is not specific to just MercurialEclipse.
This changeset also includes some minor cleanup and enhancements to support the performance refactoring. This includes a new PathStatusProvider interface, which is an initial draft of reworking the API for the MercurialStatusCache class to make it easier to use and to avoid further disk-I/O-based performance problems. Also, some legacy API methods/fields in MercurialStatusCache have been removed or given reduced visibility.
Fixes #599 (closed)