)]}'
{
  "commit": "a0f23ce4bccd25bcdc433e874d21ea9c7be7bc7d",
  "tree": "d8954da1491a049956a738eeff85a2c6f9328a74",
  "parents": [
    "28bfd5378353bcd42a17b51261e562968d999161"
  ],
  "author": {
    "name": "Paolo Bonzini",
    "email": "pbonzini@redhat.com",
    "time": "Thu Nov 05 14:44:27 2026 +0100"
  },
  "committer": {
    "name": "Paolo Bonzini",
    "email": "bonzini@gnu.org",
    "time": "Sat Nov 14 12:02:54 2026 +0100"
  },
  "message": "pickle: replace compilers with those in the coredata\n\nBy storing an environment in the compilers, commit a6c4a4d introduced\na link from coredata.dat to the Environment object.  This creates a\ncircular link between build.dat and coredata.dat.  Until now, the\ncircular link caused build.dat to store separate copies of the\ncompilers, and potentially through those compilers even a different\nEnvironment and CoreData (!).\n\nThe previous patch fixed all references from Compiler to Environment,\nby storing a proxy to the Environment in coredata.dat.  However,\nthere is still the problem that targets can refer to compilers that\nare different from those in the CoreData, resulting in incorrect\nintrospection data.  Fix this by storing proxies from the Build\nto the compilers in the coredata.\n\nThis creates a cycle because the Environment is needed to load the\nCoreData, and Build (which contains the Environment) needs the CoreData\nto be loaded first.  To break it, first load the Environment minus the\ncoredata, then the CoreData, then the Build.\n\nA much cleaner solution would be to make callers of build.load() use\neither the introspection data or (as a last resort) the coredata; and\nremove altogether the need to pickle the Build and Environment.  But that\nis a bigger change, and even if that is done, the need for MesonPickler (to\navoid new occurrences of the bug) and CoreDataPickler remains.  Only this\ncommit and \"pickle: extract checks on loaded objects\" could be reverted.\n\nSigned-off-by: Paolo Bonzini \u003cpbonzini@redhat.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "78e4c0e3d703726275d1c6fe433afce70cfa2928",
      "old_mode": 33188,
      "old_path": "mesonbuild/build.py",
      "new_id": "81e5ed9253c6c916bf4aee4fa0a89fecea2fde00",
      "new_mode": 33188,
      "new_path": "mesonbuild/build.py"
    },
    {
      "type": "modify",
      "old_id": "7822a30004d97ff29b534ffae3ea45165e2eed6c",
      "old_mode": 33188,
      "old_path": "mesonbuild/meson_pickle.py",
      "new_id": "ac479cc43a0ccfa72be4f5559943e1402124e495",
      "new_mode": 33188,
      "new_path": "mesonbuild/meson_pickle.py"
    },
    {
      "type": "modify",
      "old_id": "1a1ac382950d92b42e7027bf42f9f7847b2b4cdf",
      "old_mode": 33188,
      "old_path": "unittests/platformagnostictests.py",
      "new_id": "ea957fe31be1a602f16e48bdc6dc3f2eda1901b8",
      "new_mode": 33188,
      "new_path": "unittests/platformagnostictests.py"
    }
  ]
}
