)]}'
{
  "commit": "f4b37b446e2a9bddcb2ebf1162fb52597eb660f4",
  "tree": "e96baf456ce3561098e2278abc7cc1ecf8a3e215",
  "parents": [
    "98ed0a3409c1eda06e9b6bf36d063ae1f628359a"
  ],
  "author": {
    "name": "Hanno Hecker",
    "email": "vetinari@ankh-morp.org",
    "time": "Sun Dec 20 11:47:14 2015 +0100"
  },
  "committer": {
    "name": "Steve Francia",
    "email": "steve.francia@gmail.com",
    "time": "Mon Dec 21 13:34:19 2015 -0500"
  },
  "message": "Add RegexpFilter\n\n- rework FilterFs to be truely chaining, i.e. every call not intercepted\n  must be passed to the source Fs\n- AddFilter accepts just a FilterFs, not a Fs\n- FilterFs\u0027 AddFilter(FilterFs) should be implemented by any\n  FilterFs like\n\n  func (f *myFilter) AddFilter(fs FilterFs) {\n       fs.SetSource(f.source)\n       f.source \u003d fs\n  }\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ae85b362777eebb278381e4865feb4c59d4ec4a9",
      "old_mode": 33188,
      "old_path": "filter.go",
      "new_id": "5cdcf2d3b1162ae3cfba2fa3e16a38f18b91ed1b",
      "new_mode": 33188,
      "new_path": "filter.go"
    },
    {
      "type": "modify",
      "old_id": "0ff67a7bc2f8ff6bb3e2c9de0f7b6d6072771d72",
      "old_mode": 33188,
      "old_path": "filter_readonly.go",
      "new_id": "c24c09b8f3af108d798f1bfd9dc3a06a5af45e74",
      "new_mode": 33188,
      "new_path": "filter_readonly.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "36e97e6cd9c00b5e77e697803088579a510715e4",
      "new_mode": 33188,
      "new_path": "filter_regexp.go"
    },
    {
      "type": "modify",
      "old_id": "803fdb03db2eb1b0dfc2ecf9f52510fd55dd647c",
      "old_mode": 33188,
      "old_path": "filter_test.go",
      "new_id": "dcbc6f4179ff5cbd6b018e8d7f428d56c3d51b0b",
      "new_mode": 33188,
      "new_path": "filter_test.go"
    }
  ]
}
