)]}'
{
  "commit": "9a20c980313a1d696afd94344935a586021a5c0e",
  "tree": "cc037353381db5ccd3416f3a21dd2fbe6d58389a",
  "parents": [
    "d7a7825a69a9339cc3d2b87b129114ca6dc473c9"
  ],
  "author": {
    "name": "Nate Bosch",
    "email": "nbosch1@gmail.com",
    "time": "Fri Jun 30 13:29:57 2017 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Jun 30 13:29:57 2017 -0700"
  },
  "message": "Use sync forwarders for `merge` (dart-lang/stream_transform#28)\n\nTowards dart-lang/stream_transform#24\r\n\r\nAlso fix a bug where canceling the subscription on a broadcast stream\r\nwould cancel single-subscription streams merged in and not allow\r\nsubsequent listeners.\r\n\r\n- Use sync StreamControllers\r\n- If the first stream is a broadcast, also translate all merged streams\r\n  to broadcast so they can be canceled and relistened. Add a note to the\r\n  Doc comment warning that single-subscription streams merged into a\r\n  broadcast stream may never be canceled.\r\n- Move onPause, onResume, and onCancel initialization inside onListen\r\n  callback - they don\u0027t need to exist before initialization.\r\n- Only cancel input subscriptions if they aren\u0027t all done.\r\n- Add test for onDone forwarding.\r\n- Add test for canceling and relistening on broadcast streams.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b684adbde87c6381ed696cb4a0d04ef507dc8e88",
      "old_mode": 33188,
      "old_path": "pkgs/stream_transform/CHANGELOG.md",
      "new_id": "d6bd7a9a078625ad712971b32f7f3c7a50c77191",
      "new_mode": 33188,
      "new_path": "pkgs/stream_transform/CHANGELOG.md"
    },
    {
      "type": "modify",
      "old_id": "d2e53a6a1bdb685ad9c094f9502a97aa52cc9107",
      "old_mode": 33188,
      "old_path": "pkgs/stream_transform/lib/src/merge.dart",
      "new_id": "563cff0279e315c0a588708b8a233b5add6bbb90",
      "new_mode": 33188,
      "new_path": "pkgs/stream_transform/lib/src/merge.dart"
    },
    {
      "type": "modify",
      "old_id": "c604f9184e4730b32191aeb985ce1d9c33ab713d",
      "old_mode": 33188,
      "old_path": "pkgs/stream_transform/test/merge_test.dart",
      "new_id": "8108b95860d5a887eaa838ed73e0a37cbc024341",
      "new_mode": 33188,
      "new_path": "pkgs/stream_transform/test/merge_test.dart"
    }
  ]
}
