)]}'
{
  "commit": "e13aa51be564fe2c252b3b0985408291b1ff9815",
  "tree": "25d85dd0f299a1eb669a58b91dd344961a932319",
  "parents": [
    "85d46ce6b5d295ac00f72375788eaeb518913e21"
  ],
  "author": {
    "name": "Evgenii Kliuchnikov",
    "email": "eustas@google.com",
    "time": "Tue Sep 09 02:00:39 2025 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Wed Sep 24 02:17:23 2025 -0700"
  },
  "message": "PY: continue renovation of extension\n\nFixed unchecked malloc for \"tail\" input data.\nFixed inconsistencies in docstrings.\n\nRewritten \"growable buffer\" to C-code, so it could run without acquiring GIL.\n\nBreaking changes:\n - native object allocation failures now handled at object creation time\n - some lower level exceptions (e.g. OOM) are not shadowed by brotli.error\n\nPiperOrigin-RevId: 804798881\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "23c1f06f4f93dd49e73550a0622e3bfc1d678f92",
      "old_mode": 33188,
      "old_path": "CHANGELOG.md",
      "new_id": "b0df5313bb5de47e15f0463fe8f77fd14619e42c",
      "new_mode": 33188,
      "new_path": "CHANGELOG.md"
    },
    {
      "type": "modify",
      "old_id": "50af66fe2382057626af4a9b224a2a5d367c6fdd",
      "old_mode": 33188,
      "old_path": "python/_brotli.c",
      "new_id": "137ec68d7fad8d93af2b5f51fab344192476f55e",
      "new_mode": 33188,
      "new_path": "python/_brotli.c"
    },
    {
      "type": "modify",
      "old_id": "38afec3962343e9b0887798361e453efa415dd68",
      "old_mode": 33188,
      "old_path": "python/tests/_test_utils.py",
      "new_id": "713738a1203881983380b66bff2925eb0be5d736",
      "new_mode": 33188,
      "new_path": "python/tests/_test_utils.py"
    },
    {
      "type": "modify",
      "old_id": "454bd6227119fb24af04491332a624907679e705",
      "old_mode": 33188,
      "old_path": "python/tests/bro_test.py",
      "new_id": "fa056edb3eb488dba66f9d237689db9cabf3dea3",
      "new_mode": 33188,
      "new_path": "python/tests/bro_test.py"
    },
    {
      "type": "modify",
      "old_id": "46ff68f50b90e996ba9f327b0d73c07230f7ae15",
      "old_mode": 33188,
      "old_path": "python/tests/compress_test.py",
      "new_id": "7ad9d46073d16201d6fc01ad8127fc6ae24d9fe2",
      "new_mode": 33188,
      "new_path": "python/tests/compress_test.py"
    },
    {
      "type": "modify",
      "old_id": "2d47919968b6938230400fcacd0e7d58cc69f115",
      "old_mode": 33188,
      "old_path": "python/tests/compressor_test.py",
      "new_id": "2c08f8f858f5beaa1d0e349b998ce74423b76349",
      "new_mode": 33188,
      "new_path": "python/tests/compressor_test.py"
    },
    {
      "type": "modify",
      "old_id": "814e56332c47a5dd142caee7580b84a2e5c4f07c",
      "old_mode": 33188,
      "old_path": "python/tests/decompress_test.py",
      "new_id": "9289aa79e03e10d252844c8aaac4da3caf2dcfe8",
      "new_mode": 33188,
      "new_path": "python/tests/decompress_test.py"
    },
    {
      "type": "modify",
      "old_id": "09a76f3ee0ae115c37b62e6ca030c5d452e0b661",
      "old_mode": 33188,
      "old_path": "python/tests/decompressor_test.py",
      "new_id": "362c682be7d4f43087c217be825e17376f3c71e4",
      "new_mode": 33188,
      "new_path": "python/tests/decompressor_test.py"
    }
  ]
}
