)]}'
{
  "commit": "a5947ffaace3e882f334c1750858b4a6a7e52422",
  "tree": "47dee3ec9d679e8277173c904fc6751b7711b96d",
  "parents": [
    "334af843aad9338bfe085366e06c8b69717cd8b4"
  ],
  "author": {
    "name": "Damien Neil",
    "email": "dneil@google.com",
    "time": "Mon Feb 11 10:45:09 2019 -0800"
  },
  "committer": {
    "name": "Damien Neil",
    "email": "dneil@google.com",
    "time": "Tue Feb 12 16:23:55 2019 +0000"
  },
  "message": "xerrors: require that error be type assertable to As\u0027s target\n\nDocument As(err, target) as panicking when *target is not of interface\ntype and does not implement the error interface. While this prevents\nsome clever tricks, it permits catching (at runtime or statically\nvia vet) type errors equivalent to the ones that can be detected\nby type assertions.\n\n  if e :\u003d os.PathError{}; errors.As(err, \u0026e) {  // error, os.PathError does not implement error\n  if e :\u003d \u0026os.PathError{}; errors.As(err, e) {  // error, os.PathError does not implement error\n  if e :\u003d \u0026os.PathError{}; errors.As(err, \u0026e) { // ok\n\n  var e interface{ Timeout() bool }\n  if errors.As(\u0026e) \u0026\u0026 e.Timeout() { // ok\n\nChange-Id: I3607ac62fbe8aebef3c1aeec3fb414fb41afcdda\nReviewed-on: https://go-review.googlesource.com/c/161899\nReviewed-by: Jonathan Amsterdam \u003cjba@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3e71058bf5b5b9e5446445831df2bfc3a40c49e9",
      "old_mode": 33188,
      "old_path": "wrap.go",
      "new_id": "a33459d8c04124eff78ac00ede5776dbbe937819",
      "new_mode": 33188,
      "new_path": "wrap.go"
    },
    {
      "type": "modify",
      "old_id": "ef6a9ed7b9085dbb5c65d1c65c3809de4c4b1be3",
      "old_mode": 33188,
      "old_path": "wrap_test.go",
      "new_id": "d08c325299181a57a17398e79ea8a2cf2d5122e5",
      "new_mode": 33188,
      "new_path": "wrap_test.go"
    }
  ]
}
