)]}'
{
  "commit": "e2cd0f4fb42b1fae65ad22e8efde9804446e6254",
  "tree": "f8ea58b96ee1114f9dd0c45d67d567faec516df3",
  "parents": [
    "cbc95538eda98929d2c5c8ff0d9db9043fcf1ae6"
  ],
  "author": {
    "name": "Markus Armbruster",
    "email": "armbru@redhat.com",
    "time": "Wed May 07 09:53:46 2014 +0200"
  },
  "committer": {
    "name": "Luiz Capitulino",
    "email": "lcapitulino@redhat.com",
    "time": "Thu May 15 14:00:45 2014 -0400"
  },
  "message": "qapi: Replace start_optional()/end_optional() by optional()\n\nSemantics of end_optional() differ subtly from the other end_FOO()\ncallbacks: when start_FOO() succeeds, the matching end_FOO() gets\ncalled regardless of what happens in between.  end_optional() gets\ncalled only when everything in between succeeds as well.  Entirely\nundocumented, like all of the visitor API.\n\nThe only user of Visitor Callback end_optional() never did anything,\nand was removed in commit 9f9ab46.\n\nI\u0027m about to clean up error handling in the generated visitor code,\nand end_optional() is in my way.  No users mean no test cases, and\nmaking non-trivial cleanup transformations without test cases doesn\u0027t\nstrike me as a good idea.\n\nDrop end_optional(), and rename start_optional() to optional().  We\ncan always go back to a pair of callbacks when we have an actual need.\n\nSigned-off-by: Markus Armbruster \u003carmbru@redhat.com\u003e\nReviewed-by: Eric Blake \u003ceblake@redhat.com\u003e\nSigned-off-by: Luiz Capitulino \u003clcapitulino@redhat.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "166aaddd2994750d62d0be8019266a96ebe01d72",
      "old_mode": 33188,
      "old_path": "include/qapi/visitor-impl.h",
      "new_id": "ecc018319602ccc9021a226084c62e4bd2369a8b",
      "new_mode": 33188,
      "new_path": "include/qapi/visitor-impl.h"
    },
    {
      "type": "modify",
      "old_id": "29da211b4774d9a8861c565e3614400ad1327155",
      "old_mode": 33188,
      "old_path": "include/qapi/visitor.h",
      "new_id": "4a0178fa4623d1a0f7156fb367836015167db61a",
      "new_mode": 33188,
      "new_path": "include/qapi/visitor.h"
    },
    {
      "type": "modify",
      "old_id": "87c1c789c94d204dd4403829d0b4ec63a9779189",
      "old_mode": 33188,
      "old_path": "qapi/opts-visitor.c",
      "new_id": "16382e7a653581b9970f3f7ab6845e2b917668f2",
      "new_mode": 33188,
      "new_path": "qapi/opts-visitor.c"
    },
    {
      "type": "modify",
      "old_id": "1f7475c0f3b1593dcad7fca40b7080b753635698",
      "old_mode": 33188,
      "old_path": "qapi/qapi-visit-core.c",
      "new_id": "ffd76372d1fd69855a1425b76e154a40ab75260c",
      "new_mode": 33188,
      "new_path": "qapi/qapi-visit-core.c"
    },
    {
      "type": "modify",
      "old_id": "a2bed1ef106b0bf245e46afaf1053773c3460863",
      "old_mode": 33188,
      "old_path": "qapi/qmp-input-visitor.c",
      "new_id": "d8612062f1e31a7b1e417f87b677d01ad06d6ceb",
      "new_mode": 33188,
      "new_path": "qapi/qmp-input-visitor.c"
    },
    {
      "type": "modify",
      "old_id": "793548ae3a8b98ebefcd0114f62b85f44db7ae7c",
      "old_mode": 33188,
      "old_path": "qapi/string-input-visitor.c",
      "new_id": "5780944792af0188d1b3108a279896c9930be9a4",
      "new_mode": 33188,
      "new_path": "qapi/string-input-visitor.c"
    },
    {
      "type": "modify",
      "old_id": "1399826cca8667c58c656f69a825db755677b378",
      "old_mode": 33188,
      "old_path": "scripts/qapi-commands.py",
      "new_id": "341dba27a8e0e090f81f11c3831b9a13a39f50dd",
      "new_mode": 33188,
      "new_path": "scripts/qapi-commands.py"
    },
    {
      "type": "modify",
      "old_id": "c6579beed562fe6651513f0d8624732c341b710f",
      "old_mode": 33188,
      "old_path": "scripts/qapi-visit.py",
      "new_id": "9f22eee87399012cd19d3e746f1e322203573365",
      "new_mode": 33188,
      "new_path": "scripts/qapi-visit.py"
    }
  ]
}
