{"action":"created","comment":{"url":"https://api.github.com/repos/smudge202/compose/pulls/comments/47065124","id":47065124,"diff_hunk":"@@ -1,88 +1,88 @@\n-﻿using System;\r\n-using System.Collections.Concurrent;\r\n-using System.Linq;\r\n-using System.Reflection;\r\n-\r\n-namespace Compose\r\n-{\r\n-\tinternal sealed class ConcurrentTransitionManagerContainer : ITransitionManagerContainer\r\n-\t{\r\n-\t\tprivate readonly ConcurrentDictionary<Type, ConcurrentBag<object>> Managers\r\n-\t\t\t= new ConcurrentDictionary<Type, ConcurrentBag<object>>();\r\n-\t\tprivate static Type Helper = typeof(GenericHelper<>);\r\n-\r\n-\t\tprivate static class GenericHelper<T>\r\n-\t\t{\r\n-\t\t\tprivate static TypeInfo Disposable = typeof(IDisposable).GetTypeInfo();\r\n-\t\t\tpublic static void Restore(object untypedManager)\r\n-\t\t\t{\r\n-\t\t\t\tvar manager = untypedManager as IDynamicRegister<T>;\r\n-\t\t\t\tif (Disposable.IsAssignableFrom(manager.CurrentService.GetType().GetTypeInfo()))\r\n-\t\t\t\t\t((IDisposable)manager.CurrentService).Dispose();\r\n-\t\t\t\tmanager.CurrentService = manager.SnapshotService;\r\n-\t\t\t}\r\n-\r\n-\t\t\tpublic static void Snapshot(object untypedManager)\r\n-\t\t\t{\r\n-\t\t\t\tvar manager = untypedManager as IDynamicRegister<T>;\r\n-\t\t\t\tif (Disposable.IsAssignableFrom(manager.SnapshotService.GetType().GetTypeInfo()))\r\n-\t\t\t\t\t((IDisposable)manager.SnapshotService).Dispose();\r\n-\t\t\t\tmanager.SnapshotService = manager.CurrentService;\r\n-\t\t\t}\r\n-\t\t}\r\n-\r\n-\t\tpublic void Add<T>(IDynamicRegister<T> register)\r\n-\t\t{\r\n-\t\t\tvar managers = Managers.GetOrAdd(typeof(T), new ConcurrentBag<object>());\r\n-\t\t\tmanagers.Add(register);\r\n-\t\t}\r\n-\r\n-\t\tpublic void Restore()\r\n-\t\t{\r\n-\t\t\tforeach (var kvp in Managers)\r\n-\t\t\t\tRestore(kvp.Key, kvp.Value);\r\n-\t\t}\r\n-\r\n-\t\tprivate void Restore(Type serviceType, ConcurrentBag<object> managers)\r\n-\t\t{\r\n-\t\t\tvar restoredManagers = new ConcurrentBag<object>();\r\n-\t\t\tobject manager = null;\r\n-\t\t\twhile (!managers.IsEmpty)\r\n-\t\t\t\tif (managers.TryTake(out manager))\r\n-\t\t\t\t\trestoredManagers.Add(Restore(Helper.MakeGenericType(serviceType).GetTypeInfo(), manager));\r\n-\t\t\twhile (!restoredManagers.IsEmpty)\r\n-\t\t\t\tif (restoredManagers.TryTake(out manager))\r\n-\t\t\t\t\tmanagers.Add(manager);\r\n-\t\t}\r\n-\r\n-\t\tprivate object Restore(TypeInfo helper, object manager)\r\n-\t\t{\r\n-\t\t\thelper.DeclaredMethods.Single(x => x.Name == \"Restore\").Invoke(null, new[] { manager });\r\n-\t\t\treturn manager;\r\n-\t\t}\r\n-\r\n-\t\tpublic void Snapshot()\r\n-\t\t{\r\n-\t\t\tforeach (var kvp in Managers)\r\n-\t\t\t\tSnapshot(kvp.Key, kvp.Value);\r\n-\t\t}\r\n-\r\n-\t\tprivate void Snapshot(Type serviceType, ConcurrentBag<object> managers)\r\n-\t\t{\r\n-\t\t\tvar snapshottedManagers = new ConcurrentBag<object>();\r\n-\t\t\tobject manager = null;\r\n-\t\t\twhile (!managers.IsEmpty)\r\n-\t\t\t\tif (managers.TryTake(out manager))\r\n-\t\t\t\t\tsnapshottedManagers.Add(Snapshot(Helper.MakeGenericType(serviceType).GetTypeInfo(), manager));\r\n-\t\t\twhile (!snapshottedManagers.IsEmpty)\r\n-\t\t\t\tif (snapshottedManagers.TryTake(out manager))\r\n-\t\t\t\t\tmanagers.Add(manager);\r\n-\t\t}\r\n-\r\n-\t\tprivate object Snapshot(TypeInfo helper, object manager)\r\n-\t\t{\r\n-\t\t\thelper.DeclaredMethods.Single(x => x.Name == \"Snapshot\").Invoke(null, new[] { manager });\r\n-\t\t\treturn manager;\r\n-\t\t}\r\n-\t}\r\n-}\r\n+﻿using System;\n+using System.Collections.Concurrent;\n+using System.Linq;\n+using System.Reflection;\n+\n+namespace Compose\n+{\n+\tinternal sealed class ConcurrentTransitionManagerContainer : TransitionManagerContainer\n+\t{\n+\t\tprivate readonly ConcurrentDictionary<Type, ConcurrentBag<object>> Managers\n+\t\t\t= new ConcurrentDictionary<Type, ConcurrentBag<object>>();\n+\t\tprivate static readonly Type Helper = typeof(GenericHelper<>);\n+\n+\t\tprivate static class GenericHelper<T>\n+\t\t{\n+\t\t\tprivate static readonly TypeInfo Disposable = typeof(IDisposable).GetTypeInfo();\n+\t\t\tpublic static void Restore(object untypedManager)\n+\t\t\t{\n+\t\t\t\tvar manager = untypedManager as DynamicRegister<T>;\n+\t\t\t\tif (Disposable.IsAssignableFrom(manager.CurrentService.GetType().GetTypeInfo()))","path":"src/Compose/ConcurrentTransitionManagerContainer.cs","position":108,"original_position":108,"commit_id":"21164ae9907d9c1976d7f9cbd9364594687a66ba","original_commit_id":"21164ae9907d9c1976d7f9cbd9364594687a66ba","user":{"login":"danielcirket","id":6743309,"avatar_url":"https://avatars.githubusercontent.com/u/6743309?v=3","gravatar_id":"","url":"https://api.github.com/users/danielcirket","html_url":"https://github.com/danielcirket","followers_url":"https://api.github.com/users/danielcirket/followers","following_url":"https://api.github.com/users/danielcirket/following{/other_user}","gists_url":"https://api.github.com/users/danielcirket/gists{/gist_id}","starred_url":"https://api.github.com/users/danielcirket/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/danielcirket/subscriptions","organizations_url":"https://api.github.com/users/danielcirket/orgs","repos_url":"https://api.github.com/users/danielcirket/repos","events_url":"https://api.github.com/users/danielcirket/events{/privacy}","received_events_url":"https://api.github.com/users/danielcirket/received_events","type":"User","site_admin":false},"body":"Agree with Stu here, it's easier to just check it and make sure IMO","created_at":"2015-12-09T09:03:26Z","updated_at":"2015-12-09T09:03:26Z","html_url":"https://github.com/smudge202/compose/pull/104#discussion_r47065124","pull_request_url":"https://api.github.com/repos/smudge202/compose/pulls/104","_links":{"self":{"href":"https://api.github.com/repos/smudge202/compose/pulls/comments/47065124"},"html":{"href":"https://github.com/smudge202/compose/pull/104#discussion_r47065124"},"pull_request":{"href":"https://api.github.com/repos/smudge202/compose/pulls/104"}}},"pull_request":{"url":"https://api.github.com/repos/smudge202/compose/pulls/104","id":53045927,"html_url":"https://github.com/smudge202/compose/pull/104","diff_url":"https://github.com/smudge202/compose/pull/104.diff","patch_url":"https://github.com/smudge202/compose/pull/104.patch","issue_url":"https://api.github.com/repos/smudge202/compose/issues/104","number":104,"state":"open","locked":false,"title":"Feature/83 tertiary provider extensions","user":{"login":"smudge202","id":2247869,"avatar_url":"https://avatars.githubusercontent.com/u/2247869?v=3","gravatar_id":"","url":"https://api.github.com/users/smudge202","html_url":"https://github.com/smudge202","followers_url":"https://api.github.com/users/smudge202/followers","following_url":"https://api.github.com/users/smudge202/following{/other_user}","gists_url":"https://api.github.com/users/smudge202/gists{/gist_id}","starred_url":"https://api.github.com/users/smudge202/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/smudge202/subscriptions","organizations_url":"https://api.github.com/users/smudge202/orgs","repos_url":"https://api.github.com/users/smudge202/repos","events_url":"https://api.github.com/users/smudge202/events{/privacy}","received_events_url":"https://api.github.com/users/smudge202/received_events","type":"User","site_admin":false},"body":"At long last, Compose get's some (public) TLC. :relieved: :kissing_cat: \r\n\r\n>Sidenote: Some people are aware already, but for those that aren't... The company I'm working for are bound to `net40` currently, so we have a private port of the MS DI stack and Compose supporting `net40`. Compose has seen a lot of love internally, and @shaundodimead (if I understand correctly) has given the go ahead for certain types of OSS work, so expect a considerable API update and improvements in the coming weeks. (FML, just realised how hard this PR would be to back-port to our net40 libs).\r\n\r\nThe intent of this work was to address #83, which entailed a considerable adjustment to the dynamic creation, deference, and transition API. If you scan the commits you'll find at one stage that I deleted *everything* and started over.\r\n\r\nThere have been numerous improvements as a result of this, from some boyscouting and consolidation, to features such as removing our old _chicken vs egg_ issue whereby providers would have to be created multiple times (see lines 18, 21, 29, and 33 [here](https://github.com/smudge202/compose/blob/0dc85f5b26cab6cace2f2421b811be0dabbf90e8/src/Compose/ApplicationExtensions.cs)). In addition, assembly and type creation is now deferred until it's actually necessary.\r\n\r\nThe following needs to be completed for this PR to be collapsed, and I'm happy to buy a beer for anyone that can help:\r\n\r\n- [ ] **New ReadMe** - _I deleted the old README to guarantee that API changes are updated. Happy to use a majority of previous README so long as API changes are reflected._\r\n- [ ] **Samples** - _I'd like to see a NuGet.config added to a samples directory relative pathing to the artifacts, showing off some of the key features_.\r\n- [ ] **Snapshotting / Restore** - _The code that used to perform this functionality has been added back to the repository, however, without thinking about it too much, I suspect the old functionality doesn't match the current API._\r\n- [ ] **TESTS** - _We have the #77 issue regarding test cleanup. Given I deleted all the tests and brought only a few new tests back into the branch, now's as good a time as any to do this. I know, bad bad Smudge not TDD'ing; in my defence all new code did follow BDD which is the concept I want to follow going forward (no `InternalsVisibleTo` or cross compilation). Only look at public API behaviours_.\r\n- [ ] **TestAttributes** - _I don't honestly know where we stand on the attributes right now, @herecydev, but I'm pretty sure I tried to get them running against `1.0.0-rc1-update1` and didn't succeed. If you want us to forget about test attributes, we can, otherwise let me know what I need to do to get them back in here where they belong_. :wink: \r\n- [ ] **Code Review Changes** - _I suspect you guys will pick me up on all sorts of more \"trivial\" matters (fair dos), so they'll need sorting too_.\r\n- [ ] **Pre/Post Service Configuration** - _I removed this during my mass delete, it should be re-added  to `Application`_.\r\n- [ ] **Executable** - _Again, I removed this and it should be added back in. I don't think the Console stuff should be added back though, I plan to move bespoke applications to their own Repos (makes issues like #7 easier without introducing superfluous dependencies to core)_.\r\n- [ ] **Other missing features** - _I haven't intentionally dropped features beyond those listed above, so let me know if there's anything missing from this list_.\r\n\r\nCompose is currently blocking work on a private repository I was spending a lot of time in, so I'll try to be at hand and tackling this stuff quickly.\r\n\r\n> Note: If anyone has internal changes to push back to the repo, NOW is the time to do it!\r\n\r\n> Final Note: This is a WIP PR! I do not expect tests to pass as they are added, I'm somewhat surprised the current tests pass! I want this released by Christmas, but I won't gloss over anything.\r\n\r\n//cc @herecydev @sblackler @mattridgway @MystikalPooka @bengale @danielcirket (CC anyone else you think might be interested)","created_at":"2015-12-08T22:06:17Z","updated_at":"2015-12-09T09:03:26Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0f1795e0810b7357d4eb19def4d7a6de2831f96c","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/smudge202/compose/pulls/104/commits","review_comments_url":"https://api.github.com/repos/smudge202/compose/pulls/104/comments","review_comment_url":"https://api.github.com/repos/smudge202/compose/pulls/comments{/number}","comments_url":"https://api.github.com/repos/smudge202/compose/issues/104/comments","statuses_url":"https://api.github.com/repos/smudge202/compose/statuses/21164ae9907d9c1976d7f9cbd9364594687a66ba","head":{"label":"smudge202:feature/83-tertiary-provider-extensions","ref":"feature/83-tertiary-provider-extensions","sha":"21164ae9907d9c1976d7f9cbd9364594687a66ba","user":{"login":"smudge202","id":2247869,"avatar_url":"https://avatars.githubusercontent.com/u/2247869?v=3","gravatar_id":"","url":"https://api.github.com/users/smudge202","html_url":"https://github.com/smudge202","followers_url":"https://api.github.com/users/smudge202/followers","following_url":"https://api.github.com/users/smudge202/following{/other_user}","gists_url":"https://api.github.com/users/smudge202/gists{/gist_id}","starred_url":"https://api.github.com/users/smudge202/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/smudge202/subscriptions","organizations_url":"https://api.github.com/users/smudge202/orgs","repos_url":"https://api.github.com/users/smudge202/repos","events_url":"https://api.github.com/users/smudge202/events{/privacy}","received_events_url":"https://api.github.com/users/smudge202/received_events","type":"User","site_admin":false},"repo":{"id":30936737,"name":"compose","full_name":"smudge202/compose","owner":{"login":"smudge202","id":2247869,"avatar_url":"https://avatars.githubusercontent.com/u/2247869?v=3","gravatar_id":"","url":"https://api.github.com/users/smudge202","html_url":"https://github.com/smudge202","followers_url":"https://api.github.com/users/smudge202/followers","following_url":"https://api.github.com/users/smudge202/following{/other_user}","gists_url":"https://api.github.com/users/smudge202/gists{/gist_id}","starred_url":"https://api.github.com/users/smudge202/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/smudge202/subscriptions","organizations_url":"https://api.github.com/users/smudge202/orgs","repos_url":"https://api.github.com/users/smudge202/repos","events_url":"https://api.github.com/users/smudge202/events{/privacy}","received_events_url":"https://api.github.com/users/smudge202/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/smudge202/compose","description":"Lightweight framework to assist in application composition","fork":false,"url":"https://api.github.com/repos/smudge202/compose","forks_url":"https://api.github.com/repos/smudge202/compose/forks","keys_url":"https://api.github.com/repos/smudge202/compose/keys{/key_id}","collaborators_url":"https://api.github.com/repos/smudge202/compose/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/smudge202/compose/teams","hooks_url":"https://api.github.com/repos/smudge202/compose/hooks","issue_events_url":"https://api.github.com/repos/smudge202/compose/issues/events{/number}","events_url":"https://api.github.com/repos/smudge202/compose/events","assignees_url":"https://api.github.com/repos/smudge202/compose/assignees{/user}","branches_url":"https://api.github.com/repos/smudge202/compose/branches{/branch}","tags_url":"https://api.github.com/repos/smudge202/compose/tags","blobs_url":"https://api.github.com/repos/smudge202/compose/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/smudge202/compose/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/smudge202/compose/git/refs{/sha}","trees_url":"https://api.github.com/repos/smudge202/compose/git/trees{/sha}","statuses_url":"https://api.github.com/repos/smudge202/compose/statuses/{sha}","languages_url":"https://api.github.com/repos/smudge202/compose/languages","stargazers_url":"https://api.github.com/repos/smudge202/compose/stargazers","contributors_url":"https://api.github.com/repos/smudge202/compose/contributors","subscribers_url":"https://api.github.com/repos/smudge202/compose/subscribers","subscription_url":"https://api.github.com/repos/smudge202/compose/subscription","commits_url":"https://api.github.com/repos/smudge202/compose/commits{/sha}","git_commits_url":"https://api.github.com/repos/smudge202/compose/git/commits{/sha}","comments_url":"https://api.github.com/repos/smudge202/compose/comments{/number}","issue_comment_url":"https://api.github.com/repos/smudge202/compose/issues/comments{/number}","contents_url":"https://api.github.com/repos/smudge202/compose/contents/{+path}","compare_url":"https://api.github.com/repos/smudge202/compose/compare/{base}...{head}","merges_url":"https://api.github.com/repos/smudge202/compose/merges","archive_url":"https://api.github.com/repos/smudge202/compose/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/smudge202/compose/downloads","issues_url":"https://api.github.com/repos/smudge202/compose/issues{/number}","pulls_url":"https://api.github.com/repos/smudge202/compose/pulls{/number}","milestones_url":"https://api.github.com/repos/smudge202/compose/milestones{/number}","notifications_url":"https://api.github.com/repos/smudge202/compose/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/smudge202/compose/labels{/name}","releases_url":"https://api.github.com/repos/smudge202/compose/releases{/id}","created_at":"2015-02-17T20:41:43Z","updated_at":"2015-10-26T08:37:05Z","pushed_at":"2015-12-08T22:06:18Z","git_url":"git://github.com/smudge202/compose.git","ssh_url":"git@github.com:smudge202/compose.git","clone_url":"https://github.com/smudge202/compose.git","svn_url":"https://github.com/smudge202/compose","homepage":"","size":489,"stargazers_count":6,"watchers_count":6,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":16,"forks":2,"open_issues":16,"watchers":6,"default_branch":"dev"}},"base":{"label":"smudge202:dev","ref":"dev","sha":"0dc85f5b26cab6cace2f2421b811be0dabbf90e8","user":{"login":"smudge202","id":2247869,"avatar_url":"https://avatars.githubusercontent.com/u/2247869?v=3","gravatar_id":"","url":"https://api.github.com/users/smudge202","html_url":"https://github.com/smudge202","followers_url":"https://api.github.com/users/smudge202/followers","following_url":"https://api.github.com/users/smudge202/following{/other_user}","gists_url":"https://api.github.com/users/smudge202/gists{/gist_id}","starred_url":"https://api.github.com/users/smudge202/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/smudge202/subscriptions","organizations_url":"https://api.github.com/users/smudge202/orgs","repos_url":"https://api.github.com/users/smudge202/repos","events_url":"https://api.github.com/users/smudge202/events{/privacy}","received_events_url":"https://api.github.com/users/smudge202/received_events","type":"User","site_admin":false},"repo":{"id":30936737,"name":"compose","full_name":"smudge202/compose","owner":{"login":"smudge202","id":2247869,"avatar_url":"https://avatars.githubusercontent.com/u/2247869?v=3","gravatar_id":"","url":"https://api.github.com/users/smudge202","html_url":"https://github.com/smudge202","followers_url":"https://api.github.com/users/smudge202/followers","following_url":"https://api.github.com/users/smudge202/following{/other_user}","gists_url":"https://api.github.com/users/smudge202/gists{/gist_id}","starred_url":"https://api.github.com/users/smudge202/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/smudge202/subscriptions","organizations_url":"https://api.github.com/users/smudge202/orgs","repos_url":"https://api.github.com/users/smudge202/repos","events_url":"https://api.github.com/users/smudge202/events{/privacy}","received_events_url":"https://api.github.com/users/smudge202/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/smudge202/compose","description":"Lightweight framework to assist in application composition","fork":false,"url":"https://api.github.com/repos/smudge202/compose","forks_url":"https://api.github.com/repos/smudge202/compose/forks","keys_url":"https://api.github.com/repos/smudge202/compose/keys{/key_id}","collaborators_url":"https://api.github.com/repos/smudge202/compose/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/smudge202/compose/teams","hooks_url":"https://api.github.com/repos/smudge202/compose/hooks","issue_events_url":"https://api.github.com/repos/smudge202/compose/issues/events{/number}","events_url":"https://api.github.com/repos/smudge202/compose/events","assignees_url":"https://api.github.com/repos/smudge202/compose/assignees{/user}","branches_url":"https://api.github.com/repos/smudge202/compose/branches{/branch}","tags_url":"https://api.github.com/repos/smudge202/compose/tags","blobs_url":"https://api.github.com/repos/smudge202/compose/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/smudge202/compose/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/smudge202/compose/git/refs{/sha}","trees_url":"https://api.github.com/repos/smudge202/compose/git/trees{/sha}","statuses_url":"https://api.github.com/repos/smudge202/compose/statuses/{sha}","languages_url":"https://api.github.com/repos/smudge202/compose/languages","stargazers_url":"https://api.github.com/repos/smudge202/compose/stargazers","contributors_url":"https://api.github.com/repos/smudge202/compose/contributors","subscribers_url":"https://api.github.com/repos/smudge202/compose/subscribers","subscription_url":"https://api.github.com/repos/smudge202/compose/subscription","commits_url":"https://api.github.com/repos/smudge202/compose/commits{/sha}","git_commits_url":"https://api.github.com/repos/smudge202/compose/git/commits{/sha}","comments_url":"https://api.github.com/repos/smudge202/compose/comments{/number}","issue_comment_url":"https://api.github.com/repos/smudge202/compose/issues/comments{/number}","contents_url":"https://api.github.com/repos/smudge202/compose/contents/{+path}","compare_url":"https://api.github.com/repos/smudge202/compose/compare/{base}...{head}","merges_url":"https://api.github.com/repos/smudge202/compose/merges","archive_url":"https://api.github.com/repos/smudge202/compose/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/smudge202/compose/downloads","issues_url":"https://api.github.com/repos/smudge202/compose/issues{/number}","pulls_url":"https://api.github.com/repos/smudge202/compose/pulls{/number}","milestones_url":"https://api.github.com/repos/smudge202/compose/milestones{/number}","notifications_url":"https://api.github.com/repos/smudge202/compose/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/smudge202/compose/labels{/name}","releases_url":"https://api.github.com/repos/smudge202/compose/releases{/id}","created_at":"2015-02-17T20:41:43Z","updated_at":"2015-10-26T08:37:05Z","pushed_at":"2015-12-08T22:06:18Z","git_url":"git://github.com/smudge202/compose.git","ssh_url":"git@github.com:smudge202/compose.git","clone_url":"https://github.com/smudge202/compose.git","svn_url":"https://github.com/smudge202/compose","homepage":"","size":489,"stargazers_count":6,"watchers_count":6,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":16,"forks":2,"open_issues":16,"watchers":6,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/smudge202/compose/pulls/104"},"html":{"href":"https://github.com/smudge202/compose/pull/104"},"issue":{"href":"https://api.github.com/repos/smudge202/compose/issues/104"},"comments":{"href":"https://api.github.com/repos/smudge202/compose/issues/104/comments"},"review_comments":{"href":"https://api.github.com/repos/smudge202/compose/pulls/104/comments"},"review_comment":{"href":"https://api.github.com/repos/smudge202/compose/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/smudge202/compose/pulls/104/commits"},"statuses":{"href":"https://api.github.com/repos/smudge202/compose/statuses/21164ae9907d9c1976d7f9cbd9364594687a66ba"}}}}