)]}'
{
  "commit": "b6f2f0f3604c97af00b9d539fd647bafd237abbf",
  "tree": "13cdae66bab399eb5b8d740c7c58ef088155633e",
  "parents": [
    "70893cccca9444f31aaa9a5f8a3dffa0dbab316b"
  ],
  "author": {
    "name": "Guillaume Nodet",
    "email": "gnodet@gmail.com",
    "time": "Mon Aug 03 02:36:30 2026 +0200"
  },
  "committer": {
    "name": "Guillaume Nodet",
    "email": "gnodet@gmail.com",
    "time": "Mon Aug 03 02:36:30 2026 +0200"
  },
  "message": "Cache projectsWithDeployExecution list to avoid O(N²) reactor scan\n\nDeployMojo.allProjectsMarked() calls hasDeployExecution() for every\nreactor project on every module invocation. hasDeployExecution() calls\ngetPluginsAsMap() for each project, producing O(N²) evaluations in a\nlarge reactor build (e.g., 4383² ≈ 19.2M calls in a 4383-module project).\n\nFix: cache the filtered list of projects with deploy executions in the\nfirst reactor project\u0027s plugin context. The list is invariant during a\nbuild. Also simplify allProjectsMarked() to only check the projects\nthat actually have deploy executions, rather than iterating the full\nreactor and testing the disjunction (hasState || !hasDeployExecution).\n\nCo-Authored-By: Claude Opus 4.6 \u003cnoreply@anthropic.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3f0e32dba35aa13b94c96bdc75035b8e66dc06c2",
      "old_mode": 33188,
      "old_path": "src/main/java/org/apache/maven/plugins/deploy/DeployMojo.java",
      "new_id": "d95d182eef454825da5f81588051c2aca83cd1fc",
      "new_mode": 33188,
      "new_path": "src/main/java/org/apache/maven/plugins/deploy/DeployMojo.java"
    }
  ]
}
