{"action":"created","comment":{"url":"https://api.github.com/repos/rust-lang/rust/pulls/comments/74114599","id":74114599,"diff_hunk":"@@ -118,57 +125,174 @@ impl OutputType {\n     }\n }\n \n-#[derive(Clone)]\n-pub struct Options {\n-    // The crate config requested for the session, which may be combined\n-    // with additional crate configurations during the compile process\n-    pub crate_types: Vec<CrateType>,\n-\n-    pub optimize: OptLevel,\n-    pub debug_assertions: bool,\n-    pub debuginfo: DebugInfoLevel,\n-    pub lint_opts: Vec<(String, lint::Level)>,\n-    pub lint_cap: Option<lint::Level>,\n-    pub describe_lints: bool,\n-    pub output_types: HashMap<OutputType, Option<PathBuf>>,\n-    // This was mutable for rustpkg, which updates search paths based on the\n-    // parsed code. It remains mutable in case its replacements wants to use\n-    // this.\n-    pub search_paths: SearchPaths,\n-    pub libs: Vec<(String, cstore::NativeLibraryKind)>,\n-    pub maybe_sysroot: Option<PathBuf>,\n-    pub target_triple: String,\n-    // User-specified cfg meta items. The compiler itself will add additional\n-    // items to the crate config, and during parsing the entire crate config\n-    // will be added to the crate AST node.  This should not be used for\n-    // anything except building the full crate config prior to parsing.\n-    pub cfg: ast::CrateConfig,\n-    pub test: bool,\n-    pub parse_only: bool,\n-    pub no_trans: bool,\n-    pub error_format: ErrorOutputType,\n-    pub treat_err_as_bug: bool,\n-    pub continue_parse_after_error: bool,\n-    pub mir_opt_level: usize,\n-\n-    /// if Some, enable incremental compilation, using the given\n-    /// directory to store intermediate results\n-    pub incremental: Option<PathBuf>,\n-\n-    pub no_analysis: bool,\n-    pub debugging_opts: DebuggingOptions,\n-    pub prints: Vec<PrintRequest>,\n-    pub cg: CodegenOptions,\n-    pub externs: HashMap<String, Vec<String>>,\n-    pub crate_name: Option<String>,\n-    /// An optional name to use as the crate for std during std injection,\n-    /// written `extern crate std = \"name\"`. Default to \"std\". Used by\n-    /// out-of-tree drivers.\n-    pub alt_std_name: Option<String>,\n-    /// Indicates how the compiler should treat unstable features\n-    pub unstable_features: UnstableFeatures\n+// Use tree-based collections to cheaply get a deterministic Hash implementation.\n+// DO NOT switch BTreeMap out for an unsorted container type! That would break\n+// dependency tracking for commandline arguments.\n+#[derive(Clone, Hash)]\n+pub struct OutputTypes(BTreeMap<OutputType, Option<PathBuf>>);\n+\n+impl OutputTypes {\n+    pub fn new(entries: &[(OutputType, Option<PathBuf>)]) -> OutputTypes {\n+        OutputTypes(BTreeMap::from_iter(entries.iter()\n+                                               .map(|&(k, ref v)| (k, v.clone()))))\n+    }\n+\n+    pub fn get(&self, key: &OutputType) -> Option<&Option<PathBuf>> {\n+        self.0.get(key)\n+    }\n+\n+    pub fn contains_key(&self, key: &OutputType) -> bool {\n+        self.0.contains_key(key)\n+    }\n+\n+    pub fn keys<'a>(&'a self) -> BTreeMapKeysIter<'a, OutputType, Option<PathBuf>> {\n+        self.0.keys()\n+    }\n+\n+    pub fn values<'a>(&'a self) -> BTreeMapValuesIter<'a, OutputType, Option<PathBuf>> {\n+        self.0.values()\n+    }\n }\n \n+\n+// Use tree-based collections to cheaply get a deterministic Hash implementation.\n+// DO NOT switch BTreeMap or BTreeSet out for an unsorted container type! That\n+// would break dependency tracking for commandline arguments.\n+#[derive(Clone, Hash)]\n+pub struct Externs(BTreeMap<String, BTreeSet<String>>);\n+\n+impl Externs {\n+    pub fn new(data: BTreeMap<String, BTreeSet<String>>) -> Externs {\n+        Externs(data)\n+    }\n+\n+    pub fn get(&self, key: &str) -> Option<&BTreeSet<String>> {\n+        self.0.get(key)\n+    }\n+\n+    pub fn iter<'a>(&'a self) -> BTreeMapIter<'a, String, BTreeSet<String>> {\n+        self.0.iter()\n+    }\n+}\n+\n+macro_rules! hash_option {\n+    ($opt_name:ident, $opt_expr:expr, $sub_hashes:expr, [UNTRACKED]) => ({});\n+    ($opt_name:ident, $opt_expr:expr, $sub_hashes:expr, [TRACKED]) => ({\n+        if $sub_hashes.insert(stringify!($opt_name),\n+                              $opt_expr as &dep_tracking::DepTrackingHash).is_some() {\n+            bug!(\"Duplicate key in CLI DepTrackingHash: {}\", stringify!($opt_name))\n+        }\n+    });\n+    ($opt_name:ident,\n+     $opt_expr:expr,\n+     $sub_hashes:expr,\n+     [UNTRACKED_WITH_WARNING $warn_val:expr, $warn_text:expr, $error_format:expr]) => ({\n+        if *$opt_expr == $warn_val {\n+            early_warn($error_format, $warn_text)\n+        }\n+    });\n+}\n+\n+macro_rules! top_level_options {\n+    (pub struct Options { $(\n+        $opt:ident : $t:ty [$dep_tracking_marker:ident $($warn_val:expr, $warn_text:expr)*],\n+    )* } ) => (\n+        #[derive(Clone)]\n+        pub struct Options {\n+            $(pub $opt: $t),*\n+        }\n+\n+        impl Options {\n+            pub fn dep_tracking_hash(&self) -> u64 {\n+                let mut sub_hashes = BTreeMap::new();\n+                $({\n+                    hash_option!($opt,\n+                                 &self.$opt,\n+                                 &mut sub_hashes,\n+                                 [$dep_tracking_marker $($warn_val,\n+                                                         $warn_text,\n+                                                         self.error_format)*]);\n+                })*\n+                let mut hasher =  SipHasher::new();\n+                dep_tracking::stable_hash(sub_hashes,\n+                                          &mut hasher,\n+                                          self.error_format);\n+                hasher.finish()\n+            }\n+        }\n+    );\n+}\n+\n+// The top-level commandline options struct\n+//\n+// For each option, one has to specify how it behaves with regard to the\n+// dependency tracking system of incremental compilation. This is done via the\n+// square-bracketed directive after the field type. The options are:\n+//\n+// [TRACKED]\n+// A change in the given field will cause the compiler to completely clear the\n+// incremental compilation cache before proceeding.\n+//\n+// [UNTRACKED]\n+// Incremental compilation is not influenced by this option.\n+//\n+// [UNTRACKED_WITH_WARNING(val, warning)]\n+// The option is incompatible with incremental compilation in some way. If it\n+// has the value `val`, the string `warning` is emitted as a warning.\n+//\n+// If you add a new option to this struct or one of the sub-structs like\n+// CodegenOptions, think about how it influences incremental compilation. If in\n+// doubt, specify [TRACKED], which is always \"correct\" but might lead to\n+// unnecessary re-compilation.\n+top_level_options!(\n+    pub struct Options {\n+        // The crate config requested for the session, which may be combined\n+        // with additional crate configurations during the compile process\n+        crate_types: Vec<CrateType> [TRACKED],\n+        optimize: OptLevel [TRACKED],\n+        // Include the debug_assertions flag into dependency tracking, since it\n+        // can influence whether overflow checks are done or not.\n+        debug_assertions: bool [TRACKED],\n+        debuginfo: DebugInfoLevel [TRACKED],\n+        lint_opts: Vec<(String, lint::Level)> [TRACKED],\n+        lint_cap: Option<lint::Level> [TRACKED],\n+        describe_lints: bool [UNTRACKED],\n+        output_types: OutputTypes [TRACKED],\n+        // FIXME(mw): I'm not entirely sure if this can have any influence on\n+        //            incremental compilation apart from what is already handled\n+        //            by crate metadata hashes. Better track it.\n+        search_paths: SearchPaths [TRACKED],\n+        // FIXME(mw): Might not need to do dep-tracking for `libs`?\n+        libs: Vec<(String, cstore::NativeLibraryKind)> [TRACKED],\n+        // FIXME(mw): Might not need to do dep-tracking for `maybe_sysroot`?\n+        maybe_sysroot: Option<PathBuf> [TRACKED],","path":"src/librustc/session/config.rs","position":237,"original_position":237,"commit_id":"a61e3ff4ff2a8fa9317c0688dad3cb4c2ed67cc4","original_commit_id":"a61e3ff4ff2a8fa9317c0688dad3cb4c2ed67cc4","user":{"login":"michaelwoerister","id":1825894,"avatar_url":"https://avatars.githubusercontent.com/u/1825894?v=3","gravatar_id":"","url":"https://api.github.com/users/michaelwoerister","html_url":"https://github.com/michaelwoerister","followers_url":"https://api.github.com/users/michaelwoerister/followers","following_url":"https://api.github.com/users/michaelwoerister/following{/other_user}","gists_url":"https://api.github.com/users/michaelwoerister/gists{/gist_id}","starred_url":"https://api.github.com/users/michaelwoerister/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaelwoerister/subscriptions","organizations_url":"https://api.github.com/users/michaelwoerister/orgs","repos_url":"https://api.github.com/users/michaelwoerister/repos","events_url":"https://api.github.com/users/michaelwoerister/events{/privacy}","received_events_url":"https://api.github.com/users/michaelwoerister/received_events","type":"User","site_admin":false},"body":"There are a few methods in the `CStore` trait that don't take a `DefId`. We definitely should take another look.","created_at":"2016-08-09T18:16:50Z","updated_at":"2016-08-09T18:16:50Z","html_url":"https://github.com/rust-lang/rust/pull/35340#discussion_r74114599","pull_request_url":"https://api.github.com/repos/rust-lang/rust/pulls/35340","_links":{"self":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/comments/74114599"},"html":{"href":"https://github.com/rust-lang/rust/pull/35340#discussion_r74114599"},"pull_request":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/35340"}}},"pull_request":{"url":"https://api.github.com/repos/rust-lang/rust/pulls/35340","id":80161318,"html_url":"https://github.com/rust-lang/rust/pull/35340","diff_url":"https://github.com/rust-lang/rust/pull/35340.diff","patch_url":"https://github.com/rust-lang/rust/pull/35340.patch","issue_url":"https://api.github.com/repos/rust-lang/rust/issues/35340","number":35340,"state":"open","locked":false,"title":"Take commandline arguments into account for incr. comp.","user":{"login":"michaelwoerister","id":1825894,"avatar_url":"https://avatars.githubusercontent.com/u/1825894?v=3","gravatar_id":"","url":"https://api.github.com/users/michaelwoerister","html_url":"https://github.com/michaelwoerister","followers_url":"https://api.github.com/users/michaelwoerister/followers","following_url":"https://api.github.com/users/michaelwoerister/following{/other_user}","gists_url":"https://api.github.com/users/michaelwoerister/gists{/gist_id}","starred_url":"https://api.github.com/users/michaelwoerister/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaelwoerister/subscriptions","organizations_url":"https://api.github.com/users/michaelwoerister/orgs","repos_url":"https://api.github.com/users/michaelwoerister/repos","events_url":"https://api.github.com/users/michaelwoerister/events{/privacy}","received_events_url":"https://api.github.com/users/michaelwoerister/received_events","type":"User","site_admin":false},"body":"Implements the conservative strategy described in https://github.com/rust-lang/rust/issues/33727.\r\n\r\nFrom now one, every time a new commandline option is added, one has to specify if it influences the incremental compilation cache. I've tried to implement this as automatic as possible: One just has to added either the `[TRACKED]` or the `[UNTRACKED]` marker next to the field. The `Options`, `CodegenOptions`, and `DebuggingOptions` definitions in `session::config` show plenty of examples.\r\n\r\nThe PR removes some cruft from `session::config::Options`, mostly unnecessary copies of flags also present in `DebuggingOptions` or `CodeGenOptions` in the same struct.\r\n\r\nOne notable removal is the `cfg` field that contained the values passed via `--cfg` commandline arguments. I chose to remove it because (1) its content is only a subset of what later is stored in `hir::Crate::config` and it's pretty likely that reading the cfgs from `Options` would not be what you wanted, and (2) we could not incorporate it into the dep-tracking hash of the `Options` struct because of how the test framework works, leaving us with a piece of untracked but vital data.\r\n\r\nIt is now recommended (just as before) to access the crate config via the `krate()` method in the HIR map.\r\n\r\nBecause the `cfg` field is not present in the `Options` struct any more, some methods in the `CompilerCalls` trait now take the crate config as an explicit parameter -- which might constitute a breaking change for plugin authors.","created_at":"2016-08-04T22:35:46Z","updated_at":"2016-08-09T18:16:50Z","closed_at":null,"merged_at":null,"merge_commit_sha":"cafe254c8749c0085ca424129901f4c446ee261c","assignee":{"login":"nikomatsakis","id":155238,"avatar_url":"https://avatars.githubusercontent.com/u/155238?v=3","gravatar_id":"","url":"https://api.github.com/users/nikomatsakis","html_url":"https://github.com/nikomatsakis","followers_url":"https://api.github.com/users/nikomatsakis/followers","following_url":"https://api.github.com/users/nikomatsakis/following{/other_user}","gists_url":"https://api.github.com/users/nikomatsakis/gists{/gist_id}","starred_url":"https://api.github.com/users/nikomatsakis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nikomatsakis/subscriptions","organizations_url":"https://api.github.com/users/nikomatsakis/orgs","repos_url":"https://api.github.com/users/nikomatsakis/repos","events_url":"https://api.github.com/users/nikomatsakis/events{/privacy}","received_events_url":"https://api.github.com/users/nikomatsakis/received_events","type":"User","site_admin":false},"assignees":[{"login":"nikomatsakis","id":155238,"avatar_url":"https://avatars.githubusercontent.com/u/155238?v=3","gravatar_id":"","url":"https://api.github.com/users/nikomatsakis","html_url":"https://github.com/nikomatsakis","followers_url":"https://api.github.com/users/nikomatsakis/followers","following_url":"https://api.github.com/users/nikomatsakis/following{/other_user}","gists_url":"https://api.github.com/users/nikomatsakis/gists{/gist_id}","starred_url":"https://api.github.com/users/nikomatsakis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nikomatsakis/subscriptions","organizations_url":"https://api.github.com/users/nikomatsakis/orgs","repos_url":"https://api.github.com/users/nikomatsakis/repos","events_url":"https://api.github.com/users/nikomatsakis/events{/privacy}","received_events_url":"https://api.github.com/users/nikomatsakis/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/rust-lang/rust/pulls/35340/commits","review_comments_url":"https://api.github.com/repos/rust-lang/rust/pulls/35340/comments","review_comment_url":"https://api.github.com/repos/rust-lang/rust/pulls/comments{/number}","comments_url":"https://api.github.com/repos/rust-lang/rust/issues/35340/comments","statuses_url":"https://api.github.com/repos/rust-lang/rust/statuses/a61e3ff4ff2a8fa9317c0688dad3cb4c2ed67cc4","head":{"label":"michaelwoerister:incr-comp-cli-args","ref":"incr-comp-cli-args","sha":"a61e3ff4ff2a8fa9317c0688dad3cb4c2ed67cc4","user":{"login":"michaelwoerister","id":1825894,"avatar_url":"https://avatars.githubusercontent.com/u/1825894?v=3","gravatar_id":"","url":"https://api.github.com/users/michaelwoerister","html_url":"https://github.com/michaelwoerister","followers_url":"https://api.github.com/users/michaelwoerister/followers","following_url":"https://api.github.com/users/michaelwoerister/following{/other_user}","gists_url":"https://api.github.com/users/michaelwoerister/gists{/gist_id}","starred_url":"https://api.github.com/users/michaelwoerister/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaelwoerister/subscriptions","organizations_url":"https://api.github.com/users/michaelwoerister/orgs","repos_url":"https://api.github.com/users/michaelwoerister/repos","events_url":"https://api.github.com/users/michaelwoerister/events{/privacy}","received_events_url":"https://api.github.com/users/michaelwoerister/received_events","type":"User","site_admin":false},"repo":{"id":9431220,"name":"rust","full_name":"michaelwoerister/rust","owner":{"login":"michaelwoerister","id":1825894,"avatar_url":"https://avatars.githubusercontent.com/u/1825894?v=3","gravatar_id":"","url":"https://api.github.com/users/michaelwoerister","html_url":"https://github.com/michaelwoerister","followers_url":"https://api.github.com/users/michaelwoerister/followers","following_url":"https://api.github.com/users/michaelwoerister/following{/other_user}","gists_url":"https://api.github.com/users/michaelwoerister/gists{/gist_id}","starred_url":"https://api.github.com/users/michaelwoerister/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaelwoerister/subscriptions","organizations_url":"https://api.github.com/users/michaelwoerister/orgs","repos_url":"https://api.github.com/users/michaelwoerister/repos","events_url":"https://api.github.com/users/michaelwoerister/events{/privacy}","received_events_url":"https://api.github.com/users/michaelwoerister/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/michaelwoerister/rust","description":"a safe, concurrent, practical language","fork":true,"url":"https://api.github.com/repos/michaelwoerister/rust","forks_url":"https://api.github.com/repos/michaelwoerister/rust/forks","keys_url":"https://api.github.com/repos/michaelwoerister/rust/keys{/key_id}","collaborators_url":"https://api.github.com/repos/michaelwoerister/rust/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/michaelwoerister/rust/teams","hooks_url":"https://api.github.com/repos/michaelwoerister/rust/hooks","issue_events_url":"https://api.github.com/repos/michaelwoerister/rust/issues/events{/number}","events_url":"https://api.github.com/repos/michaelwoerister/rust/events","assignees_url":"https://api.github.com/repos/michaelwoerister/rust/assignees{/user}","branches_url":"https://api.github.com/repos/michaelwoerister/rust/branches{/branch}","tags_url":"https://api.github.com/repos/michaelwoerister/rust/tags","blobs_url":"https://api.github.com/repos/michaelwoerister/rust/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/michaelwoerister/rust/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/michaelwoerister/rust/git/refs{/sha}","trees_url":"https://api.github.com/repos/michaelwoerister/rust/git/trees{/sha}","statuses_url":"https://api.github.com/repos/michaelwoerister/rust/statuses/{sha}","languages_url":"https://api.github.com/repos/michaelwoerister/rust/languages","stargazers_url":"https://api.github.com/repos/michaelwoerister/rust/stargazers","contributors_url":"https://api.github.com/repos/michaelwoerister/rust/contributors","subscribers_url":"https://api.github.com/repos/michaelwoerister/rust/subscribers","subscription_url":"https://api.github.com/repos/michaelwoerister/rust/subscription","commits_url":"https://api.github.com/repos/michaelwoerister/rust/commits{/sha}","git_commits_url":"https://api.github.com/repos/michaelwoerister/rust/git/commits{/sha}","comments_url":"https://api.github.com/repos/michaelwoerister/rust/comments{/number}","issue_comment_url":"https://api.github.com/repos/michaelwoerister/rust/issues/comments{/number}","contents_url":"https://api.github.com/repos/michaelwoerister/rust/contents/{+path}","compare_url":"https://api.github.com/repos/michaelwoerister/rust/compare/{base}...{head}","merges_url":"https://api.github.com/repos/michaelwoerister/rust/merges","archive_url":"https://api.github.com/repos/michaelwoerister/rust/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/michaelwoerister/rust/downloads","issues_url":"https://api.github.com/repos/michaelwoerister/rust/issues{/number}","pulls_url":"https://api.github.com/repos/michaelwoerister/rust/pulls{/number}","milestones_url":"https://api.github.com/repos/michaelwoerister/rust/milestones{/number}","notifications_url":"https://api.github.com/repos/michaelwoerister/rust/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/michaelwoerister/rust/labels{/name}","releases_url":"https://api.github.com/repos/michaelwoerister/rust/releases{/id}","deployments_url":"https://api.github.com/repos/michaelwoerister/rust/deployments","created_at":"2013-04-14T15:57:02Z","updated_at":"2014-06-19T03:28:50Z","pushed_at":"2016-08-09T13:12:17Z","git_url":"git://github.com/michaelwoerister/rust.git","ssh_url":"git@github.com:michaelwoerister/rust.git","clone_url":"https://github.com/michaelwoerister/rust.git","svn_url":"https://github.com/michaelwoerister/rust","homepage":"http://www.rust-lang.org","size":293750,"stargazers_count":0,"watchers_count":0,"language":"Rust","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"rust-lang:master","ref":"master","sha":"c2b03f8ba9c3f2622ea9fa6e2453c57aa1f8e6ab","user":{"login":"rust-lang","id":5430905,"avatar_url":"https://avatars.githubusercontent.com/u/5430905?v=3","gravatar_id":"","url":"https://api.github.com/users/rust-lang","html_url":"https://github.com/rust-lang","followers_url":"https://api.github.com/users/rust-lang/followers","following_url":"https://api.github.com/users/rust-lang/following{/other_user}","gists_url":"https://api.github.com/users/rust-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/rust-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rust-lang/subscriptions","organizations_url":"https://api.github.com/users/rust-lang/orgs","repos_url":"https://api.github.com/users/rust-lang/repos","events_url":"https://api.github.com/users/rust-lang/events{/privacy}","received_events_url":"https://api.github.com/users/rust-lang/received_events","type":"Organization","site_admin":false},"repo":{"id":724712,"name":"rust","full_name":"rust-lang/rust","owner":{"login":"rust-lang","id":5430905,"avatar_url":"https://avatars.githubusercontent.com/u/5430905?v=3","gravatar_id":"","url":"https://api.github.com/users/rust-lang","html_url":"https://github.com/rust-lang","followers_url":"https://api.github.com/users/rust-lang/followers","following_url":"https://api.github.com/users/rust-lang/following{/other_user}","gists_url":"https://api.github.com/users/rust-lang/gists{/gist_id}","starred_url":"https://api.github.com/users/rust-lang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rust-lang/subscriptions","organizations_url":"https://api.github.com/users/rust-lang/orgs","repos_url":"https://api.github.com/users/rust-lang/repos","events_url":"https://api.github.com/users/rust-lang/events{/privacy}","received_events_url":"https://api.github.com/users/rust-lang/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/rust-lang/rust","description":"A safe, concurrent, practical language.","fork":false,"url":"https://api.github.com/repos/rust-lang/rust","forks_url":"https://api.github.com/repos/rust-lang/rust/forks","keys_url":"https://api.github.com/repos/rust-lang/rust/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rust-lang/rust/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rust-lang/rust/teams","hooks_url":"https://api.github.com/repos/rust-lang/rust/hooks","issue_events_url":"https://api.github.com/repos/rust-lang/rust/issues/events{/number}","events_url":"https://api.github.com/repos/rust-lang/rust/events","assignees_url":"https://api.github.com/repos/rust-lang/rust/assignees{/user}","branches_url":"https://api.github.com/repos/rust-lang/rust/branches{/branch}","tags_url":"https://api.github.com/repos/rust-lang/rust/tags","blobs_url":"https://api.github.com/repos/rust-lang/rust/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rust-lang/rust/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rust-lang/rust/git/refs{/sha}","trees_url":"https://api.github.com/repos/rust-lang/rust/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rust-lang/rust/statuses/{sha}","languages_url":"https://api.github.com/repos/rust-lang/rust/languages","stargazers_url":"https://api.github.com/repos/rust-lang/rust/stargazers","contributors_url":"https://api.github.com/repos/rust-lang/rust/contributors","subscribers_url":"https://api.github.com/repos/rust-lang/rust/subscribers","subscription_url":"https://api.github.com/repos/rust-lang/rust/subscription","commits_url":"https://api.github.com/repos/rust-lang/rust/commits{/sha}","git_commits_url":"https://api.github.com/repos/rust-lang/rust/git/commits{/sha}","comments_url":"https://api.github.com/repos/rust-lang/rust/comments{/number}","issue_comment_url":"https://api.github.com/repos/rust-lang/rust/issues/comments{/number}","contents_url":"https://api.github.com/repos/rust-lang/rust/contents/{+path}","compare_url":"https://api.github.com/repos/rust-lang/rust/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rust-lang/rust/merges","archive_url":"https://api.github.com/repos/rust-lang/rust/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rust-lang/rust/downloads","issues_url":"https://api.github.com/repos/rust-lang/rust/issues{/number}","pulls_url":"https://api.github.com/repos/rust-lang/rust/pulls{/number}","milestones_url":"https://api.github.com/repos/rust-lang/rust/milestones{/number}","notifications_url":"https://api.github.com/repos/rust-lang/rust/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rust-lang/rust/labels{/name}","releases_url":"https://api.github.com/repos/rust-lang/rust/releases{/id}","deployments_url":"https://api.github.com/repos/rust-lang/rust/deployments","created_at":"2010-06-16T20:39:03Z","updated_at":"2016-08-09T17:45:16Z","pushed_at":"2016-08-09T17:59:15Z","git_url":"git://github.com/rust-lang/rust.git","ssh_url":"git@github.com:rust-lang/rust.git","clone_url":"https://github.com/rust-lang/rust.git","svn_url":"https://github.com/rust-lang/rust","homepage":"https://www.rust-lang.org","size":514172,"stargazers_count":17845,"watchers_count":17845,"language":"Rust","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":3443,"mirror_url":null,"open_issues_count":2750,"forks":3443,"open_issues":2750,"watchers":17845,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/35340"},"html":{"href":"https://github.com/rust-lang/rust/pull/35340"},"issue":{"href":"https://api.github.com/repos/rust-lang/rust/issues/35340"},"comments":{"href":"https://api.github.com/repos/rust-lang/rust/issues/35340/comments"},"review_comments":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/35340/comments"},"review_comment":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/rust-lang/rust/pulls/35340/commits"},"statuses":{"href":"https://api.github.com/repos/rust-lang/rust/statuses/a61e3ff4ff2a8fa9317c0688dad3cb4c2ed67cc4"}}}}
{"actor":{"display_login":"michaelwoerister"}}