)]}'
{
  "commit": "8c8923d24a14f1cb4103b07d96271cca957874f9",
  "tree": "d5423f70d42406c6b5a01cbcbc25f2ed6afc3283",
  "parents": [
    "58ce9f4560f9141a401b4b4f77fe97cb6d63f0b6"
  ],
  "author": {
    "name": "Natalie Weizenbaum",
    "email": "nweiz@google.com",
    "time": "Tue Jan 26 15:25:07 2016 -0800"
  },
  "committer": {
    "name": "Natalie Weizenbaum",
    "email": "nweiz@google.com",
    "time": "Tue Jan 26 15:25:07 2016 -0800"
  },
  "message": "Add a StreamChannelCompleter class.\n\nThis is by analogy with StreamCompleter and StreamSinkCompleter in the\nasync package, and is in fact implemented using them.\n\nR\u003drnystrom@google.com\n\nReview URL: https://codereview.chromium.org//1631103002 .\n",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d15adcf94b43d95d47eacd50224caf6144515217",
      "new_mode": 33188,
      "new_path": "pkgs/stream_channel/lib/src/stream_channel_completer.dart"
    },
    {
      "type": "modify",
      "old_id": "fd7b0932733e56808a3c2b87b68c723bcc8ab9c6",
      "old_mode": 33188,
      "old_path": "pkgs/stream_channel/lib/stream_channel.dart",
      "new_id": "4b3c659aece2187698c9934f225f7c5752de4050",
      "new_mode": 33188,
      "new_path": "pkgs/stream_channel/lib/stream_channel.dart"
    },
    {
      "type": "modify",
      "old_id": "76f22b7da54d2ee7a67859417b9d900b9a37f8fe",
      "old_mode": 33188,
      "old_path": "pkgs/stream_channel/pubspec.yaml",
      "new_id": "a0d8d22004984235b39943608ab4a3b89c5c9660",
      "new_mode": 33188,
      "new_path": "pkgs/stream_channel/pubspec.yaml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1ee40a5ca651e341decda651c2d3cc909d3257e3",
      "new_mode": 33188,
      "new_path": "pkgs/stream_channel/test/stream_channel_completer_test.dart"
    }
  ]
}
