)]}'
{
  "commit": "92b09babc11b60458c28cfe37eaa314de50e6241",
  "tree": "0affd5ca4a85b27834f73a1982ab67a1f91bfe45",
  "parents": [
    "a16e3e5c5825c90887a863513916f93eeec16c55"
  ],
  "author": {
    "name": "Eric Blake",
    "email": "eblake@redhat.com",
    "time": "Fri Jan 29 06:48:47 2016 -0700"
  },
  "committer": {
    "name": "Markus Armbruster",
    "email": "armbru@redhat.com",
    "time": "Mon Feb 08 17:29:55 2016 +0100"
  },
  "message": "qapi: Track all failures between visit_start/stop\n\nInside the generated code between visit_start_struct() and\nvisit_end_struct(), we were blindly setting the error into\nthe caller\u0027s errp parameter.  But a future patch to split\nvisit_end_struct() will require that we take action based\non whether an error has occurred, which requires us to track\nall actions through a local err.  Rewrite the visits to be\nmore in line with the other generated calls.\n\nGenerated code changes look like:\n\n|     visit_start_struct(v, (void **)obj, \"Abort\", name, sizeof(Abort), \u0026err);\n|-    if (!err) {\n|-        if (*obj) {\n|-            visit_type_Abort_fields(v, obj, errp);\n|-        }\n|-        visit_end_struct(v, \u0026err);\n|+    if (err) {\n|+        goto out;\n|     }\n|+    if (!*obj) {\n|+        goto out_obj;\n|+    }\n|+    visit_type_Abort_fields(v, obj, \u0026err);\n|+    error_propagate(errp, err);\n|+    err \u003d NULL;\n|+out_obj:\n|+    visit_end_struct(v, \u0026err);\n|+out:\n|     error_propagate(errp, err);\n| }\n\nSigned-off-by: Eric Blake \u003ceblake@redhat.com\u003e\nMessage-Id: \u003c1454075341-13658-12-git-send-email-eblake@redhat.com\u003e\nSigned-off-by: Markus Armbruster \u003carmbru@redhat.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b93690b6087a9037d4fd661b55030303c174d468",
      "old_mode": 33188,
      "old_path": "scripts/qapi-visit.py",
      "new_id": "ec16e365a6328c51a208304db2b8f41d401aa21c",
      "new_mode": 33188,
      "new_path": "scripts/qapi-visit.py"
    }
  ]
}
