{
  "_class" : "hudson.model.FreeStyleBuild",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "hudson.model.Cause$UserIdCause",
          "shortDescription" : "Started by user sarbian",
          "userId" : "sarbian",
          "userName" : "sarbian"
        }
      ]
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "origin/master" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 53,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "aa022badeb26e22a85b71f631f019190b617fb8a",
            "branch" : [
              {
                "SHA1" : "aa022badeb26e22a85b71f631f019190b617fb8a",
                "name" : "origin/master"
              }
            ]
          },
          "revision" : {
            "SHA1" : "aa022badeb26e22a85b71f631f019190b617fb8a",
            "branch" : [
              {
                "SHA1" : "aa022badeb26e22a85b71f631f019190b617fb8a",
                "name" : "origin/master"
              }
            ]
          }
        },
        "refs/remotes/origin/master" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 144,
          "buildResult" : None,
          "marked" : {
            "SHA1" : "00216d33dcf53034d6c4e593effd84d67e341c49",
            "branch" : [
              {
                "SHA1" : "00216d33dcf53034d6c4e593effd84d67e341c49",
                "name" : "refs/remotes/origin/master"
              }
            ]
          },
          "revision" : {
            "SHA1" : "00216d33dcf53034d6c4e593effd84d67e341c49",
            "branch" : [
              {
                "SHA1" : "00216d33dcf53034d6c4e593effd84d67e341c49",
                "name" : "refs/remotes/origin/master"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "00216d33dcf53034d6c4e593effd84d67e341c49",
        "branch" : [
          {
            "SHA1" : "00216d33dcf53034d6c4e593effd84d67e341c49",
            "name" : "refs/remotes/origin/master"
          }
        ]
      },
      "remoteUrls" : [
        "https://github.com/sarbian/ModuleManager.git"
      ],
      "scmName" : ""
    },
    {
      "_class" : "hudson.plugins.git.GitTagAction"
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    {
      "displayPath" : "ModuleManager-3.1.1.zip",
      "fileName" : "ModuleManager-3.1.1.zip",
      "relativePath" : "ModuleManager-3.1.1.zip"
    },
    {
      "displayPath" : "ModuleManager.3.1.1.dll",
      "fileName" : "ModuleManager.3.1.1.dll",
      "relativePath" : "ModuleManager.3.1.1.dll"
    }
  ],
  "building" : False,
  "description" : None,
  "displayName" : "#144",
  "duration" : 4881,
  "estimatedDuration" : 4997,
  "executor" : None,
  "fullDisplayName" : "ModuleManager #144",
  "id" : "144",
  "inProgress" : False,
  "keepLog" : False,
  "number" : 144,
  "queueId" : 308,
  "result" : "SUCCESS",
  "timestamp" : 1542047972810,
  "url" : "https://ksp.sarbian.com/jenkins/user/sarbian/my-views/view/All/job/ModuleManager/144/",
  "builtOn" : "",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/MMPatchLoader.cs"
        ],
        "commitId" : "7ea256db1aa3c2e961d0178307fe9561f7206d0d",
        "timestamp" : 1540175007000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Make patch stopwatch local\u000aIt's not needed outside of ProcessPatch(), which contains everything it \u000aneeds to time\u000a",
        "date" : "2018-10-21 19:23:27 -0700",
        "id" : "7ea256db1aa3c2e961d0178307fe9561f7206d0d",
        "msg" : "Make patch stopwatch local",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchLoader.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/MMPatchLoader.cs"
        ],
        "commitId" : "8056f597afe14208b0ff9dd133cf9b8eb9b7c341",
        "timestamp" : 1540175007000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Make useCache local\u000aReally only needed for a few lines in ProcessPatch()\u000a",
        "date" : "2018-10-21 19:23:27 -0700",
        "id" : "8056f597afe14208b0ff9dd133cf9b8eb9b7c341",
        "msg" : "Make useCache local",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchLoader.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManagerTests/PatchExtractorTest.cs",
          "ModuleManager/PatchExtractor.cs",
          "ModuleManagerTests/PatchTest.cs",
          "ModuleManagerTests/ModuleManagerTests.csproj",
          "ModuleManager/Patch.cs",
          "ModuleManager/PatchList.cs",
          "ModuleManagerTests/PatchApplierTest.cs",
          "ModuleManager/PatchApplier.cs",
          "ModuleManager/ModuleManager.csproj"
        ],
        "commitId" : "02bd5817ec393dbecc9cc1eb0143aed2b5389723",
        "timestamp" : 1540175570000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Make Patch an object\u000aSaves having to parse things multiple times, error/info messages can now \u000ashow the original name (except NEEDS, will be worked on).  More \u000afunctionality will be added to this class in future commits.\u000a",
        "date" : "2018-10-21 19:32:50 -0700",
        "id" : "02bd5817ec393dbecc9cc1eb0143aed2b5389723",
        "msg" : "Make Patch an object",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchExtractorTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchExtractor.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/PatchTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchApplier.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchList.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchApplierTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/ModuleManager.csproj"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Patch.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/ModuleManagerTests.csproj"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/PatchExtractor.cs"
        ],
        "commitId" : "9d37955474438a38696ca0b15ae8dc8c451982d1",
        "timestamp" : 1540175570000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Simplify a bit\u000a",
        "date" : "2018-10-21 19:32:50 -0700",
        "id" : "9d37955474438a38696ca0b15ae8dc8c451982d1",
        "msg" : "Simplify a bit",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchExtractor.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/PatchExtractor.cs"
        ],
        "commitId" : "54c48ffa3ffab3939ec6895ef15756ef19339c0f",
        "timestamp" : 1540175570000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Extra semicolon\u000a",
        "date" : "2018-10-21 19:32:50 -0700",
        "id" : "54c48ffa3ffab3939ec6895ef15756ef19339c0f",
        "msg" : "Extra semicolon",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchExtractor.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/MMPatchLoader.cs",
          "ModuleManagerTests/PatchExtractorTest.cs",
          "ModuleManager/PatchExtractor.cs",
          "ModuleManagerTests/ModuleManagerTests.csproj",
          "ModuleManagerTests/PatchListTest.cs",
          "ModuleManager/PatchList.cs",
          "ModuleManagerTests/PatchApplierTest.cs",
          "ModuleManager/Pass.cs",
          "ModuleManager/Collections/ArrayEnumerator.cs",
          "ModuleManager/ModuleManager.csproj",
          "ModuleManager/PatchApplier.cs",
          "ModuleManagerTests/PassTest.cs"
        ],
        "commitId" : "e9411608c888b47d128865beedf047b3c622139b",
        "timestamp" : 1540175713000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Extract interface for PatchList, modify PatchExtractor\u000aPatchExtractor did too much at once, it shouldn't enumerate and extract \u000aat the same time (still some work to be done there...).  PatchList now \u000ahas a clearer interface and obscures more of the details - iterating \u000athrough patches is now handled by it rater than PatchApplier\u000a",
        "date" : "2018-10-21 19:35:13 -0700",
        "id" : "e9411608c888b47d128865beedf047b3c622139b",
        "msg" : "Extract interface for PatchList, modify PatchExtractor",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchList.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/ModuleManager.csproj"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchExtractorTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchListTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchLoader.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchExtractor.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchApplierTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchApplier.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Pass.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/ModuleManagerTests.csproj"
          },
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/PassTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Collections/ArrayEnumerator.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/MMPatchLoader.cs"
        ],
        "commitId" : "fef311054bbd8b0298e7af79e09acd935a4409d3",
        "timestamp" : 1540175713000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Allow null value in wildcard match\u000aAllows for instance :HAS[#someValue] instead of :HAS[#someValue[*]]\u000a",
        "date" : "2018-10-21 19:35:13 -0700",
        "id" : "fef311054bbd8b0298e7af79e09acd935a4409d3",
        "msg" : "Allow null value in wildcard match",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchLoader.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManagerTests/PatchExtractorTest.cs",
          "ModuleManagerTests/PatchTest.cs",
          "ModuleManagerTests/ModuleManagerTests.csproj",
          "ModuleManager/NodeMatcher.cs",
          "ModuleManager/Patch.cs",
          "ModuleManager/ModuleManager.csproj",
          "ModuleManager/PatchApplier.cs",
          "ModuleManagerTests/NodeMatcherTest.cs"
        ],
        "commitId" : "e134c5049ff49671538e6a64e9e494bf3f241a0b",
        "timestamp" : 1540175713000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Extract node matcher\u000aWill eventually be useful in modifying nodes too, but not without some \u000arefactoring.  For now it is only used on root patches.\u000a",
        "date" : "2018-10-21 19:35:13 -0700",
        "id" : "e134c5049ff49671538e6a64e9e494bf3f241a0b",
        "msg" : "Extract node matcher",
        "paths" : [
          {
            "editType" : "add",
            "file" : "ModuleManager/NodeMatcher.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Patch.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchExtractorTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/ModuleManager.csproj"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchApplier.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/NodeMatcherTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/ModuleManagerTests.csproj"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/Patches/DeletePatch.cs",
          "ModuleManagerTests/PatchExtractorTest.cs",
          "ModuleManager/Patches/EditPatch.cs",
          "ModuleManagerTests/Patches/PatchCompilerTest.cs",
          "ModuleManager/PatchExtractor.cs",
          "ModuleManager/Patches/IPatch.cs",
          "ModuleManagerTests/Patches/EditPatchTest.cs",
          "ModuleManagerTests/ModuleManagerTests.csproj",
          "ModuleManagerTests/Patches/CopyPatchTest.cs",
          "ModuleManager/Patch.cs",
          "ModuleManager/Pass.cs",
          "ModuleManager/PatchList.cs",
          "ModuleManagerTests/Patches/DeletePatchTest.cs",
          "ModuleManagerTests/PatchTest.cs",
          "ModuleManager/Patches/PatchCompiler.cs",
          "ModuleManagerTests/PatchListTest.cs",
          "ModuleManagerTests/PatchApplierTest.cs",
          "ModuleManager/ModuleManager.csproj",
          "ModuleManager/PatchApplier.cs",
          "ModuleManagerTests/PassTest.cs",
          "ModuleManager/Patches/CopyPatch.cs"
        ],
        "commitId" : "53d238a7ccc585c66ef21536fa5dd62fbea70328",
        "timestamp" : 1540175811000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Extract IPatch interface, split up root patches\u000a",
        "date" : "2018-10-21 19:36:51 -0700",
        "id" : "53d238a7ccc585c66ef21536fa5dd62fbea70328",
        "msg" : "Extract IPatch interface, split up root patches",
        "paths" : [
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/Patches/PatchCompilerTest.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/Patches/DeletePatchTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchApplierTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchExtractor.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Patches/DeletePatch.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Pass.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Patches/CopyPatch.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Patches/PatchCompiler.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchExtractorTest.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/Patches/EditPatchTest.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Patches/EditPatch.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/ModuleManager.csproj"
          },
          {
            "editType" : "delete",
            "file" : "ModuleManager/Patch.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchListTest.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/Patches/CopyPatchTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchApplier.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchList.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Patches/IPatch.cs"
          },
          {
            "editType" : "delete",
            "file" : "ModuleManagerTests/PatchTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/ModuleManagerTests.csproj"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PassTest.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManagerTests/PatchListTest.cs",
          "ModuleManagerTests/Patches/PatchCompilerTest.cs",
          "ModuleManagerTests/PassTest.cs",
          "ModuleManagerTests/NodeMatcherTest.cs"
        ],
        "commitId" : "ffbabbbdbeb035211853584a4d7ed43832c58dd0",
        "timestamp" : 1540175811000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Fix tests depending on line endings\u000aSince we're already asserting on the ParamName, we can trust that the \u000a2nd part of the message will be there and not test it.\u000a",
        "date" : "2018-10-21 19:36:51 -0700",
        "id" : "ffbabbbdbeb035211853584a4d7ed43832c58dd0",
        "msg" : "Fix tests depending on line endings",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Patches/PatchCompilerTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchListTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PassTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/NodeMatcherTest.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/Progress/ProgressCounter.cs"
        ],
        "commitId" : "c91258096cc0c5d3fb79a08ccfa30eee950e8939",
        "timestamp" : 1540175811000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Whitespace\u000a",
        "date" : "2018-10-21 19:36:51 -0700",
        "id" : "c91258096cc0c5d3fb79a08ccfa30eee950e8939",
        "msg" : "Whitespace",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/Progress/ProgressCounter.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManagerTests/Progress/PatchProgressTest.cs",
          "ModuleManager/MMPatchLoader.cs",
          "ModuleManager/Progress/PatchProgress.cs",
          "ModuleManager/Progress/ProgressCounter.cs",
          "ModuleManager/Progress/IPatchProgress.cs"
        ],
        "commitId" : "7b230976b88f11380d84ad3d6f224d0c6a9042b5",
        "timestamp" : 1540175811000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Allow warnings\u000aCache generation can proceed but the user will be alerted.\u000a",
        "date" : "2018-10-21 19:36:51 -0700",
        "id" : "7b230976b88f11380d84ad3d6f224d0c6a9042b5",
        "msg" : "Allow warnings",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/Progress/PatchProgress.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Progress/PatchProgressTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Progress/IPatchProgress.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchLoader.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Progress/ProgressCounter.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/Collections/ArrayEnumerator.cs",
          "ModuleManagerTests/Collections/ArrayEnumeratorTest.cs"
        ],
        "commitId" : "99984913ac564b5a06860a4094bbafe4ff335450",
        "timestamp" : 1540175811000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Make ArrayEnumerator more versatile\u000aNow optionally accepts start index and length\u000a",
        "date" : "2018-10-21 19:36:51 -0700",
        "id" : "99984913ac564b5a06860a4094bbafe4ff335450",
        "msg" : "Make ArrayEnumerator more versatile",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/Collections/ArrayEnumerator.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Collections/ArrayEnumeratorTest.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/Tags/TagListParser.cs",
          "ModuleManager/Tags/TagList.cs",
          "ModuleManagerTests/Tags/TagListParserTest.cs",
          "ModuleManager/Tags/Tag.cs",
          "ModuleManagerTests/ModuleManagerTests.csproj",
          "ModuleManagerTests/Tags/TagListTest.cs",
          "ModuleManagerTests/Tags/TagTest.cs",
          "ModuleManager/ModuleManager.csproj"
        ],
        "commitId" : "7d994ad71842dd85e4c48efcdeed075d8ed09dd3",
        "timestamp" : 1540175811000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Tag, TagList, TagListParser\u000aA lot of things in MM are structured like :tag[value]trailer and this\u000aformalizes that structure\u000a",
        "date" : "2018-10-21 19:36:51 -0700",
        "id" : "7d994ad71842dd85e4c48efcdeed075d8ed09dd3",
        "msg" : "Tag, TagList, TagListParser",
        "paths" : [
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/Tags/TagListParserTest.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/Tags/TagListTest.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Tags/TagList.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/Tags/TagTest.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Tags/TagListParser.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/ModuleManager.csproj"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Tags/Tag.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/ModuleManagerTests.csproj"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManagerTests/PatchExtractorTest.cs",
          "ModuleManager/Patches/EditPatch.cs",
          "ModuleManagerTests/Patches/PassSpecifiers/AfterPassSpecifierTest.cs",
          "ModuleManager/PatchExtractor.cs",
          "ModuleManagerTests/Patches/PassSpecifiers/InsertPassSpecifierTest.cs",
          "ModuleManager/Patches/IPatch.cs",
          "ModuleManager/Progress/IPatchProgress.cs",
          "ModuleManagerTests/Patches/EditPatchTest.cs",
          "ModuleManagerTests/Patches/CopyPatchTest.cs",
          "ModuleManagerTests/Patches/PassSpecifiers/ForPassSpecifierTest.cs",
          "ModuleManagerTests/Patches/PassSpecifiers/FinalPassSpecifierTest.cs",
          "ModuleManager/Patches/PassSpecifiers/FirstPassSpecifier.cs",
          "ModuleManager/Patches/ProtoPatch.cs",
          "ModuleManagerTests/Patches/ProtoPatchBuilderTest.cs",
          "ModuleManager/Patches/ProtoPatchBuilder.cs",
          "ModuleManagerTests/Patches/DeletePatchTest.cs",
          "ModuleManager/Patches/PassSpecifiers/LegacyPassSpecifier.cs",
          "ModuleManager/Patches/PassSpecifiers/BeforePassSpecifier.cs",
          "ModuleManager/Patches/PatchCompiler.cs",
          "ModuleManagerTests/Progress/PatchProgressTest.cs",
          "ModuleManagerTests/PatchListTest.cs",
          "ModuleManagerTests/Patches/PassSpecifiers/FirstPassSpecifierTest.cs",
          "ModuleManager/Patches/PassSpecifiers/InsertPassSpecifier.cs",
          "ModuleManager/Patches/PassSpecifiers/ForPassSpecifier.cs",
          "ModuleManager/Patches/DeletePatch.cs",
          "ModuleManager/Patches/PassSpecifiers/IPassSpecifier.cs",
          "ModuleManagerTests/Patches/PatchCompilerTest.cs",
          "ModuleManager/NeedsChecker.cs",
          "ModuleManagerTests/ModuleManagerTests.csproj",
          "ModuleManagerTests/NeedsCheckerTest.cs",
          "ModuleManager/PatchList.cs",
          "ModuleManagerTests/NodeMatcherTest.cs",
          "ModuleManagerTests/Patches/PassSpecifiers/LegacyPassSpecifierTest.cs",
          "ModuleManager/Patches/PassSpecifiers/FinalPassSpecifier.cs",
          "ModuleManager/MMPatchLoader.cs",
          "ModuleManager/NodeMatcher.cs",
          "ModuleManagerTests/PatchApplierTest.cs",
          "ModuleManager/PatchApplier.cs",
          "ModuleManager/Progress/PatchProgress.cs",
          "ModuleManager/ModuleManager.csproj",
          "ModuleManagerTests/Patches/PassSpecifiers/BeforePassSpecifierTest.cs",
          "ModuleManager/Patches/CopyPatch.cs",
          "ModuleManager/Patches/PassSpecifiers/AfterPassSpecifier.cs"
        ],
        "commitId" : "9b79b392f325efd89949a41c920f4871946a2ea5",
        "timestamp" : 1540175811000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Restructure patch building\u000aLots of changes\u000a* Parsing/validating patch is now separate code\u000a* Less code in the patch extractor (may even be able to go away entirely\u000awith some simplifications)\u000a* Pass specifier is now an explicit concept\u000a* Needs checker is now an object and has a cleaner interface\u000a* Some things which were errors before are now just warnings\u000a * If there is more than one pass specifier it will take the first one\u000aand warn\u000a* Syntax for root patch names is much more formal now, this might break\u000asome unusual cases that are silently accepted now\u000a",
        "date" : "2018-10-21 19:36:51 -0700",
        "id" : "9b79b392f325efd89949a41c920f4871946a2ea5",
        "msg" : "Restructure patch building",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Patches/PatchCompilerTest.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/Patches/PassSpecifiers/FinalPassSpecifierTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchApplier.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Patches/IPatch.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchList.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/ModuleManagerTests.csproj"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Patches/EditPatchTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Patches/CopyPatchTest.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Patches/PassSpecifiers/FirstPassSpecifier.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/Patches/PassSpecifiers/BeforePassSpecifierTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/NodeMatcher.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Progress/PatchProgress.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchExtractorTest.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/Patches/ProtoPatchBuilderTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Progress/PatchProgressTest.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Patches/PassSpecifiers/InsertPassSpecifier.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchApplierTest.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Patches/PassSpecifiers/LegacyPassSpecifier.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Patches/ProtoPatchBuilder.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/Patches/PassSpecifiers/FirstPassSpecifierTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Patches/CopyPatch.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/NodeMatcherTest.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Patches/PassSpecifiers/BeforePassSpecifier.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/Patches/PassSpecifiers/LegacyPassSpecifierTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Patches/PatchCompiler.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchListTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Patches/DeletePatchTest.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Patches/PassSpecifiers/FinalPassSpecifier.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/ModuleManager.csproj"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Patches/EditPatch.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/Patches/PassSpecifiers/InsertPassSpecifierTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchLoader.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Progress/IPatchProgress.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/NeedsCheckerTest.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Patches/PassSpecifiers/ForPassSpecifier.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/Patches/PassSpecifiers/ForPassSpecifierTest.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManagerTests/Patches/PassSpecifiers/AfterPassSpecifierTest.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Patches/PassSpecifiers/AfterPassSpecifier.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchExtractor.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Patches/PassSpecifiers/IPassSpecifier.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/Patches/DeletePatch.cs"
          },
          {
            "editType" : "add",
            "file" : "ModuleManager/Patches/ProtoPatch.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/NeedsChecker.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/Tags/TagListParser.cs",
          "ModuleManager/MMPatchLoader.cs",
          "ModuleManagerTests/PatchExtractorTest.cs",
          "ModuleManager/PatchExtractor.cs",
          "ModuleManagerTests/Tags/TagListParserTest.cs"
        ],
        "commitId" : "845fd212cf7121a33ff68a2d5706126f09391aa8",
        "timestamp" : 1540175811000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
          "fullName" : "joeydwong"
        },
        "authorEmail" : "joeydwong@gmail.com",
        "comment" : "Make extra colons a warning rather than an error\u000aBeen seeing a lot of these and the correct path is determinate\u000a",
        "date" : "2018-10-21 19:36:51 -0700",
        "id" : "845fd212cf7121a33ff68a2d5706126f09391aa8",
        "msg" : "Make extra colons a warning rather than an error",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/Tags/TagListParser.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/PatchExtractorTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManagerTests/Tags/TagListParserTest.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/MMPatchLoader.cs"
          },
          {
            "editType" : "edit",
            "file" : "ModuleManager/PatchExtractor.cs"
          }
        ]
      },
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "ModuleManager/Properties/AssemblyInfo.cs"
        ],
        "commitId" : "00216d33dcf53034d6c4e593effd84d67e341c49",
        "timestamp" : 1542047814000,
        "author" : {
          "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/sarbian",
          "fullName" : "sarbian"
        },
        "authorEmail" : "sebastien.gaggini@gmail.com",
        "comment" : "v3.1.1\u000a",
        "date" : "2018-11-12 19:36:54 +0100",
        "id" : "00216d33dcf53034d6c4e593effd84d67e341c49",
        "msg" : "v3.1.1",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "ModuleManager/Properties/AssemblyInfo.cs"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/joeydwong",
      "fullName" : "joeydwong"
    },
    {
      "absoluteUrl" : "https://ksp.sarbian.com/jenkins/user/sarbian",
      "fullName" : "sarbian"
    }
  ]
}