use new KeyValueCache class as regex cache Makes it thread safe - doesn't matter in production but might matter in tests which can be run in parallel (commit: 6e6a465)
Add name value to applying patch messages Makes debugging patches easier, since multiple root nodes can save the same url Resolves #143 (commit: 7271725)
Redo logging interface * Convert exceptions to strings rather than keeping a separate interface for exceptions everywhere * Log messages know how to convert themselves to log strings * Simplified interface (including assertions) provided by extension methods (commit: d4d0fb7)
Initialize timestamp with log message So if it takes some time to actually get to the log it will display the originating timestamp rather than the timestamp it was logged at (commit: 0a2c842)
Use custom code to lookup file by url Should be less gc-happy and potentially faster, though this step rarely takes any signicant amount of time. Allows extensions to be specified optionally. Doesn't support <ksp_root>/Parts or <ksp_root>/Internals but probably a bunch of assumptions in ModuleManager about that too. (commit: 5e5314e)
improve file sha generator * Actually dispose the sha when we're done * Use a better way of converting bytes to hex strings (hopefully less gc) * Test byte array to hex string conversion (commit: e1bed94)
make StreamLoggerTest.TestLog work on \n platforms line breaks are shorter which causes an extra null character to exist at the end of the string, meaning that the default Trim() wasn't removing that and the newline (commit: 9795e36)
Fix TestConfigNode's handling of escaped chars KSP removes these automatically, so we want to avoid that by constructing the Value ourselves (commit: 3e4a9f9)
Fix ModifyNode handling of escaped characters new AddValueSafe method to handle this use safe ShallowCopyFrom rather than ConfigNode's CopyTo as recursion is not necessary and it handles escaped characters correctly (commit: 96201a7)
Ensure tabs and newlines don't break cache Explicitly escape \n and \t which the localizer unescapes when game database is initially loaded (commit: f2fba86)