)]}'
{
  "commit": "e2656c82fd836a3d410230c98f6a725368f15642",
  "tree": "340dfa322efafa49212b5cc9ba2f157e76614f9a",
  "parents": [
    "a5cdebea55d53406e117d9a1fd4cc316ef036553"
  ],
  "author": {
    "name": "Johan Herland",
    "email": "johan@herland.net",
    "time": "Tue Nov 09 22:49:41 2010 +0100"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Wed Nov 10 10:25:52 2010 -0800"
  },
  "message": "notes.h/c: Allow combine_notes functions to remove notes\n\nAllow combine_notes functions to request that a note be removed, by setting\nthe resulting note SHA1 to null_sha1 (0000000...).\n\nFor consistency, also teach note_tree_insert() to skip insertion of an empty\nnote (a note with entry-\u003eval_sha1 equal to null_sha1) when there is no note\nto combine it with.\n\nIn general, an empty note (null_sha1) is treated identically to no note at\nall, but when adding an empty note where there already exists a non-empty\nnote, we allow the combine_notes function to potentially record a new/changed\nnote. Document this behaviour, and clearly specify how combine_notes functions\nare expected to handle null_sha1 in input.\n\nBefore this patch, storing null_sha1s in the notes tree were silently allowed,\ncausing an invalid notes tree (referring to blobs with null_sha1) to be\nproduced by write_notes_tree().\n\nSigned-off-by: Johan Herland \u003cjohan@herland.net\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "bfb3ea5b53a67978112217b99b48f29f6937d5d1",
      "old_mode": 33188,
      "old_path": "notes.c",
      "new_id": "0c13a36eb7d39be92743c2906412412b73ccf8f1",
      "new_mode": 33188,
      "new_path": "notes.c"
    },
    {
      "type": "modify",
      "old_id": "20db42fe952ed330c831563085236cd3a082e435",
      "old_mode": 33188,
      "old_path": "notes.h",
      "new_id": "79ea7976abacd12c2e870d0502de60607c7d14ca",
      "new_mode": 33188,
      "new_path": "notes.h"
    }
  ]
}
