{"action":"created","comment":{"url":"https://api.github.com/repos/dart-lang/build/pulls/comments/52066343","id":52066343,"diff_hunk":"@@ -0,0 +1,224 @@\n+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file\n+// for details. All rights reserved. Use of this source code is governed by a\n+// BSD-style license that can be found in the LICENSE file.\n+import 'package:test/test.dart';\n+\n+import 'package:build/build.dart';\n+\n+import '../common/common.dart';\n+\n+main() {\n+  group('build', () {\n+    group('with root package inputs', () {\n+      test('one phase, one builder, one-to-one outputs', () async {\n+        var phases = [\n+          [\n+            new Phase([new CopyBuilder()], [new InputSet('a')]),\n+          ]\n+        ];\n+        await testPhases(phases, {'a|web/a.txt': 'a', 'a|lib/b.txt': 'b',},\n+            outputs: {'a|web/a.txt.copy': 'a', 'a|lib/b.txt.copy': 'b',});\n+      });\n+\n+      test('one phase, one builder, one-to-many outputs', () async {\n+        var phases = [\n+          [\n+            new Phase([new CopyBuilder(numCopies: 2)], [new InputSet('a')]),\n+          ]\n+        ];\n+        await testPhases(phases, {\n+          'a|web/a.txt': 'a',\n+          'a|lib/b.txt': 'b',\n+        }, outputs: {\n+          'a|web/a.txt.copy.0': 'a',\n+          'a|web/a.txt.copy.1': 'a',\n+          'a|lib/b.txt.copy.0': 'b',\n+          'a|lib/b.txt.copy.1': 'b',\n+        });\n+      });\n+\n+      test('one phase, multiple builders', () async {\n+        var phases = [\n+          [\n+            new Phase([new CopyBuilder(), new CopyBuilder(extension: 'clone')],\n+                [new InputSet('a')]),\n+            new Phase([new CopyBuilder(numCopies: 2)], [new InputSet('a')]),\n+          ]\n+        ];\n+        await testPhases(phases, {\n+          'a|web/a.txt': 'a',\n+          'a|lib/b.txt': 'b',\n+        }, outputs: {\n+          'a|web/a.txt.copy': 'a',\n+          'a|web/a.txt.clone': 'a',\n+          'a|lib/b.txt.copy': 'b',\n+          'a|lib/b.txt.clone': 'b',\n+          'a|web/a.txt.copy.0': 'a',\n+          'a|web/a.txt.copy.1': 'a',\n+          'a|lib/b.txt.copy.0': 'b',\n+          'a|lib/b.txt.copy.1': 'b',\n+        });\n+      }, skip: 'Failing, outputs from phases in same group are available');\n+\n+      test('multiple phases, multiple builders', () async {\n+        var phases = [\n+          [\n+            new Phase([new CopyBuilder()], [new InputSet('a')]),\n+          ],\n+          [\n+            new Phase([\n+              new CopyBuilder(extension: 'clone')\n+            ], [\n+              new InputSet('a', filePatterns: ['**/*.txt'])\n+            ]),\n+          ],\n+          [\n+            new Phase([\n+              new CopyBuilder(numCopies: 2)\n+            ], [\n+              new InputSet('a', filePatterns: ['web/*.txt.clone'])\n+            ]),\n+          ]\n+        ];\n+        await testPhases(phases, {\n+          'a|web/a.txt': 'a',\n+          'a|lib/b.txt': 'b',\n+        }, outputs: {\n+          'a|web/a.txt.copy': 'a',\n+          'a|web/a.txt.clone': 'a',\n+          'a|lib/b.txt.copy': 'b',\n+          'a|lib/b.txt.clone': 'b',\n+          'a|web/a.txt.clone.copy.0': 'a',\n+          'a|web/a.txt.clone.copy.1': 'a',\n+        });\n+      });\n+    });\n+\n+    group('inputs from other packages', () {\n+      test('only gets inputs from lib, can output to root package', () async {\n+        var phases = [\n+          [\n+            new Phase(\n+                [new CopyBuilder(outputPackage: 'a')], [new InputSet('b')]),\n+          ]\n+        ];\n+        await testPhases(phases, {'b|web/b.txt': 'b', 'b|lib/b.txt': 'b',},\n+            outputs: {'a|lib/b.txt.copy': 'b',});\n+      });\n+\n+      test('can\\'t output files in non-root packages', () async {\n+        var phases = [\n+          [\n+            new Phase([new CopyBuilder()], [new InputSet('b')]),\n+          ]\n+        ];\n+        await testPhases(phases, {'b|lib/b.txt': 'b',},\n+            outputs: {}, status: BuildStatus.Failure);\n+      },\n+          skip: 'Failing, InMemoryAssetWriter doesn\\'t throw. Need to handle '\n+              'this in BuildStep instead of AssetWriter.');\n+    });\n+\n+    test('multiple phases, inputs from multiple packages', () async {\n+      var phases = [\n+        [\n+          new Phase([new CopyBuilder()], [new InputSet('a')]),\n+          new Phase([\n+            new CopyBuilder(extension: 'clone', outputPackage: 'a')\n+          ], [\n+            new InputSet('b', filePatterns: ['**/*.txt']),\n+          ]),\n+        ],\n+        [\n+          new Phase([\n+            new CopyBuilder(numCopies: 2, outputPackage: 'a')\n+          ], [\n+            new InputSet('a', filePatterns: ['lib/*.txt.*']),\n+            new InputSet('b', filePatterns: ['**/*.dart']),\n+          ]),\n+        ]\n+      ];\n+      await testPhases(phases, {\n+        'a|web/1.txt': '1',\n+        'a|lib/2.txt': '2',\n+        'b|lib/3.txt': '3',\n+        'b|lib/b.dart': 'main() {}',\n+      }, outputs: {\n+        'a|web/1.txt.copy': '1',\n+        'a|lib/2.txt.copy': '2',\n+        'a|lib/3.txt.clone': '3',\n+        'a|lib/2.txt.copy.copy.0': '2',\n+        'a|lib/2.txt.copy.copy.1': '2',\n+        'a|lib/3.txt.clone.copy.0': '3',\n+        'a|lib/3.txt.clone.copy.1': '3',\n+        'a|lib/b.dart.copy.0': 'main() {}',\n+        'a|lib/b.dart.copy.1': 'main() {}',\n+      });\n+    });\n+  });\n+\n+  group('errors', () {\n+    test('when overwriting files', () async {\n+      var phases = [\n+        [\n+          new Phase([new CopyBuilder()], [new InputSet('a')]),\n+        ]\n+      ];\n+      await testPhases(phases, {'a|lib/a.txt': 'a', 'a|lib/a.txt.copy': 'a'},\n+          status: BuildStatus.Failure,\n+          exceptionMatcher: invalidOutputException);\n+    },\n+        skip: 'InMemoryAssetWriter doesn\\'t check this, should be handled at '\n+            'the BuildStep level.');\n+  });\n+\n+  test('outputs from builds shouldn\\'t be inputs to later ones', () {},\n+      skip: 'Unimplemented');\n+}\n+\n+testPhases(List<List<Phase>> phases, Map<String, String> inputs,\n+    {Map<String, String> outputs,\n+    PackageGraph packageGraph,\n+    BuildStatus status: BuildStatus.Success,\n+    exceptionMatcher}) async {\n+  final writer = new InMemoryAssetWriter();\n+  final actualAssets = writer.assets;\n+  final reader = new InMemoryAssetReader(actualAssets);\n+  inputs.forEach((serializedId, contents) {\n+    writer.writeAsString(makeAsset(serializedId, contents));\n+  });\n+\n+  if (packageGraph == null) {\n+    var rootPackage = new PackageNode('a', null, null, null);\n+    packageGraph = new PackageGraph.fromRoot(rootPackage);\n+  }\n+\n+  var result = await build(phases,\n+      reader: reader, writer: writer, packageGraph: packageGraph);\n+  expect(result.status, status);\n+  if (exceptionMatcher != null) {\n+    expect(result.exception, exceptionMatcher);\n+  }\n+\n+  if (outputs != null) {\n+    var remainingOutputIds =\n+        new List.from(result.outputs.map((asset) => asset.id));\n+    outputs.forEach((serializedId, contents) {\n+      var asset = makeAsset(serializedId, contents);\n+      remainingOutputIds.remove(asset.id);\n+\n+      /// Check that the writer wrote the assets\n+      expect(actualAssets, contains(asset.id));\n+      expect(actualAssets[asset.id], asset.stringContents);\n+\n+      /// Check that the assets exist in [result.outputs].\n+      var actual = result.outputs\n+          .firstWhere((output) => output.id == asset.id, orElse: () => null);\n+      expect(actual, isNotNull);","path":"test/generate/build_test.dart","position":217,"original_position":217,"commit_id":"cb7da4f672a92121e9c7c379447c105eae142159","original_commit_id":"cb7da4f672a92121e9c7c379447c105eae142159","user":{"login":"sigmundch","id":2049220,"avatar_url":"https://avatars.githubusercontent.com/u/2049220?v=3","gravatar_id":"","url":"https://api.github.com/users/sigmundch","html_url":"https://github.com/sigmundch","followers_url":"https://api.github.com/users/sigmundch/followers","following_url":"https://api.github.com/users/sigmundch/following{/other_user}","gists_url":"https://api.github.com/users/sigmundch/gists{/gist_id}","starred_url":"https://api.github.com/users/sigmundch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sigmundch/subscriptions","organizations_url":"https://api.github.com/users/sigmundch/orgs","repos_url":"https://api.github.com/users/sigmundch/repos","events_url":"https://api.github.com/users/sigmundch/events{/privacy}","received_events_url":"https://api.github.com/users/sigmundch/received_events","type":"User","site_admin":false},"body":"(to print the asset id that is missing)","created_at":"2016-02-05T20:08:07Z","updated_at":"2016-02-05T20:08:07Z","html_url":"https://github.com/dart-lang/build/pull/33#discussion_r52066343","pull_request_url":"https://api.github.com/repos/dart-lang/build/pulls/33","_links":{"self":{"href":"https://api.github.com/repos/dart-lang/build/pulls/comments/52066343"},"html":{"href":"https://github.com/dart-lang/build/pull/33#discussion_r52066343"},"pull_request":{"href":"https://api.github.com/repos/dart-lang/build/pulls/33"}}},"pull_request":{"url":"https://api.github.com/repos/dart-lang/build/pulls/33","id":58471899,"html_url":"https://github.com/dart-lang/build/pull/33","diff_url":"https://github.com/dart-lang/build/pull/33.diff","patch_url":"https://github.com/dart-lang/build/pull/33.patch","issue_url":"https://api.github.com/repos/dart-lang/build/issues/33","number":33,"state":"open","locked":false,"title":"add some basic build tests to get started, as well as a basic test framework","user":{"login":"jakemac53","id":984921,"avatar_url":"https://avatars.githubusercontent.com/u/984921?v=3","gravatar_id":"","url":"https://api.github.com/users/jakemac53","html_url":"https://github.com/jakemac53","followers_url":"https://api.github.com/users/jakemac53/followers","following_url":"https://api.github.com/users/jakemac53/following{/other_user}","gists_url":"https://api.github.com/users/jakemac53/gists{/gist_id}","starred_url":"https://api.github.com/users/jakemac53/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jakemac53/subscriptions","organizations_url":"https://api.github.com/users/jakemac53/orgs","repos_url":"https://api.github.com/users/jakemac53/repos","events_url":"https://api.github.com/users/jakemac53/events{/privacy}","received_events_url":"https://api.github.com/users/jakemac53/received_events","type":"User","site_admin":false},"body":"I also snuck in a needed update to `AssetReader`, which lets you list files matching a list of `InputSet`s. This was the last step needed to have a fully injectable asset system.","created_at":"2016-02-05T19:18:44Z","updated_at":"2016-02-05T20:08:07Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e5e294a3e351054e35a6cd0dec281a5015293942","assignee":{"login":"sigmundch","id":2049220,"avatar_url":"https://avatars.githubusercontent.com/u/2049220?v=3","gravatar_id":"","url":"https://api.github.com/users/sigmundch","html_url":"https://github.com/sigmundch","followers_url":"https://api.github.com/users/sigmundch/followers","following_url":"https://api.github.com/users/sigmundch/following{/other_user}","gists_url":"https://api.github.com/users/sigmundch/gists{/gist_id}","starred_url":"https://api.github.com/users/sigmundch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sigmundch/subscriptions","organizations_url":"https://api.github.com/users/sigmundch/orgs","repos_url":"https://api.github.com/users/sigmundch/repos","events_url":"https://api.github.com/users/sigmundch/events{/privacy}","received_events_url":"https://api.github.com/users/sigmundch/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/dart-lang/build/milestones/2","html_url":"https://github.com/dart-lang/build/milestones/v0.1.1%20release","labels_url":"https://api.github.com/repos/dart-lang/build/milestones/2/labels","id":1534890,"number":2,"title":"v0.1.1 release","description":"Can run clean (non-incremental) builds using this package only, without using pub serve/build.","creator":{"login":"jakemac53","id":984921,"avatar_url":"https://avatars.githubusercontent.com/u/984921?v=3","gravatar_id":"","url":"https://api.github.com/users/jakemac53","html_url":"https://github.com/jakemac53","followers_url":"https://api.github.com/users/jakemac53/followers","following_url":"https://api.github.com/users/jakemac53/following{/other_user}","gists_url":"https://api.github.com/users/jakemac53/gists{/gist_id}","starred_url":"https://api.github.com/users/jakemac53/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jakemac53/subscriptions","organizations_url":"https://api.github.com/users/jakemac53/orgs","repos_url":"https://api.github.com/users/jakemac53/repos","events_url":"https://api.github.com/users/jakemac53/events{/privacy}","received_events_url":"https://api.github.com/users/jakemac53/received_events","type":"User","site_admin":false},"open_issues":5,"closed_issues":7,"state":"open","created_at":"2016-01-22T15:49:15Z","updated_at":"2016-02-05T19:18:44Z","due_on":"2016-02-12T08:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/dart-lang/build/pulls/33/commits","review_comments_url":"https://api.github.com/repos/dart-lang/build/pulls/33/comments","review_comment_url":"https://api.github.com/repos/dart-lang/build/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dart-lang/build/issues/33/comments","statuses_url":"https://api.github.com/repos/dart-lang/build/statuses/cb7da4f672a92121e9c7c379447c105eae142159","head":{"label":"dart-lang:build-tests","ref":"build-tests","sha":"cb7da4f672a92121e9c7c379447c105eae142159","user":{"login":"dart-lang","id":1609975,"avatar_url":"https://avatars.githubusercontent.com/u/1609975?v=3","gravatar_id":"","url":"https://api.github.com/users/dart-lang","html_url":"https://github.com/dart-lang","followers_url":"https://api.github.com/users/dart-lang/followers","following_url":"https://api.github.com/users/dart-lang/following{/other_user}","gists_url":"https://api.github.com/users/dart-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/dart-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dart-lang/subscriptions","organizations_url":"https://api.github.com/users/dart-lang/orgs","repos_url":"https://api.github.com/users/dart-lang/repos","events_url":"https://api.github.com/users/dart-lang/events{/privacy}","received_events_url":"https://api.github.com/users/dart-lang/received_events","type":"Organization","site_admin":false},"repo":{"id":50053618,"name":"build","full_name":"dart-lang/build","owner":{"login":"dart-lang","id":1609975,"avatar_url":"https://avatars.githubusercontent.com/u/1609975?v=3","gravatar_id":"","url":"https://api.github.com/users/dart-lang","html_url":"https://github.com/dart-lang","followers_url":"https://api.github.com/users/dart-lang/followers","following_url":"https://api.github.com/users/dart-lang/following{/other_user}","gists_url":"https://api.github.com/users/dart-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/dart-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dart-lang/subscriptions","organizations_url":"https://api.github.com/users/dart-lang/orgs","repos_url":"https://api.github.com/users/dart-lang/repos","events_url":"https://api.github.com/users/dart-lang/events{/privacy}","received_events_url":"https://api.github.com/users/dart-lang/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dart-lang/build","description":"","fork":false,"url":"https://api.github.com/repos/dart-lang/build","forks_url":"https://api.github.com/repos/dart-lang/build/forks","keys_url":"https://api.github.com/repos/dart-lang/build/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dart-lang/build/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dart-lang/build/teams","hooks_url":"https://api.github.com/repos/dart-lang/build/hooks","issue_events_url":"https://api.github.com/repos/dart-lang/build/issues/events{/number}","events_url":"https://api.github.com/repos/dart-lang/build/events","assignees_url":"https://api.github.com/repos/dart-lang/build/assignees{/user}","branches_url":"https://api.github.com/repos/dart-lang/build/branches{/branch}","tags_url":"https://api.github.com/repos/dart-lang/build/tags","blobs_url":"https://api.github.com/repos/dart-lang/build/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dart-lang/build/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dart-lang/build/git/refs{/sha}","trees_url":"https://api.github.com/repos/dart-lang/build/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dart-lang/build/statuses/{sha}","languages_url":"https://api.github.com/repos/dart-lang/build/languages","stargazers_url":"https://api.github.com/repos/dart-lang/build/stargazers","contributors_url":"https://api.github.com/repos/dart-lang/build/contributors","subscribers_url":"https://api.github.com/repos/dart-lang/build/subscribers","subscription_url":"https://api.github.com/repos/dart-lang/build/subscription","commits_url":"https://api.github.com/repos/dart-lang/build/commits{/sha}","git_commits_url":"https://api.github.com/repos/dart-lang/build/git/commits{/sha}","comments_url":"https://api.github.com/repos/dart-lang/build/comments{/number}","issue_comment_url":"https://api.github.com/repos/dart-lang/build/issues/comments{/number}","contents_url":"https://api.github.com/repos/dart-lang/build/contents/{+path}","compare_url":"https://api.github.com/repos/dart-lang/build/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dart-lang/build/merges","archive_url":"https://api.github.com/repos/dart-lang/build/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dart-lang/build/downloads","issues_url":"https://api.github.com/repos/dart-lang/build/issues{/number}","pulls_url":"https://api.github.com/repos/dart-lang/build/pulls{/number}","milestones_url":"https://api.github.com/repos/dart-lang/build/milestones{/number}","notifications_url":"https://api.github.com/repos/dart-lang/build/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dart-lang/build/labels{/name}","releases_url":"https://api.github.com/repos/dart-lang/build/releases{/id}","deployments_url":"https://api.github.com/repos/dart-lang/build/deployments","created_at":"2016-01-20T19:12:37Z","updated_at":"2016-01-22T15:28:43Z","pushed_at":"2016-02-05T19:18:44Z","git_url":"git://github.com/dart-lang/build.git","ssh_url":"git@github.com:dart-lang/build.git","clone_url":"https://github.com/dart-lang/build.git","svn_url":"https://github.com/dart-lang/build","homepage":null,"size":77,"stargazers_count":0,"watchers_count":0,"language":"Dart","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":13,"forks":1,"open_issues":13,"watchers":0,"default_branch":"master"}},"base":{"label":"dart-lang:master","ref":"master","sha":"f67343164f1e33f5c6f09105e88d4b974b1feb82","user":{"login":"dart-lang","id":1609975,"avatar_url":"https://avatars.githubusercontent.com/u/1609975?v=3","gravatar_id":"","url":"https://api.github.com/users/dart-lang","html_url":"https://github.com/dart-lang","followers_url":"https://api.github.com/users/dart-lang/followers","following_url":"https://api.github.com/users/dart-lang/following{/other_user}","gists_url":"https://api.github.com/users/dart-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/dart-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dart-lang/subscriptions","organizations_url":"https://api.github.com/users/dart-lang/orgs","repos_url":"https://api.github.com/users/dart-lang/repos","events_url":"https://api.github.com/users/dart-lang/events{/privacy}","received_events_url":"https://api.github.com/users/dart-lang/received_events","type":"Organization","site_admin":false},"repo":{"id":50053618,"name":"build","full_name":"dart-lang/build","owner":{"login":"dart-lang","id":1609975,"avatar_url":"https://avatars.githubusercontent.com/u/1609975?v=3","gravatar_id":"","url":"https://api.github.com/users/dart-lang","html_url":"https://github.com/dart-lang","followers_url":"https://api.github.com/users/dart-lang/followers","following_url":"https://api.github.com/users/dart-lang/following{/other_user}","gists_url":"https://api.github.com/users/dart-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/dart-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dart-lang/subscriptions","organizations_url":"https://api.github.com/users/dart-lang/orgs","repos_url":"https://api.github.com/users/dart-lang/repos","events_url":"https://api.github.com/users/dart-lang/events{/privacy}","received_events_url":"https://api.github.com/users/dart-lang/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dart-lang/build","description":"","fork":false,"url":"https://api.github.com/repos/dart-lang/build","forks_url":"https://api.github.com/repos/dart-lang/build/forks","keys_url":"https://api.github.com/repos/dart-lang/build/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dart-lang/build/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dart-lang/build/teams","hooks_url":"https://api.github.com/repos/dart-lang/build/hooks","issue_events_url":"https://api.github.com/repos/dart-lang/build/issues/events{/number}","events_url":"https://api.github.com/repos/dart-lang/build/events","assignees_url":"https://api.github.com/repos/dart-lang/build/assignees{/user}","branches_url":"https://api.github.com/repos/dart-lang/build/branches{/branch}","tags_url":"https://api.github.com/repos/dart-lang/build/tags","blobs_url":"https://api.github.com/repos/dart-lang/build/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dart-lang/build/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dart-lang/build/git/refs{/sha}","trees_url":"https://api.github.com/repos/dart-lang/build/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dart-lang/build/statuses/{sha}","languages_url":"https://api.github.com/repos/dart-lang/build/languages","stargazers_url":"https://api.github.com/repos/dart-lang/build/stargazers","contributors_url":"https://api.github.com/repos/dart-lang/build/contributors","subscribers_url":"https://api.github.com/repos/dart-lang/build/subscribers","subscription_url":"https://api.github.com/repos/dart-lang/build/subscription","commits_url":"https://api.github.com/repos/dart-lang/build/commits{/sha}","git_commits_url":"https://api.github.com/repos/dart-lang/build/git/commits{/sha}","comments_url":"https://api.github.com/repos/dart-lang/build/comments{/number}","issue_comment_url":"https://api.github.com/repos/dart-lang/build/issues/comments{/number}","contents_url":"https://api.github.com/repos/dart-lang/build/contents/{+path}","compare_url":"https://api.github.com/repos/dart-lang/build/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dart-lang/build/merges","archive_url":"https://api.github.com/repos/dart-lang/build/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dart-lang/build/downloads","issues_url":"https://api.github.com/repos/dart-lang/build/issues{/number}","pulls_url":"https://api.github.com/repos/dart-lang/build/pulls{/number}","milestones_url":"https://api.github.com/repos/dart-lang/build/milestones{/number}","notifications_url":"https://api.github.com/repos/dart-lang/build/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dart-lang/build/labels{/name}","releases_url":"https://api.github.com/repos/dart-lang/build/releases{/id}","deployments_url":"https://api.github.com/repos/dart-lang/build/deployments","created_at":"2016-01-20T19:12:37Z","updated_at":"2016-01-22T15:28:43Z","pushed_at":"2016-02-05T19:18:44Z","git_url":"git://github.com/dart-lang/build.git","ssh_url":"git@github.com:dart-lang/build.git","clone_url":"https://github.com/dart-lang/build.git","svn_url":"https://github.com/dart-lang/build","homepage":null,"size":77,"stargazers_count":0,"watchers_count":0,"language":"Dart","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":13,"forks":1,"open_issues":13,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dart-lang/build/pulls/33"},"html":{"href":"https://github.com/dart-lang/build/pull/33"},"issue":{"href":"https://api.github.com/repos/dart-lang/build/issues/33"},"comments":{"href":"https://api.github.com/repos/dart-lang/build/issues/33/comments"},"review_comments":{"href":"https://api.github.com/repos/dart-lang/build/pulls/33/comments"},"review_comment":{"href":"https://api.github.com/repos/dart-lang/build/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dart-lang/build/pulls/33/commits"},"statuses":{"href":"https://api.github.com/repos/dart-lang/build/statuses/cb7da4f672a92121e9c7c379447c105eae142159"}}}}