{
  "_class" : "hudson.model.FreeStyleBuild",
  "actions" : [
    {
      "_class" : "hudson.model.CauseAction",
      "causes" : [
        {
          "_class" : "hudson.triggers.SCMTrigger$SCMTriggerCause",
          "shortDescription" : "Started by an SCM change"
        }
      ]
    },
    {
      
    },
    {
      "_class" : "hudson.plugins.git.util.BuildData",
      "buildsByBranchName" : {
        "refs/remotes/origin/master" : {
          "_class" : "hudson.plugins.git.util.Build",
          "buildNumber" : 361,
          "buildResult" : null,
          "marked" : {
            "SHA1" : "28c0aada922ad2a510b00b4f0b7e0399c8cc8246",
            "branch" : [
              {
                "SHA1" : "28c0aada922ad2a510b00b4f0b7e0399c8cc8246",
                "name" : "refs/remotes/origin/master"
              }
            ]
          },
          "revision" : {
            "SHA1" : "28c0aada922ad2a510b00b4f0b7e0399c8cc8246",
            "branch" : [
              {
                "SHA1" : "28c0aada922ad2a510b00b4f0b7e0399c8cc8246",
                "name" : "refs/remotes/origin/master"
              }
            ]
          }
        }
      },
      "lastBuiltRevision" : {
        "SHA1" : "28c0aada922ad2a510b00b4f0b7e0399c8cc8246",
        "branch" : [
          {
            "SHA1" : "28c0aada922ad2a510b00b4f0b7e0399c8cc8246",
            "name" : "refs/remotes/origin/master"
          }
        ]
      },
      "remoteUrls" : [
        "https://github.com/mcMMO-Dev/mcMMO.git"
      ],
      "scmName" : ""
    },
    {
      
    },
    {
      
    },
    {
      
    },
    {
      "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"
    }
  ],
  "artifacts" : [
    {
      "displayPath" : "mcMMO.jar",
      "fileName" : "mcMMO.jar",
      "relativePath" : "target/mcMMO.jar"
    },
    {
      "displayPath" : "original-mcMMO.jar",
      "fileName" : "original-mcMMO.jar",
      "relativePath" : "target/original-mcMMO.jar"
    }
  ],
  "building" : false,
  "description" : null,
  "displayName" : "#361",
  "duration" : 74611,
  "estimatedDuration" : 66807,
  "executor" : null,
  "fullDisplayName" : "mcMMO #361",
  "id" : "361",
  "inProgress" : false,
  "keepLog" : false,
  "number" : 361,
  "queueId" : 308,
  "result" : "SUCCESS",
  "timestamp" : 1790124554034,
  "url" : "https://popicraft.net/jenkins/job/mcMMO/361/",
  "builtOn" : "Builder",
  "changeSet" : {
    "_class" : "hudson.plugins.git.GitChangeSetList",
    "items" : [
      {
        "_class" : "hudson.plugins.git.GitChangeSet",
        "affectedPaths" : [
          "src/main/java/com/gmail/nossr50/database/FlatFileDatabaseManager.java",
          "src/test/java/com/gmail/nossr50/database/FlatFileDatabaseManagerTest.java"
        ],
        "commitId" : "7af1f86d31d9007157477d1f4ad934b825761f4a",
        "timestamp" : 1789611309000,
        "author" : {
          "absoluteUrl" : "https://popicraft.net/jenkins/user/127477265+cyrne1-7208",
          "fullName" : "127477265+cyrne1-7208"
        },
        "authorEmail" : "127477265+cyrne1-7208@users.noreply.github.com",
        "comment" : "Fix FlatFile database truncation on read failure\u000a\u000aIn FlatFileDatabaseManager, methods that read the database before writing\u000a(newUser, purgePowerlessUsers, purgeOldUsers, removeUser, saveUserUUID,\u000asaveUserUUIDs, and checkFileHealthAndStructure) previously continued\u000ato write or rewrite the database file even when reading encountered an\u000aIOException. This caused partial or empty contents to overwrite mcmmo.users,\u000aresulting in data loss / truncation.\u000a\u000aThis change:\u000a- Guards newUser() by returning an unloaded PlayerProfile on IOException,\u000a  preventing the subsequent FileWriter block from overwriting the database.\u000a- Guards purgePowerlessUsers() by returning 0 on IOException without writing.\u000a- Guards rewriteUsersFile() to return false on IOException without writing,\u000a  and updates its callers (purgeOldUsers, removeUser, saveUserUUIDs) to abort\u000a  early on read failure.\u000a- Guards saveUserUUID() to return false on exception without writing.\u000a- Guards checkFileHealthAndStructure() to return null on validation IOException,\u000a  preventing the subsequent update block from overwriting the database.\u000a- Adds comprehensive unit tests verifying that a mid-stream read failure\u000a  leaves the database file byte-for-byte identical across all operations.\u000a\u000aSigned-off-by: Cyrne1_7208 <127477265+cyrne1-7208@users.noreply.github.com>\u000a",
        "date" : "2026-09-17 02:15:09 +0000",
        "id" : "7af1f86d31d9007157477d1f4ad934b825761f4a",
        "msg" : "Fix FlatFile database truncation on read failure",
        "paths" : [
          {
            "editType" : "edit",
            "file" : "src/main/java/com/gmail/nossr50/database/FlatFileDatabaseManager.java"
          },
          {
            "editType" : "edit",
            "file" : "src/test/java/com/gmail/nossr50/database/FlatFileDatabaseManagerTest.java"
          }
        ]
      }
    ],
    "kind" : "git"
  },
  "culprits" : [
    {
      "absoluteUrl" : "https://popicraft.net/jenkins/user/127477265+cyrne1-7208",
      "fullName" : "127477265+cyrne1-7208"
    }
  ]
}