{
  "_class" : "hudson.model.FreeStyleBuild",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "com.cloudbees.jenkins.GitHubPushCause",
          "shortDescription" : "Started by GitHub push by sarbian"
        }
      ]
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "refs/remotes/origin/dev" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 40,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "166b72c9a2a087c3b58e4e3e4ea949171c48c9c7",
            "branch" : [
              {
                "SHA1" : "166b72c9a2a087c3b58e4e3e4ea949171c48c9c7",
                "name" : "refs/remotes/origin/dev"
              }
            ]
          },
          "revision" : {
            "SHA1" : "166b72c9a2a087c3b58e4e3e4ea949171c48c9c7",
            "branch" : [
              {
                "SHA1" : "166b72c9a2a087c3b58e4e3e4ea949171c48c9c7",
                "name" : "refs/remotes/origin/dev"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "166b72c9a2a087c3b58e4e3e4ea949171c48c9c7",
        "branch" : [
          {
            "SHA1" : "166b72c9a2a087c3b58e4e3e4ea949171c48c9c7",
            "name" : "refs/remotes/origin/dev"
          }
        ]
      },
      "remoteUrls" : [
        "https://github.com/sarbian/ModuleManager.git"
      ],
      "scmName" : ""
    },
    {
      "_class" : "hudson.plugins.git.GitTagAction"
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    {
      "displayPath" : "ModuleManager.dll",
      "fileName" : "ModuleManager.dll",
      "relativePath" : "ModuleManager.dll"
    }
  ],
  "building" : False,
  "description" : None,
  "displayName" : "#40",
  "duration" : 6350,
  "estimatedDuration" : 6498,
  "executor" : None,
  "fullDisplayName" : "ModuleManager-Dev #40",
  "id" : "40",
  "inProgress" : False,
  "keepLog" : False,
  "number" : 40,
  "queueId" : 430,
  "result" : "SUCCESS",
  "timestamp" : 1548357411750,
  "url" : "https://ksp.sarbian.com/jenkins/user/john/my-views/view/All/job/ModuleManager-Dev/40/",
  "builtOn" : "",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/ModuleManager.csproj",
          "ModuleManager/Fix16.cs",
          "ModuleManager/ModuleManager.cs"
        ],
        "commitId" : "357259df4184473489420e91c32bfa5b06bb74be",
        "timestamp" : 1546974023000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/unknown",
          "fullName" : "unknown"
        },
        "authorEmail" : "sebastien.gaggini@gmail.com",
        "comment" : "Workaround for 1.6.0 PartDatabase rebuild\u000a",
        "date" : "2019-01-08 20:00:23 +0100",
        "id" : "357259df4184473489420e91c32bfa5b06bb74be",
        "msg" : "Workaround for 1.6.0 PartDatabase rebuild",
        "paths" : [
          {
            "editType" : "add",
            "file" : "ModuleManager/Fix16.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/ModuleManager.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/ModuleManager.csproj"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/Properties/AssemblyInfo.cs"
        ],
        "commitId" : "716cbd1e414c7f75b23d8add94de9c21cd11bc94",
        "timestamp" : 1546974187000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/unknown",
          "fullName" : "unknown"
        },
        "authorEmail" : "sebastien.gaggini@gmail.com",
        "comment" : "v3.1.3\u000a",
        "date" : "2019-01-08 20:03:07 +0100",
        "id" : "716cbd1e414c7f75b23d8add94de9c21cd11bc94",
        "msg" : "v3.1.3",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/Properties/AssemblyInfo.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManagerTests/ModuleManagerTests.csproj",
          "TestUtilsTests/packages.config",
          "TestUtilsTests/TestUtilsTests.csproj",
          "ModuleManagerTests/packages.config"
        ],
        "commitId" : "b605a7345aed428c1f1d64856329fcdf722c2391",
        "timestamp" : 1547056425000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Update NuGet packages where available\u000aOthers require .NET 4\u000a",
        "date" : "2019-01-09 09:53:45 -0800",
        "id" : "b605a7345aed428c1f1d64856329fcdf722c2391",
        "msg" : "Update NuGet packages where available",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "TestUtilsTests/TestUtilsTests.csproj"
          },
          {
            "editType" : "edit",
            "file" : "TestUtilsTests/packages.config"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/packages.config"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/ModuleManagerTests.csproj"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManagerTests/ModuleManagerTests.csproj",
          "TestUtilsTests/packages.config",
          "TestUtilsTests/TestUtilsTests.csproj",
          "ModuleManagerTests/packages.config",
          "TestUtils/TestUtils.csproj"
        ],
        "commitId" : "29932505aafa752c4a3bb7eb1cd51491118c9fd1",
        "timestamp" : 1547056425000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Accessory projects on .NET 4.7.1\u000aVisual Studio apparently requires .NET 4 to run tests now.  Main project\u000astays on 3.5 since KSP requires that.\u000a",
        "date" : "2019-01-09 09:53:45 -0800",
        "id" : "29932505aafa752c4a3bb7eb1cd51491118c9fd1",
        "msg" : "Accessory projects on .NET 4.7.1",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/packages.config"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/ModuleManagerTests.csproj"
          },
          {
            "editType" : "edit",
            "file" : "TestUtils/TestUtils.csproj"
          },
          {
            "editType" : "edit",
            "file" : "TestUtilsTests/TestUtilsTests.csproj"
          },
          {
            "editType" : "edit",
            "file" : "TestUtilsTests/packages.config"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManagerTests/packages.config",
          "ModuleManagerTests/app.config",
          "ModuleManagerTests/ModuleManagerTests.csproj"
        ],
        "commitId" : "9a9bd677dadd99e360490bb2b110522b3ca3b1bd",
        "timestamp" : 1547056425000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Update NSubstitute to latest\u000a",
        "date" : "2019-01-09 09:53:45 -0800",
        "id" : "9a9bd677dadd99e360490bb2b110522b3ca3b1bd",
        "msg" : "Update NSubstitute to latest",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/packages.config"
          },
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/app.config"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/ModuleManagerTests.csproj"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManagerTests/ModuleManagerTests.csproj",
          "TestUtilsTests/packages.config",
          "TestUtilsTests/TestUtilsTests.csproj",
          "ModuleManagerTests/packages.config"
        ],
        "commitId" : "bb858604b6cdd5f1369ce0b7cad8819e355b133c",
        "timestamp" : 1547056425000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Update Xunit\u000a",
        "date" : "2019-01-09 09:53:45 -0800",
        "id" : "bb858604b6cdd5f1369ce0b7cad8819e355b133c",
        "msg" : "Update Xunit",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/ModuleManagerTests.csproj"
          },
          {
            "editType" : "edit",
            "file" : "TestUtilsTests/TestUtilsTests.csproj"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/packages.config"
          },
          {
            "editType" : "edit",
            "file" : "TestUtilsTests/packages.config"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManagerTests/PatchExtractorTest.cs",
          "ModuleManagerTests/Patches/PatchCompilerTest.cs",
          "ModuleManagerTests/Extensions/ConfigNodeExtensionsTest.cs",
          "ModuleManagerTests/Patches/EditPatchTest.cs",
          "ModuleManagerTests/Patches/CopyPatchTest.cs",
          "ModuleManagerTests/DummyTest.cs",
          "TestUtilsTests/DummyTest.cs"
        ],
        "commitId" : "0968853237bbf2341f14a9456a2417a982efc1fb",
        "timestamp" : 1547056425000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Fix Xunit warnings\u000a",
        "date" : "2019-01-09 09:53:45 -0800",
        "id" : "0968853237bbf2341f14a9456a2417a982efc1fb",
        "msg" : "Fix Xunit warnings",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/DummyTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Extensions/ConfigNodeExtensionsTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchExtractorTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Patches/EditPatchTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Patches/CopyPatchTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Patches/PatchCompilerTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "TestUtilsTests/DummyTest.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManagerTests/ModuleManagerTests.csproj",
          "ModuleManager/Logging/StreamLogger.cs",
          "ModuleManager/ModuleManager.csproj",
          "ModuleManagerTests/Logging/StreamLoggerTest.cs"
        ],
        "commitId" : "e03db37b1605fe8496b3456f0af5a7a752439442",
        "timestamp" : 1547103160000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "implement stream logger\u000alog to a stream\u000a",
        "date" : "2019-01-09 22:52:40 -0800",
        "id" : "e03db37b1605fe8496b3456f0af5a7a752439442",
        "msg" : "implement stream logger",
        "paths" : [
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/Logging/StreamLoggerTest.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Logging/StreamLogger.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/ModuleManager.csproj"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/ModuleManagerTests.csproj"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/Progress/IPatchProgress.cs"
        ],
        "commitId" : "16d88d209d5f1cc5f22061d2e9e065122d1f00a9",
        "timestamp" : 1547103160000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Unnecessary using\u000a",
        "date" : "2019-01-09 22:52:40 -0800",
        "id" : "16d88d209d5f1cc5f22061d2e9e065122d1f00a9",
        "msg" : "Unnecessary using",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/Progress/IPatchProgress.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/ModuleManager.cs"
        ],
        "commitId" : "376b71fe5cdee0ea1410bb4d63763ed00bc251c9",
        "timestamp" : 1547103160000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "These are already run by MMPatchLoader\u000aNo need to explicitly run them again on database reload\u000a",
        "date" : "2019-01-09 22:52:40 -0800",
        "id" : "376b71fe5cdee0ea1410bb4d63763ed00bc251c9",
        "msg" : "These are already run by MMPatchLoader",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/ModuleManager.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/MMPatchLoader.cs",
          "ModuleManagerTests/InGameTestRunnerTest.cs",
          "ModuleManager/ModuleManagerPostPatch.cs",
          "ModuleManager/ModuleManager.cs",
          "ModuleManagerTests/ModuleManagerTests.csproj",
          "ModuleManager/ModuleManagerTestRunner.cs",
          "ModuleManager/ModuleManager.csproj"
        ],
        "commitId" : "e1a2be8b7b7dfab2c1c9f1acc0a96cc6d3696b34",
        "timestamp" : 1547103301000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Extract post patch\u000aNow its own loading system\u000aExtract test runner and add tests for it (meta!)\u000a",
        "date" : "2019-01-09 22:55:01 -0800",
        "id" : "e1a2be8b7b7dfab2c1c9f1acc0a96cc6d3696b34",
        "msg" : "Extract post patch",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/ModuleManagerTests.csproj"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchLoader.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/ModuleManagerTestRunner.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/ModuleManagerPostPatch.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/ModuleManager.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/ModuleManager.csproj"
          },
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/InGameTestRunnerTest.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManagerTests/PatchExtractorTest.cs",
          "ModuleManager/Patches/EditPatch.cs",
          "ModuleManager/PatchExtractor.cs",
          "ModuleManager/ProtoUrlConfig.cs",
          "ModuleManager/Patches/IPatch.cs",
          "ModuleManager/Progress/IPatchProgress.cs",
          "ModuleManagerTests/Patches/EditPatchTest.cs",
          "ModuleManagerTests/Patches/CopyPatchTest.cs",
          "ModuleManager/PatchContext.cs",
          "ModuleManagerTests/Patches/DeletePatchTest.cs",
          "ModuleManagerTests/MMPatchLoaderTest.cs",
          "ModuleManager/Patches/PatchCompiler.cs",
          "ModuleManagerTests/Progress/PatchProgressTest.cs",
          "ModuleManagerTests/PatchListTest.cs",
          "ModuleManager/Patches/DeletePatch.cs",
          "ModuleManagerTests/Patches/PatchCompilerTest.cs",
          "ModuleManagerTests/Patches/InsertPatchTest.cs",
          "ModuleManagerTests/ModuleManagerTests.csproj",
          "ModuleManager/PatchList.cs",
          "ModuleManager/MMPatchLoader.cs",
          "ModuleManager/Patches/InsertPatch.cs",
          "ModuleManagerTests/PatchApplierTest.cs",
          "ModuleManager/PatchApplier.cs",
          "ModuleManager/ModuleManager.csproj",
          "ModuleManager/Progress/PatchProgress.cs",
          "ModuleManager/Patches/CopyPatch.cs"
        ],
        "commitId" : "48df502d6d38721788489652d57cd83d1d16a8dd",
        "timestamp" : 1547103580000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Operate on a copy of the game database then apply\u000a* Insert nodes are now patches.  They don't support MM syntax yet (just\u000aapplied directly) but that could be added\u000a* ProtoUrlConfig identifies a UrlFile and node without the expectation\u000athat the UrlFile knows about the node (turned into a real UrlConfig at\u000athe end)\u000a* Intermedate state of the game database is now a linked list of nodes\u000a",
        "date" : "2019-01-09 22:59:40 -0800",
        "id" : "48df502d6d38721788489652d57cd83d1d16a8dd",
        "msg" : "Operate on a copy of the game database then apply",
        "paths" : [
          {
            "editType" : "add",
            "file" : "ModuleManager/ProtoUrlConfig.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Progress/PatchProgressTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchApplier.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchList.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Patches/DeletePatch.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Patches/InsertPatch.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/ModuleManagerTests.csproj"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Patches/PatchCompilerTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Patches/DeletePatchTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchLoader.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchApplierTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Patches/EditPatchTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Patches/PatchCompiler.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/MMPatchLoaderTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchListTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/ModuleManager.csproj"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchExtractorTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchExtractor.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Patches/IPatch.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Patches/EditPatch.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Patches/CopyPatch.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Progress/IPatchProgress.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Progress/PatchProgress.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Patches/CopyPatchTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchContext.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/Patches/InsertPatchTest.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/MMPatchLoader.cs"
        ],
        "commitId" : "72f37f1b58158c6dbf5fed3aef2cd06d3ffc9fc5",
        "timestamp" : 1547103580000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Move path initialization to static initializer\u000aBy the time the plugin is even loaded this should all exist\u000a",
        "date" : "2019-01-09 22:59:40 -0800",
        "id" : "72f37f1b58158c6dbf5fed3aef2cd06d3ffc9fc5",
        "msg" : "Move path initialization to static initializer",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchLoader.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/MMPatchLoader.cs"
        ],
        "commitId" : "122d4bfbfc8d4c32c84cc63a7da43430c0be1c32",
        "timestamp" : 1547103580000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Make sure cache also uses copy of game db\u000aConfigs can be applied after in either case\u000a",
        "date" : "2019-01-09 22:59:40 -0800",
        "id" : "122d4bfbfc8d4c32c84cc63a7da43430c0be1c32",
        "msg" : "Make sure cache also uses copy of game db",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchLoader.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/CustomConfigsManager.cs",
          "ModuleManager/FilePathRepository.cs",
          "ModuleManager/MMPatchLoader.cs",
          "ModuleManager/ModuleManager.csproj"
        ],
        "commitId" : "ea7b05a6358295f43f20d02aba4095e76e58fef3",
        "timestamp" : 1547103580000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Extract paths to their own class\u000aForgot that the static initalizers would prevent tests from running\u000a",
        "date" : "2019-01-09 22:59:40 -0800",
        "id" : "ea7b05a6358295f43f20d02aba4095e76e58fef3",
        "msg" : "Extract paths to their own class",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/ModuleManager.csproj"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/CustomConfigsManager.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/FilePathRepository.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchLoader.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/MMPatchLoader.cs",
          "ModuleManager/ModuleManagerPostPatch.cs",
          "ModuleManager/Progress/IPatchProgress.cs",
          "ModuleManager/ModuleManager.cs",
          "ModuleManager/MMPatchRunner.cs",
          "ModuleManagerTests/Progress/PatchProgressTest.cs",
          "ModuleManagerTests/PatchApplierTest.cs",
          "ModuleManager/ModuleManager.csproj",
          "ModuleManager/Progress/PatchProgress.cs",
          "ModuleManager/PatchApplier.cs"
        ],
        "commitId" : "d50fc9e2403b3860c842267b4ff3ef04d32c53e6",
        "timestamp" : 1547103721000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "patch in background\u000aPatches are now applied on a separate thread to an isolated copy of the \u000agame database, then copied into the actual game database by post-patch \u000arunner.  Post patch runner will wait for patched database if it isn't\u000adone yet.\u000aOne consequence is that logging during patching can no longer be\u000adirected to the main log (it'll get mixed up with other messages).  Now\u000adirected to\u000a<ksp_root>/Logs/ModuleManager.log\u000a",
        "date" : "2019-01-09 23:02:01 -0800",
        "id" : "d50fc9e2403b3860c842267b4ff3ef04d32c53e6",
        "msg" : "patch in background",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/ModuleManager.csproj"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/ModuleManagerPostPatch.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchLoader.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Progress/IPatchProgress.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Progress/PatchProgressTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchApplierTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Progress/PatchProgress.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/ModuleManager.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchApplier.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/MMPatchRunner.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/MMPatchLoader.cs"
        ],
        "commitId" : "09b1eff0444f3ecdb1e6b312b1f10906e1ef2b73",
        "timestamp" : 1547103721000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Remove PurgeUnused\u000aHasn't been necessary for a while\u000a",
        "date" : "2019-01-09 23:02:01 -0800",
        "id" : "09b1eff0444f3ecdb1e6b312b1f10906e1ef2b73",
        "msg" : "Remove PurgeUnused",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchLoader.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/FilePathRepository.cs",
          "ModuleManager/MMPatchRunner.cs"
        ],
        "commitId" : "39e4157f86bcce19eafb2d2adbc0fc5b64f520ff",
        "timestamp" : 1547103721000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Put log paths in path repository\u000a",
        "date" : "2019-01-09 23:02:01 -0800",
        "id" : "39e4157f86bcce19eafb2d2adbc0fc5b64f520ff",
        "msg" : "Put log paths in path repository",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchRunner.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/FilePathRepository.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/PostPatchLoader.cs",
          "ModuleManager/ModuleManager.csproj",
          "ModuleManager/ModuleManagerPostPatch.cs"
        ],
        "commitId" : "de6b621e8e8bfcdbd9ec917f0fcd9404d1967579",
        "timestamp" : 1547103721000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Rename file to reflect class name\u000a",
        "date" : "2019-01-09 23:02:01 -0800",
        "id" : "de6b621e8e8bfcdbd9ec917f0fcd9404d1967579",
        "msg" : "Rename file to reflect class name",
        "paths" : [
          {
            "editType" : "add",
            "file" : "ModuleManager/PostPatchLoader.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/ModuleManager.csproj"
          },
          {
            "editType" : "delete",
            "file" : "ModuleManager/ModuleManagerPostPatch.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/PostPatchLoader.cs"
        ],
        "commitId" : "6ed6702fcf105168da1552667e2d6cf5a8e5dc2a",
        "timestamp" : 1547103721000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Dump ModuleManager log to main log after patching\u000aMakes it easier to debug people's issues\u000a",
        "date" : "2019-01-09 23:02:01 -0800",
        "id" : "6ed6702fcf105168da1552667e2d6cf5a8e5dc2a",
        "msg" : "Dump ModuleManager log to main log after patching",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/PostPatchLoader.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/Patches/DeletePatch.cs",
          "ModuleManager/Patches/EditPatch.cs",
          "ModuleManagerTests/Patches/InsertPatchTest.cs",
          "ModuleManager/Patches/IPatch.cs",
          "ModuleManagerTests/Patches/EditPatchTest.cs",
          "ModuleManagerTests/Patches/CopyPatchTest.cs",
          "ModuleManager/PatchList.cs",
          "ModuleManagerTests/Patches/DeletePatchTest.cs",
          "ModuleManager/Patches/InsertPatch.cs",
          "ModuleManagerTests/PatchListTest.cs",
          "ModuleManagerTests/PatchApplierTest.cs",
          "ModuleManager/PatchApplier.cs",
          "ModuleManager/Patches/CopyPatch.cs"
        ],
        "commitId" : "1589e0708914af3889854411f44e89ee86c78b02",
        "timestamp" : 1547103721000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Don't count insert nodes as patches\u000aAs far as progress is concerned, these take much less time to apply than\u000apatches, and are often less numerous.  This can lead to weird completion\u000apercentages.\u000a",
        "date" : "2019-01-09 23:02:01 -0800",
        "id" : "1589e0708914af3889854411f44e89ee86c78b02",
        "msg" : "Don't count insert nodes as patches",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchApplierTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Patches/InsertPatchTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Patches/InsertPatch.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Patches/CopyPatchTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Patches/CopyPatch.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchApplier.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Patches/DeletePatch.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Patches/IPatch.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchListTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Patches/EditPatchTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchList.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Patches/EditPatch.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Patches/DeletePatchTest.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/MMPatchLoader.cs"
        ],
        "commitId" : "c2424cb2254dbaa3bdd45e2defcfb20c40116e26",
        "timestamp" : 1547103721000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Only display whole percentages\u000a",
        "date" : "2019-01-09 23:02:01 -0800",
        "id" : "c2424cb2254dbaa3bdd45e2defcfb20c40116e26",
        "msg" : "Only display whole percentages",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchLoader.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/FilePathRepository.cs"
        ],
        "commitId" : "aeca3350c3960f3b87489f73e120c86c8c3f21de",
        "timestamp" : 1547103721000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Add subdir under Logs\u000aMakes it consistent with Kopernicus\u000a",
        "date" : "2019-01-09 23:02:01 -0800",
        "id" : "aeca3350c3960f3b87489f73e120c86c8c3f21de",
        "msg" : "Add subdir under Logs",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/FilePathRepository.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/ModuleManager.cs"
        ],
        "commitId" : "ed78083e1fd679a0c23ffe272b5fa1863aefd893",
        "timestamp" : 1547103721000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Replace reloading screen messages with dialog\u000a",
        "date" : "2019-01-09 23:02:01 -0800",
        "id" : "ed78083e1fd679a0c23ffe272b5fa1863aefd893",
        "msg" : "Replace reloading screen messages with dialog",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/ModuleManager.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManagerTests/ModuleManagerTests.csproj",
          "ModuleManager/Logging/LogSplitter.cs",
          "ModuleManager/ModuleManager.csproj",
          "ModuleManagerTests/Logging/LogSplitterTest.cs"
        ],
        "commitId" : "52d8b18040d915575e643cf6d8b5cc039f779fb0",
        "timestamp" : 1547103721000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "add LogSplitter\u000adirects logs to two other loggers\u000a",
        "date" : "2019-01-09 23:02:01 -0800",
        "id" : "52d8b18040d915575e643cf6d8b5cc039f779fb0",
        "msg" : "add LogSplitter",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/ModuleManager.csproj"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Logging/LogSplitter.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/ModuleManagerTests.csproj"
          },
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/Logging/LogSplitterTest.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/FilePathRepository.cs",
          "ModuleManager/MMPatchLoader.cs"
        ],
        "commitId" : "714500341d17e5a0fccba3baa61b2ac6105e62f9",
        "timestamp" : 1547103721000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Save patch log and dump when loading from cache\u000aThis ensures that modders have access to a full history of what\u000aModuleManager did even when the log was taken from a run where it loaded\u000afrom cache\u000a",
        "date" : "2019-01-09 23:02:01 -0800",
        "id" : "714500341d17e5a0fccba3baa61b2ac6105e62f9",
        "msg" : "Save patch log and dump when loading from cache",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/FilePathRepository.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchLoader.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/MMPatchLoader.cs",
          "ModuleManager/Logging/StreamLogger.cs",
          "ModuleManagerTests/Logging/StreamLoggerTest.cs",
          "ModuleManager/MMPatchRunner.cs"
        ],
        "commitId" : "ee9073b8a94c4ea4e8fbbf01c2e48704cb1088cb",
        "timestamp" : 1547103721000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Get rid of stream logger's exception logger\u000aIn theory it should be monitored, and not being able to log is a pretty  \u000aserious condition we'd want to watch for\u000a",
        "date" : "2019-01-09 23:02:01 -0800",
        "id" : "ee9073b8a94c4ea4e8fbbf01c2e48704cb1088cb",
        "msg" : "Get rid of stream logger's exception logger",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Logging/StreamLoggerTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Logging/StreamLogger.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchLoader.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchRunner.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/MMPatchLoader.cs"
        ],
        "commitId" : "e0c1400300d9aafc649cce033ed99d85df50f24c",
        "timestamp" : 1547103721000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Get rid of trailing whitespace\u000aThanks VisualStudio\u000a",
        "date" : "2019-01-09 23:02:01 -0800",
        "id" : "e0c1400300d9aafc649cce033ed99d85df50f24c",
        "msg" : "Get rid of trailing whitespace",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchLoader.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/Logging/StreamLogger.cs"
        ],
        "commitId" : "326119bc1ec3d1c2cf8b13f22f6d426e47b7e96a",
        "timestamp" : 1547103721000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "use international date format\u000a",
        "date" : "2019-01-09 23:02:01 -0800",
        "id" : "326119bc1ec3d1c2cf8b13f22f6d426e47b7e96a",
        "msg" : "use international date format",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/Logging/StreamLogger.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/MMPatchLoader.cs",
          "ModuleManager/Logging/QueueLogRunner.cs",
          "ModuleManager/MMPatchRunner.cs",
          "ModuleManagerTests/ModuleManagerTests.csproj",
          "ModuleManagerTests/Collections/MessageQueueTest.cs",
          "ModuleManager/ModuleManager.csproj",
          "ModuleManagerTests/Logging/QueueLogRunnerTest.cs",
          "ModuleManager/Collections/MessageQueue.cs"
        ],
        "commitId" : "072b0d002a2e3facd4850a6a9ec9efdd7f6c99c5",
        "timestamp" : 1547103721000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "extract common parts of reading logs from queue to its own class\u000a",
        "date" : "2019-01-09 23:02:01 -0800",
        "id" : "072b0d002a2e3facd4850a6a9ec9efdd7f6c99c5",
        "msg" : "extract common parts of reading logs from queue to its own class",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/ModuleManager.csproj"
          },
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/Logging/QueueLogRunnerTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/ModuleManagerTests.csproj"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchLoader.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchRunner.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Logging/QueueLogRunner.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Collections/MessageQueueTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Collections/MessageQueue.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/Properties/AssemblyInfo.cs"
        ],
        "commitId" : "166b72c9a2a087c3b58e4e3e4ea949171c48c9c7",
        "timestamp" : 1548357325000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/sarbian",
          "fullName" : "sarbian"
        },
        "authorEmail" : "sebastien.gaggini@gmail.com",
        "comment" : "v4.0.0\u000a",
        "date" : "2019-01-24 20:15:25 +0100",
        "id" : "166b72c9a2a087c3b58e4e3e4ea949171c48c9c7",
        "msg" : "v4.0.0",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/Properties/AssemblyInfo.cs"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/unknown",
      "fullName" : "unknown"
    },
    {
      "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/sarbian",
      "fullName" : "sarbian"
    },
    {
      "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
      "fullName" : "joeydwong"
    }
  ]
}