{"action":"created","comment":{"url":"https://api.github.com/repos/coala-analyzer/cEPs/pulls/comments/72086096","id":72086096,"diff_hunk":"@@ -0,0 +1,368 @@\n+# Next Gen Bear Design\n+\n+| Metadata     |                                         |\n+| ------------ |-----------------------------------------|\n+| cEP          | 2                                       |\n+| Version      | 0.1                                     |\n+| Title        | Next gen bear design                    |\n+| Authors      | Udayan Tandon <udayan12167@iiitd.ac.in> |\n+| Status       | Proposed                                |\n+| Type         | Process                                 |\n+\n+# Abstract\n+\n+This document describes how the next generation bears will be designed and\n+implemented.\n+\n+This cEP describes a new implementation of bears in coala which should make\n+ them simpler and make their design more intuitive and better.\n+\n+# Introduction\n+\n+Currently the bear design is clunky and bad. The current design makes global\n+bears dependant on local bears through it's queuing mechanism. It uses\n+communication signals over a queue to indicate that global bears are done with\n+their execution and local bears can begin. The queueing mechanism doesn't work\n+very well as it sometimes has synchronization problems. Also if local bears\n+fail to run it stalls the global bears. Also we have a permanent logger thread.\n+An extra logger thread consumes time and resources of the system which we can\n+avoid.\n+\n+The new proposal aims to eliminate the use of the queuing control signals.\n+Utilising asynchronous I/O and process pool to generate results from  the\n+bears.No longer will the local bears be dependent on global bears to finish.\n+The logging will also be handled by the main thread itself instead of\n+utilising an extra thread.\n+\n+# Proposed Change\n+\n+Here is the detailed implementation stepwise:\n+\n+1. A `ProcessPoolExecutor` is created with the maximum number of processes\n+your CPU can run in parallel.\n+2. We proceed with getting an asynchronous event loop. This asynchronous event\n+loop creates `Concurrent.Futures` for tasks and schedules them to the process\n+pool.\n+3. Each task is given a callback when it has a result ready. This callback is responsible for processing the result accordingly.\n+3. The `Bear` class will get two new methods. `execute_task()` and\n+`generate_tasks()`.\n+    * The `generate_tasks()` is resposible for generating the correct\n+    arguments for the upcoming tasks.\n+    * The `execute_task()` method is scheduled by the event loop to the\n+    process pool using the arguments from the `generate_tasks()` method.\n+3. Each bear will generate the following type of tasks:\n+    * Global bears fire tasks that process all files.\n+    * Local bears fire tasks for each individual file.\n+    * Arbitrary tasks such as dependency bears or other tasks are also\n+    possible.\n+4. A bear that has dependencies will only be scheduled to the process pool once all its dependencies have been resolved. It's done in the following way:\n+    * It's checked if the bear has some dependencies.\n+    * If they haven't been resolved the bear is not scheduled.\n+    * As soon as the dependencies are resolved for a bear it is removed from the dependency dictionary and scheduled to the `ProcessPoolExecutor`.\n+5. A special purpose `Dependencies` class will be introduced to do the above\n+mentioned task. This will be responsible for keeping track of dependencies.\n+Whenever a bear completes it will be removed from the dependency class.\n+6. When all the tasks are done the event loop is stopped and closed.\n+# The File Proxy\n+\n+With the new bear design we are also moving to a new wrapper object to wrap\n+every file. This object will also contain some metadata such as the filename\n+of the file. The file proxy is an object that contains properties that are\n+cached and passed around processes.\n+\n+What it will cache:\n+    * The filename, this is the starting point for every other attribute.\n+    * The content of the file as a string.\n+    * The content of the file, line-splitted\n+    * It can also cache other things about files as and when required.\n+\n+The file proxy tries to load from file using the filename if no other cached\n+property is already loaded.\n+\n+A prototype of the file proxy:\n+\n+```python\n+from coala_utils.decorators import generate_eq\n+\n+\n+@generate_eq(\"filename\")\n+class FileProxy:\n+    def __init__(self, filename):\n+        self.filename = filename\n+        self.lines = []\n+        self.content = \"\"\n+        self.load()\n+\n+    def __iter__(self):\n+        return iter(self.lines)\n+\n+    def load(self):\n+        with open(self.filename) as filehandle:\n+            self.content = filehandle.read()\n+            self.lines = self.content.splitlines(True)\n+\n+    def __hash__(self):\n+        return hash(self.filename)\n+```\n+\n+# Dependency Tracking\n+\n+A new class will be responsible for keeping track of the dependencies of different bear and it will work in the following manner:\n+    * Each bear will add it's dependencies to this tracker class.\n+    * Whenever a bear completes it's execution the `resolve()` method of the\n+    new class will be called with this bear as an argument.\n+    * This would execute the marking of this bear as complete in the\n+    dependency tracker.\n+    * Once the marking is complete the tracker returns all bears which have no\n+    dependencies remaining as pending, so that their tasks can be scheduled to\n+    the process pool.\n+\n+Here is a prototype:\n+\n+```python\n+from collections import defaultdict\n+\n+\n+class Dependencies:\n+    def __init__(self):\n+        self.dependency_dict = defaultdict(list)\n+        self.dependency_set = set()\n+\n+    def _add_dependency(self, bear_instance, dependency):\n+        self.dependency_dict[bear_instance].append(dependency)\n+        self.dependency_set.add(dependency)\n+\n+    def add_bear_dependencies(self, bear_instance):\n+        \"\"\"\n+        Add all dependencies of a bear to the dependency_set() and dependency_dictionary.\n+\n+        :param bear_instance: The instance of the bear to whose dependencies\n+                              to add.\n+        \"\"\"\n+        for bear in bear_instance.BEAR_DEPS:\n+            self._add_dependency(bear_instance, bear)\n+\n+    def resolve(self, bear_instance):\n+        \"\"\"\n+        When a bear completes this method is called with the instance of that\n+        bear. The method deletes this bear from the list of dependencies of\n+        each bear in the dependency dictionary. It returns the bears which\n+        have all of it's dependencies resolved.\n+\n+        :param bear_instance: The instance of the bear.\n+        \"\"\"\n+        return_bears = []\n+        if bear_instance.__class__ in self.dependency_set:\n+            for bear in self.dependency_dict:\n+                if bear_instance.__class__ in self.dependency_dict[bear]:\n+                    self.dependency_dict[bear].remove(bear_instance.__class__)\n+                    if not self.dependency_dict[bear]:\n+                        return_bears.append(bear)\n+        for bear in return_bears:\n+            del self.dependency_dict[bear]\n+        return return_bears\n+```\n+\n+# A Prototype\n+\n+A rough look at how the new local bear class implementation will look:\n+\n+```python\n+class LocalBear:\n+    def __init__(self, section, result_queue, file_set):\n+        \"\"\"\n+        Constructs a new bear.\n+\n+        :param section:      The section object where bear settings are\n+                             contained.\n+        :param result_queue: The queue object for messages. Can be ``None``.\n+        :param file_set:     A set of FileProxy objects.\n+        \"\"\"\n+        self.section = section\n+        self.result_queue = result_queue\n+        self.file_set = file_set\n+\n+        # May raise RuntimeError so bear doesn't get executed on invalid params\n+        self.kwargs = get_kwargs_for_function(self.run, section)\n+\n+    def execute_task(self, task, **kwargs):\n+        \"\"\"\n+        This method is responsible for getting results from the\n+        analysis routines and populating the result queue.\n+        \"\"\"\n+        return list(self.analyze(task, **self.kwargs))\n+\n+    def analyze(self,","path":"cEP-0002.md","position":229,"original_position":195,"commit_id":"95c4b762dd41f6eba6ac3f37a4be1565837821c8","original_commit_id":"3c785994f74390541e45b6e18b0b590dd711c62c","user":{"login":"Makman2","id":6023916,"avatar_url":"https://avatars.githubusercontent.com/u/6023916?v=3","gravatar_id":"","url":"https://api.github.com/users/Makman2","html_url":"https://github.com/Makman2","followers_url":"https://api.github.com/users/Makman2/followers","following_url":"https://api.github.com/users/Makman2/following{/other_user}","gists_url":"https://api.github.com/users/Makman2/gists{/gist_id}","starred_url":"https://api.github.com/users/Makman2/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Makman2/subscriptions","organizations_url":"https://api.github.com/users/Makman2/orgs","repos_url":"https://api.github.com/users/Makman2/repos","events_url":"https://api.github.com/users/Makman2/events{/privacy}","received_events_url":"https://api.github.com/users/Makman2/received_events","type":"User","site_admin":false},"body":"yeah I like the name also, alright just wanted to ask :)","created_at":"2016-07-25T15:30:50Z","updated_at":"2016-07-25T15:30:50Z","html_url":"https://github.com/coala-analyzer/cEPs/pull/7#discussion_r72086096","pull_request_url":"https://api.github.com/repos/coala-analyzer/cEPs/pulls/7","_links":{"self":{"href":"https://api.github.com/repos/coala-analyzer/cEPs/pulls/comments/72086096"},"html":{"href":"https://github.com/coala-analyzer/cEPs/pull/7#discussion_r72086096"},"pull_request":{"href":"https://api.github.com/repos/coala-analyzer/cEPs/pulls/7"}}},"pull_request":{"url":"https://api.github.com/repos/coala-analyzer/cEPs/pulls/7","id":72636696,"html_url":"https://github.com/coala-analyzer/cEPs/pull/7","diff_url":"https://github.com/coala-analyzer/cEPs/pull/7.diff","patch_url":"https://github.com/coala-analyzer/cEPs/pull/7.patch","issue_url":"https://api.github.com/repos/coala-analyzer/cEPs/issues/7","number":7,"state":"open","locked":false,"title":"cEP-2: Next generation bear design","user":{"login":"Udayan12167","id":6421568,"avatar_url":"https://avatars.githubusercontent.com/u/6421568?v=3","gravatar_id":"","url":"https://api.github.com/users/Udayan12167","html_url":"https://github.com/Udayan12167","followers_url":"https://api.github.com/users/Udayan12167/followers","following_url":"https://api.github.com/users/Udayan12167/following{/other_user}","gists_url":"https://api.github.com/users/Udayan12167/gists{/gist_id}","starred_url":"https://api.github.com/users/Udayan12167/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Udayan12167/subscriptions","organizations_url":"https://api.github.com/users/Udayan12167/orgs","repos_url":"https://api.github.com/users/Udayan12167/repos","events_url":"https://api.github.com/users/Udayan12167/events{/privacy}","received_events_url":"https://api.github.com/users/Udayan12167/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-06-05T18:35:04Z","updated_at":"2016-07-25T15:30:51Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7c688ade1b0d6f3b0ab570e49d1893ccb0720dfa","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/coala-analyzer/cEPs/pulls/7/commits","review_comments_url":"https://api.github.com/repos/coala-analyzer/cEPs/pulls/7/comments","review_comment_url":"https://api.github.com/repos/coala-analyzer/cEPs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/coala-analyzer/cEPs/issues/7/comments","statuses_url":"https://api.github.com/repos/coala-analyzer/cEPs/statuses/95c4b762dd41f6eba6ac3f37a4be1565837821c8","head":{"label":"coala-analyzer:cEP2","ref":"cEP2","sha":"95c4b762dd41f6eba6ac3f37a4be1565837821c8","user":{"login":"coala-analyzer","id":10620750,"avatar_url":"https://avatars.githubusercontent.com/u/10620750?v=3","gravatar_id":"","url":"https://api.github.com/users/coala-analyzer","html_url":"https://github.com/coala-analyzer","followers_url":"https://api.github.com/users/coala-analyzer/followers","following_url":"https://api.github.com/users/coala-analyzer/following{/other_user}","gists_url":"https://api.github.com/users/coala-analyzer/gists{/gist_id}","starred_url":"https://api.github.com/users/coala-analyzer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/coala-analyzer/subscriptions","organizations_url":"https://api.github.com/users/coala-analyzer/orgs","repos_url":"https://api.github.com/users/coala-analyzer/repos","events_url":"https://api.github.com/users/coala-analyzer/events{/privacy}","received_events_url":"https://api.github.com/users/coala-analyzer/received_events","type":"Organization","site_admin":false},"repo":{"id":60130869,"name":"cEPs","full_name":"coala-analyzer/cEPs","owner":{"login":"coala-analyzer","id":10620750,"avatar_url":"https://avatars.githubusercontent.com/u/10620750?v=3","gravatar_id":"","url":"https://api.github.com/users/coala-analyzer","html_url":"https://github.com/coala-analyzer","followers_url":"https://api.github.com/users/coala-analyzer/followers","following_url":"https://api.github.com/users/coala-analyzer/following{/other_user}","gists_url":"https://api.github.com/users/coala-analyzer/gists{/gist_id}","starred_url":"https://api.github.com/users/coala-analyzer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/coala-analyzer/subscriptions","organizations_url":"https://api.github.com/users/coala-analyzer/orgs","repos_url":"https://api.github.com/users/coala-analyzer/repos","events_url":"https://api.github.com/users/coala-analyzer/events{/privacy}","received_events_url":"https://api.github.com/users/coala-analyzer/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/coala-analyzer/cEPs","description":"coala Enhancement Proposals","fork":false,"url":"https://api.github.com/repos/coala-analyzer/cEPs","forks_url":"https://api.github.com/repos/coala-analyzer/cEPs/forks","keys_url":"https://api.github.com/repos/coala-analyzer/cEPs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/coala-analyzer/cEPs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/coala-analyzer/cEPs/teams","hooks_url":"https://api.github.com/repos/coala-analyzer/cEPs/hooks","issue_events_url":"https://api.github.com/repos/coala-analyzer/cEPs/issues/events{/number}","events_url":"https://api.github.com/repos/coala-analyzer/cEPs/events","assignees_url":"https://api.github.com/repos/coala-analyzer/cEPs/assignees{/user}","branches_url":"https://api.github.com/repos/coala-analyzer/cEPs/branches{/branch}","tags_url":"https://api.github.com/repos/coala-analyzer/cEPs/tags","blobs_url":"https://api.github.com/repos/coala-analyzer/cEPs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/coala-analyzer/cEPs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/coala-analyzer/cEPs/git/refs{/sha}","trees_url":"https://api.github.com/repos/coala-analyzer/cEPs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/coala-analyzer/cEPs/statuses/{sha}","languages_url":"https://api.github.com/repos/coala-analyzer/cEPs/languages","stargazers_url":"https://api.github.com/repos/coala-analyzer/cEPs/stargazers","contributors_url":"https://api.github.com/repos/coala-analyzer/cEPs/contributors","subscribers_url":"https://api.github.com/repos/coala-analyzer/cEPs/subscribers","subscription_url":"https://api.github.com/repos/coala-analyzer/cEPs/subscription","commits_url":"https://api.github.com/repos/coala-analyzer/cEPs/commits{/sha}","git_commits_url":"https://api.github.com/repos/coala-analyzer/cEPs/git/commits{/sha}","comments_url":"https://api.github.com/repos/coala-analyzer/cEPs/comments{/number}","issue_comment_url":"https://api.github.com/repos/coala-analyzer/cEPs/issues/comments{/number}","contents_url":"https://api.github.com/repos/coala-analyzer/cEPs/contents/{+path}","compare_url":"https://api.github.com/repos/coala-analyzer/cEPs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/coala-analyzer/cEPs/merges","archive_url":"https://api.github.com/repos/coala-analyzer/cEPs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/coala-analyzer/cEPs/downloads","issues_url":"https://api.github.com/repos/coala-analyzer/cEPs/issues{/number}","pulls_url":"https://api.github.com/repos/coala-analyzer/cEPs/pulls{/number}","milestones_url":"https://api.github.com/repos/coala-analyzer/cEPs/milestones{/number}","notifications_url":"https://api.github.com/repos/coala-analyzer/cEPs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/coala-analyzer/cEPs/labels{/name}","releases_url":"https://api.github.com/repos/coala-analyzer/cEPs/releases{/id}","deployments_url":"https://api.github.com/repos/coala-analyzer/cEPs/deployments","created_at":"2016-05-31T23:37:51Z","updated_at":"2016-07-24T22:06:22Z","pushed_at":"2016-07-25T10:23:41Z","git_url":"git://github.com/coala-analyzer/cEPs.git","ssh_url":"git@github.com:coala-analyzer/cEPs.git","clone_url":"https://github.com/coala-analyzer/cEPs.git","svn_url":"https://github.com/coala-analyzer/cEPs","homepage":null,"size":13,"stargazers_count":1,"watchers_count":1,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":6,"forks":1,"open_issues":6,"watchers":1,"default_branch":"master"}},"base":{"label":"coala-analyzer:master","ref":"master","sha":"032cbf20e8fea372c22b1c1ab2085194333a3f44","user":{"login":"coala-analyzer","id":10620750,"avatar_url":"https://avatars.githubusercontent.com/u/10620750?v=3","gravatar_id":"","url":"https://api.github.com/users/coala-analyzer","html_url":"https://github.com/coala-analyzer","followers_url":"https://api.github.com/users/coala-analyzer/followers","following_url":"https://api.github.com/users/coala-analyzer/following{/other_user}","gists_url":"https://api.github.com/users/coala-analyzer/gists{/gist_id}","starred_url":"https://api.github.com/users/coala-analyzer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/coala-analyzer/subscriptions","organizations_url":"https://api.github.com/users/coala-analyzer/orgs","repos_url":"https://api.github.com/users/coala-analyzer/repos","events_url":"https://api.github.com/users/coala-analyzer/events{/privacy}","received_events_url":"https://api.github.com/users/coala-analyzer/received_events","type":"Organization","site_admin":false},"repo":{"id":60130869,"name":"cEPs","full_name":"coala-analyzer/cEPs","owner":{"login":"coala-analyzer","id":10620750,"avatar_url":"https://avatars.githubusercontent.com/u/10620750?v=3","gravatar_id":"","url":"https://api.github.com/users/coala-analyzer","html_url":"https://github.com/coala-analyzer","followers_url":"https://api.github.com/users/coala-analyzer/followers","following_url":"https://api.github.com/users/coala-analyzer/following{/other_user}","gists_url":"https://api.github.com/users/coala-analyzer/gists{/gist_id}","starred_url":"https://api.github.com/users/coala-analyzer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/coala-analyzer/subscriptions","organizations_url":"https://api.github.com/users/coala-analyzer/orgs","repos_url":"https://api.github.com/users/coala-analyzer/repos","events_url":"https://api.github.com/users/coala-analyzer/events{/privacy}","received_events_url":"https://api.github.com/users/coala-analyzer/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/coala-analyzer/cEPs","description":"coala Enhancement Proposals","fork":false,"url":"https://api.github.com/repos/coala-analyzer/cEPs","forks_url":"https://api.github.com/repos/coala-analyzer/cEPs/forks","keys_url":"https://api.github.com/repos/coala-analyzer/cEPs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/coala-analyzer/cEPs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/coala-analyzer/cEPs/teams","hooks_url":"https://api.github.com/repos/coala-analyzer/cEPs/hooks","issue_events_url":"https://api.github.com/repos/coala-analyzer/cEPs/issues/events{/number}","events_url":"https://api.github.com/repos/coala-analyzer/cEPs/events","assignees_url":"https://api.github.com/repos/coala-analyzer/cEPs/assignees{/user}","branches_url":"https://api.github.com/repos/coala-analyzer/cEPs/branches{/branch}","tags_url":"https://api.github.com/repos/coala-analyzer/cEPs/tags","blobs_url":"https://api.github.com/repos/coala-analyzer/cEPs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/coala-analyzer/cEPs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/coala-analyzer/cEPs/git/refs{/sha}","trees_url":"https://api.github.com/repos/coala-analyzer/cEPs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/coala-analyzer/cEPs/statuses/{sha}","languages_url":"https://api.github.com/repos/coala-analyzer/cEPs/languages","stargazers_url":"https://api.github.com/repos/coala-analyzer/cEPs/stargazers","contributors_url":"https://api.github.com/repos/coala-analyzer/cEPs/contributors","subscribers_url":"https://api.github.com/repos/coala-analyzer/cEPs/subscribers","subscription_url":"https://api.github.com/repos/coala-analyzer/cEPs/subscription","commits_url":"https://api.github.com/repos/coala-analyzer/cEPs/commits{/sha}","git_commits_url":"https://api.github.com/repos/coala-analyzer/cEPs/git/commits{/sha}","comments_url":"https://api.github.com/repos/coala-analyzer/cEPs/comments{/number}","issue_comment_url":"https://api.github.com/repos/coala-analyzer/cEPs/issues/comments{/number}","contents_url":"https://api.github.com/repos/coala-analyzer/cEPs/contents/{+path}","compare_url":"https://api.github.com/repos/coala-analyzer/cEPs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/coala-analyzer/cEPs/merges","archive_url":"https://api.github.com/repos/coala-analyzer/cEPs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/coala-analyzer/cEPs/downloads","issues_url":"https://api.github.com/repos/coala-analyzer/cEPs/issues{/number}","pulls_url":"https://api.github.com/repos/coala-analyzer/cEPs/pulls{/number}","milestones_url":"https://api.github.com/repos/coala-analyzer/cEPs/milestones{/number}","notifications_url":"https://api.github.com/repos/coala-analyzer/cEPs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/coala-analyzer/cEPs/labels{/name}","releases_url":"https://api.github.com/repos/coala-analyzer/cEPs/releases{/id}","deployments_url":"https://api.github.com/repos/coala-analyzer/cEPs/deployments","created_at":"2016-05-31T23:37:51Z","updated_at":"2016-07-24T22:06:22Z","pushed_at":"2016-07-25T10:23:41Z","git_url":"git://github.com/coala-analyzer/cEPs.git","ssh_url":"git@github.com:coala-analyzer/cEPs.git","clone_url":"https://github.com/coala-analyzer/cEPs.git","svn_url":"https://github.com/coala-analyzer/cEPs","homepage":null,"size":13,"stargazers_count":1,"watchers_count":1,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":6,"forks":1,"open_issues":6,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/coala-analyzer/cEPs/pulls/7"},"html":{"href":"https://github.com/coala-analyzer/cEPs/pull/7"},"issue":{"href":"https://api.github.com/repos/coala-analyzer/cEPs/issues/7"},"comments":{"href":"https://api.github.com/repos/coala-analyzer/cEPs/issues/7/comments"},"review_comments":{"href":"https://api.github.com/repos/coala-analyzer/cEPs/pulls/7/comments"},"review_comment":{"href":"https://api.github.com/repos/coala-analyzer/cEPs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/coala-analyzer/cEPs/pulls/7/commits"},"statuses":{"href":"https://api.github.com/repos/coala-analyzer/cEPs/statuses/95c4b762dd41f6eba6ac3f37a4be1565837821c8"}}}}
{"actor":{"display_login":"Makman2"}}