{"action":"created","comment":{"url":"https://api.github.com/repos/eclipse/jetty.project/pulls/comments/173076458","pull_request_review_id":102202283,"id":173076458,"diff_hunk":"@@ -0,0 +1,179 @@\n+//\n+//  ========================================================================\n+//  Copyright (c) 1995-2018 Mort Bay Consulting Pty. Ltd.\n+//  ------------------------------------------------------------------------\n+//  All rights reserved. This program and the accompanying materials\n+//  are made available under the terms of the Eclipse Public License v1.0\n+//  and Apache License v2.0 which accompanies this distribution.\n+//\n+//      The Eclipse Public License is available at\n+//      http://www.eclipse.org/legal/epl-v10.html\n+//\n+//      The Apache License v2.0 is available at\n+//      http://www.opensource.org/licenses/apache2.0.php\n+//\n+//  You may elect to redistribute this code under either of these licenses.\n+//  ========================================================================\n+//\n+\n+package org.eclipse.jetty.util;\n+\n+import java.nio.charset.StandardCharsets;\n+import java.util.Arrays;\n+\n+\n+/**\n+ * SearchPattern\n+ *\n+ * Fast search for patterns within strings and arrays of bytes.\n+ * Uses an implementation of the Boyer–Moore–Horspool algorithm\n+ * with a 256 character alphabet.\n+ * \n+ * The algorithm has an average-case complexity of O(n) \n+ * on random text and O(nm) in the worst case.\n+ * where: \n+ *    m = pattern length\n+ *    n = length of data to search\n+ */\n+public class SearchPattern\n+{\n+    static final int alphabetSize = 256;\n+    private int[] table;\n+    private byte[] pattern;    \n+    \n+    /**\n+     * Produces a SearchPattern instance which can be used\n+     * to find matches of the pattern in data\n+     * @param pattern byte array containing the pattern\n+     * @return a new SearchPattern instance using the given pattern\n+     */\n+    public static SearchPattern compile(byte[] pattern)\n+    {\n+        return new SearchPattern(Arrays.copyOf(pattern, pattern.length));\n+    }\n+    \n+    /**\n+     * Produces a SearchPattern instance which can be used\n+     * to find matches of the pattern in data\n+     * @param pattern string containing the pattern\n+     * @return a new SearchPattern instance using the given pattern\n+     */\n+    public static SearchPattern compile(String pattern)\n+    {\n+        return new SearchPattern(pattern.getBytes(StandardCharsets.UTF_8));\n+    }\n+    \n+    /**\n+     * @param pattern byte array containing the pattern used for matching\n+     */\n+    private SearchPattern(byte[] pattern)\n+    {\n+        this.pattern = pattern;\n+        \n+        if(pattern.length == 0) \n+            throw new IllegalArgumentException(\"Empty Pattern\");\n+        \n+        //Build up the pre-processed table for this pattern.\n+        table = new int[alphabetSize];\n+        for(int i = 0; i<table.length; ++i)\n+            table[i] = pattern.length;\n+        for(int i = 0; i<pattern.length-1; ++i)\n+            table[pattern[i]] = pattern.length-1-i;\n+    }\n+    \n+    \n+    /**\n+     * Search for a complete match of the pattern within the data\n+     * @param data The data in which to search for. The data may be arbitrary binary data, \n+     * but the pattern will always be {@link StandardCharsets#US_ASCII} encoded.\n+     * @param offset The offset within the data to start the search\n+     * @param length The length of the data to search\n+     * @return The index within the data array at which the first instance of the pattern or -1 if not found\n+     */\n+    public int match(byte[] data, int offset, int length)\n+    {\n+        validate(data, offset, length);\n+\n+        int skip = offset;\n+        while(skip <= offset+length - pattern.length)\n+        {            \n+            for(int i = pattern.length-1; data[skip+i] == pattern[i]; i--) \n+                if(i==0) return skip;\n+            \n+            skip += table[data[skip + pattern.length - 1]];\n+        }\n+        \n+        return -1;\n+    }\n+    \n+    /**\n+     * Search for a partial match of the pattern at the end of the data.\n+     * @param data The data in which to search for. The data may be arbitrary binary data, \n+     * but the pattern will always be {@link StandardCharsets#US_ASCII} encoded.\n+     * @param offset The offset within the data to start the search\n+     * @param length The length of the data to search\n+     * @return the length of the partial pattern matched and 0 for no match.\n+     */\n+    public int endsWith(byte[] data, int offset, int length)\n+    { \n+        validate(data, offset, length);\n+        \n+        int skip = (pattern.length <= length) ? (offset+length-pattern.length) : offset;\n+        while(skip < offset+length)\n+        {       \n+            for(int i = (offset+length-1)-skip; data[skip+i] == pattern[i]; --i)\n+                if(i==0) return(offset+length - skip);\n+            \n+            if(skip + pattern.length - 1 < data.length)\n+                skip += table[data[skip + pattern.length - 1]];\n+            else\n+                skip++;\n+        }\n+        \n+        return 0;\n+    }\n+    \n+    /**\n+     * Search for a possibly partial match of the pattern at the start of the data.\n+     * @param data The data in which to search for. The data may be arbitrary binary data, \n+     * but the pattern will always be {@link StandardCharsets#US_ASCII} encoded.\n+     * @param offset The offset within the data to start the search\n+     * @param length The length of the data to search\n+     * @param matched The length of the partial pattern already matched\n+     * @return the length of the partial pattern matched and 0 for no match.\n+     */\n+    public int startsWith(byte[] data, int offset, int length, int matched)\n+    {\n+        validate(data, offset, length);\n+        \n+        int matchedCount = 0;\n+        \n+        for(int i=0; i<pattern.length-matched && i < offset+length; i++)\n+        {\n+            if(data[i] == pattern[i+matched])\n+                matchedCount++;\n+            else\n+                break;\n+        }\n+        \n+        return matchedCount;   ","path":"jetty-util/src/main/java/org/eclipse/jetty/util/SearchPattern.java","position":159,"original_position":159,"commit_id":"946341bf8568cc0c897ddd9d6f468b602de7c55b","original_commit_id":"946341bf8568cc0c897ddd9d6f468b602de7c55b","user":{"login":"lachlan-roberts","id":19250643,"avatar_url":"https://avatars0.githubusercontent.com/u/19250643?v=4","gravatar_id":"","url":"https://api.github.com/users/lachlan-roberts","html_url":"https://github.com/lachlan-roberts","followers_url":"https://api.github.com/users/lachlan-roberts/followers","following_url":"https://api.github.com/users/lachlan-roberts/following{/other_user}","gists_url":"https://api.github.com/users/lachlan-roberts/gists{/gist_id}","starred_url":"https://api.github.com/users/lachlan-roberts/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lachlan-roberts/subscriptions","organizations_url":"https://api.github.com/users/lachlan-roberts/orgs","repos_url":"https://api.github.com/users/lachlan-roberts/repos","events_url":"https://api.github.com/users/lachlan-roberts/events{/privacy}","received_events_url":"https://api.github.com/users/lachlan-roberts/received_events","type":"User","site_admin":false},"body":"I thought it was just supposed to return the length of the pattern matched in that byte array. But I can change it to return the cumulative match although it might break some of my tests.","created_at":"2018-03-08T06:51:02Z","updated_at":"2018-03-08T06:51:02Z","html_url":"https://github.com/eclipse/jetty.project/pull/2302#discussion_r173076458","pull_request_url":"https://api.github.com/repos/eclipse/jetty.project/pulls/2302","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/eclipse/jetty.project/pulls/comments/173076458"},"html":{"href":"https://github.com/eclipse/jetty.project/pull/2302#discussion_r173076458"},"pull_request":{"href":"https://api.github.com/repos/eclipse/jetty.project/pulls/2302"}},"in_reply_to_id":173072852},"pull_request":{"url":"https://api.github.com/repos/eclipse/jetty.project/pulls/2302","id":173577090,"html_url":"https://github.com/eclipse/jetty.project/pull/2302","diff_url":"https://github.com/eclipse/jetty.project/pull/2302.diff","patch_url":"https://github.com/eclipse/jetty.project/pull/2302.patch","issue_url":"https://api.github.com/repos/eclipse/jetty.project/issues/2302","number":2302,"state":"open","locked":false,"title":"[WIP] Jetty 9.4.x 1027 SearchPattern","user":{"login":"lachlan-roberts","id":19250643,"avatar_url":"https://avatars0.githubusercontent.com/u/19250643?v=4","gravatar_id":"","url":"https://api.github.com/users/lachlan-roberts","html_url":"https://github.com/lachlan-roberts","followers_url":"https://api.github.com/users/lachlan-roberts/followers","following_url":"https://api.github.com/users/lachlan-roberts/following{/other_user}","gists_url":"https://api.github.com/users/lachlan-roberts/gists{/gist_id}","starred_url":"https://api.github.com/users/lachlan-roberts/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lachlan-roberts/subscriptions","organizations_url":"https://api.github.com/users/lachlan-roberts/orgs","repos_url":"https://api.github.com/users/lachlan-roberts/repos","events_url":"https://api.github.com/users/lachlan-roberts/events{/privacy}","received_events_url":"https://api.github.com/users/lachlan-roberts/received_events","type":"User","site_admin":false},"body":"SearchPattern class implementing the Boyer–Moore–Horspool string matching algorithm with some additional utility methods.\r\n#1027 ","created_at":"2018-03-07T21:22:42Z","updated_at":"2018-03-08T06:51:02Z","closed_at":null,"merged_at":null,"merge_commit_sha":"236ad873984cd7da1761b6777c8710ba299fd2fc","assignee":null,"assignees":[],"requested_reviewers":[{"login":"olamy","id":19728,"avatar_url":"https://avatars2.githubusercontent.com/u/19728?v=4","gravatar_id":"","url":"https://api.github.com/users/olamy","html_url":"https://github.com/olamy","followers_url":"https://api.github.com/users/olamy/followers","following_url":"https://api.github.com/users/olamy/following{/other_user}","gists_url":"https://api.github.com/users/olamy/gists{/gist_id}","starred_url":"https://api.github.com/users/olamy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/olamy/subscriptions","organizations_url":"https://api.github.com/users/olamy/orgs","repos_url":"https://api.github.com/users/olamy/repos","events_url":"https://api.github.com/users/olamy/events{/privacy}","received_events_url":"https://api.github.com/users/olamy/received_events","type":"User","site_admin":false},{"login":"joakime","id":191721,"avatar_url":"https://avatars1.githubusercontent.com/u/191721?v=4","gravatar_id":"","url":"https://api.github.com/users/joakime","html_url":"https://github.com/joakime","followers_url":"https://api.github.com/users/joakime/followers","following_url":"https://api.github.com/users/joakime/following{/other_user}","gists_url":"https://api.github.com/users/joakime/gists{/gist_id}","starred_url":"https://api.github.com/users/joakime/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/joakime/subscriptions","organizations_url":"https://api.github.com/users/joakime/orgs","repos_url":"https://api.github.com/users/joakime/repos","events_url":"https://api.github.com/users/joakime/events{/privacy}","received_events_url":"https://api.github.com/users/joakime/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/eclipse/jetty.project/pulls/2302/commits","review_comments_url":"https://api.github.com/repos/eclipse/jetty.project/pulls/2302/comments","review_comment_url":"https://api.github.com/repos/eclipse/jetty.project/pulls/comments{/number}","comments_url":"https://api.github.com/repos/eclipse/jetty.project/issues/2302/comments","statuses_url":"https://api.github.com/repos/eclipse/jetty.project/statuses/946341bf8568cc0c897ddd9d6f468b602de7c55b","head":{"label":"lachlan-roberts:jetty-9.4.x-1027-SearchPattern","ref":"jetty-9.4.x-1027-SearchPattern","sha":"946341bf8568cc0c897ddd9d6f468b602de7c55b","user":{"login":"lachlan-roberts","id":19250643,"avatar_url":"https://avatars0.githubusercontent.com/u/19250643?v=4","gravatar_id":"","url":"https://api.github.com/users/lachlan-roberts","html_url":"https://github.com/lachlan-roberts","followers_url":"https://api.github.com/users/lachlan-roberts/followers","following_url":"https://api.github.com/users/lachlan-roberts/following{/other_user}","gists_url":"https://api.github.com/users/lachlan-roberts/gists{/gist_id}","starred_url":"https://api.github.com/users/lachlan-roberts/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lachlan-roberts/subscriptions","organizations_url":"https://api.github.com/users/lachlan-roberts/orgs","repos_url":"https://api.github.com/users/lachlan-roberts/repos","events_url":"https://api.github.com/users/lachlan-roberts/events{/privacy}","received_events_url":"https://api.github.com/users/lachlan-roberts/received_events","type":"User","site_admin":false},"repo":{"id":123038728,"name":"jetty.project","full_name":"lachlan-roberts/jetty.project","owner":{"login":"lachlan-roberts","id":19250643,"avatar_url":"https://avatars0.githubusercontent.com/u/19250643?v=4","gravatar_id":"","url":"https://api.github.com/users/lachlan-roberts","html_url":"https://github.com/lachlan-roberts","followers_url":"https://api.github.com/users/lachlan-roberts/followers","following_url":"https://api.github.com/users/lachlan-roberts/following{/other_user}","gists_url":"https://api.github.com/users/lachlan-roberts/gists{/gist_id}","starred_url":"https://api.github.com/users/lachlan-roberts/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lachlan-roberts/subscriptions","organizations_url":"https://api.github.com/users/lachlan-roberts/orgs","repos_url":"https://api.github.com/users/lachlan-roberts/repos","events_url":"https://api.github.com/users/lachlan-roberts/events{/privacy}","received_events_url":"https://api.github.com/users/lachlan-roberts/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/lachlan-roberts/jetty.project","description":"Eclipse Jetty® - Web Container & Clients - supports HTTP/2, HTTP/1.1, HTTP/1.0, websocket, servlets, and more","fork":true,"url":"https://api.github.com/repos/lachlan-roberts/jetty.project","forks_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/forks","keys_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/keys{/key_id}","collaborators_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/teams","hooks_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/hooks","issue_events_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/issues/events{/number}","events_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/events","assignees_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/assignees{/user}","branches_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/branches{/branch}","tags_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/tags","blobs_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/git/refs{/sha}","trees_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/git/trees{/sha}","statuses_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/statuses/{sha}","languages_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/languages","stargazers_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/stargazers","contributors_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/contributors","subscribers_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/subscribers","subscription_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/subscription","commits_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/commits{/sha}","git_commits_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/git/commits{/sha}","comments_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/comments{/number}","issue_comment_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/issues/comments{/number}","contents_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/contents/{+path}","compare_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/compare/{base}...{head}","merges_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/merges","archive_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/downloads","issues_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/issues{/number}","pulls_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/pulls{/number}","milestones_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/milestones{/number}","notifications_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/labels{/name}","releases_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/releases{/id}","deployments_url":"https://api.github.com/repos/lachlan-roberts/jetty.project/deployments","created_at":"2018-02-26T22:23:22Z","updated_at":"2018-02-26T22:23:37Z","pushed_at":"2018-03-07T21:29:12Z","git_url":"git://github.com/lachlan-roberts/jetty.project.git","ssh_url":"git@github.com:lachlan-roberts/jetty.project.git","clone_url":"https://github.com/lachlan-roberts/jetty.project.git","svn_url":"https://github.com/lachlan-roberts/jetty.project","homepage":"https://www.eclipse.org/jetty","size":110244,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":0,"open_issues":0,"watchers":0,"default_branch":"jetty-9.4.x"}},"base":{"label":"eclipse:jetty-9.4.x","ref":"jetty-9.4.x","sha":"5712b0217f9fc43a14bf729e341f5cfd877bb4d7","user":{"login":"eclipse","id":56974,"avatar_url":"https://avatars1.githubusercontent.com/u/56974?v=4","gravatar_id":"","url":"https://api.github.com/users/eclipse","html_url":"https://github.com/eclipse","followers_url":"https://api.github.com/users/eclipse/followers","following_url":"https://api.github.com/users/eclipse/following{/other_user}","gists_url":"https://api.github.com/users/eclipse/gists{/gist_id}","starred_url":"https://api.github.com/users/eclipse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eclipse/subscriptions","organizations_url":"https://api.github.com/users/eclipse/orgs","repos_url":"https://api.github.com/users/eclipse/repos","events_url":"https://api.github.com/users/eclipse/events{/privacy}","received_events_url":"https://api.github.com/users/eclipse/received_events","type":"Organization","site_admin":false},"repo":{"id":2045207,"name":"jetty.project","full_name":"eclipse/jetty.project","owner":{"login":"eclipse","id":56974,"avatar_url":"https://avatars1.githubusercontent.com/u/56974?v=4","gravatar_id":"","url":"https://api.github.com/users/eclipse","html_url":"https://github.com/eclipse","followers_url":"https://api.github.com/users/eclipse/followers","following_url":"https://api.github.com/users/eclipse/following{/other_user}","gists_url":"https://api.github.com/users/eclipse/gists{/gist_id}","starred_url":"https://api.github.com/users/eclipse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eclipse/subscriptions","organizations_url":"https://api.github.com/users/eclipse/orgs","repos_url":"https://api.github.com/users/eclipse/repos","events_url":"https://api.github.com/users/eclipse/events{/privacy}","received_events_url":"https://api.github.com/users/eclipse/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/eclipse/jetty.project","description":"Eclipse Jetty® - Web Container & Clients - supports HTTP/2, HTTP/1.1, HTTP/1.0, websocket, servlets, and more","fork":false,"url":"https://api.github.com/repos/eclipse/jetty.project","forks_url":"https://api.github.com/repos/eclipse/jetty.project/forks","keys_url":"https://api.github.com/repos/eclipse/jetty.project/keys{/key_id}","collaborators_url":"https://api.github.com/repos/eclipse/jetty.project/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/eclipse/jetty.project/teams","hooks_url":"https://api.github.com/repos/eclipse/jetty.project/hooks","issue_events_url":"https://api.github.com/repos/eclipse/jetty.project/issues/events{/number}","events_url":"https://api.github.com/repos/eclipse/jetty.project/events","assignees_url":"https://api.github.com/repos/eclipse/jetty.project/assignees{/user}","branches_url":"https://api.github.com/repos/eclipse/jetty.project/branches{/branch}","tags_url":"https://api.github.com/repos/eclipse/jetty.project/tags","blobs_url":"https://api.github.com/repos/eclipse/jetty.project/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/eclipse/jetty.project/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/eclipse/jetty.project/git/refs{/sha}","trees_url":"https://api.github.com/repos/eclipse/jetty.project/git/trees{/sha}","statuses_url":"https://api.github.com/repos/eclipse/jetty.project/statuses/{sha}","languages_url":"https://api.github.com/repos/eclipse/jetty.project/languages","stargazers_url":"https://api.github.com/repos/eclipse/jetty.project/stargazers","contributors_url":"https://api.github.com/repos/eclipse/jetty.project/contributors","subscribers_url":"https://api.github.com/repos/eclipse/jetty.project/subscribers","subscription_url":"https://api.github.com/repos/eclipse/jetty.project/subscription","commits_url":"https://api.github.com/repos/eclipse/jetty.project/commits{/sha}","git_commits_url":"https://api.github.com/repos/eclipse/jetty.project/git/commits{/sha}","comments_url":"https://api.github.com/repos/eclipse/jetty.project/comments{/number}","issue_comment_url":"https://api.github.com/repos/eclipse/jetty.project/issues/comments{/number}","contents_url":"https://api.github.com/repos/eclipse/jetty.project/contents/{+path}","compare_url":"https://api.github.com/repos/eclipse/jetty.project/compare/{base}...{head}","merges_url":"https://api.github.com/repos/eclipse/jetty.project/merges","archive_url":"https://api.github.com/repos/eclipse/jetty.project/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/eclipse/jetty.project/downloads","issues_url":"https://api.github.com/repos/eclipse/jetty.project/issues{/number}","pulls_url":"https://api.github.com/repos/eclipse/jetty.project/pulls{/number}","milestones_url":"https://api.github.com/repos/eclipse/jetty.project/milestones{/number}","notifications_url":"https://api.github.com/repos/eclipse/jetty.project/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/eclipse/jetty.project/labels{/name}","releases_url":"https://api.github.com/repos/eclipse/jetty.project/releases{/id}","deployments_url":"https://api.github.com/repos/eclipse/jetty.project/deployments","created_at":"2011-07-14T01:11:57Z","updated_at":"2018-03-08T01:22:16Z","pushed_at":"2018-03-08T06:48:05Z","git_url":"git://github.com/eclipse/jetty.project.git","ssh_url":"git@github.com:eclipse/jetty.project.git","clone_url":"https://github.com/eclipse/jetty.project.git","svn_url":"https://github.com/eclipse/jetty.project","homepage":"https://www.eclipse.org/jetty","size":111246,"stargazers_count":1869,"watchers_count":1869,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1136,"mirror_url":null,"archived":false,"open_issues_count":399,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":1136,"open_issues":399,"watchers":1869,"default_branch":"jetty-9.4.x"}},"_links":{"self":{"href":"https://api.github.com/repos/eclipse/jetty.project/pulls/2302"},"html":{"href":"https://github.com/eclipse/jetty.project/pull/2302"},"issue":{"href":"https://api.github.com/repos/eclipse/jetty.project/issues/2302"},"comments":{"href":"https://api.github.com/repos/eclipse/jetty.project/issues/2302/comments"},"review_comments":{"href":"https://api.github.com/repos/eclipse/jetty.project/pulls/2302/comments"},"review_comment":{"href":"https://api.github.com/repos/eclipse/jetty.project/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/eclipse/jetty.project/pulls/2302/commits"},"statuses":{"href":"https://api.github.com/repos/eclipse/jetty.project/statuses/946341bf8568cc0c897ddd9d6f468b602de7c55b"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"lachlan-roberts"}}