Checkin release notes
If path no longer have SCM info, include it in change set

This allows the SCM drivers to not report status for non-modified versioned files.

The problem was previously that if a driver didn’t report status for such files, having a file go from modified → clean wouldn’t always cause a refresh, since no change notification was generated for the path.

For the svn driver there is a 50% overhead by svn itself in reporting status for files without status, this overhead is likely magnified by the following XML step (where XML for all files in the working copy needs to be parsed).
Disable main menu’s key equivalent handling

This is done by overloading performKeyEquivalent: for the main menu (by setting it to OakMainMenu in MainMenu.xib).

The default implementation of performKeyEquivalent: does not know about scope selectors so it will sometimes call the wrong actions. For example a bundle overloading ⌘X for “-dyn.selection” may still see the item fire with a selection.

This wasn’t a problem previously, as we set the key equivalents via (deprecated) Carbon API (so presumably Cocoa didn’t know about the keys).

This is a preliminary implementation, I just want it out there to have it tested for edge-cases. Long-term we can probably remove the overload of performKeyEquivalent: on OakTextView, which sort of does similar (stops Cocoa from executing the wrong menu actions or interfering with multi-stroke key bindings).
Add svn status xslt to scm target

This is presently not used, it’s skeleton code for @whitlockjc.
Replaced contents of skeleton svn_status.xsl with real content.

* Note: Column delimiter is back to four spaces due to XML/XSL not allowing control characters
Use xsltproc to parse svn (XML) status output

For a repository with 7,767 files it takes 3.5 seconds for Python to convert a full file listing from XML to the simpler line-based format. Using xsltproc the same takes 0.74 seconds.

According to issue #340 TextMate “freeze for up to about 5 - 10 minutes” when doing svn status. Not sure how much this change helps on that, no doubt it’s an improvement.
Remove code duplication

The SCM status enumeration is now only declared once.

I also introduced an ‘unknown’ status which should be used instead of ‘none’.
Change scm::status::note → unknown where applicable
Change scm::status::versioned → none

The scm::status::versioned status has now been removed.

The upshot of this is that SCM drivers can leave out files that are “clean” from their status map, and TextMate will assume they have status “none” (clean). This cuts down on the amount of data that needs to be sent (and/or processed) by the SCM drivers.
Exclude clean files from svn status

Subversion itself is roughly 30% faster if we do not ask for status of all files, the XML processing though is magnitudes faster, since it will only have to deal with a few records (in the general case) rather than a record per file (xsltproc seems to do around ~10,000 files per second on my Mac Pro, though I have no idea if it scales linearly).
Allow disabling SCM status from .tm_properties

This is done by adding the following (which can be limited to a folder):

    scmStatus = false
Checkin release notes
SCM driver reports if system tracks directories

This can be used to make decisions about whether or not we should assign a virtual status to directories, prune them from a status display, or similar.
Don’t prune items from SCM drivers tracking directories
Fix excessive SCM status updates for clean repositories

The problem is that we used to treat an empty status map as meaning we hadn’t yet requested status for this repository, however, now that we no longer need status for all files, we would have an empty status map for clean (svn) repositories, leading to needlessly requesting status updates all the time (and on main thread).
fixup! If path no longer have SCM info, include it in change set

The iterator checks were wrong.
Fix a leak in OakHistoryController
Fix warning for literal strings used with NSAlert

__attribute__((format(...))) was added to NSAlert's class-based initializer in 10.7, and due to using string objects instead of literals as informative text, Clang is unable to guarantee the safety of the formatter, and, as such, issues a warning.
Allow folders and bundles to be opened with TextMate

This is mainly for TextMate’s own Open With menu, as it doesn’t seem to affect Finder’s (and TextMate already did support folders being dragged onto its application icon).
Add support for reading xcodeproj files