{"action":"created","comment":{"url":"https://api.github.com/repos/bazelbuild/rules_rust/pulls/comments/203459398","pull_request_review_id":138351139,"id":203459398,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwMzQ1OTM5OA==","diff_hunk":"@@ -42,98 +55,272 @@ filegroup(\n         target_triple = target_triple,\n     )\n \n-def BUILD_for_toolchain(name, target_triple):\n-    \"\"\"Emits a toolchain declaration for an existing toolchain workspace.\"\"\"\n+def BUILD_for_toolchain(workspace_name, name, exec_triple, target_triple):\n+    \"\"\"Emits a toolchain declaration to match an existing compiler and stdlib.\n+\n+    Args:\n+      workspace_name: The name of the workspace that this toolchain resides in\n+      name: The name of the toolchain declaration\n+      exec_triple: The rust-style target that this compiler runs on\n+      target_triple: The rust-style target triple of the tool\n+    \"\"\"\n \n     system = triple_to_system(target_triple)\n-    constraint_set = triple_to_constraint_set(target_triple)\n \n-    constraint_set_strs = []\n-    for constraint in constraint_set:\n-        constraint_set_strs.append(\"\\\"{}\\\"\".format(constraint))\n+    exec_constraint_set = triple_to_constraint_set(exec_triple)\n+    exec_constraint_set_strs = []\n+    for constraint in exec_constraint_set:\n+        exec_constraint_set_strs.append(\"\\\"{}\\\"\".format(constraint))\n+    exec_constraint_sets_serialized = \"[{}]\".format(\", \".join(exec_constraint_set_strs))\n \n-    constraint_sets_serialized = \"[{}]\".format(\", \".join(constraint_set_strs))\n+    target_constraint_set = triple_to_constraint_set(target_triple)\n+    target_constraint_set_strs = []\n+    for constraint in target_constraint_set:\n+        target_constraint_set_strs.append(\"\\\"{}\\\"\".format(constraint))\n+    target_constraint_sets_serialized = \"[{}]\".format(\", \".join(target_constraint_set_strs))\n \n-    return \"\"\"toolchain(\n+    return \"\"\"\n+toolchain(\n     name = \"{toolchain_name}\",\n-    exec_compatible_with = {constraint_sets_serialized},\n-    target_compatible_with = {constraint_sets_serialized},\n-    toolchain = \":{toolchain_name}_impl\",\n+    exec_compatible_with = {exec_constraint_sets_serialized},\n+    target_compatible_with = {target_constraint_sets_serialized},\n+    toolchain = \":toolchain_for_{target_triple}_impl\",\n     toolchain_type = \"@io_bazel_rules_rust//rust:toolchain\",\n )\n \n rust_toolchain(\n     name = \"{toolchain_name}_impl\",\n-    rust_doc = \"@{toolchain_workspace_name}//:rustdoc\",\n-    rust_lib = [\"@{toolchain_workspace_name}//:rust_lib\"],\n-    rustc = \"@{toolchain_workspace_name}//:rustc\",\n-    rustc_lib = [\"@{toolchain_workspace_name}//:rustc_lib\"],\n+    rust_doc = \"@{workspace_name}//:rustdoc\",\n+    rust_lib = [\"@{workspace_name}//:rust_lib-{target_triple}\"],\n+    rustc = \"@{workspace_name}//:rustc\",\n+    rustc_lib = [\"@{workspace_name}//:rustc_lib\"],\n     staticlib_ext = \"{staticlib_ext}\",\n     dylib_ext = \"{dylib_ext}\",\n     os = \"{system}\",\n+    exec_triple = \"{exec_triple}\",\n+    target_triple = \"{target_triple}\",\n     visibility = [\"//visibility:public\"],\n )\n \"\"\".format(\n         toolchain_name = name,\n-        toolchain_workspace_name = name.replace(\"-\", \"_\"),\n+        workspace_name = workspace_name,\n         staticlib_ext = system_to_staticlib_ext(system),\n         dylib_ext = system_to_dylib_ext(system),\n         system = system,\n-        constraint_sets_serialized = constraint_sets_serialized,\n+        exec_triple = exec_triple,\n+        target_triple = target_triple,\n+        exec_constraint_sets_serialized = exec_constraint_sets_serialized,\n+        target_constraint_sets_serialized = target_constraint_sets_serialized,\n     )\n \n-def _default_toolchains():\n-    all_toolchains = [\n-        (\"rust-linux-x86_64\", \"x86_64-unknown-linux-gnu\"),\n-        (\"rust-darwin-x86_64\", \"x86_64-apple-darwin\"),\n-        (\"rust-freebsd-x86_64\", \"x86_64-unknown-freebsd\"),\n+def _check_version_valid(version, iso_date, param_prefix = \"\"):\n+    \"\"\"Verifies that the provided rust version and iso_date make sense.\"\"\"\n+\n+    if not version and iso_date:\n+        fail(\"{param_prefix}iso_date must be paired with a {param_prefix}version\".format(param_prefix = param_prefix))\n+\n+    if version in (\"beta\", \"nightly\") and not iso_date:\n+        fail(\"{param_prefix}iso_date must be specified if version is 'beta' or 'nightly'\".format(param_prefix = param_prefix))\n+\n+    if version not in (\"beta\", \"nightly\") and iso_date:\n+        print(\"{param_prefix}iso_date is ineffective if an exact version is specified\".format(param_prefix = param_prefix))\n+\n+def produce_tool_suburl(tool_name, target_triple, version, iso_date = None):\n+    \"\"\"Produces a fully qualified Rust tool name for URL\n+\n+    Args:\n+      tool_name: The name of the tool per static.rust-lang.org\n+      target_triple: The rust-style target triple of the tool\n+      version: The version of the tool among \"nightly\", \"beta', or an exact version.\n+      iso_date: The date of the tool (or None, if the version is a specific version).\n+    \"\"\"\n+\n+    if iso_date:\n+        return \"{}/{}-{}-{}\".format(iso_date, tool_name, version, target_triple)\n+    else:\n+        return \"{}-{}-{}\".format(tool_name, version, target_triple)\n+\n+def produce_tool_path(tool_name, target_triple, version):\n+    \"\"\"Produces a qualified Rust tool name\n+\n+    Args:\n+      tool_name: The name of the tool per static.rust-lang.org\n+      target_triple: The rust-style target triple of the tool\n+      version: The version of the tool among \"nightly\", \"beta', or an exact version.\n+    \"\"\"\n+\n+    return \"{}-{}-{}\".format(tool_name, version, target_triple)\n+\n+def load_arbitrary_tool(ctx, tool_name, param_prefix, tool_subdirectory, version, iso_date, target_triple):\n+    \"\"\"Loads a Rust tool, downloads, and extracts into the common workspace.\n+\n+    Args:\n+      ctx: A repository_ctx.\n+      tool_name: The name of the given tool per the archive naming.\n+      param_prefix: The name of the versioning param if the repository rule supports multiple tools.\n+      tool_subdirectory: The subdirectory of the tool files (wo level below the root directory of\n+                         the archive. The root directory of the archive is expected to match\n+                         $TOOL_NAME-$VERSION-$TARGET_TRIPLE.\n+      version: The version of the tool among \"nightly\", \"beta', or an exact version.\n+      iso_date: The date of the tool (or None, if the version is a specific version).\n+      target_triple: The rust-style target triple of the tool\n+    \"\"\"\n+\n+    _check_version_valid(version, iso_date, param_prefix)\n+\n+    tool_suburl = produce_tool_suburl(tool_name, target_triple, version, iso_date)\n+    url = \"https://static.rust-lang.org/dist/{}.tar.gz\".format(tool_suburl)","path":"rust/repositories.bzl","position":null,"original_position":205,"commit_id":"b74a32cf56416283ab310566aa88711fc590dbd3","original_commit_id":"1b37d0d05bac3fac033631f675460221ae285820","user":{"login":"acmcarther","id":1660129,"node_id":"MDQ6VXNlcjE2NjAxMjk=","avatar_url":"https://avatars0.githubusercontent.com/u/1660129?v=4","gravatar_id":"","url":"https://api.github.com/users/acmcarther","html_url":"https://github.com/acmcarther","followers_url":"https://api.github.com/users/acmcarther/followers","following_url":"https://api.github.com/users/acmcarther/following{/other_user}","gists_url":"https://api.github.com/users/acmcarther/gists{/gist_id}","starred_url":"https://api.github.com/users/acmcarther/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/acmcarther/subscriptions","organizations_url":"https://api.github.com/users/acmcarther/orgs","repos_url":"https://api.github.com/users/acmcarther/repos","events_url":"https://api.github.com/users/acmcarther/events{/privacy}","received_events_url":"https://api.github.com/users/acmcarther/received_events","type":"User","site_admin":false},"body":"Done in docstring + above the url decl.","created_at":"2018-07-18T17:11:25Z","updated_at":"2018-07-18T17:39:51Z","html_url":"https://github.com/bazelbuild/rules_rust/pull/107#discussion_r203459398","pull_request_url":"https://api.github.com/repos/bazelbuild/rules_rust/pulls/107","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/bazelbuild/rules_rust/pulls/comments/203459398"},"html":{"href":"https://github.com/bazelbuild/rules_rust/pull/107#discussion_r203459398"},"pull_request":{"href":"https://api.github.com/repos/bazelbuild/rules_rust/pulls/107"}},"in_reply_to_id":203236879},"pull_request":{"url":"https://api.github.com/repos/bazelbuild/rules_rust/pulls/107","id":202116747,"node_id":"MDExOlB1bGxSZXF1ZXN0MjAyMTE2NzQ3","html_url":"https://github.com/bazelbuild/rules_rust/pull/107","diff_url":"https://github.com/bazelbuild/rules_rust/pull/107.diff","patch_url":"https://github.com/bazelbuild/rules_rust/pull/107.patch","issue_url":"https://api.github.com/repos/bazelbuild/rules_rust/issues/107","number":107,"state":"open","locked":false,"title":"Add custom repository_rule for fetching toolchains","user":{"login":"acmcarther","id":1660129,"node_id":"MDQ6VXNlcjE2NjAxMjk=","avatar_url":"https://avatars0.githubusercontent.com/u/1660129?v=4","gravatar_id":"","url":"https://api.github.com/users/acmcarther","html_url":"https://github.com/acmcarther","followers_url":"https://api.github.com/users/acmcarther/followers","following_url":"https://api.github.com/users/acmcarther/following{/other_user}","gists_url":"https://api.github.com/users/acmcarther/gists{/gist_id}","starred_url":"https://api.github.com/users/acmcarther/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/acmcarther/subscriptions","organizations_url":"https://api.github.com/users/acmcarther/orgs","repos_url":"https://api.github.com/users/acmcarther/repos","events_url":"https://api.github.com/users/acmcarther/events{/privacy}","received_events_url":"https://api.github.com/users/acmcarther/received_events","type":"User","site_admin":false},"body":"This PR replaces the standard \"new_http_repository\" invocation that previously downloaded the \"rust-*-*\" package with a custom repository_rule that downloads a \"rustc-*-*\", then bundles it with the corresponding \"rust-std-*-*\" and any others that are requested.\r\n\r\nIt integrates the suggestion from https://github.com/bazelbuild/rules_rust/pull/105 to put the toolchain declaration in the remote repository but I think it isn't working correctly as I'm seeing all toolchains get downloaded. I'll review.\r\n\r\nThis PR is not sufficient alone for true cross compilation. That will require\r\n- Support for custom linkers (propagated up to repository rule decl) as most targets need custom linkers\r\n- Support for rust-mingw for windows targets\r\n- Passing target_triple to rustc as a compiler flag.\r\n\r\nFollowups not directly related to cross compilation:\r\n- Add repository rule for fetching tools that aren't the compiler (cargo, llvm-tools, rls, rustfmt, etc)\r\n\r\nPlease review at your leisure:\r\n@damienmg \r\n@mfarrugi ","created_at":"2018-07-18T01:41:37Z","updated_at":"2018-07-18T17:39:52Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d26163fc1aa55673f693d56496a88390ba0eaf9c","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":342134077,"node_id":"MDU6TGFiZWwzNDIxMzQwNzc=","url":"https://api.github.com/repos/bazelbuild/rules_rust/labels/cla:%20yes","name":"cla: yes","color":"d4c5f9","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/bazelbuild/rules_rust/pulls/107/commits","review_comments_url":"https://api.github.com/repos/bazelbuild/rules_rust/pulls/107/comments","review_comment_url":"https://api.github.com/repos/bazelbuild/rules_rust/pulls/comments{/number}","comments_url":"https://api.github.com/repos/bazelbuild/rules_rust/issues/107/comments","statuses_url":"https://api.github.com/repos/bazelbuild/rules_rust/statuses/b74a32cf56416283ab310566aa88711fc590dbd3","head":{"label":"bazelbuild:acm-support-cross-stdlib","ref":"acm-support-cross-stdlib","sha":"b74a32cf56416283ab310566aa88711fc590dbd3","user":{"login":"bazelbuild","id":11684617,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExNjg0NjE3","avatar_url":"https://avatars1.githubusercontent.com/u/11684617?v=4","gravatar_id":"","url":"https://api.github.com/users/bazelbuild","html_url":"https://github.com/bazelbuild","followers_url":"https://api.github.com/users/bazelbuild/followers","following_url":"https://api.github.com/users/bazelbuild/following{/other_user}","gists_url":"https://api.github.com/users/bazelbuild/gists{/gist_id}","starred_url":"https://api.github.com/users/bazelbuild/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bazelbuild/subscriptions","organizations_url":"https://api.github.com/users/bazelbuild/orgs","repos_url":"https://api.github.com/users/bazelbuild/repos","events_url":"https://api.github.com/users/bazelbuild/events{/privacy}","received_events_url":"https://api.github.com/users/bazelbuild/received_events","type":"Organization","site_admin":false},"repo":{"id":53955366,"node_id":"MDEwOlJlcG9zaXRvcnk1Mzk1NTM2Ng==","name":"rules_rust","full_name":"bazelbuild/rules_rust","owner":{"login":"bazelbuild","id":11684617,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExNjg0NjE3","avatar_url":"https://avatars1.githubusercontent.com/u/11684617?v=4","gravatar_id":"","url":"https://api.github.com/users/bazelbuild","html_url":"https://github.com/bazelbuild","followers_url":"https://api.github.com/users/bazelbuild/followers","following_url":"https://api.github.com/users/bazelbuild/following{/other_user}","gists_url":"https://api.github.com/users/bazelbuild/gists{/gist_id}","starred_url":"https://api.github.com/users/bazelbuild/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bazelbuild/subscriptions","organizations_url":"https://api.github.com/users/bazelbuild/orgs","repos_url":"https://api.github.com/users/bazelbuild/repos","events_url":"https://api.github.com/users/bazelbuild/events{/privacy}","received_events_url":"https://api.github.com/users/bazelbuild/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/bazelbuild/rules_rust","description":"Rust rules for Bazel","fork":false,"url":"https://api.github.com/repos/bazelbuild/rules_rust","forks_url":"https://api.github.com/repos/bazelbuild/rules_rust/forks","keys_url":"https://api.github.com/repos/bazelbuild/rules_rust/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bazelbuild/rules_rust/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bazelbuild/rules_rust/teams","hooks_url":"https://api.github.com/repos/bazelbuild/rules_rust/hooks","issue_events_url":"https://api.github.com/repos/bazelbuild/rules_rust/issues/events{/number}","events_url":"https://api.github.com/repos/bazelbuild/rules_rust/events","assignees_url":"https://api.github.com/repos/bazelbuild/rules_rust/assignees{/user}","branches_url":"https://api.github.com/repos/bazelbuild/rules_rust/branches{/branch}","tags_url":"https://api.github.com/repos/bazelbuild/rules_rust/tags","blobs_url":"https://api.github.com/repos/bazelbuild/rules_rust/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bazelbuild/rules_rust/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bazelbuild/rules_rust/git/refs{/sha}","trees_url":"https://api.github.com/repos/bazelbuild/rules_rust/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bazelbuild/rules_rust/statuses/{sha}","languages_url":"https://api.github.com/repos/bazelbuild/rules_rust/languages","stargazers_url":"https://api.github.com/repos/bazelbuild/rules_rust/stargazers","contributors_url":"https://api.github.com/repos/bazelbuild/rules_rust/contributors","subscribers_url":"https://api.github.com/repos/bazelbuild/rules_rust/subscribers","subscription_url":"https://api.github.com/repos/bazelbuild/rules_rust/subscription","commits_url":"https://api.github.com/repos/bazelbuild/rules_rust/commits{/sha}","git_commits_url":"https://api.github.com/repos/bazelbuild/rules_rust/git/commits{/sha}","comments_url":"https://api.github.com/repos/bazelbuild/rules_rust/comments{/number}","issue_comment_url":"https://api.github.com/repos/bazelbuild/rules_rust/issues/comments{/number}","contents_url":"https://api.github.com/repos/bazelbuild/rules_rust/contents/{+path}","compare_url":"https://api.github.com/repos/bazelbuild/rules_rust/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bazelbuild/rules_rust/merges","archive_url":"https://api.github.com/repos/bazelbuild/rules_rust/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bazelbuild/rules_rust/downloads","issues_url":"https://api.github.com/repos/bazelbuild/rules_rust/issues{/number}","pulls_url":"https://api.github.com/repos/bazelbuild/rules_rust/pulls{/number}","milestones_url":"https://api.github.com/repos/bazelbuild/rules_rust/milestones{/number}","notifications_url":"https://api.github.com/repos/bazelbuild/rules_rust/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bazelbuild/rules_rust/labels{/name}","releases_url":"https://api.github.com/repos/bazelbuild/rules_rust/releases{/id}","deployments_url":"https://api.github.com/repos/bazelbuild/rules_rust/deployments","created_at":"2016-03-15T15:19:27Z","updated_at":"2018-07-18T01:33:05Z","pushed_at":"2018-07-18T17:38:14Z","git_url":"git://github.com/bazelbuild/rules_rust.git","ssh_url":"git@github.com:bazelbuild/rules_rust.git","clone_url":"https://github.com/bazelbuild/rules_rust.git","svn_url":"https://github.com/bazelbuild/rules_rust","homepage":"https://bazelbuild.github.io/rules_rust/","size":209,"stargazers_count":69,"watchers_count":69,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":43,"mirror_url":null,"archived":false,"open_issues_count":21,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":43,"open_issues":21,"watchers":69,"default_branch":"master"}},"base":{"label":"bazelbuild:master","ref":"master","sha":"60e222959fdd8d918188eba2941e656db036bad5","user":{"login":"bazelbuild","id":11684617,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExNjg0NjE3","avatar_url":"https://avatars1.githubusercontent.com/u/11684617?v=4","gravatar_id":"","url":"https://api.github.com/users/bazelbuild","html_url":"https://github.com/bazelbuild","followers_url":"https://api.github.com/users/bazelbuild/followers","following_url":"https://api.github.com/users/bazelbuild/following{/other_user}","gists_url":"https://api.github.com/users/bazelbuild/gists{/gist_id}","starred_url":"https://api.github.com/users/bazelbuild/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bazelbuild/subscriptions","organizations_url":"https://api.github.com/users/bazelbuild/orgs","repos_url":"https://api.github.com/users/bazelbuild/repos","events_url":"https://api.github.com/users/bazelbuild/events{/privacy}","received_events_url":"https://api.github.com/users/bazelbuild/received_events","type":"Organization","site_admin":false},"repo":{"id":53955366,"node_id":"MDEwOlJlcG9zaXRvcnk1Mzk1NTM2Ng==","name":"rules_rust","full_name":"bazelbuild/rules_rust","owner":{"login":"bazelbuild","id":11684617,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExNjg0NjE3","avatar_url":"https://avatars1.githubusercontent.com/u/11684617?v=4","gravatar_id":"","url":"https://api.github.com/users/bazelbuild","html_url":"https://github.com/bazelbuild","followers_url":"https://api.github.com/users/bazelbuild/followers","following_url":"https://api.github.com/users/bazelbuild/following{/other_user}","gists_url":"https://api.github.com/users/bazelbuild/gists{/gist_id}","starred_url":"https://api.github.com/users/bazelbuild/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bazelbuild/subscriptions","organizations_url":"https://api.github.com/users/bazelbuild/orgs","repos_url":"https://api.github.com/users/bazelbuild/repos","events_url":"https://api.github.com/users/bazelbuild/events{/privacy}","received_events_url":"https://api.github.com/users/bazelbuild/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/bazelbuild/rules_rust","description":"Rust rules for Bazel","fork":false,"url":"https://api.github.com/repos/bazelbuild/rules_rust","forks_url":"https://api.github.com/repos/bazelbuild/rules_rust/forks","keys_url":"https://api.github.com/repos/bazelbuild/rules_rust/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bazelbuild/rules_rust/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bazelbuild/rules_rust/teams","hooks_url":"https://api.github.com/repos/bazelbuild/rules_rust/hooks","issue_events_url":"https://api.github.com/repos/bazelbuild/rules_rust/issues/events{/number}","events_url":"https://api.github.com/repos/bazelbuild/rules_rust/events","assignees_url":"https://api.github.com/repos/bazelbuild/rules_rust/assignees{/user}","branches_url":"https://api.github.com/repos/bazelbuild/rules_rust/branches{/branch}","tags_url":"https://api.github.com/repos/bazelbuild/rules_rust/tags","blobs_url":"https://api.github.com/repos/bazelbuild/rules_rust/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bazelbuild/rules_rust/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bazelbuild/rules_rust/git/refs{/sha}","trees_url":"https://api.github.com/repos/bazelbuild/rules_rust/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bazelbuild/rules_rust/statuses/{sha}","languages_url":"https://api.github.com/repos/bazelbuild/rules_rust/languages","stargazers_url":"https://api.github.com/repos/bazelbuild/rules_rust/stargazers","contributors_url":"https://api.github.com/repos/bazelbuild/rules_rust/contributors","subscribers_url":"https://api.github.com/repos/bazelbuild/rules_rust/subscribers","subscription_url":"https://api.github.com/repos/bazelbuild/rules_rust/subscription","commits_url":"https://api.github.com/repos/bazelbuild/rules_rust/commits{/sha}","git_commits_url":"https://api.github.com/repos/bazelbuild/rules_rust/git/commits{/sha}","comments_url":"https://api.github.com/repos/bazelbuild/rules_rust/comments{/number}","issue_comment_url":"https://api.github.com/repos/bazelbuild/rules_rust/issues/comments{/number}","contents_url":"https://api.github.com/repos/bazelbuild/rules_rust/contents/{+path}","compare_url":"https://api.github.com/repos/bazelbuild/rules_rust/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bazelbuild/rules_rust/merges","archive_url":"https://api.github.com/repos/bazelbuild/rules_rust/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bazelbuild/rules_rust/downloads","issues_url":"https://api.github.com/repos/bazelbuild/rules_rust/issues{/number}","pulls_url":"https://api.github.com/repos/bazelbuild/rules_rust/pulls{/number}","milestones_url":"https://api.github.com/repos/bazelbuild/rules_rust/milestones{/number}","notifications_url":"https://api.github.com/repos/bazelbuild/rules_rust/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bazelbuild/rules_rust/labels{/name}","releases_url":"https://api.github.com/repos/bazelbuild/rules_rust/releases{/id}","deployments_url":"https://api.github.com/repos/bazelbuild/rules_rust/deployments","created_at":"2016-03-15T15:19:27Z","updated_at":"2018-07-18T01:33:05Z","pushed_at":"2018-07-18T17:38:14Z","git_url":"git://github.com/bazelbuild/rules_rust.git","ssh_url":"git@github.com:bazelbuild/rules_rust.git","clone_url":"https://github.com/bazelbuild/rules_rust.git","svn_url":"https://github.com/bazelbuild/rules_rust","homepage":"https://bazelbuild.github.io/rules_rust/","size":209,"stargazers_count":69,"watchers_count":69,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":43,"mirror_url":null,"archived":false,"open_issues_count":21,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":43,"open_issues":21,"watchers":69,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/bazelbuild/rules_rust/pulls/107"},"html":{"href":"https://github.com/bazelbuild/rules_rust/pull/107"},"issue":{"href":"https://api.github.com/repos/bazelbuild/rules_rust/issues/107"},"comments":{"href":"https://api.github.com/repos/bazelbuild/rules_rust/issues/107/comments"},"review_comments":{"href":"https://api.github.com/repos/bazelbuild/rules_rust/pulls/107/comments"},"review_comment":{"href":"https://api.github.com/repos/bazelbuild/rules_rust/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/bazelbuild/rules_rust/pulls/107/commits"},"statuses":{"href":"https://api.github.com/repos/bazelbuild/rules_rust/statuses/b74a32cf56416283ab310566aa88711fc590dbd3"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"acmcarther"}}