{"action":"created","comment":{"url":"https://api.github.com/repos/coala/cEPs/pulls/comments/193741316","pull_request_review_id":126765277,"id":193741316,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5Mzc0MTMxNg==","diff_hunk":"@@ -0,0 +1,382 @@\n+# Git Commit Content Inspection\n+\n+| Metadata |                                                  |\n+| -------- | ------------------------------------------------ |\n+| cEP      | 16                                               |\n+| Version  | 1.0                                              |\n+| Title    | Git commit content inspection                    |\n+| Authors  | Kriti Rohilla <mailto:kritirohilla567@gmail.com> |\n+| Status   | Implementation due                               |\n+| Type     | Process                                          |\n+\n+## Abstract\n+\n+This document describes coala process rules which will be enforced by the\n+`GitCommitBear`.\n+\n+## Introduction\n+\n+`GitCommitBear` at present performs a check on the content of regular\n+commits made to coala that includes performing checks on the shortlog and\n+body of commits. However, there are some cases that need to be taken care\n+of separately.\n+\n+One such case is that of \"Travis merge commits\". These commits are automatically\n+created when a PR is merged using the GitHub UI. The `GitCommitBear` does not\n+identify them at present and fails causing the Travis CI build for corresponding\n+PR to fail as well. Ideally the `GitCommitBear` should run on the parent of this\n+merge commit.\n+\n+Also, there are many special types of commit messages that should be used only\n+in conjunction with patches containing a special type of content.\n+\n+For example, `git revert` commit which is used to revert any previous commit and\n+`git merge` commit which is generated whenever someone performs a GitHub rebase\n+and tries to merge master onto the pull request. Rebase and merge on GitHub will\n+always update the committer information and create new commit SHAs which is not\n+correct. These commits generate a default commit message that is very concise\n+and not according to coala’s standards. The coala project wants to allow\n+`git revert` commits, but does not want to accept `git merge` commits as the\n+repositories are strictly fast-forward merges that do not have an extra commit.\n+\n+In cases where some tests are not required by any pull request made to coala,\n+some special sequences can be added to git commit messages to instruct tools to\n+operate in a certain way.\n+\n+This project is about detecting such commits and verifying that they are correct\n+according to the configuration settings in `.coafile`\n+\n+## Background\n+\n+`.coafile` is a project-wide coala configuration file which is used to specify\n+what is checked with which bears for a project.\n+\n+The workaround that coala uses currently to handle the problem of Travis merge\n+commits in `travis.yml` is:\n+\n+```\n+if [[ \"$TRAVIS_PULL_REQUEST\" != \"false\" ]]; then\n+  sed -e '/bears = GitCommitBear/d' .coafile > .coafile.new\n+  mv .coafile.new .coafile\n+fi\n+```\n+\n+Below are some code snippets of `.coafile` from different projects depicting\n+their use of `GitCommitBear`.\n+\n+Projects- [coala/coala](https://github.com/coala/coala), [coala/projects](https://github.com/coala/projects), [coala/documentation](https://github.com/coala/documentation)\n+\n+```\n+[commits]\n+bears = GitCommitBear\n+shortlog_regex = ([^:]*|[^:]+: [A-Z0-9*].*)\n+shortlog_trailing_period = False\n+```\n+\n+Projects- [coala/coala-bears](https://github.com/coala/coala-bears), [coala/coala-quickstart](https://github.com/coala/coala-quickstart), [coala/corobo](https://github.com/coala/corobo)\n+\n+```\n+[all.commit]\n+bears = GitCommitBear\n+shortlog_trailing_period = False\n+shortlog_regex = ([^:]*|[^:]+: [A-Z0-9*].*)\n+body_close_issue = True\n+body_close_issue_full_url = True\n+body_close_issue_on_last_line = True\n+body_enforce_issue_reference = False\n+```\n+\n+Project- [coala/coala-atom](https://github.com/coala/coala-atom)\n+\n+```\n+[commit]\n+bears = GitCommitBear\n+```\n+\n+## Proposed Change\n+\n+This project would allow organizations to customize the `.coafile`\n+to allow following settings for `GitCommitBear`.\n+\n+```\n+[commit]\n+bears = GitCommitBear\n+allow_skip_ci_build = False\n+allow_git_merge_commit = False\n+allow_git_revert_commit = True\n+```\n+\n+Travis merge commits, `git revert` and `git merge` commits would be inspected\n+by making changes in the `GitCommitBear`. For commits that disable CI build,\n+a new meta bear would be implemented.\n+\n+Here is the detailed implementation stepwise:\n+\n+1. We start by identifying different types of special commits namely Travis\n+   merge commits, `git revert` , `git merge` and commits that disable CI builds.\n+2. Each type of commit is then handled as a separate case.\n+3. For Travis merge commits:\n+   - As a solution to this problem, settings will be added in `GitCommitBear`\n+     that would identify Travis merge commits and ignore them.\n+   - `GitCommitBear` would identify and check contents of the unmerged parent of\n+     Travis merge commits.\n+4. For commits that disable CI builds:\n+   This would involve making a new bear named `SkipCIBear` to inspect commits\n+   that disable CI builds. This bear would contain metadata about various CI\n+   providers that are supported by coala such as Circle CI, Travis CI,\n+   Semaphore CI etc. Most of the CI providers use sequences like `[ci skip]` and\n+   `[skip ci]` for skipping CI build on commits. Commits that have either of\n+   these sequences anywhere in the commit message are ignored by them. This\n+   bear would detect the changes in such commits and verify that they can skip\n+   CI build that is with respect to modified files and whether the corresponding\n+   CI engine allows skipping build or not. An appropriate message is returned if\n+   skipping build is not supported.\n+   - Commit contents are checked to find `[ci skip]` or `[skip ci]`.\n+   - Files modified in the commit should include files that are not covered by\n+     `.coafile` or tests. If this is not the case, an error is raised to exclude\n+     `[ci skip]` or `[skip ci]` from the commit message.\n+5. For the purpose of analyzing commits, a meta bear caller `AnalyzeCommitBear`\n+   would be created that will provide lists of modified, added & deleted files.\n+   - This meta bear will be used for inspecting `git revert` and `git merge`\n+     commits according to coala's standards.\n+   - For users who might want a different logic for inspecting revert or merge\n+     commits will be able to re-use this meta bear and create their own bears.\n+6. For merge commits:\n+   - A meta bear called `MergeCommitBear` would be created.\n+   - For every merge commit this bear would return a list of multiple heads of\n+     this commit.\n+   - `MergeCommitBear` will be used by `GitCommitBear` to find if the commit\n+     tries to merge master or any other branch onto the pull request, message\n+     is displayed to perform a `git rebase` instead.\n+7. For revert commits:\n+   - A meta bear called `RevertCommitBear` would be created.\n+   - Revert commits are identified based on the format of the commit inside\n+     `GitCommitBear`.\n+   - For every revert commit the `RevertCommitBear` would return a tuple of\n+     reverted commit hash and the reverting commit hash.\n+   - Now using `AnalyzeCommitBear`, the patches of both commits are compared to\n+     ensure that they are in fact reverse of each other. Minor differences are\n+     allowed.\n+   - In case of total mismatch, a note in the commit message highlighting that\n+     it is not a clean revert is expected.\n+   - A message suggesting improvements in the commit message is displayed.\n+\n+## Code Prototypes\n+\n+A prototype for identifying Travis merge commits:\n+\n+```python\n+    if len(shortlog) > shortlog_length:\n+        travis_merge_commit_regex = re.compile(r'^Merge [0-9a-f]+ into [0-9a-f]+$|....')\n+\n+        match = re.fullmatch(travis_merge_commit_regex, shortlog)\n+        if match:\n+            # ignore this commit from any further inspection\n+            # inspect the unmerged parent of this commit instead\n+```\n+\n+A prototype of `SkipCIBear` :\n+\n+```python\n+   import abc\n+   import re\n+\n+   from bears.vcs.CommitBear import _CommitBear\n+   from coala_utils.ContextManagers import change_directory\n+   from coalib.misc.Shell import run_shell_command\n+   from coalib.settings.FunctionMetadata import FunctionMetadata\n+\n+\n+   class SkipCIBear(CommitBear):\n+    __metaclass__ = abc.ABCMeta\n+\n+    BEAR_DEPS = {'_CommitBear'}\n+    LANGUAGES = {'Git'}\n+    CAN_DETECT = {'Commits that disable CI build'}\n+\n+    CI_PROVIDERS_SUPPORTING_SKIPPING_BUILD = {\n+        'circleci': (r'[skip ci]?'\n+                     r'|[ci skip]?'),\n+        'travisci': (r'[skip ci]?'\n+                     r'|[ci skip]?'),\n+        'semaphoreci': (r'[skip ci]?'\n+                     r'|[ci skip]?'),\n+        'gitlabci': (r'[skip ci]?'\n+                     r'|[ci skip]?'),\n+        'appveyor': None,\n+    }\n+\n+    @classmethod\n+    def get_ciskip_metadata(cls):\n+        return FunctionMetadata.from_function(\n+            cls.check_skip_ci_build,\n+            omit={'self', 'commit_message'})\n+\n+    @classmethod\n+    def get_CIengine_from_CIproviders(cls):\n+        \"\"\"\n+        Retrieve first CI engine from the list of CI providers.\n+        \"\"\"\n+\n+    def run(self,\n+            allow_skipping_ci_build: bool = False,\n+            **kwargs):\n+        \"\"\"\n+        This bear ensures that if the HEAD commit contains `[ci skip]` or\n+        `[skip ci]` then it must not modify files in tests or 'coafile'.\n+\n+        :param allow_skipping_ci_build: Whether skipping ci build is\n+                                        allowed by the organization or not.\n+        \"\"\"\n+        commit_message = # get commit message at HEAD from _CommitBear\n+\n+        yield from self.check_skip_ci_build(\n+            commit_message,\n+            ** self.get_ciskip_metadata().filter_parameters(kwargs))\n+\n+    def check_skip_ci_build(self, commit_message):\n+        ci_regex = re.compile(r'.*[ci skip][skip ci].*')\n+        match = ci_regex.match(shortlog)\n+\n+        if not match:\n+            return\n+\n+        if not allow_skipping_ci_build:\n+             yield Result(self, 'Skipping CI build is not allowed.')\n+\n+        ci_engine = self.get_CIengine_from_CIproviders()\n+\n+        if (ci_engine not in self.CI_PROVIDERS_SUPPORTING_SKIPPING_BUILD):\n+             yield Result(self, 'The CI engine for this project does not allow skipping CI builds.')\n+\n+        test_files = # get all test files\n+        coalafile_files = # get all coalafile files\n+\n+        modified_files = # get filename of files modified by this commit\n+\n+        for filename in modified_files:\n+            if filename in coafile_files or filename in test_files:\n+                yield Result(self, 'Remove [ci skip] from commit message.')\n+```\n+\n+A prototype of `AnalyzeCommitBear` :\n+\n+```python\n+    import re\n+\n+    from bears.vcs.CommitBear import _CommitBear\n+    from coala_utils.ContextManagers import change_directory\n+    from coalib.misc.Shell import run_shell_command\n+    from unidiff import PatchSet\n+\n+    class AnalyzeCommitBear(CommitBear):\n+        BEAR_DEPS = {'_CommitBear'}\n+        LANGUAGES = {'Git'}\n+        CAN_DETECT = {'Modifications in different files'}\n+\n+        def run(self, **kwargs):\n+            \"\"\"\n+            Check the current commit message at HEAD.\n+\n+            Return lists of modified files with correspoding\n+            number of additions, deletions and modifications in each file.\n+\n+            \"\"\"\n+            commit_hash = # get commit hash of HEAD commit\n+\n+            yield from self.get_files_modified_by_commit(\n+                commit_hash)\n+\n+        def get_files_modified_by_commit(self):\n+            command = 'git show --pretty=\"\" --name-only' + str(commit_hash)\n+            modified_files = run_shell_command(command)\n+\n+            encoding = diff.headers.get_charsets()[0]\n+\n+            for filename in modified_files:\n+                diff = filename + '.diff'\n+                patch = PatchSet.from_filename(diff, encoding=encoding)\n+\n+            # Return lists of modified, added & deleted files\n+```\n+\n+A prototype of `MergeCommitBear` :\n+\n+```python\n+    import re\n+\n+    from bears.vcs.CommitBear import _CommitBear\n+    from coala_utils.ContextManagers import change_directory\n+    from coalib.misc.Shell import run_shell_command\n+    from unidiff import PatchSet\n+\n+    class MergeBear(CommitBear):\n+        BEAR_DEPS = {'_CommitBear'}\n+        LANGUAGES = {'Git'}\n+        CAN_DETECT = {'Modifications in different files'}\n+\n+        def run(self, **kwargs):\n+            \"\"\"\n+            Returns a list of heads of merge commit.\n+            \"\"\"\n+            commit_hash = # get commit hash of HEAD commit\n+\n+            yield from self.get_files_modified_by_commit(\n+                commit_hash)\n+\n+        def get_heads_of_merge_commit(self, commit_hash):\n+            # Here we get all the heads of this merge commit\n+```\n+\n+A prototype of `RevertCommitBear` :\n+\n+```python\n+    import re\n+\n+    from bears.vcs.CommitBear import _CommitBear\n+    from coala_utils.ContextManagers import change_directory\n+    from coalib.misc.Shell import run_shell_command\n+    from unidiff import PatchSet\n+\n+    class RevertCommitBear(CommitBear):","path":"cEP-0016.md","position":341,"original_position":341,"commit_id":"194cd79a0e13857db3a1f49d758428de26017c83","original_commit_id":"194cd79a0e13857db3a1f49d758428de26017c83","user":{"login":"jayvdb","id":15092,"node_id":"MDQ6VXNlcjE1MDky","avatar_url":"https://avatars1.githubusercontent.com/u/15092?v=4","gravatar_id":"","url":"https://api.github.com/users/jayvdb","html_url":"https://github.com/jayvdb","followers_url":"https://api.github.com/users/jayvdb/followers","following_url":"https://api.github.com/users/jayvdb/following{/other_user}","gists_url":"https://api.github.com/users/jayvdb/gists{/gist_id}","starred_url":"https://api.github.com/users/jayvdb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jayvdb/subscriptions","organizations_url":"https://api.github.com/users/jayvdb/orgs","repos_url":"https://api.github.com/users/jayvdb/repos","events_url":"https://api.github.com/users/jayvdb/events{/privacy}","received_events_url":"https://api.github.com/users/jayvdb/received_events","type":"User","site_admin":false},"body":"no, `_` is for which you did, and isnt a 'thing' in coala terminology, but might be called an abstract bear.\r\n\r\nthis project is supposed to be doing 'meta' bears, like cEP-0025.  these also dont seem to have a name in coala terminology.\r\n\r\nWe do have `DependencyBear`, which is the recipient of Result objects from a meta bear.\r\n","created_at":"2018-06-07T13:14:55Z","updated_at":"2018-06-07T13:15:25Z","html_url":"https://github.com/coala/cEPs/pull/114#discussion_r193741316","pull_request_url":"https://api.github.com/repos/coala/cEPs/pulls/114","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/coala/cEPs/pulls/comments/193741316"},"html":{"href":"https://github.com/coala/cEPs/pull/114#discussion_r193741316"},"pull_request":{"href":"https://api.github.com/repos/coala/cEPs/pulls/114"}},"in_reply_to_id":193461648},"pull_request":{"url":"https://api.github.com/repos/coala/cEPs/pulls/114","id":185696557,"node_id":"MDExOlB1bGxSZXF1ZXN0MTg1Njk2NTU3","html_url":"https://github.com/coala/cEPs/pull/114","diff_url":"https://github.com/coala/cEPs/pull/114.diff","patch_url":"https://github.com/coala/cEPs/pull/114.patch","issue_url":"https://api.github.com/repos/coala/cEPs/issues/114","number":114,"state":"open","locked":false,"title":"cEP-0016.md: Commit Content Inspection","user":{"login":"kriti21","id":19872082,"node_id":"MDQ6VXNlcjE5ODcyMDgy","avatar_url":"https://avatars3.githubusercontent.com/u/19872082?v=4","gravatar_id":"","url":"https://api.github.com/users/kriti21","html_url":"https://github.com/kriti21","followers_url":"https://api.github.com/users/kriti21/followers","following_url":"https://api.github.com/users/kriti21/following{/other_user}","gists_url":"https://api.github.com/users/kriti21/gists{/gist_id}","starred_url":"https://api.github.com/users/kriti21/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kriti21/subscriptions","organizations_url":"https://api.github.com/users/kriti21/orgs","repos_url":"https://api.github.com/users/kriti21/repos","events_url":"https://api.github.com/users/kriti21/events{/privacy}","received_events_url":"https://api.github.com/users/kriti21/received_events","type":"User","site_admin":false},"body":"This cEP the coala process rules which\r\nwill be enforced by GitCommitBear to handle\r\nspecial types of commit messages like\r\ngit revert and git merge.","created_at":"2018-05-03T12:12:17Z","updated_at":"2018-06-07T13:15:25Z","closed_at":null,"merged_at":null,"merge_commit_sha":"bb8a33376030075e7ec334c9eb7eff624ff4213c","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":925024199,"node_id":"MDU6TGFiZWw5MjUwMjQxOTk=","url":"https://api.github.com/repos/coala/cEPs/labels/New%20cEP","name":"New cEP","color":"8ffcbe","default":false},{"id":473152459,"node_id":"MDU6TGFiZWw0NzMxNTI0NTk=","url":"https://api.github.com/repos/coala/cEPs/labels/difficulty/low","name":"difficulty/low","color":"c2e0c6","default":false},{"id":924887230,"node_id":"MDU6TGFiZWw5MjQ4ODcyMzA=","url":"https://api.github.com/repos/coala/cEPs/labels/importance/high","name":"importance/high","color":"f78ae5","default":false},{"id":391778081,"node_id":"MDU6TGFiZWwzOTE3NzgwODE=","url":"https://api.github.com/repos/coala/cEPs/labels/process/pending%20review","name":"process/pending review","color":"c2e0c6","default":false},{"id":413116322,"node_id":"MDU6TGFiZWw0MTMxMTYzMjI=","url":"https://api.github.com/repos/coala/cEPs/labels/size/M","name":"size/M","color":"ededed","default":false},{"id":680844248,"node_id":"MDU6TGFiZWw2ODA4NDQyNDg=","url":"https://api.github.com/repos/coala/cEPs/labels/status/STALE","name":"status/STALE","color":"ededed","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/coala/cEPs/pulls/114/commits","review_comments_url":"https://api.github.com/repos/coala/cEPs/pulls/114/comments","review_comment_url":"https://api.github.com/repos/coala/cEPs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/coala/cEPs/issues/114/comments","statuses_url":"https://api.github.com/repos/coala/cEPs/statuses/194cd79a0e13857db3a1f49d758428de26017c83","head":{"label":"kriti21:cEPgsoc18","ref":"cEPgsoc18","sha":"194cd79a0e13857db3a1f49d758428de26017c83","user":{"login":"kriti21","id":19872082,"node_id":"MDQ6VXNlcjE5ODcyMDgy","avatar_url":"https://avatars3.githubusercontent.com/u/19872082?v=4","gravatar_id":"","url":"https://api.github.com/users/kriti21","html_url":"https://github.com/kriti21","followers_url":"https://api.github.com/users/kriti21/followers","following_url":"https://api.github.com/users/kriti21/following{/other_user}","gists_url":"https://api.github.com/users/kriti21/gists{/gist_id}","starred_url":"https://api.github.com/users/kriti21/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kriti21/subscriptions","organizations_url":"https://api.github.com/users/kriti21/orgs","repos_url":"https://api.github.com/users/kriti21/repos","events_url":"https://api.github.com/users/kriti21/events{/privacy}","received_events_url":"https://api.github.com/users/kriti21/received_events","type":"User","site_admin":false},"repo":{"id":119717329,"node_id":"MDEwOlJlcG9zaXRvcnkxMTk3MTczMjk=","name":"cEPs","full_name":"kriti21/cEPs","owner":{"login":"kriti21","id":19872082,"node_id":"MDQ6VXNlcjE5ODcyMDgy","avatar_url":"https://avatars3.githubusercontent.com/u/19872082?v=4","gravatar_id":"","url":"https://api.github.com/users/kriti21","html_url":"https://github.com/kriti21","followers_url":"https://api.github.com/users/kriti21/followers","following_url":"https://api.github.com/users/kriti21/following{/other_user}","gists_url":"https://api.github.com/users/kriti21/gists{/gist_id}","starred_url":"https://api.github.com/users/kriti21/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kriti21/subscriptions","organizations_url":"https://api.github.com/users/kriti21/orgs","repos_url":"https://api.github.com/users/kriti21/repos","events_url":"https://api.github.com/users/kriti21/events{/privacy}","received_events_url":"https://api.github.com/users/kriti21/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/kriti21/cEPs","description":"coala Enhancement Proposals","fork":true,"url":"https://api.github.com/repos/kriti21/cEPs","forks_url":"https://api.github.com/repos/kriti21/cEPs/forks","keys_url":"https://api.github.com/repos/kriti21/cEPs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/kriti21/cEPs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/kriti21/cEPs/teams","hooks_url":"https://api.github.com/repos/kriti21/cEPs/hooks","issue_events_url":"https://api.github.com/repos/kriti21/cEPs/issues/events{/number}","events_url":"https://api.github.com/repos/kriti21/cEPs/events","assignees_url":"https://api.github.com/repos/kriti21/cEPs/assignees{/user}","branches_url":"https://api.github.com/repos/kriti21/cEPs/branches{/branch}","tags_url":"https://api.github.com/repos/kriti21/cEPs/tags","blobs_url":"https://api.github.com/repos/kriti21/cEPs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/kriti21/cEPs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/kriti21/cEPs/git/refs{/sha}","trees_url":"https://api.github.com/repos/kriti21/cEPs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/kriti21/cEPs/statuses/{sha}","languages_url":"https://api.github.com/repos/kriti21/cEPs/languages","stargazers_url":"https://api.github.com/repos/kriti21/cEPs/stargazers","contributors_url":"https://api.github.com/repos/kriti21/cEPs/contributors","subscribers_url":"https://api.github.com/repos/kriti21/cEPs/subscribers","subscription_url":"https://api.github.com/repos/kriti21/cEPs/subscription","commits_url":"https://api.github.com/repos/kriti21/cEPs/commits{/sha}","git_commits_url":"https://api.github.com/repos/kriti21/cEPs/git/commits{/sha}","comments_url":"https://api.github.com/repos/kriti21/cEPs/comments{/number}","issue_comment_url":"https://api.github.com/repos/kriti21/cEPs/issues/comments{/number}","contents_url":"https://api.github.com/repos/kriti21/cEPs/contents/{+path}","compare_url":"https://api.github.com/repos/kriti21/cEPs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/kriti21/cEPs/merges","archive_url":"https://api.github.com/repos/kriti21/cEPs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/kriti21/cEPs/downloads","issues_url":"https://api.github.com/repos/kriti21/cEPs/issues{/number}","pulls_url":"https://api.github.com/repos/kriti21/cEPs/pulls{/number}","milestones_url":"https://api.github.com/repos/kriti21/cEPs/milestones{/number}","notifications_url":"https://api.github.com/repos/kriti21/cEPs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/kriti21/cEPs/labels{/name}","releases_url":"https://api.github.com/repos/kriti21/cEPs/releases{/id}","deployments_url":"https://api.github.com/repos/kriti21/cEPs/deployments","created_at":"2018-01-31T17:06:53Z","updated_at":"2017-10-18T12:57:48Z","pushed_at":"2018-05-31T10:20:45Z","git_url":"git://github.com/kriti21/cEPs.git","ssh_url":"git@github.com:kriti21/cEPs.git","clone_url":"https://github.com/kriti21/cEPs.git","svn_url":"https://github.com/kriti21/cEPs","homepage":null,"size":125,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"coala:master","ref":"master","sha":"1d1a8a95260f8b53e9b0db062ff0362a863054f7","user":{"login":"coala","id":10620750,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEwNjIwNzUw","avatar_url":"https://avatars3.githubusercontent.com/u/10620750?v=4","gravatar_id":"","url":"https://api.github.com/users/coala","html_url":"https://github.com/coala","followers_url":"https://api.github.com/users/coala/followers","following_url":"https://api.github.com/users/coala/following{/other_user}","gists_url":"https://api.github.com/users/coala/gists{/gist_id}","starred_url":"https://api.github.com/users/coala/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/coala/subscriptions","organizations_url":"https://api.github.com/users/coala/orgs","repos_url":"https://api.github.com/users/coala/repos","events_url":"https://api.github.com/users/coala/events{/privacy}","received_events_url":"https://api.github.com/users/coala/received_events","type":"Organization","site_admin":false},"repo":{"id":60130869,"node_id":"MDEwOlJlcG9zaXRvcnk2MDEzMDg2OQ==","name":"cEPs","full_name":"coala/cEPs","owner":{"login":"coala","id":10620750,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEwNjIwNzUw","avatar_url":"https://avatars3.githubusercontent.com/u/10620750?v=4","gravatar_id":"","url":"https://api.github.com/users/coala","html_url":"https://github.com/coala","followers_url":"https://api.github.com/users/coala/followers","following_url":"https://api.github.com/users/coala/following{/other_user}","gists_url":"https://api.github.com/users/coala/gists{/gist_id}","starred_url":"https://api.github.com/users/coala/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/coala/subscriptions","organizations_url":"https://api.github.com/users/coala/orgs","repos_url":"https://api.github.com/users/coala/repos","events_url":"https://api.github.com/users/coala/events{/privacy}","received_events_url":"https://api.github.com/users/coala/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/coala/cEPs","description":"coala Enhancement Proposals","fork":false,"url":"https://api.github.com/repos/coala/cEPs","forks_url":"https://api.github.com/repos/coala/cEPs/forks","keys_url":"https://api.github.com/repos/coala/cEPs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/coala/cEPs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/coala/cEPs/teams","hooks_url":"https://api.github.com/repos/coala/cEPs/hooks","issue_events_url":"https://api.github.com/repos/coala/cEPs/issues/events{/number}","events_url":"https://api.github.com/repos/coala/cEPs/events","assignees_url":"https://api.github.com/repos/coala/cEPs/assignees{/user}","branches_url":"https://api.github.com/repos/coala/cEPs/branches{/branch}","tags_url":"https://api.github.com/repos/coala/cEPs/tags","blobs_url":"https://api.github.com/repos/coala/cEPs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/coala/cEPs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/coala/cEPs/git/refs{/sha}","trees_url":"https://api.github.com/repos/coala/cEPs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/coala/cEPs/statuses/{sha}","languages_url":"https://api.github.com/repos/coala/cEPs/languages","stargazers_url":"https://api.github.com/repos/coala/cEPs/stargazers","contributors_url":"https://api.github.com/repos/coala/cEPs/contributors","subscribers_url":"https://api.github.com/repos/coala/cEPs/subscribers","subscription_url":"https://api.github.com/repos/coala/cEPs/subscription","commits_url":"https://api.github.com/repos/coala/cEPs/commits{/sha}","git_commits_url":"https://api.github.com/repos/coala/cEPs/git/commits{/sha}","comments_url":"https://api.github.com/repos/coala/cEPs/comments{/number}","issue_comment_url":"https://api.github.com/repos/coala/cEPs/issues/comments{/number}","contents_url":"https://api.github.com/repos/coala/cEPs/contents/{+path}","compare_url":"https://api.github.com/repos/coala/cEPs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/coala/cEPs/merges","archive_url":"https://api.github.com/repos/coala/cEPs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/coala/cEPs/downloads","issues_url":"https://api.github.com/repos/coala/cEPs/issues{/number}","pulls_url":"https://api.github.com/repos/coala/cEPs/pulls{/number}","milestones_url":"https://api.github.com/repos/coala/cEPs/milestones{/number}","notifications_url":"https://api.github.com/repos/coala/cEPs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/coala/cEPs/labels{/name}","releases_url":"https://api.github.com/repos/coala/cEPs/releases{/id}","deployments_url":"https://api.github.com/repos/coala/cEPs/deployments","created_at":"2016-05-31T23:37:51Z","updated_at":"2018-06-07T13:02:54Z","pushed_at":"2018-06-07T13:02:50Z","git_url":"git://github.com/coala/cEPs.git","ssh_url":"git@github.com:coala/cEPs.git","clone_url":"https://github.com/coala/cEPs.git","svn_url":"https://github.com/coala/cEPs","homepage":null,"size":137,"stargazers_count":22,"watchers_count":22,"language":null,"has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":45,"mirror_url":null,"archived":false,"open_issues_count":46,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":45,"open_issues":46,"watchers":22,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/coala/cEPs/pulls/114"},"html":{"href":"https://github.com/coala/cEPs/pull/114"},"issue":{"href":"https://api.github.com/repos/coala/cEPs/issues/114"},"comments":{"href":"https://api.github.com/repos/coala/cEPs/issues/114/comments"},"review_comments":{"href":"https://api.github.com/repos/coala/cEPs/pulls/114/comments"},"review_comment":{"href":"https://api.github.com/repos/coala/cEPs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/coala/cEPs/pulls/114/commits"},"statuses":{"href":"https://api.github.com/repos/coala/cEPs/statuses/194cd79a0e13857db3a1f49d758428de26017c83"}},"author_association":"NONE"}}
{"actor":{"display_login":"jayvdb"}}