{"action":"created","comment":{"url":"https://api.github.com/repos/flutter/flutter/pulls/comments/167019353","pull_request_review_id":95164807,"id":167019353,"diff_hunk":"@@ -169,25 +145,66 @@ class AndroidWorkflow extends DoctorValidator implements Workflow {\n       return new ValidationResult(ValidationType.partial, messages, statusInfo: sdkVersionText);\n     }\n \n+    // Check for licenses.\n+    switch(await licensesAccepted) {","path":"packages/flutter_tools/lib/src/android/android_workflow.dart","position":92,"original_position":92,"commit_id":"79dcd4324a2a4363a99ee65dd329bb9b3e2e79b9","original_commit_id":"79dcd4324a2a4363a99ee65dd329bb9b3e2e79b9","user":{"login":"tvolkert","id":15253456,"avatar_url":"https://avatars0.githubusercontent.com/u/15253456?v=4","gravatar_id":"","url":"https://api.github.com/users/tvolkert","html_url":"https://github.com/tvolkert","followers_url":"https://api.github.com/users/tvolkert/followers","following_url":"https://api.github.com/users/tvolkert/following{/other_user}","gists_url":"https://api.github.com/users/tvolkert/gists{/gist_id}","starred_url":"https://api.github.com/users/tvolkert/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tvolkert/subscriptions","organizations_url":"https://api.github.com/users/tvolkert/orgs","repos_url":"https://api.github.com/users/tvolkert/repos","events_url":"https://api.github.com/users/tvolkert/events{/privacy}","received_events_url":"https://api.github.com/users/tvolkert/received_events","type":"User","site_admin":false},"body":"Nit: space after `switch`","created_at":"2018-02-08T18:04:10Z","updated_at":"2018-02-08T18:05:44Z","html_url":"https://github.com/flutter/flutter/pull/14535#discussion_r167019353","pull_request_url":"https://api.github.com/repos/flutter/flutter/pulls/14535","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/flutter/flutter/pulls/comments/167019353"},"html":{"href":"https://github.com/flutter/flutter/pull/14535#discussion_r167019353"},"pull_request":{"href":"https://api.github.com/repos/flutter/flutter/pulls/14535"}}},"pull_request":{"url":"https://api.github.com/repos/flutter/flutter/pulls/14535","id":167839837,"html_url":"https://github.com/flutter/flutter/pull/14535","diff_url":"https://github.com/flutter/flutter/pull/14535.diff","patch_url":"https://github.com/flutter/flutter/pull/14535.patch","issue_url":"https://api.github.com/repos/flutter/flutter/issues/14535","number":14535,"state":"open","locked":false,"title":"Add android license verification to doctor and some refactoring","user":{"login":"jcollins-g","id":14116827,"avatar_url":"https://avatars3.githubusercontent.com/u/14116827?v=4","gravatar_id":"","url":"https://api.github.com/users/jcollins-g","html_url":"https://github.com/jcollins-g","followers_url":"https://api.github.com/users/jcollins-g/followers","following_url":"https://api.github.com/users/jcollins-g/following{/other_user}","gists_url":"https://api.github.com/users/jcollins-g/gists{/gist_id}","starred_url":"https://api.github.com/users/jcollins-g/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jcollins-g/subscriptions","organizations_url":"https://api.github.com/users/jcollins-g/orgs","repos_url":"https://api.github.com/users/jcollins-g/repos","events_url":"https://api.github.com/users/jcollins-g/events{/privacy}","received_events_url":"https://api.github.com/users/jcollins-g/received_events","type":"User","site_admin":false},"body":"Fixes #13584.  Caveat is that flutter doctor takes about 5 times as long to run for me (it's still fast, under 2 seconds, but launching `sdkmanager --license` hurts).\r\n\r\n- Moved `findJavaBinary` and sdkManagerEnv to android_sdk to reflect their use in more than one place\r\n- Added a `runDetachedWithIO` function to the plethora of process launching functions. :-(\r\n- Extracted a `Spinner` class from `AnsiStatus` and reintroduced it as a mixin to the latter.  Spinners are now everywhere in doctor, just in case something takes too long (most places not noticeably)\r\n- Added launching `sdkmanager --license` and capturing the output, with a timeout.\r\n- Made `DoctorValidator.validate` runs asynchronous, saving a barely noticeable fraction of a second now.  But that may help more if more `DoctorValidator`s start taking a while like the Android workflow.\r\n- Added verbose to the doctor output that goes to the crash reporter.\r\n\r\nOutput samples:\r\n\r\nWith no licenses installed, -v to show the info text:\r\n```\r\n[✓] Android toolchain - develop for Android devices (Android SDK 27.0.3)\r\n    • Android SDK at /usr/local/google/home/jcollins/Android/Sdk\r\n    • Android NDK at /usr/local/google/home/jcollins/Android/Sdk/ndk-bundle\r\n    • Platform android-27, build-tools 27.0.3\r\n    • Java binary at: /opt/android-studio-3.0/jre/bin/java\r\n    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-915-b01)\r\n    • All Android licenses accepted.\r\n```\r\n\r\nWith some fraction of them installed (I've had android builds work fine with at least some licenses accepted), without -v:\r\n```\r\n[!] Android toolchain - develop for Android devices (Android SDK 27.0.3)\r\n    ! Some Android licenses not accepted.  To resolve this, run: flutter doctor --android-licenses\r\n```\r\n\r\nWith no licenses, no -v:\r\n```\r\n[!] Android toolchain - develop for Android devices (Android SDK 27.0.3)\r\n    ✗ Android licenses not accepted.  To resolve this, run: flutter doctor --android-licenses\r\n```","created_at":"2018-02-07T23:37:49Z","updated_at":"2018-02-08T18:05:44Z","closed_at":null,"merged_at":null,"merge_commit_sha":"77a1857d968298ce7d22ef8bde948a799cae69cf","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"milestone":null,"commits_url":"https://api.github.com/repos/flutter/flutter/pulls/14535/commits","review_comments_url":"https://api.github.com/repos/flutter/flutter/pulls/14535/comments","review_comment_url":"https://api.github.com/repos/flutter/flutter/pulls/comments{/number}","comments_url":"https://api.github.com/repos/flutter/flutter/issues/14535/comments","statuses_url":"https://api.github.com/repos/flutter/flutter/statuses/79dcd4324a2a4363a99ee65dd329bb9b3e2e79b9","head":{"label":"jcollins-g:license-check-in-doctor","ref":"license-check-in-doctor","sha":"79dcd4324a2a4363a99ee65dd329bb9b3e2e79b9","user":{"login":"jcollins-g","id":14116827,"avatar_url":"https://avatars3.githubusercontent.com/u/14116827?v=4","gravatar_id":"","url":"https://api.github.com/users/jcollins-g","html_url":"https://github.com/jcollins-g","followers_url":"https://api.github.com/users/jcollins-g/followers","following_url":"https://api.github.com/users/jcollins-g/following{/other_user}","gists_url":"https://api.github.com/users/jcollins-g/gists{/gist_id}","starred_url":"https://api.github.com/users/jcollins-g/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jcollins-g/subscriptions","organizations_url":"https://api.github.com/users/jcollins-g/orgs","repos_url":"https://api.github.com/users/jcollins-g/repos","events_url":"https://api.github.com/users/jcollins-g/events{/privacy}","received_events_url":"https://api.github.com/users/jcollins-g/received_events","type":"User","site_admin":false},"repo":{"id":88872521,"name":"flutter","full_name":"jcollins-g/flutter","owner":{"login":"jcollins-g","id":14116827,"avatar_url":"https://avatars3.githubusercontent.com/u/14116827?v=4","gravatar_id":"","url":"https://api.github.com/users/jcollins-g","html_url":"https://github.com/jcollins-g","followers_url":"https://api.github.com/users/jcollins-g/followers","following_url":"https://api.github.com/users/jcollins-g/following{/other_user}","gists_url":"https://api.github.com/users/jcollins-g/gists{/gist_id}","starred_url":"https://api.github.com/users/jcollins-g/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jcollins-g/subscriptions","organizations_url":"https://api.github.com/users/jcollins-g/orgs","repos_url":"https://api.github.com/users/jcollins-g/repos","events_url":"https://api.github.com/users/jcollins-g/events{/privacy}","received_events_url":"https://api.github.com/users/jcollins-g/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jcollins-g/flutter","description":"Framework for building high-performance, high-fidelity iOS and Android apps.","fork":true,"url":"https://api.github.com/repos/jcollins-g/flutter","forks_url":"https://api.github.com/repos/jcollins-g/flutter/forks","keys_url":"https://api.github.com/repos/jcollins-g/flutter/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jcollins-g/flutter/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jcollins-g/flutter/teams","hooks_url":"https://api.github.com/repos/jcollins-g/flutter/hooks","issue_events_url":"https://api.github.com/repos/jcollins-g/flutter/issues/events{/number}","events_url":"https://api.github.com/repos/jcollins-g/flutter/events","assignees_url":"https://api.github.com/repos/jcollins-g/flutter/assignees{/user}","branches_url":"https://api.github.com/repos/jcollins-g/flutter/branches{/branch}","tags_url":"https://api.github.com/repos/jcollins-g/flutter/tags","blobs_url":"https://api.github.com/repos/jcollins-g/flutter/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jcollins-g/flutter/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jcollins-g/flutter/git/refs{/sha}","trees_url":"https://api.github.com/repos/jcollins-g/flutter/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jcollins-g/flutter/statuses/{sha}","languages_url":"https://api.github.com/repos/jcollins-g/flutter/languages","stargazers_url":"https://api.github.com/repos/jcollins-g/flutter/stargazers","contributors_url":"https://api.github.com/repos/jcollins-g/flutter/contributors","subscribers_url":"https://api.github.com/repos/jcollins-g/flutter/subscribers","subscription_url":"https://api.github.com/repos/jcollins-g/flutter/subscription","commits_url":"https://api.github.com/repos/jcollins-g/flutter/commits{/sha}","git_commits_url":"https://api.github.com/repos/jcollins-g/flutter/git/commits{/sha}","comments_url":"https://api.github.com/repos/jcollins-g/flutter/comments{/number}","issue_comment_url":"https://api.github.com/repos/jcollins-g/flutter/issues/comments{/number}","contents_url":"https://api.github.com/repos/jcollins-g/flutter/contents/{+path}","compare_url":"https://api.github.com/repos/jcollins-g/flutter/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jcollins-g/flutter/merges","archive_url":"https://api.github.com/repos/jcollins-g/flutter/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jcollins-g/flutter/downloads","issues_url":"https://api.github.com/repos/jcollins-g/flutter/issues{/number}","pulls_url":"https://api.github.com/repos/jcollins-g/flutter/pulls{/number}","milestones_url":"https://api.github.com/repos/jcollins-g/flutter/milestones{/number}","notifications_url":"https://api.github.com/repos/jcollins-g/flutter/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jcollins-g/flutter/labels{/name}","releases_url":"https://api.github.com/repos/jcollins-g/flutter/releases{/id}","deployments_url":"https://api.github.com/repos/jcollins-g/flutter/deployments","created_at":"2017-04-20T14:05:09Z","updated_at":"2017-04-20T14:05:14Z","pushed_at":"2018-02-08T00:10:13Z","git_url":"git://github.com/jcollins-g/flutter.git","ssh_url":"git@github.com:jcollins-g/flutter.git","clone_url":"https://github.com/jcollins-g/flutter.git","svn_url":"https://github.com/jcollins-g/flutter","homepage":"https://flutter.io","size":34202,"stargazers_count":0,"watchers_count":0,"language":"Dart","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"flutter:master","ref":"master","sha":"4ae1b5f41593f067d52f2ec239b87b00776bc4a8","user":{"login":"flutter","id":14101776,"avatar_url":"https://avatars3.githubusercontent.com/u/14101776?v=4","gravatar_id":"","url":"https://api.github.com/users/flutter","html_url":"https://github.com/flutter","followers_url":"https://api.github.com/users/flutter/followers","following_url":"https://api.github.com/users/flutter/following{/other_user}","gists_url":"https://api.github.com/users/flutter/gists{/gist_id}","starred_url":"https://api.github.com/users/flutter/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/flutter/subscriptions","organizations_url":"https://api.github.com/users/flutter/orgs","repos_url":"https://api.github.com/users/flutter/repos","events_url":"https://api.github.com/users/flutter/events{/privacy}","received_events_url":"https://api.github.com/users/flutter/received_events","type":"Organization","site_admin":false},"repo":{"id":31792824,"name":"flutter","full_name":"flutter/flutter","owner":{"login":"flutter","id":14101776,"avatar_url":"https://avatars3.githubusercontent.com/u/14101776?v=4","gravatar_id":"","url":"https://api.github.com/users/flutter","html_url":"https://github.com/flutter","followers_url":"https://api.github.com/users/flutter/followers","following_url":"https://api.github.com/users/flutter/following{/other_user}","gists_url":"https://api.github.com/users/flutter/gists{/gist_id}","starred_url":"https://api.github.com/users/flutter/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/flutter/subscriptions","organizations_url":"https://api.github.com/users/flutter/orgs","repos_url":"https://api.github.com/users/flutter/repos","events_url":"https://api.github.com/users/flutter/events{/privacy}","received_events_url":"https://api.github.com/users/flutter/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/flutter/flutter","description":"Flutter makes it easy and fast to build beautiful mobile apps.","fork":false,"url":"https://api.github.com/repos/flutter/flutter","forks_url":"https://api.github.com/repos/flutter/flutter/forks","keys_url":"https://api.github.com/repos/flutter/flutter/keys{/key_id}","collaborators_url":"https://api.github.com/repos/flutter/flutter/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/flutter/flutter/teams","hooks_url":"https://api.github.com/repos/flutter/flutter/hooks","issue_events_url":"https://api.github.com/repos/flutter/flutter/issues/events{/number}","events_url":"https://api.github.com/repos/flutter/flutter/events","assignees_url":"https://api.github.com/repos/flutter/flutter/assignees{/user}","branches_url":"https://api.github.com/repos/flutter/flutter/branches{/branch}","tags_url":"https://api.github.com/repos/flutter/flutter/tags","blobs_url":"https://api.github.com/repos/flutter/flutter/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/flutter/flutter/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/flutter/flutter/git/refs{/sha}","trees_url":"https://api.github.com/repos/flutter/flutter/git/trees{/sha}","statuses_url":"https://api.github.com/repos/flutter/flutter/statuses/{sha}","languages_url":"https://api.github.com/repos/flutter/flutter/languages","stargazers_url":"https://api.github.com/repos/flutter/flutter/stargazers","contributors_url":"https://api.github.com/repos/flutter/flutter/contributors","subscribers_url":"https://api.github.com/repos/flutter/flutter/subscribers","subscription_url":"https://api.github.com/repos/flutter/flutter/subscription","commits_url":"https://api.github.com/repos/flutter/flutter/commits{/sha}","git_commits_url":"https://api.github.com/repos/flutter/flutter/git/commits{/sha}","comments_url":"https://api.github.com/repos/flutter/flutter/comments{/number}","issue_comment_url":"https://api.github.com/repos/flutter/flutter/issues/comments{/number}","contents_url":"https://api.github.com/repos/flutter/flutter/contents/{+path}","compare_url":"https://api.github.com/repos/flutter/flutter/compare/{base}...{head}","merges_url":"https://api.github.com/repos/flutter/flutter/merges","archive_url":"https://api.github.com/repos/flutter/flutter/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/flutter/flutter/downloads","issues_url":"https://api.github.com/repos/flutter/flutter/issues{/number}","pulls_url":"https://api.github.com/repos/flutter/flutter/pulls{/number}","milestones_url":"https://api.github.com/repos/flutter/flutter/milestones{/number}","notifications_url":"https://api.github.com/repos/flutter/flutter/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/flutter/flutter/labels{/name}","releases_url":"https://api.github.com/repos/flutter/flutter/releases{/id}","deployments_url":"https://api.github.com/repos/flutter/flutter/deployments","created_at":"2015-03-06T22:54:58Z","updated_at":"2018-02-08T18:00:44Z","pushed_at":"2018-02-08T17:20:36Z","git_url":"git://github.com/flutter/flutter.git","ssh_url":"git@github.com:flutter/flutter.git","clone_url":"https://github.com/flutter/flutter.git","svn_url":"https://github.com/flutter/flutter","homepage":"https://flutter.io","size":34217,"stargazers_count":10127,"watchers_count":10127,"language":"Dart","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":949,"mirror_url":null,"archived":false,"open_issues_count":2209,"license":null,"forks":949,"open_issues":2209,"watchers":10127,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/flutter/flutter/pulls/14535"},"html":{"href":"https://github.com/flutter/flutter/pull/14535"},"issue":{"href":"https://api.github.com/repos/flutter/flutter/issues/14535"},"comments":{"href":"https://api.github.com/repos/flutter/flutter/issues/14535/comments"},"review_comments":{"href":"https://api.github.com/repos/flutter/flutter/pulls/14535/comments"},"review_comment":{"href":"https://api.github.com/repos/flutter/flutter/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/flutter/flutter/pulls/14535/commits"},"statuses":{"href":"https://api.github.com/repos/flutter/flutter/statuses/79dcd4324a2a4363a99ee65dd329bb9b3e2e79b9"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"tvolkert"}}