<freeStyleBuild _class='hudson.model.FreeStyleBuild'><action _class='hudson.model.CauseAction'><cause _class='hudson.model.Cause$UserIdCause'><shortDescription>Started by user sarbian</shortDescription><userId>sarbian</userId><userName>sarbian</userName></cause></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><originmaster _class='hudson.plugins.git.util.Build'><buildNumber>53</buildNumber><marked><SHA1>aa022badeb26e22a85b71f631f019190b617fb8a</SHA1><branch><SHA1>aa022badeb26e22a85b71f631f019190b617fb8a</SHA1><name>origin/master</name></branch></marked><revision><SHA1>aa022badeb26e22a85b71f631f019190b617fb8a</SHA1><branch><SHA1>aa022badeb26e22a85b71f631f019190b617fb8a</SHA1><name>origin/master</name></branch></revision></originmaster><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>151</buildNumber><marked><SHA1>3d85ddca5fcf62e81e21904fcb04364039081bbf</SHA1><branch><SHA1>3d85ddca5fcf62e81e21904fcb04364039081bbf</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>3d85ddca5fcf62e81e21904fcb04364039081bbf</SHA1><branch><SHA1>3d85ddca5fcf62e81e21904fcb04364039081bbf</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>3d85ddca5fcf62e81e21904fcb04364039081bbf</SHA1><branch><SHA1>3d85ddca5fcf62e81e21904fcb04364039081bbf</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/sarbian/ModuleManager.git</remoteUrl><scmName></scmName></action><action _class='hudson.plugins.git.GitTagAction'></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><artifact><displayPath>ModuleManager-4.0.3.zip</displayPath><fileName>ModuleManager-4.0.3.zip</fileName><relativePath>ModuleManager-4.0.3.zip</relativePath></artifact><artifact><displayPath>ModuleManager.4.0.3.dll</displayPath><fileName>ModuleManager.4.0.3.dll</fileName><relativePath>ModuleManager.4.0.3.dll</relativePath></artifact><building>false</building><displayName>#151</displayName><duration>27403</duration><estimatedDuration>4997</estimatedDuration><fullDisplayName>ModuleManager #151</fullDisplayName><id>151</id><inProgress>false</inProgress><keepLog>false</keepLog><number>151</number><queueId>14</queueId><result>SUCCESS</result><timestamp>1565132679359</timestamp><url>https://ksp.sarbian.com/jenkins/user/jonnyothan/my-views/view/all/job/ModuleManager/151/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManagerTests/ModuleManagerTests.csproj</affectedPath><affectedPath>ModuleManager/Collections/KeyValueCache.cs</affectedPath><affectedPath>ModuleManagerTests/Collections/KeyValueCacheTest.cs</affectedPath><affectedPath>ModuleManager/ModuleManager.csproj</affectedPath><commitId>918b0a24de7f604b31a058395e4e2709c7dc8ede</commitId><timestamp>1555720424000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/blowfishpro</absoluteUrl><fullName>blowfishpro</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>add thread-safe KeyValueCache
</comment><date>2019-04-19 17:33:44 -0700</date><id>918b0a24de7f604b31a058395e4e2709c7dc8ede</id><msg>add thread-safe KeyValueCache</msg><path><editType>add</editType><file>ModuleManagerTests/Collections/KeyValueCacheTest.cs</file></path><path><editType>edit</editType><file>ModuleManager/ModuleManager.csproj</file></path><path><editType>add</editType><file>ModuleManager/Collections/KeyValueCache.cs</file></path><path><editType>edit</editType><file>ModuleManagerTests/ModuleManagerTests.csproj</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManager/MMPatchLoader.cs</affectedPath><commitId>6e6a465c4a04578772eb989b9f2132b3dd4b4d56</commitId><timestamp>1555720443000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/blowfishpro</absoluteUrl><fullName>blowfishpro</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>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
</comment><date>2019-04-19 17:34:03 -0700</date><id>6e6a465c4a04578772eb989b9f2132b3dd4b4d56</id><msg>use new KeyValueCache class as regex cache</msg><path><editType>edit</editType><file>ModuleManager/MMPatchLoader.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManagerTests/ModuleManagerTests.csproj</affectedPath><affectedPath>ModuleManagerTests/ProtoUrlConfigTest.cs</affectedPath><commitId>a0c1dfc2c7342c8ee1010bee9a3019a3d4eb2b31</commitId><timestamp>1555720605000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/blowfishpro</absoluteUrl><fullName>blowfishpro</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>add test for ProtoUrlConfig
</comment><date>2019-04-19 17:36:45 -0700</date><id>a0c1dfc2c7342c8ee1010bee9a3019a3d4eb2b31</id><msg>add test for ProtoUrlConfig</msg><path><editType>add</editType><file>ModuleManagerTests/ProtoUrlConfigTest.cs</file></path><path><editType>edit</editType><file>ModuleManagerTests/ModuleManagerTests.csproj</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManager/ProtoUrlConfig.cs</affectedPath><affectedPath>ModuleManagerTests/ProtoUrlConfigTest.cs</affectedPath><commitId>72717253e9d96fa05a9ca19603b8dbbe3964c444</commitId><timestamp>1555730110000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/joeydwong</absoluteUrl><fullName>joeydwong</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>Add name value to applying patch messages
Makes debugging patches easier, since multiple root nodes can save the
same url
Resolves #143
</comment><date>2019-04-19 20:15:10 -0700</date><id>72717253e9d96fa05a9ca19603b8dbbe3964c444</id><msg>Add name value to applying patch messages</msg><path><editType>edit</editType><file>ModuleManager/ProtoUrlConfig.cs</file></path><path><editType>edit</editType><file>ModuleManagerTests/ProtoUrlConfigTest.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManager/Logging/StreamLogger.cs</affectedPath><affectedPath>ModuleManagerTests/Logging/StreamLoggerTest.cs</affectedPath><commitId>cfaac6aa5031db26d8d84216f5e6885314a10306</commitId><timestamp>1556598315000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/joeydwong</absoluteUrl><fullName>joeydwong</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>Fix StreamLogger ignoring messages
Resolves #145
</comment><date>2019-04-29 21:25:15 -0700</date><id>cfaac6aa5031db26d8d84216f5e6885314a10306</id><msg>Fix StreamLogger ignoring messages</msg><path><editType>edit</editType><file>ModuleManager/Logging/StreamLogger.cs</file></path><path><editType>edit</editType><file>ModuleManagerTests/Logging/StreamLoggerTest.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManager/Logging/ILogMessage.cs</affectedPath><affectedPath>ModuleManager/Logging/QueueLogger.cs</affectedPath><affectedPath>ModuleManagerTests/Extensions/IBasicLoggerExtensionsTest.cs</affectedPath><affectedPath>ModuleManagerTests/Patches/EditPatchTest.cs</affectedPath><affectedPath>ModuleManagerTests/Logging/UnityLoggerTest.cs</affectedPath><affectedPath>ModuleManagerTests/InGameTestRunnerTest.cs</affectedPath><affectedPath>ModuleManagerTests/MMPatchLoaderTest.cs</affectedPath><affectedPath>ModuleManagerTests/Progress/PatchProgressTest.cs</affectedPath><affectedPath>ModuleManager/Logging/IBasicLogger.cs</affectedPath><affectedPath>ModuleManager/Logging/StreamLogger.cs</affectedPath><affectedPath>ModuleManagerTests/Logging/QueueLoggerTest.cs</affectedPath><affectedPath>ModuleManagerTests/Logging/ModLoggerTest.cs</affectedPath><affectedPath>ModuleManager/Logging/QueueLogRunner.cs</affectedPath><affectedPath>ModuleManagerTests/Logging/NormalMessageTest.cs</affectedPath><affectedPath>ModuleManagerTests/Logging/LogMessageTest.cs</affectedPath><affectedPath>ModuleManagerTests/Logging/StreamLoggerTest.cs</affectedPath><affectedPath>ModuleManager/Logging/ModLogger.cs</affectedPath><affectedPath>ModuleManagerTests/ModuleManagerTests.csproj</affectedPath><affectedPath>ModuleManager/Logging/ExceptionMessage.cs</affectedPath><affectedPath>ModuleManager/Logging/UnityLogger.cs</affectedPath><affectedPath>ModuleManager/Logging/NormalMessage.cs</affectedPath><affectedPath>ModuleManager/Logging/LogSplitter.cs</affectedPath><affectedPath>ModuleManager/Extensions/IBasicLoggerExtensions.cs</affectedPath><affectedPath>ModuleManagerTests/Logging/LogSplitterTest.cs</affectedPath><affectedPath>ModuleManagerTests/PatchApplierTest.cs</affectedPath><affectedPath>ModuleManagerTests/Logging/ExceptionMessageTest.cs</affectedPath><affectedPath>ModuleManager/ModuleManager.csproj</affectedPath><affectedPath>ModuleManager/Logging/LogMessage.cs</affectedPath><affectedPath>ModuleManagerTests/LoggingAssertionHelpers.cs</affectedPath><affectedPath>ModuleManagerTests/Logging/QueueLogRunnerTest.cs</affectedPath><commitId>d4d0fb78126ad4979c7df55f47dd4e9fc1e55b9b</commitId><timestamp>1556609078000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/joeydwong</absoluteUrl><fullName>joeydwong</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>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
</comment><date>2019-04-30 00:24:38 -0700</date><id>d4d0fb78126ad4979c7df55f47dd4e9fc1e55b9b</id><msg>Redo logging interface</msg><path><editType>delete</editType><file>ModuleManagerTests/Logging/NormalMessageTest.cs</file></path><path><editType>add</editType><file>ModuleManagerTests/Logging/LogMessageTest.cs</file></path><path><editType>edit</editType><file>ModuleManager/Logging/QueueLogRunner.cs</file></path><path><editType>delete</editType><file>ModuleManager/Logging/NormalMessage.cs</file></path><path><editType>edit</editType><file>ModuleManager/Logging/QueueLogger.cs</file></path><path><editType>edit</editType><file>ModuleManagerTests/Logging/QueueLoggerTest.cs</file></path><path><editType>delete</editType><file>ModuleManager/Logging/ExceptionMessage.cs</file></path><path><editType>edit</editType><file>ModuleManagerTests/Logging/ModLoggerTest.cs</file></path><path><editType>edit</editType><file>ModuleManager/ModuleManager.csproj</file></path><path><editType>edit</editType><file>ModuleManagerTests/Extensions/IBasicLoggerExtensionsTest.cs</file></path><path><editType>add</editType><file>ModuleManager/Logging/LogMessage.cs</file></path><path><editType>edit</editType><file>ModuleManagerTests/Patches/EditPatchTest.cs</file></path><path><editType>edit</editType><file>ModuleManager/Logging/ILogMessage.cs</file></path><path><editType>edit</editType><file>ModuleManagerTests/ModuleManagerTests.csproj</file></path><path><editType>edit</editType><file>ModuleManagerTests/PatchApplierTest.cs</file></path><path><editType>edit</editType><file>ModuleManager/Logging/ModLogger.cs</file></path><path><editType>delete</editType><file>ModuleManagerTests/Logging/ExceptionMessageTest.cs</file></path><path><editType>edit</editType><file>ModuleManagerTests/Logging/StreamLoggerTest.cs</file></path><path><editType>edit</editType><file>ModuleManagerTests/Progress/PatchProgressTest.cs</file></path><path><editType>edit</editType><file>ModuleManagerTests/MMPatchLoaderTest.cs</file></path><path><editType>edit</editType><file>ModuleManager/Logging/IBasicLogger.cs</file></path><path><editType>edit</editType><file>ModuleManagerTests/Logging/QueueLogRunnerTest.cs</file></path><path><editType>edit</editType><file>ModuleManagerTests/Logging/UnityLoggerTest.cs</file></path><path><editType>add</editType><file>ModuleManagerTests/LoggingAssertionHelpers.cs</file></path><path><editType>edit</editType><file>ModuleManager/Logging/LogSplitter.cs</file></path><path><editType>edit</editType><file>ModuleManagerTests/Logging/LogSplitterTest.cs</file></path><path><editType>edit</editType><file>ModuleManager/Extensions/IBasicLoggerExtensions.cs</file></path><path><editType>edit</editType><file>ModuleManager/Logging/StreamLogger.cs</file></path><path><editType>edit</editType><file>ModuleManager/Logging/UnityLogger.cs</file></path><path><editType>edit</editType><file>ModuleManagerTests/InGameTestRunnerTest.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManager/Logging/LogMessage.cs</affectedPath><affectedPath>ModuleManagerTests/Logging/LogMessageTest.cs</affectedPath><affectedPath>ModuleManager/Logging/ModLogger.cs</affectedPath><commitId>fc74f1fcda46031eb9b3139c7a56830b6728d01d</commitId><timestamp>1556609559000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/joeydwong</absoluteUrl><fullName>joeydwong</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>Initialize LogMessage from old LogMessage
with new message
only uses LogType from old message for now but more coming
</comment><date>2019-04-30 00:32:39 -0700</date><id>fc74f1fcda46031eb9b3139c7a56830b6728d01d</id><msg>Initialize LogMessage from old LogMessage</msg><path><editType>edit</editType><file>ModuleManager/Logging/ModLogger.cs</file></path><path><editType>edit</editType><file>ModuleManager/Logging/LogMessage.cs</file></path><path><editType>edit</editType><file>ModuleManagerTests/Logging/LogMessageTest.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManager/MMPatchLoader.cs</affectedPath><affectedPath>ModuleManagerTests/Logging/LogMessageTest.cs</affectedPath><affectedPath>ModuleManager/Logging/LogMessage.cs</affectedPath><affectedPath>ModuleManager/MMPatchRunner.cs</affectedPath><commitId>07afe29d79f4260bbc6a3e6f517535ebc6afbba9</commitId><timestamp>1556686516000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/joeydwong</absoluteUrl><fullName>joeydwong</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>Don't put date on every log message
Instead put it once at the top of the log
</comment><date>2019-04-30 21:55:16 -0700</date><id>07afe29d79f4260bbc6a3e6f517535ebc6afbba9</id><msg>Don't put date on every log message</msg><path><editType>edit</editType><file>ModuleManagerTests/Logging/LogMessageTest.cs</file></path><path><editType>edit</editType><file>ModuleManager/MMPatchLoader.cs</file></path><path><editType>edit</editType><file>ModuleManager/Logging/LogMessage.cs</file></path><path><editType>edit</editType><file>ModuleManager/MMPatchRunner.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManagerTests/Logging/ModLoggerTest.cs</affectedPath><affectedPath>ModuleManager/Logging/ILogMessage.cs</affectedPath><affectedPath>ModuleManagerTests/Logging/LogMessageTest.cs</affectedPath><affectedPath>ModuleManager/Logging/LogMessage.cs</affectedPath><commitId>0a2c842ae3b141416b4a176f0fdb5fc1df438760</commitId><timestamp>1556686772000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/joeydwong</absoluteUrl><fullName>joeydwong</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>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
</comment><date>2019-04-30 21:59:32 -0700</date><id>0a2c842ae3b141416b4a176f0fdb5fc1df438760</id><msg>Initialize timestamp with log message</msg><path><editType>edit</editType><file>ModuleManagerTests/Logging/LogMessageTest.cs</file></path><path><editType>edit</editType><file>ModuleManager/Logging/ILogMessage.cs</file></path><path><editType>edit</editType><file>ModuleManagerTests/Logging/ModLoggerTest.cs</file></path><path><editType>edit</editType><file>ModuleManager/Logging/LogMessage.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManagerTests/Logging/ModLoggerTest.cs</affectedPath><affectedPath>ModuleManager/ModuleManager.cs</affectedPath><affectedPath>ModuleManagerTests/Logging/PrefixLoggerTest.cs</affectedPath><affectedPath>ModuleManager/Logging/ModLogger.cs</affectedPath><affectedPath>ModuleManagerTests/ModuleManagerTests.csproj</affectedPath><affectedPath>ModuleManager/PostPatchLoader.cs</affectedPath><affectedPath>ModuleManager/Logging/PrefixLogger.cs</affectedPath><affectedPath>ModuleManager/ModuleManager.csproj</affectedPath><commitId>a8bcad2adbb10413dd8b3175a0b61ef44390533c</commitId><timestamp>1556686825000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/joeydwong</absoluteUrl><fullName>joeydwong</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>ModLogger -&gt; PrefixLogger
Explains what it does better
</comment><date>2019-04-30 22:00:25 -0700</date><id>a8bcad2adbb10413dd8b3175a0b61ef44390533c</id><msg>ModLogger -&gt; PrefixLogger</msg><path><editType>delete</editType><file>ModuleManagerTests/Logging/ModLoggerTest.cs</file></path><path><editType>edit</editType><file>ModuleManager/ModuleManager.cs</file></path><path><editType>add</editType><file>ModuleManagerTests/Logging/PrefixLoggerTest.cs</file></path><path><editType>edit</editType><file>ModuleManager/ModuleManager.csproj</file></path><path><editType>edit</editType><file>ModuleManager/PostPatchLoader.cs</file></path><path><editType>delete</editType><file>ModuleManager/Logging/ModLogger.cs</file></path><path><editType>add</editType><file>ModuleManager/Logging/PrefixLogger.cs</file></path><path><editType>edit</editType><file>ModuleManagerTests/ModuleManagerTests.csproj</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManager/Progress/PatchProgress.cs</affectedPath><commitId>5711994c101b86891f9403a5c08c47492665810d</commitId><timestamp>1557089742000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/joeydwong</absoluteUrl><fullName>joeydwong</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>Unnecessary using
</comment><date>2019-05-05 13:55:42 -0700</date><id>5711994c101b86891f9403a5c08c47492665810d</id><msg>Unnecessary using</msg><path><editType>edit</editType><file>ModuleManager/Progress/PatchProgress.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManagerTests/Patches/PatchCompilerTest.cs</affectedPath><commitId>3650d6927de303a7be7b27fdf4d0a144ee496737</commitId><timestamp>1557089888000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/joeydwong</absoluteUrl><fullName>joeydwong</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>Use better assertion
</comment><date>2019-05-05 13:58:08 -0700</date><id>3650d6927de303a7be7b27fdf4d0a144ee496737</id><msg>Use better assertion</msg><path><editType>edit</editType><file>ModuleManagerTests/Patches/PatchCompilerTest.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManager/Logging/StreamLogger.cs</affectedPath><affectedPath>ModuleManager/Collections/MessageQueue.cs</affectedPath><commitId>5f7071d88369e69beb0e2fc5a74d1a8d3305c159</commitId><timestamp>1557090388000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/joeydwong</absoluteUrl><fullName>joeydwong</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>Mark disposables as sealed
Microsoft seems to recommend this
</comment><date>2019-05-05 14:06:28 -0700</date><id>5f7071d88369e69beb0e2fc5a74d1a8d3305c159</id><msg>Mark disposables as sealed</msg><path><editType>edit</editType><file>ModuleManager/Collections/MessageQueue.cs</file></path><path><editType>edit</editType><file>ModuleManager/Logging/StreamLogger.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManager/ModListGenerator.cs</affectedPath><commitId>28bd925fbe75663c34b67d0bad6c012e01135602</commitId><timestamp>1557090397000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/joeydwong</absoluteUrl><fullName>joeydwong</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>Another unnecessary using
</comment><date>2019-05-05 14:06:37 -0700</date><id>28bd925fbe75663c34b67d0bad6c012e01135602</id><msg>Another unnecessary using</msg><path><editType>edit</editType><file>ModuleManager/ModListGenerator.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManager/Extensions/UrlDirExtensions.cs</affectedPath><affectedPath>ModuleManagerTests/ModuleManagerTests.csproj</affectedPath><affectedPath>ModuleManager/MMPatchLoader.cs</affectedPath><affectedPath>ModuleManagerTests/Extensions/UrlDirExtensionsTest.cs</affectedPath><affectedPath>ModuleManager/ModuleManager.csproj</affectedPath><commitId>5e5314e2d73e4ec237684793ec8975c2a2bc84ca</commitId><timestamp>1557120575000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/joeydwong</absoluteUrl><fullName>joeydwong</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>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 &lt;ksp_root&gt;/Parts or &lt;ksp_root&gt;/Internals but probably a
bunch of assumptions in ModuleManager about that too.
</comment><date>2019-05-05 22:29:35 -0700</date><id>5e5314e2d73e4ec237684793ec8975c2a2bc84ca</id><msg>Use custom code to lookup file by url</msg><path><editType>add</editType><file>ModuleManager/Extensions/UrlDirExtensions.cs</file></path><path><editType>edit</editType><file>ModuleManager/ModuleManager.csproj</file></path><path><editType>add</editType><file>ModuleManagerTests/Extensions/UrlDirExtensionsTest.cs</file></path><path><editType>edit</editType><file>ModuleManagerTests/ModuleManagerTests.csproj</file></path><path><editType>edit</editType><file>ModuleManager/MMPatchLoader.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManager/MMPatchLoader.cs</affectedPath><affectedPath>ModuleManagerTests/Extensions/UrlFileExtensionsTest.cs</affectedPath><affectedPath>ModuleManager/ModuleManager.cs</affectedPath><affectedPath>ModuleManagerTests/ModuleManagerTests.csproj</affectedPath><affectedPath>ModuleManager/Extensions/UrlFileExtensions.cs</affectedPath><affectedPath>ModuleManager/Progress/PatchProgress.cs</affectedPath><affectedPath>ModuleManager/ModuleManager.csproj</affectedPath><commitId>ae0d7a7c50df234e141909eedb2ceb6c5de6f3d2</commitId><timestamp>1557121702000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/joeydwong</absoluteUrl><fullName>joeydwong</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>Put extension on cache URLs
Makes trailing spaces not break things
Resolves #121
</comment><date>2019-05-05 22:48:22 -0700</date><id>ae0d7a7c50df234e141909eedb2ceb6c5de6f3d2</id><msg>Put extension on cache URLs</msg><path><editType>add</editType><file>ModuleManager/Extensions/UrlFileExtensions.cs</file></path><path><editType>edit</editType><file>ModuleManager/ModuleManager.cs</file></path><path><editType>edit</editType><file>ModuleManager/Progress/PatchProgress.cs</file></path><path><editType>edit</editType><file>ModuleManager/ModuleManager.csproj</file></path><path><editType>edit</editType><file>ModuleManager/MMPatchLoader.cs</file></path><path><editType>edit</editType><file>ModuleManagerTests/ModuleManagerTests.csproj</file></path><path><editType>add</editType><file>ModuleManagerTests/Extensions/UrlFileExtensionsTest.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManagerTests/ModuleManagerTests.csproj</affectedPath><affectedPath>ModuleManager/ModuleManager.csproj</affectedPath><commitId>69ab085da68e4ed3c80f444f0a04bfa65e6171f5</commitId><timestamp>1558992904000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/joeydwong</absoluteUrl><fullName>joeydwong</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>Alphabetize .csproj files
</comment><date>2019-05-27 14:35:04 -0700</date><id>69ab085da68e4ed3c80f444f0a04bfa65e6171f5</id><msg>Alphabetize .csproj files</msg><path><editType>edit</editType><file>ModuleManagerTests/ModuleManagerTests.csproj</file></path><path><editType>edit</editType><file>ModuleManager/ModuleManager.csproj</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManagerTests/ModuleManagerTests.csproj</affectedPath><affectedPath>ModuleManagerTests/Extensions/ByteArrayExtensionsTest.cs</affectedPath><affectedPath>ModuleManager/Utils/FileUtils.cs</affectedPath><affectedPath>ModuleManager/ModuleManager.csproj</affectedPath><affectedPath>ModuleManager/Extensions/ByteArrayExtensions.cs</affectedPath><commitId>e1bed9419ca20a15e04ba24e8bfe7e69563259e4</commitId><timestamp>1559286931000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/blowfishpro</absoluteUrl><fullName>blowfishpro</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>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
</comment><date>2019-05-31 00:15:31 -0700</date><id>e1bed9419ca20a15e04ba24e8bfe7e69563259e4</id><msg>improve file sha generator</msg><path><editType>edit</editType><file>ModuleManager/Utils/FileUtils.cs</file></path><path><editType>add</editType><file>ModuleManager/Extensions/ByteArrayExtensions.cs</file></path><path><editType>add</editType><file>ModuleManagerTests/Extensions/ByteArrayExtensionsTest.cs</file></path><path><editType>edit</editType><file>ModuleManager/ModuleManager.csproj</file></path><path><editType>edit</editType><file>ModuleManagerTests/ModuleManagerTests.csproj</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>TestUtils/UrlBuilder.cs</affectedPath><affectedPath>TestUtilsTests/UrlBuilderTest.cs</affectedPath><commitId>a27cb3df58b5b2218cfff2b0027959ce7332864f</commitId><timestamp>1559286932000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/blowfishpro</absoluteUrl><fullName>blowfishpro</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>Convert UrlBuilder cfg test to theory
allows more inline data to be added
</comment><date>2019-05-31 00:15:32 -0700</date><id>a27cb3df58b5b2218cfff2b0027959ce7332864f</id><msg>Convert UrlBuilder cfg test to theory</msg><path><editType>edit</editType><file>TestUtils/UrlBuilder.cs</file></path><path><editType>edit</editType><file>TestUtilsTests/UrlBuilderTest.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>TestUtils/UrlBuilder.cs</affectedPath><affectedPath>TestUtilsTests/UrlBuilderTest.cs</affectedPath><commitId>3d8594dd855febd0024a0ac876ad7e8ce03d2848</commitId><timestamp>1559286933000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/blowfishpro</absoluteUrl><fullName>blowfishpro</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>Set FileType based on common types
Makes checking against them easier
</comment><date>2019-05-31 00:15:33 -0700</date><id>3d8594dd855febd0024a0ac876ad7e8ce03d2848</id><msg>Set FileType based on common types</msg><path><editType>edit</editType><file>TestUtils/UrlBuilder.cs</file></path><path><editType>edit</editType><file>TestUtilsTests/UrlBuilderTest.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManagerTests/Logging/StreamLoggerTest.cs</affectedPath><commitId>eb3db605b24f56af6e4da5a17a8dbf3b9795292e</commitId><timestamp>1559288013000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/blowfishpro</absoluteUrl><fullName>blowfishpro</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>unnecessary using
</comment><date>2019-05-31 00:33:33 -0700</date><id>eb3db605b24f56af6e4da5a17a8dbf3b9795292e</id><msg>unnecessary using</msg><path><editType>edit</editType><file>ModuleManagerTests/Logging/StreamLoggerTest.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManagerTests/Logging/StreamLoggerTest.cs</affectedPath><commitId>9795e3656b9e73a7ed1622d2b832002ad9b70d38</commitId><timestamp>1559288453000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/blowfishpro</absoluteUrl><fullName>blowfishpro</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>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
</comment><date>2019-05-31 00:40:53 -0700</date><id>9795e3656b9e73a7ed1622d2b832002ad9b70d38</id><msg>make StreamLoggerTest.TestLog work on \n platforms</msg><path><editType>edit</editType><file>ModuleManagerTests/Logging/StreamLoggerTest.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>TestUtilsTests/TestConfigNodeTest.cs</affectedPath><commitId>9311cfb45507323f3f56f315dbda61f5034a31b0</commitId><timestamp>1561614957000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/blowfishpro</absoluteUrl><fullName>blowfishpro</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>Improve TestConfigNodeTest
Strictly assert the structure of the node
</comment><date>2019-06-26 22:55:57 -0700</date><id>9311cfb45507323f3f56f315dbda61f5034a31b0</id><msg>Improve TestConfigNodeTest</msg><path><editType>edit</editType><file>TestUtilsTests/TestConfigNodeTest.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>TestUtils/TestConfigNode.cs</affectedPath><commitId>ee5995f6196cfe58f2f646b1f8f8f847b32b9f0d</commitId><timestamp>1561615106000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/blowfishpro</absoluteUrl><fullName>blowfishpro</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>Remove redundant parent class
</comment><date>2019-06-26 22:58:26 -0700</date><id>ee5995f6196cfe58f2f646b1f8f8f847b32b9f0d</id><msg>Remove redundant parent class</msg><path><editType>edit</editType><file>TestUtils/TestConfigNode.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>TestUtils/TestConfigNode.cs</affectedPath><affectedPath>TestUtilsTests/TestConfigNodeTest.cs</affectedPath><commitId>3e4a9f998ecd40118e07bce7c655da6fb15a8442</commitId><timestamp>1561615407000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/blowfishpro</absoluteUrl><fullName>blowfishpro</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>Fix TestConfigNode's handling of escaped chars
KSP removes these automatically, so we want to avoid that by
constructing the Value ourselves
</comment><date>2019-06-26 23:03:27 -0700</date><id>3e4a9f998ecd40118e07bce7c655da6fb15a8442</id><msg>Fix TestConfigNode's handling of escaped chars</msg><path><editType>edit</editType><file>TestUtils/TestConfigNode.cs</file></path><path><editType>edit</editType><file>TestUtilsTests/TestConfigNodeTest.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManagerTests/Extensions/ConfigNodeExtensionsTest.cs</affectedPath><commitId>8e5c29ad0983157c88116085d4745e125941a416</commitId><timestamp>1561616281000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/blowfishpro</absoluteUrl><fullName>blowfishpro</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>Clean up test a bit
Use AssertValue method Use AssertEmpty rather than asserting count zero
</comment><date>2019-06-26 23:18:01 -0700</date><id>8e5c29ad0983157c88116085d4745e125941a416</id><msg>Clean up test a bit</msg><path><editType>edit</editType><file>ModuleManagerTests/Extensions/ConfigNodeExtensionsTest.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManagerTests/Extensions/ConfigNodeExtensionsTest.cs</affectedPath><affectedPath>ModuleManager/Extensions/ConfigNodeExtensions.cs</affectedPath><commitId>0feef88557d938ee16b889ba5685db307be2c798</commitId><timestamp>1561618409000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/blowfishpro</absoluteUrl><fullName>blowfishpro</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>Fix DeepCopy handling of escaped values
KSP removes these in AddValue, we can circumvent that by constructing
the Value ourselves
</comment><date>2019-06-26 23:53:29 -0700</date><id>0feef88557d938ee16b889ba5685db307be2c798</id><msg>Fix DeepCopy handling of escaped values</msg><path><editType>edit</editType><file>ModuleManagerTests/Extensions/ConfigNodeExtensionsTest.cs</file></path><path><editType>edit</editType><file>ModuleManager/Extensions/ConfigNodeExtensions.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManagerTests/Extensions/ConfigNodeExtensionsTest.cs</affectedPath><affectedPath>ModuleManager/MMPatchLoader.cs</affectedPath><affectedPath>ModuleManager/Extensions/ConfigNodeExtensions.cs</affectedPath><affectedPath>ModuleManagerTests/MMPatchLoaderTest.cs</affectedPath><commitId>96201a72d6c1037c95dc7f98da8177c25ee867f0</commitId><timestamp>1561620237000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/blowfishpro</absoluteUrl><fullName>blowfishpro</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>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
</comment><date>2019-06-27 00:23:57 -0700</date><id>96201a72d6c1037c95dc7f98da8177c25ee867f0</id><msg>Fix ModifyNode handling of escaped characters</msg><path><editType>edit</editType><file>ModuleManagerTests/Extensions/ConfigNodeExtensionsTest.cs</file></path><path><editType>edit</editType><file>ModuleManager/Extensions/ConfigNodeExtensions.cs</file></path><path><editType>edit</editType><file>ModuleManagerTests/MMPatchLoaderTest.cs</file></path><path><editType>edit</editType><file>ModuleManager/MMPatchLoader.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManager/MMPatchLoader.cs</affectedPath><commitId>f2fba86ce98bcba5ab13b7d3ce6c6fd7e51e74ea</commitId><timestamp>1561621217000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/blowfishpro</absoluteUrl><fullName>blowfishpro</fullName></author><authorEmail>joeydwong@gmail.com</authorEmail><comment>Ensure tabs and newlines don't break cache
Explicitly escape \n and \t which the localizer unescapes when game
database is initially loaded
</comment><date>2019-06-27 00:40:17 -0700</date><id>f2fba86ce98bcba5ab13b7d3ce6c6fd7e51e74ea</id><msg>Ensure tabs and newlines don't break cache</msg><path><editType>edit</editType><file>ModuleManager/MMPatchLoader.cs</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>ModuleManager/Properties/AssemblyInfo.cs</affectedPath><commitId>3d85ddca5fcf62e81e21904fcb04364039081bbf</commitId><timestamp>1565132603000</timestamp><author><absoluteUrl>https://ksp.sarbian.com/jenkins/user/sarbian</absoluteUrl><fullName>sarbian</fullName></author><authorEmail>sebastien.gaggini@gmail.com</authorEmail><comment>v4.0.3
</comment><date>2019-08-07 01:03:23 +0200</date><id>3d85ddca5fcf62e81e21904fcb04364039081bbf</id><msg>v4.0.3</msg><path><editType>edit</editType><file>ModuleManager/Properties/AssemblyInfo.cs</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://ksp.sarbian.com/jenkins/user/sarbian</absoluteUrl><fullName>sarbian</fullName></culprit><culprit><absoluteUrl>https://ksp.sarbian.com/jenkins/user/blowfishpro</absoluteUrl><fullName>blowfishpro</fullName></culprit><culprit><absoluteUrl>https://ksp.sarbian.com/jenkins/user/joeydwong</absoluteUrl><fullName>joeydwong</fullName></culprit></freeStyleBuild>