{"action":"created","comment":{"url":"https://api.github.com/repos/dulwich/dulwich/pulls/comments/178675360","pull_request_review_id":108771900,"id":178675360,"diff_hunk":"@@ -0,0 +1,189 @@\n+# test_paramiko_vendor.py\n+#\n+# Dulwich is dual-licensed under the Apache License, Version 2.0 and the GNU\n+# General Public License as public by the Free Software Foundation; version 2.0\n+# or (at your option) any later version. You can redistribute it and/or\n+# modify it under the terms of either of these two licenses.\n+#\n+# Unless required by applicable law or agreed to in writing, software\n+# distributed under the License is distributed on an \"AS IS\" BASIS,\n+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+# See the License for the specific language governing permissions and\n+# limitations under the License.\n+#\n+# You should have received a copy of the licenses; if not, see\n+# <http://www.gnu.org/licenses/> for a copy of the GNU General Public License\n+# and <http://www.apache.org/licenses/LICENSE-2.0> for a copy of the Apache\n+# License, Version 2.0.\n+#\n+\n+\"\"\"Tests for paramiko_vendor.\"\"\"\n+\n+import socket\n+import paramiko\n+import threading\n+\n+from dulwich.tests import TestCase\n+from dulwich.contrib.paramiko_vendor import ParamikoSSHVendor\n+\n+try:\n+    from StringIO import StringIO\n+except ImportError:\n+    from io import StringIO\n+\n+\n+USER = 'testuser'\n+PASSWORD = 'test'\n+SERVER_KEY = \"\"\"\\\n+-----BEGIN RSA PRIVATE KEY-----\n+MIIEpAIBAAKCAQEAy/L1sSYAzxsMprtNXW4u/1jGXXkQmQ2xtmKVlR+RlIL3a1BH\n+bzTpPlZyjltAAwzIP8XRh0iJFKz5y3zSQChhX47ZGN0NvQsVct8R+YwsUonwfAJ+\n+JN0KBKKvC8fPHlzqBr3gX+ZxqsFH934tQ6wdQPH5eQWtdM8L826lMsH1737uyTGk\n++mCSDjL3c6EzY83g7qhkJU2R4qbi6ne01FaWADzG8sOzXnHT+xpxtk8TTT8yCVUY\n+MmBNsSoA/ka3iWz70ghB+6Xb0WpFJZXWq1oYovviPAfZGZSrxBZMxsWMye70SdLl\n+TqsBEt0+miIcm9s0fvjWvQuhaHX6mZs5VO4r5QIDAQABAoIBAGYqeYWaYgFdrYLA\n+hUrubUCg+g3NHdFuGL4iuIgRXl4lFUh+2KoOuWDu8Uf60iA1AQNhV0sLvQ/Mbv3O\n+s4xMLisuZfaclctDiCUZNenqnDFkxEF7BjH1QJV94W5nU4wEQ3/JEmM4D2zYkfKb\n+FJW33JeyH6TOgUvohDYYEU1R+J9V8qA243p+ui1uVtNI6Pb0TXJnG5y9Ny4vkSWH\n+Fi0QoMPR1r9xJ4SEearGzA/crb4SmmDTKhGSoMsT3d5ATieLmwcS66xWz8w4oFGJ\n+yzDq24s4Fp9ccNjMf/xR8XRiekJv835gjEqwF9IXyvgOaq6XJ1iCqGPFDKa25nui\n+JnEstOkCgYEA/ZXk7aIanvdeJlTqpX578sJfCnrXLydzE8emk1b7+5mrzGxQ4/pM\n+PBQs2f8glT3t0O0mRX9NoRqnwrid88/b+cY4NCOICFZeasX336/gYQxyVeRLJS6Z\n+hnGEQqry8qS7PdKAyeHMNmZFrUh4EiHiObymEfQS+mkRUObn0cGBTw8CgYEAzeQU\n+D2baec1DawjppKaRynAvWjp+9ry1lZx9unryKVRwjRjkEpw+b3/+hdaF1IvsVSce\n+cNj+6W2guZ2tyHuPhZ64/4SJVyE2hKDSKD4xTb2nVjsMeN0bLD2UWXC9mwbx8nWa\n+2tmtUZ7a/okQb2cSdosJinRewLNqXIsBXamT1csCgYEA0cXb2RCOQQ6U3dTFPx4A\n+3vMXuA2iUKmrsqMoEx6T2LBow/Sefdkik1iFOdipVYwjXP+w9zC2QR1Rxez/DR/X\n+8ymceNUjxPHdrSoTQQG29dFcC92MpDeGXQcuyA+uZjcLhbrLOzYEvsOfxBb87NMG\n+14hNQPDNekTMREafYo9WrtUCgYAREK54+FVzcwf7fymedA/xb4r9N4v+d3W1iNsC\n+8d3Qfyc1CrMct8aVB07ZWQaOr2pPRIbJY7L9NhD0UZVt4I/sy1MaGqonhqE2LP4+\n+R6legDG2e/50ph7yc8gwAaA1kUXMiuLi8Nfkw/3yyvmJwklNegi4aRzRbA2Mzhi2\n+4q9WMQKBgQCb0JNyxHG4pvLWCF/j0Sm1FfvrpnqSv5678n1j4GX7Ka/TubOK1Y4K\n+U+Oib7dKa/zQMWehVFNTayrsq6bKVZ6q7zG+IHiRLw4wjeAxREFH6WUjDrn9vl2l\n+D48DKbBuBwuVOJWyq3qbfgJXojscgNQklrsPdXVhDwOF0dYxP89HnA==\"\"\"\n+CLIENT_KEY = \"\"\"\\\n+-----BEGIN RSA PRIVATE KEY-----\n+MIIEpAIBAAKCAQEAxvREKSElPOm/0z/nPO+j5rk2tjdgGcGc7We1QZ6TRXYLu7nN\n+GeEFIL4p8N1i6dmB+Eydt7xqCU79MWD6Yy4prFe1+/K1wCDUxIbFMxqQcX5zjJzd\n+i8j8PbcaUlVhP/OkjtkSxrXaGDO1BzfdV4iEBtTV/2l3zmLKJlt3jnOHLczP24CB\n+DTQKp3rKshbRefzot9Y+wnaK692RsYgsyo9YEP0GyWKG9topCHk13r46J6vGLeuj\n+ryUKqmbLJkzbJbIcEqwTDo5iHaCVqaMr5Hrb8BdMucSseqZQJsXSd+9tdRcIblUQ\n+38kZjmFMm4SFbruJcpZCNM2wNSZPIRX+3eiwNwIDAQABAoIBAHSacOBSJsr+jIi5\n+KUOTh9IPtzswVUiDKwARCjB9Sf8p4lKR4N1L/n9kNJyQhApeikgGT2GCMftmqgoo\n+tlculQoHFgemBlOmak0MV8NNzF5YKEy/GzF0CDH7gJfEpoyetVFrdA+2QS5yD6U9\n+XqKQxiBi2VEqdScmyyeT8AwzNYTnPeH/DOEcnbdRjqiy/CD79F49CQ1lX1Fuqm0K\n+I7BivBH1xo/rVnUP4F+IzocDqoga+Pjdj0LTXIgJlHQDSbhsQqWujWQDDuKb+MAw\n+sNK4Zf8ErV3j1PyA7f/M5LLq6zgstkW4qikDHo4SpZX8kFOO8tjqb7kujj7XqeaB\n+CxqrOTECgYEA73uWkrohcmDJ4KqbuL3tbExSCOUiaIV+sT1eGPNi7GCmXD4eW5Z4\n+75v2IHymW83lORSu/DrQ6sKr1nkuRpqr2iBzRmQpl/H+wahIhBXlnJ25uUjDsuPO\n+1Pq2LcmyD+jTxVnmbSe/q7O09gZQw3I6H4+BMHmpbf8tC97lqimzpJ0CgYEA1K0W\n+ZL70Xtn9quyHvbtae/BW07NZnxvUg4UaVIAL9Zu34JyplJzyzbIjrmlDbv6aRogH\n+/KtuG9tfbf55K/jjqNORiuRtzt1hUN1ye4dyW7tHx2/7lXdlqtyK40rQl8P0kqf8\n+zaS6BqjnobgSdSpg32rWoL/pcBHPdJCJEgQ8zeMCgYEA0/PK8TOhNIzrP1dgGSKn\n+hkkJ9etuB5nW5mEM7gJDFDf6JPupfJ/xiwe6z0fjKK9S57EhqgUYMB55XYnE5iIw\n+ZQ6BV9SAZ4V7VsRs4dJLdNC3tn/rDGHJBgCaym2PlbsX6rvFT+h1IC8dwv0V79Ui\n+Ehq9WTzkMoE8yhvNokvkPZUCgYEAgBAFxv5xGdh79ftdtXLmhnDvZ6S8l6Fjcxqo\n+Ay/jg66Tp43OU226iv/0mmZKM8Dd1xC8dnon4GBVc19jSYYiWBulrRPlx0Xo/o+K\n+CzZBN1lrXH1i6dqufpc0jq8TMf/N+q1q/c1uMupsKCY1/xVYpc+ok71b7J7c49zQ\n+nOeuUW8CgYA9Infooy65FTgbzca0c9kbCUBmcAPQ2ItH3JcPKWPQTDuV62HcT00o\n+fZdIV47Nez1W5Clk191RMy8TXuqI54kocciUWpThc6j44hz49oUueb8U4bLcEHzA\n+WxtWBWHwxfSmqgTXilEA3ALJp0kNolLnEttnhENwJpZHlqtes0ZA4w==\n+-----END RSA PRIVATE KEY-----\"\"\"\n+\n+\n+class Server(paramiko.ServerInterface):\n+    \"\"\"http://docs.paramiko.org/en/2.4/api/server.html\"\"\"\n+    def __init__(self, commands, *args, **kwargs):\n+        super(Server, self).__init__(*args, **kwargs)\n+        self.commands = commands\n+\n+    def check_channel_exec_request(self, channel, command):\n+        self.commands.append(command)\n+        return True\n+\n+    def check_auth_password(self, username, password):\n+        if username == USER and password == PASSWORD:\n+            return paramiko.AUTH_SUCCESSFUL\n+        return paramiko.AUTH_FAILED\n+\n+    def check_auth_publickey(self, username, key):\n+        pubkey = paramiko.RSAKey.from_private_key(StringIO(CLIENT_KEY))\n+        if username == USER and key == pubkey:\n+            return paramiko.AUTH_SUCCESSFUL\n+        return paramiko.AUTH_FAILED\n+\n+    def check_channel_request(self, kind, chanid):\n+        if kind == \"session\":\n+            return paramiko.OPEN_SUCCEEDED\n+        return paramiko.OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED\n+\n+    def get_allowed_auths(self, username):\n+        return \"password,publickey\"\n+\n+\n+class ParamikoSSHVendorTests(TestCase):\n+    def setUp(self):\n+        self.commands = []\n+        socket.setdefaulttimeout(10)\n+        self.addCleanup(socket.setdefaulttimeout, None)","path":"dulwich/contrib/test_paramiko_vendor.py","position":128,"original_position":128,"commit_id":"e6ffae5568a32cd49bba0f6a933224d55e061204","original_commit_id":"e6ffae5568a32cd49bba0f6a933224d55e061204","user":{"login":"jelmer","id":49032,"avatar_url":"https://avatars3.githubusercontent.com/u/49032?v=4","gravatar_id":"","url":"https://api.github.com/users/jelmer","html_url":"https://github.com/jelmer","followers_url":"https://api.github.com/users/jelmer/followers","following_url":"https://api.github.com/users/jelmer/following{/other_user}","gists_url":"https://api.github.com/users/jelmer/gists{/gist_id}","starred_url":"https://api.github.com/users/jelmer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jelmer/subscriptions","organizations_url":"https://api.github.com/users/jelmer/orgs","repos_url":"https://api.github.com/users/jelmer/repos","events_url":"https://api.github.com/users/jelmer/events{/privacy}","received_events_url":"https://api.github.com/users/jelmer/received_events","type":"User","site_admin":false},"body":"Why set the timeout on a socket that's going away?","created_at":"2018-04-02T23:12:33Z","updated_at":"2018-04-02T23:12:34Z","html_url":"https://github.com/dulwich/dulwich/pull/618#discussion_r178675360","pull_request_url":"https://api.github.com/repos/dulwich/dulwich/pulls/618","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/dulwich/dulwich/pulls/comments/178675360"},"html":{"href":"https://github.com/dulwich/dulwich/pull/618#discussion_r178675360"},"pull_request":{"href":"https://api.github.com/repos/dulwich/dulwich/pulls/618"}}},"pull_request":{"url":"https://api.github.com/repos/dulwich/dulwich/pulls/618","id":178608622,"html_url":"https://github.com/dulwich/dulwich/pull/618","diff_url":"https://github.com/dulwich/dulwich/pull/618.diff","patch_url":"https://github.com/dulwich/dulwich/pull/618.patch","issue_url":"https://api.github.com/repos/dulwich/dulwich/issues/618","number":618,"state":"open","locked":false,"title":"add Paramiko tests","user":{"login":"Friz-zy","id":870618,"avatar_url":"https://avatars0.githubusercontent.com/u/870618?v=4","gravatar_id":"","url":"https://api.github.com/users/Friz-zy","html_url":"https://github.com/Friz-zy","followers_url":"https://api.github.com/users/Friz-zy/followers","following_url":"https://api.github.com/users/Friz-zy/following{/other_user}","gists_url":"https://api.github.com/users/Friz-zy/gists{/gist_id}","starred_url":"https://api.github.com/users/Friz-zy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Friz-zy/subscriptions","organizations_url":"https://api.github.com/users/Friz-zy/orgs","repos_url":"https://api.github.com/users/Friz-zy/repos","events_url":"https://api.github.com/users/Friz-zy/events{/privacy}","received_events_url":"https://api.github.com/users/Friz-zy/received_events","type":"User","site_admin":false},"body":"Add minimal test cases for `ParamikoSSHVendor` according to https://github.com/dulwich/dulwich/issues/364\r\n\r\nI spent whole day trying to do the adopt test ssh server and then I understanded, that we need test only paramiko api, not ssh connection itself xD","created_at":"2018-03-30T18:16:04Z","updated_at":"2018-04-02T23:12:34Z","closed_at":null,"merged_at":null,"merge_commit_sha":"391803035dc48c34d702fa8089d1d09e04632053","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/dulwich/dulwich/pulls/618/commits","review_comments_url":"https://api.github.com/repos/dulwich/dulwich/pulls/618/comments","review_comment_url":"https://api.github.com/repos/dulwich/dulwich/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dulwich/dulwich/issues/618/comments","statuses_url":"https://api.github.com/repos/dulwich/dulwich/statuses/e6ffae5568a32cd49bba0f6a933224d55e061204","head":{"label":"Friz-zy:paramiko","ref":"paramiko","sha":"e6ffae5568a32cd49bba0f6a933224d55e061204","user":{"login":"Friz-zy","id":870618,"avatar_url":"https://avatars0.githubusercontent.com/u/870618?v=4","gravatar_id":"","url":"https://api.github.com/users/Friz-zy","html_url":"https://github.com/Friz-zy","followers_url":"https://api.github.com/users/Friz-zy/followers","following_url":"https://api.github.com/users/Friz-zy/following{/other_user}","gists_url":"https://api.github.com/users/Friz-zy/gists{/gist_id}","starred_url":"https://api.github.com/users/Friz-zy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Friz-zy/subscriptions","organizations_url":"https://api.github.com/users/Friz-zy/orgs","repos_url":"https://api.github.com/users/Friz-zy/repos","events_url":"https://api.github.com/users/Friz-zy/events{/privacy}","received_events_url":"https://api.github.com/users/Friz-zy/received_events","type":"User","site_admin":false},"repo":{"id":127430885,"name":"dulwich","full_name":"Friz-zy/dulwich","owner":{"login":"Friz-zy","id":870618,"avatar_url":"https://avatars0.githubusercontent.com/u/870618?v=4","gravatar_id":"","url":"https://api.github.com/users/Friz-zy","html_url":"https://github.com/Friz-zy","followers_url":"https://api.github.com/users/Friz-zy/followers","following_url":"https://api.github.com/users/Friz-zy/following{/other_user}","gists_url":"https://api.github.com/users/Friz-zy/gists{/gist_id}","starred_url":"https://api.github.com/users/Friz-zy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Friz-zy/subscriptions","organizations_url":"https://api.github.com/users/Friz-zy/orgs","repos_url":"https://api.github.com/users/Friz-zy/repos","events_url":"https://api.github.com/users/Friz-zy/events{/privacy}","received_events_url":"https://api.github.com/users/Friz-zy/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Friz-zy/dulwich","description":"Pure-Python Git implementation","fork":true,"url":"https://api.github.com/repos/Friz-zy/dulwich","forks_url":"https://api.github.com/repos/Friz-zy/dulwich/forks","keys_url":"https://api.github.com/repos/Friz-zy/dulwich/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Friz-zy/dulwich/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Friz-zy/dulwich/teams","hooks_url":"https://api.github.com/repos/Friz-zy/dulwich/hooks","issue_events_url":"https://api.github.com/repos/Friz-zy/dulwich/issues/events{/number}","events_url":"https://api.github.com/repos/Friz-zy/dulwich/events","assignees_url":"https://api.github.com/repos/Friz-zy/dulwich/assignees{/user}","branches_url":"https://api.github.com/repos/Friz-zy/dulwich/branches{/branch}","tags_url":"https://api.github.com/repos/Friz-zy/dulwich/tags","blobs_url":"https://api.github.com/repos/Friz-zy/dulwich/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Friz-zy/dulwich/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Friz-zy/dulwich/git/refs{/sha}","trees_url":"https://api.github.com/repos/Friz-zy/dulwich/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Friz-zy/dulwich/statuses/{sha}","languages_url":"https://api.github.com/repos/Friz-zy/dulwich/languages","stargazers_url":"https://api.github.com/repos/Friz-zy/dulwich/stargazers","contributors_url":"https://api.github.com/repos/Friz-zy/dulwich/contributors","subscribers_url":"https://api.github.com/repos/Friz-zy/dulwich/subscribers","subscription_url":"https://api.github.com/repos/Friz-zy/dulwich/subscription","commits_url":"https://api.github.com/repos/Friz-zy/dulwich/commits{/sha}","git_commits_url":"https://api.github.com/repos/Friz-zy/dulwich/git/commits{/sha}","comments_url":"https://api.github.com/repos/Friz-zy/dulwich/comments{/number}","issue_comment_url":"https://api.github.com/repos/Friz-zy/dulwich/issues/comments{/number}","contents_url":"https://api.github.com/repos/Friz-zy/dulwich/contents/{+path}","compare_url":"https://api.github.com/repos/Friz-zy/dulwich/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Friz-zy/dulwich/merges","archive_url":"https://api.github.com/repos/Friz-zy/dulwich/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Friz-zy/dulwich/downloads","issues_url":"https://api.github.com/repos/Friz-zy/dulwich/issues{/number}","pulls_url":"https://api.github.com/repos/Friz-zy/dulwich/pulls{/number}","milestones_url":"https://api.github.com/repos/Friz-zy/dulwich/milestones{/number}","notifications_url":"https://api.github.com/repos/Friz-zy/dulwich/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Friz-zy/dulwich/labels{/name}","releases_url":"https://api.github.com/repos/Friz-zy/dulwich/releases{/id}","deployments_url":"https://api.github.com/repos/Friz-zy/dulwich/deployments","created_at":"2018-03-30T13:23:41Z","updated_at":"2018-03-30T13:23:44Z","pushed_at":"2018-04-02T22:00:58Z","git_url":"git://github.com/Friz-zy/dulwich.git","ssh_url":"git@github.com:Friz-zy/dulwich.git","clone_url":"https://github.com/Friz-zy/dulwich.git","svn_url":"https://github.com/Friz-zy/dulwich","homepage":"https://www.dulwich.io/","size":10162,"stargazers_count":0,"watchers_count":0,"language":"Python","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":"other","name":"Other","spdx_id":null,"url":null},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"dulwich:master","ref":"master","sha":"26c4e277838f043820fc263a40883a288e5ce9f0","user":{"login":"dulwich","id":6109910,"avatar_url":"https://avatars3.githubusercontent.com/u/6109910?v=4","gravatar_id":"","url":"https://api.github.com/users/dulwich","html_url":"https://github.com/dulwich","followers_url":"https://api.github.com/users/dulwich/followers","following_url":"https://api.github.com/users/dulwich/following{/other_user}","gists_url":"https://api.github.com/users/dulwich/gists{/gist_id}","starred_url":"https://api.github.com/users/dulwich/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dulwich/subscriptions","organizations_url":"https://api.github.com/users/dulwich/orgs","repos_url":"https://api.github.com/users/dulwich/repos","events_url":"https://api.github.com/users/dulwich/events{/privacy}","received_events_url":"https://api.github.com/users/dulwich/received_events","type":"Organization","site_admin":false},"repo":{"id":156187,"name":"dulwich","full_name":"dulwich/dulwich","owner":{"login":"dulwich","id":6109910,"avatar_url":"https://avatars3.githubusercontent.com/u/6109910?v=4","gravatar_id":"","url":"https://api.github.com/users/dulwich","html_url":"https://github.com/dulwich","followers_url":"https://api.github.com/users/dulwich/followers","following_url":"https://api.github.com/users/dulwich/following{/other_user}","gists_url":"https://api.github.com/users/dulwich/gists{/gist_id}","starred_url":"https://api.github.com/users/dulwich/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dulwich/subscriptions","organizations_url":"https://api.github.com/users/dulwich/orgs","repos_url":"https://api.github.com/users/dulwich/repos","events_url":"https://api.github.com/users/dulwich/events{/privacy}","received_events_url":"https://api.github.com/users/dulwich/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dulwich/dulwich","description":"Pure-Python Git implementation","fork":false,"url":"https://api.github.com/repos/dulwich/dulwich","forks_url":"https://api.github.com/repos/dulwich/dulwich/forks","keys_url":"https://api.github.com/repos/dulwich/dulwich/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dulwich/dulwich/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dulwich/dulwich/teams","hooks_url":"https://api.github.com/repos/dulwich/dulwich/hooks","issue_events_url":"https://api.github.com/repos/dulwich/dulwich/issues/events{/number}","events_url":"https://api.github.com/repos/dulwich/dulwich/events","assignees_url":"https://api.github.com/repos/dulwich/dulwich/assignees{/user}","branches_url":"https://api.github.com/repos/dulwich/dulwich/branches{/branch}","tags_url":"https://api.github.com/repos/dulwich/dulwich/tags","blobs_url":"https://api.github.com/repos/dulwich/dulwich/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dulwich/dulwich/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dulwich/dulwich/git/refs{/sha}","trees_url":"https://api.github.com/repos/dulwich/dulwich/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dulwich/dulwich/statuses/{sha}","languages_url":"https://api.github.com/repos/dulwich/dulwich/languages","stargazers_url":"https://api.github.com/repos/dulwich/dulwich/stargazers","contributors_url":"https://api.github.com/repos/dulwich/dulwich/contributors","subscribers_url":"https://api.github.com/repos/dulwich/dulwich/subscribers","subscription_url":"https://api.github.com/repos/dulwich/dulwich/subscription","commits_url":"https://api.github.com/repos/dulwich/dulwich/commits{/sha}","git_commits_url":"https://api.github.com/repos/dulwich/dulwich/git/commits{/sha}","comments_url":"https://api.github.com/repos/dulwich/dulwich/comments{/number}","issue_comment_url":"https://api.github.com/repos/dulwich/dulwich/issues/comments{/number}","contents_url":"https://api.github.com/repos/dulwich/dulwich/contents/{+path}","compare_url":"https://api.github.com/repos/dulwich/dulwich/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dulwich/dulwich/merges","archive_url":"https://api.github.com/repos/dulwich/dulwich/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dulwich/dulwich/downloads","issues_url":"https://api.github.com/repos/dulwich/dulwich/issues{/number}","pulls_url":"https://api.github.com/repos/dulwich/dulwich/pulls{/number}","milestones_url":"https://api.github.com/repos/dulwich/dulwich/milestones{/number}","notifications_url":"https://api.github.com/repos/dulwich/dulwich/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dulwich/dulwich/labels{/name}","releases_url":"https://api.github.com/repos/dulwich/dulwich/releases{/id}","deployments_url":"https://api.github.com/repos/dulwich/dulwich/deployments","created_at":"2009-03-22T05:09:18Z","updated_at":"2018-04-02T18:52:10Z","pushed_at":"2018-04-02T22:00:59Z","git_url":"git://github.com/dulwich/dulwich.git","ssh_url":"git@github.com:dulwich/dulwich.git","clone_url":"https://github.com/dulwich/dulwich.git","svn_url":"https://github.com/dulwich/dulwich","homepage":"https://www.dulwich.io/","size":10344,"stargazers_count":1151,"watchers_count":1151,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":259,"mirror_url":null,"archived":false,"open_issues_count":45,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":259,"open_issues":45,"watchers":1151,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dulwich/dulwich/pulls/618"},"html":{"href":"https://github.com/dulwich/dulwich/pull/618"},"issue":{"href":"https://api.github.com/repos/dulwich/dulwich/issues/618"},"comments":{"href":"https://api.github.com/repos/dulwich/dulwich/issues/618/comments"},"review_comments":{"href":"https://api.github.com/repos/dulwich/dulwich/pulls/618/comments"},"review_comment":{"href":"https://api.github.com/repos/dulwich/dulwich/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dulwich/dulwich/pulls/618/commits"},"statuses":{"href":"https://api.github.com/repos/dulwich/dulwich/statuses/e6ffae5568a32cd49bba0f6a933224d55e061204"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"jelmer"}}