{"action":"created","comment":{"url":"https://api.github.com/repos/apache/couchdb/pulls/comments/232695625","pull_request_review_id":173947693,"id":232695625,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzMjY5NTYyNQ==","diff_hunk":"@@ -481,18 +482,62 @@ db_req(#httpd{method='POST', path_parts=[_, <<\"_bulk_get\">>]}=Req, Db) ->\n             } = bulk_get_parse_doc_query(Req),\n             Options = [{user_ctx, Req#httpd.user_ctx} | Options0],\n \n-            {ok, Resp} = start_json_response(Req, 200),\n-            send_chunk(Resp, <<\"{\\\"results\\\": [\">>),\n-\n-            lists:foldl(fun(Doc, Sep) ->\n-                {DocId, Results, Options1} = bulk_get_open_doc_revs(Db, Doc,\n-                                                                    Options),\n-                bulk_get_send_docs_json(Resp, DocId, Results, Options1, Sep),\n-                <<\",\">>\n-            end, <<\"\">>, Docs),\n-\n-            send_chunk(Resp, <<\"]}\">>),\n-            end_json_response(Resp)\n+            % Decide whether to use multipart response or application/json\n+            AcceptMixedMp = MochiReq:accepts_content_type(\"multipart/mixed\"),\n+            AcceptRelatedMp = MochiReq:accepts_content_type(\"multipart/related\"),\n+            AcceptMp = AcceptMixedMp orelse AcceptRelatedMp,","path":"src/chttpd/src/chttpd_db.erl","position":28,"original_position":29,"commit_id":"b18a89325c6a4c2a8b46d503c2e6155a9f46b405","original_commit_id":"cdbe92cfa2f755339f44b356b8f76bc2cdc53405","user":{"login":"AlexanderKaraberov","id":3254818,"node_id":"MDQ6VXNlcjMyNTQ4MTg=","avatar_url":"https://avatars1.githubusercontent.com/u/3254818?v=4","gravatar_id":"","url":"https://api.github.com/users/AlexanderKaraberov","html_url":"https://github.com/AlexanderKaraberov","followers_url":"https://api.github.com/users/AlexanderKaraberov/followers","following_url":"https://api.github.com/users/AlexanderKaraberov/following{/other_user}","gists_url":"https://api.github.com/users/AlexanderKaraberov/gists{/gist_id}","starred_url":"https://api.github.com/users/AlexanderKaraberov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlexanderKaraberov/subscriptions","organizations_url":"https://api.github.com/users/AlexanderKaraberov/orgs","repos_url":"https://api.github.com/users/AlexanderKaraberov/repos","events_url":"https://api.github.com/users/AlexanderKaraberov/events{/privacy}","received_events_url":"https://api.github.com/users/AlexanderKaraberov/received_events","type":"User","site_admin":false},"body":"@nickva Also I see the same logic in the normal db/doc request [here](https://github.com/apache/couchdb/blob/master/src/chttpd/src/chttpd_db.erl#L756) where we first just check for `multipart` `Accept` header. When i wrote this implementation for `_bulk_get` I mostly copied `db_doc_req` logic.","created_at":"2018-11-12T15:14:59Z","updated_at":"2018-11-12T15:14:59Z","html_url":"https://github.com/apache/couchdb/pull/1195#discussion_r232695625","pull_request_url":"https://api.github.com/repos/apache/couchdb/pulls/1195","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/apache/couchdb/pulls/comments/232695625"},"html":{"href":"https://github.com/apache/couchdb/pull/1195#discussion_r232695625"},"pull_request":{"href":"https://api.github.com/repos/apache/couchdb/pulls/1195"}},"in_reply_to_id":232427519},"pull_request":{"url":"https://api.github.com/repos/apache/couchdb/pulls/1195","id":172556843,"node_id":"MDExOlB1bGxSZXF1ZXN0MTcyNTU2ODQz","html_url":"https://github.com/apache/couchdb/pull/1195","diff_url":"https://github.com/apache/couchdb/pull/1195.diff","patch_url":"https://github.com/apache/couchdb/pull/1195.patch","issue_url":"https://api.github.com/repos/apache/couchdb/issues/1195","number":1195,"state":"open","locked":false,"title":"Add support for bulk get with Accept:\"multipart/mixed\" or \"multipart/related\"","user":{"login":"AlexanderKaraberov","id":3254818,"node_id":"MDQ6VXNlcjMyNTQ4MTg=","avatar_url":"https://avatars1.githubusercontent.com/u/3254818?v=4","gravatar_id":"","url":"https://api.github.com/users/AlexanderKaraberov","html_url":"https://github.com/AlexanderKaraberov","followers_url":"https://api.github.com/users/AlexanderKaraberov/followers","following_url":"https://api.github.com/users/AlexanderKaraberov/following{/other_user}","gists_url":"https://api.github.com/users/AlexanderKaraberov/gists{/gist_id}","starred_url":"https://api.github.com/users/AlexanderKaraberov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AlexanderKaraberov/subscriptions","organizations_url":"https://api.github.com/users/AlexanderKaraberov/orgs","repos_url":"https://api.github.com/users/AlexanderKaraberov/repos","events_url":"https://api.github.com/users/AlexanderKaraberov/events{/privacy}","received_events_url":"https://api.github.com/users/AlexanderKaraberov/received_events","type":"User","site_admin":false},"body":"## Overview\r\n\r\nCouchDB currently has support for `_bulk_get` requests which are intended to improve performance of client pull replications, by allowing the client to request multiple documents in one request. But current implementation has some limitations namely: attachment bodies can only be encoded inline (base64) not as MIME multipart bodies. Another issue which is much more important I believe: current _bulk_get implementation in CouchDB is not compatible with the [Couchbase Lite 1.4.x](https://github.com/couchbase/couchbase-lite-ios/tree/release/1.4.1) for iOS and Android which powers plenty of CouchDB mobile clients (in our company as well) as a replication and persistence layer. This is because CBL's `BulkDownloader` accepts [multipart/related content type](https://github.com/couchbase/couchbase-lite-ios/blob/release/1.4.1/Source/CBLBulkDownloader.m#L85) and not `application/json`. I understand that probably this was done to make life easier for web clients and in-browser DBs such as [PouchDB](https://github.com/pouchdb/pouchdb) or whatnot, but still this functionality might be extended to provide even more use cases for CouchDB’s `_bulk_get`. In order to sum up I believe that this is a must-have feature. \r\nThis PR adds support for `multipart/related`/`multipart/mixed` bulk get response which is compatible with Couchbase Lite and [Sync Gateway](https://github.com/couchbase/sync_gateway/wiki/Bulk-GET) implementations. At first I implemented this functionality in our own CouchDB 2.x fork which we run in production, because this was very crucial for us, as I mentioned before, but then we realised that it would be great to contribute this to the upstream CouchDB as well. \r\nLogic and implementation is pretty straightforward and compact: depending on the `case MochiReq:accepts_content_type(\"multipart/mixed\" or \"multipart/related\")` I pick either a default CouchDB's `_bulk_get` implementation or a multipart one which is based on existing `couch_doc:doc_to_multi_part_stream()` and `couch_httpd_db:encode_multipart_stream()` functionality.\r\nWe’ve already tested this with some of our production CouchDB databases and speedup was very perceptible. I think this feature will be very useful because there may be a lot of Couchbase Lite <-> CouchDB users who can't benefit from the` _bulk_get` because of `application/json`-only response. Moreover this is a completely additive change which doesn't break or change existing functionality. Test suite is completely based on the `chttpd_db_bulk_get_test` I've just changed test fixture and some helpers a little bit.\r\n\r\n## Testing recommendations\r\nFor testing create a `db1`, put some docs there: \r\n```\r\ncurl -u admin:pass -X PUT http://127.0.0.1:5983/db1\r\ncurl -u admin:pass -H \"Content-Type: application/json\" -X PUT http://127.0.0.1:5983/db1/doc1 -d '{\"type\":\"a\"}'\r\ncurl -u admin:pass -H \"Content-Type: application/json\" -X PUT http://127.0.0.1:5983/db1/doc2 -d '{\"type\":\"a\"}'\r\ncurl -u admin:pass -H \"Content-Type: application/json\" -X PUT http://127.0.0.1:5983/db1/doc3 -d '{\"type\":\"b\"}'\r\n```\r\nAlso add attachments for some of the docs (.png images or whatnot). \r\nAdd this request body to `bulkGetBody.txt`file (revisions have to be the same as in the corresponding documents):\r\n```\r\n{\r\n\t\"docs\": [\r\n\t\t{\r\n\t\t\t\"id\": \"doc1\",\r\n\t\t\t\"rev\": \"3-22e6a8c0ef498f4d23b76ecaa58125ab\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"id\": \"doc2\",\r\n\t\t\t\"rev\": \"4-cf4a89993599f6e8c0e3b22d617284b5\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"id\": \"doc3\",\r\n\t\t\t\"rev\": \"14-db7f140e90ac3c45f7610eb496d1f883\"\r\n\t\t}\r\n\t]\r\n}\r\n```\r\nAfter this you can execute this curl command:\r\n```\r\ncurl -u admin:pass -X POST -H \"Content-Type: application/json\" -H \"Accept: multipart/related\" -H \"X-Accept-Part-Encoding: gzip\" --data \"@bulkGetBody.txt\" -o \"response.txt\" http://127.0.0.1:5983/db1/_bulk_get?revs=true&attachments=true\r\n```\r\nThen in the `response.txt` you can observe this:\r\n```\r\n\r\n-----------------------------6ee0167da37f8532e116048afff16018\r\nContent-Type: application/json\r\n\r\n{\"_id\":\"doc1\",\"_rev\":\"3-22e6a8c0ef498f4d23b76ecaa58125ab\",\"type\":\"global-local\",\"_revisions\":{\"start\":3,\"ids\":[\"22e6a8c0ef498f4d23b76ecaa58125ab\",\"2a72890299a3d2039bdbcf8ef995e11a\",\"3b39bc699524dd81add4d6c082a7246c\"]}}\r\n-----------------------------6ee0167da37f8532e116048afff16018\r\nX-Doc-Id: doc2\r\nX-Rev-Id: 4-cf4a89993599f6e8c0e3b22d617284b5\r\nContent-Type: multipart/related; boundary=---------------------------57057c1b37c205a20e0e005511f26fea\r\n\r\n-----------------------------57057c1b37c205a20e0e005511f26fea\r\nContent-Type: application/json\r\n\r\n{\"_id\":\"doc2\",\"_rev\":\"4-cf4a89993599f6e8c0e3b22d617284b5\",\"type\":\"abcd\",\"_revisions\":{\"start\":4,\"ids\":[\"cf4a89993599f6e8c0e3b22d617284b5\",\"575eaa2b49d3ffac7130596fc5d087b8\",\"704d58f7a66bf744f6944223eabc7c11\",\"3b39bc699524dd81add4d6c082a7246c\"]},\"_attachments\":{\"Screen Shot 2018-03-02 at 17.12.04.png\":{\"content_type\":\"image/png\",\"revpos\":4,\"digest\":\"md5-8MvuKqISDqfpg6YbUNhAXQ==\",\"length\":5942,\"follows\":true}}}\r\n-----------------------------57057c1b37c205a20e0e005511f26fea\r\nContent-Disposition: attachment; filename=\"Screen Shot 2018-03-02 at 17.12.04.png\"\r\nContent-Type: image/png\r\nContent-Length: 5942\r\n\r\n�PNG\r\n\u001A\r\n\r\nIHDR\u0004~\u0018\b\u0006�W:M\f\u0013iCCPICC ProfileH��W\u0007XS�\u0016�[R\b\t-\u0010\u0001)�w�W�]�t�\u0011���\u0012 !���E\u0005ׂ�\u0005EEWET\\\u000B kŮ,\u0002��@Eee],�Py�\u0002�����}s��3����ɹ�����*(�E��\u0013\u0016���\u0002��i�L�#�\u0012P\u0007t`�b�\u000B\u0002���������Mh\r\n嚝4ֿ��WQ�p�l�8�39bv\u001Eć\u0001���\u0005�\"\bmPo2��@�\u0007 �\u0014A�\u0010q)�ɱ�\u0014gʱ��&1>\bb�T\u0016K�\u0003@EʛY���8*R�\u000EB�@\b�&�}�|\u0016\u0007��\u0010����C�J��2��8����\u001C��b�F�<\u0017���\u0005��\\����\u001C�[�r%#k\u0018�A�����9ú��ɏ�b*�Ǆ�1�\u0010k@|Q���K�]�$<Ia��\u0016\u0007��\u0001\u0006(ం#!փ�!�I\r\nX@\u0004x�\u000B�\u0014�\u0011�\u0014ٌ\u0010>\u0013@\t�\u0013\".\u0010��\u0005�f��\u0018꿌j�O;�%�-�y䀧\u0010�Ẹ/��G��?\u001CN�\u0007�9��T\u001DY�\u0018B\f&�\u0013C�V�<ؐu.\u001C\" �7�H�����\\�#9|�GxJ�$<\"� t\u0013��d�D\u0016Ea5MP*��9\u0013D�n\u0018-T�]����搵+\u001E��@��;��u�\u001D�\u00023\t��`n�P�=C�(�o��q=)���Q�U�U\\\u0015,2G���Q�\u001F�\u0004}W#\u000E|G�h�-�\u000Ea\u0017���%�\u0018�\u0004��I�\u0019kÎK�h'<�u��j�2n90�`�ơޡ���\u000Fk�\u0014�K�%.��(�~\fA�\u00053E\u0002\u001E��\u0019wc.3Bȶ�e:98z ���[�\u001B�l�F\u0018���\r\n�^�F�ͮ�.o[\u0007�\u0006\u001F��{7����·�\u001F=>^�������Ϥ���X}i�\u001A���p��p\u0001KĒ\u001D\u000508Ь,^�\u0002��\u0006�\u000E\u001DPT�w/� ���\f�����3��\u0001��\u001F���D�3J\r\n\u001Cf\u0010S�[z�N�\u0007����P�8��I\u001E�\r\no0�\u000F��o�\u0001 ��E4<<�yx��\u000EH�\u000E�\r\n�w>�\u0010��~��\u0014u��\u0004?�?\u0001�Hm\u000F\u0019��\u0017\tpHYs\u0016%\u0016%\u0001IR$�\u0001�iTXtXML:com.adobe.xmp<x:xmpmeta xmlns:x=\"adobe:ns:meta/\" x:xmptk=\"XMP Core 5.4.0\">\r\n   <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\r\n      <rdf:Description rdf:about=\"\"\r\n            xmlns:exif=\"http://ns.adobe.com/exif/1.0/\">\r\n         <exif:PixelXDimension>1150</exif:PixelXDimension>\r\n         <exif:PixelYDimension>24</exif:PixelYDimension>\r\n      </rdf:Description>\r\n   </rdf:RDF>\r\n</x:xmpmeta>\r\n�T5j\u001CiDOT\u0002\f(\f\f\u0007\u001E8�j�\u0006�IDATx\u0001��{PUE\u0006��^.��\u0017/�q4T4_�iS��2�b�������$��5֨�5��\u001A�f�$N��\u0018�#�GÐ�����\u0003�7�\t>\u0011\u0001\u0011�\u0002�];g.WA\b���w\u0018t��ݳ������=�\r\n��:\u001C�����D��u�\u000B�R�\u0002\u0014�\u0005(@\u0001\r\nP�\u0002\u0014�Z���\\Y��EǪ\u001B5PMQ�#�����ܼ*G\f�\u0015��`�*뫫\u0010����@YY�l���\u0002.m[�|�-�[�.m��`���r�������x�]/|��Rmc]\u0010mGn\r\n\\�\u0004\b\u0010 @�\u0001\u0002\u0004�( ����ܙ�2\b�\u0003��t�\u0019���IEND�B`�\r\n-----------------------------57057c1b37c205a20e0e005511f26fea--\r\n-----------------------------6ee0167da37f8532e116048afff16018\r\nContent-Type: application/json\r\n\r\n{\"_id\":\"doc3\",\"_rev\":\"14-db7f140e90ac3c45f7610eb496d1f883\",\"type\":\"device desc\",\"owner\":\"test1\",\"_revisions\":{\"start\":14,\"ids\":[\"db7f140e90ac3c45f7610eb496d1f883\",\"75b189962e4db1506bdefba4e8a53506\",\"2697b5853e6c32f1739c41482aa5f1ef\",\"63c4159c84a80d37323b01aec7c161ca\",\"5595d98f421c07b52a0f0cb11258c477\",\"768778b61cbdd6b0a494983ba8ffb5da\",\"656300127ed067c36c36f28f0e6103ed\",\"645f7fe82e9f657079081aac88cfbfa7\",\"c1dc26224c314cda781e630f116a691a\",\"a1f39d16e73806dc1d65809714b1a95f\",\"8623367b1c730c7d40e6b389dbdd8ae4\",\"a7e171c070e7652a2b2a601d5e6ab49f\",\"c4b0a5d0bfa102ba443a42f7e3262099\",\"27a6e24202a782a849a36f25559a6773\"]}}\r\n-----------------------------6ee0167da37f8532e116048afff16018--\r\n```\r\nThis format is completely compatible with Couchbase Lite and also Sync Gateway implementation.\r\nFor testing you can also use Couchbase Lite database. In order to do this just set [_canBulkGet](https://github.com/couchbase/couchbase-lite-ios/blob/release/1.4.1/Source/CBLRestPuller.m#L488) variable to `YES` and then replicate db1 to iOS mobile device.\r\n \r\nI checked `Documentation reflects the changes` checkbox because I described the change quite meticulously and if this PR will be merged I would be delighted to update CouchDB docs as well. By the way I wasn't able to find a description for current `_bulk_doc` request in the docs  either so I can contribute to both.\r\n\r\n## Checklist\r\n\r\n- [x] Code is written and works correctly;\r\n- [x] Changes are covered by tests;\r\n- [x] Documentation reflects the changes;\r\n","created_at":"2018-03-02T17:14:14Z","updated_at":"2018-11-12T15:14:59Z","closed_at":null,"merged_at":null,"merge_commit_sha":"476fbac9bc05192214815b82e6103f00c24a1002","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":594291183,"node_id":"MDU6TGFiZWw1OTQyOTExODM=","url":"https://api.github.com/repos/apache/couchdb/labels/enhancement","name":"enhancement","color":"5EBEFF","default":true}],"milestone":null,"commits_url":"https://api.github.com/repos/apache/couchdb/pulls/1195/commits","review_comments_url":"https://api.github.com/repos/apache/couchdb/pulls/1195/comments","review_comment_url":"https://api.github.com/repos/apache/couchdb/pulls/comments{/number}","comments_url":"https://api.github.com/repos/apache/couchdb/issues/1195/comments","statuses_url":"https://api.github.com/repos/apache/couchdb/statuses/b18a89325c6a4c2a8b46d503c2e6155a9f46b405","head":{"label":"Spotme:spotme/bulk_get_multipart","ref":"spotme/bulk_get_multipart","sha":"b18a89325c6a4c2a8b46d503c2e6155a9f46b405","user":{"login":"Spotme","id":673891,"node_id":"MDEyOk9yZ2FuaXphdGlvbjY3Mzg5MQ==","avatar_url":"https://avatars1.githubusercontent.com/u/673891?v=4","gravatar_id":"","url":"https://api.github.com/users/Spotme","html_url":"https://github.com/Spotme","followers_url":"https://api.github.com/users/Spotme/followers","following_url":"https://api.github.com/users/Spotme/following{/other_user}","gists_url":"https://api.github.com/users/Spotme/gists{/gist_id}","starred_url":"https://api.github.com/users/Spotme/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Spotme/subscriptions","organizations_url":"https://api.github.com/users/Spotme/orgs","repos_url":"https://api.github.com/users/Spotme/repos","events_url":"https://api.github.com/users/Spotme/events{/privacy}","received_events_url":"https://api.github.com/users/Spotme/received_events","type":"Organization","site_admin":false},"repo":{"id":119404398,"node_id":"MDEwOlJlcG9zaXRvcnkxMTk0MDQzOTg=","name":"couchdb","full_name":"Spotme/couchdb","private":false,"owner":{"login":"Spotme","id":673891,"node_id":"MDEyOk9yZ2FuaXphdGlvbjY3Mzg5MQ==","avatar_url":"https://avatars1.githubusercontent.com/u/673891?v=4","gravatar_id":"","url":"https://api.github.com/users/Spotme","html_url":"https://github.com/Spotme","followers_url":"https://api.github.com/users/Spotme/followers","following_url":"https://api.github.com/users/Spotme/following{/other_user}","gists_url":"https://api.github.com/users/Spotme/gists{/gist_id}","starred_url":"https://api.github.com/users/Spotme/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Spotme/subscriptions","organizations_url":"https://api.github.com/users/Spotme/orgs","repos_url":"https://api.github.com/users/Spotme/repos","events_url":"https://api.github.com/users/Spotme/events{/privacy}","received_events_url":"https://api.github.com/users/Spotme/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/Spotme/couchdb","description":"Apache CouchDB","fork":true,"url":"https://api.github.com/repos/Spotme/couchdb","forks_url":"https://api.github.com/repos/Spotme/couchdb/forks","keys_url":"https://api.github.com/repos/Spotme/couchdb/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Spotme/couchdb/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Spotme/couchdb/teams","hooks_url":"https://api.github.com/repos/Spotme/couchdb/hooks","issue_events_url":"https://api.github.com/repos/Spotme/couchdb/issues/events{/number}","events_url":"https://api.github.com/repos/Spotme/couchdb/events","assignees_url":"https://api.github.com/repos/Spotme/couchdb/assignees{/user}","branches_url":"https://api.github.com/repos/Spotme/couchdb/branches{/branch}","tags_url":"https://api.github.com/repos/Spotme/couchdb/tags","blobs_url":"https://api.github.com/repos/Spotme/couchdb/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Spotme/couchdb/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Spotme/couchdb/git/refs{/sha}","trees_url":"https://api.github.com/repos/Spotme/couchdb/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Spotme/couchdb/statuses/{sha}","languages_url":"https://api.github.com/repos/Spotme/couchdb/languages","stargazers_url":"https://api.github.com/repos/Spotme/couchdb/stargazers","contributors_url":"https://api.github.com/repos/Spotme/couchdb/contributors","subscribers_url":"https://api.github.com/repos/Spotme/couchdb/subscribers","subscription_url":"https://api.github.com/repos/Spotme/couchdb/subscription","commits_url":"https://api.github.com/repos/Spotme/couchdb/commits{/sha}","git_commits_url":"https://api.github.com/repos/Spotme/couchdb/git/commits{/sha}","comments_url":"https://api.github.com/repos/Spotme/couchdb/comments{/number}","issue_comment_url":"https://api.github.com/repos/Spotme/couchdb/issues/comments{/number}","contents_url":"https://api.github.com/repos/Spotme/couchdb/contents/{+path}","compare_url":"https://api.github.com/repos/Spotme/couchdb/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Spotme/couchdb/merges","archive_url":"https://api.github.com/repos/Spotme/couchdb/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Spotme/couchdb/downloads","issues_url":"https://api.github.com/repos/Spotme/couchdb/issues{/number}","pulls_url":"https://api.github.com/repos/Spotme/couchdb/pulls{/number}","milestones_url":"https://api.github.com/repos/Spotme/couchdb/milestones{/number}","notifications_url":"https://api.github.com/repos/Spotme/couchdb/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Spotme/couchdb/labels{/name}","releases_url":"https://api.github.com/repos/Spotme/couchdb/releases{/id}","deployments_url":"https://api.github.com/repos/Spotme/couchdb/deployments","created_at":"2018-01-29T15:53:45Z","updated_at":"2018-11-09T14:55:13Z","pushed_at":"2018-11-12T12:25:58Z","git_url":"git://github.com/Spotme/couchdb.git","ssh_url":"git@github.com:Spotme/couchdb.git","clone_url":"https://github.com/Spotme/couchdb.git","svn_url":"https://github.com/Spotme/couchdb","homepage":"","size":30243,"stargazers_count":0,"watchers_count":0,"language":"Erlang","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":2,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":2,"watchers":0,"default_branch":"master"}},"base":{"label":"apache:master","ref":"master","sha":"c850ffa889dc1f8bf562107aa07da429357bc8ef","user":{"login":"apache","id":47359,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ3MzU5","avatar_url":"https://avatars0.githubusercontent.com/u/47359?v=4","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"repo":{"id":206417,"node_id":"MDEwOlJlcG9zaXRvcnkyMDY0MTc=","name":"couchdb","full_name":"apache/couchdb","private":false,"owner":{"login":"apache","id":47359,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ3MzU5","avatar_url":"https://avatars0.githubusercontent.com/u/47359?v=4","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/apache/couchdb","description":"Apache CouchDB","fork":false,"url":"https://api.github.com/repos/apache/couchdb","forks_url":"https://api.github.com/repos/apache/couchdb/forks","keys_url":"https://api.github.com/repos/apache/couchdb/keys{/key_id}","collaborators_url":"https://api.github.com/repos/apache/couchdb/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/apache/couchdb/teams","hooks_url":"https://api.github.com/repos/apache/couchdb/hooks","issue_events_url":"https://api.github.com/repos/apache/couchdb/issues/events{/number}","events_url":"https://api.github.com/repos/apache/couchdb/events","assignees_url":"https://api.github.com/repos/apache/couchdb/assignees{/user}","branches_url":"https://api.github.com/repos/apache/couchdb/branches{/branch}","tags_url":"https://api.github.com/repos/apache/couchdb/tags","blobs_url":"https://api.github.com/repos/apache/couchdb/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/apache/couchdb/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/apache/couchdb/git/refs{/sha}","trees_url":"https://api.github.com/repos/apache/couchdb/git/trees{/sha}","statuses_url":"https://api.github.com/repos/apache/couchdb/statuses/{sha}","languages_url":"https://api.github.com/repos/apache/couchdb/languages","stargazers_url":"https://api.github.com/repos/apache/couchdb/stargazers","contributors_url":"https://api.github.com/repos/apache/couchdb/contributors","subscribers_url":"https://api.github.com/repos/apache/couchdb/subscribers","subscription_url":"https://api.github.com/repos/apache/couchdb/subscription","commits_url":"https://api.github.com/repos/apache/couchdb/commits{/sha}","git_commits_url":"https://api.github.com/repos/apache/couchdb/git/commits{/sha}","comments_url":"https://api.github.com/repos/apache/couchdb/comments{/number}","issue_comment_url":"https://api.github.com/repos/apache/couchdb/issues/comments{/number}","contents_url":"https://api.github.com/repos/apache/couchdb/contents/{+path}","compare_url":"https://api.github.com/repos/apache/couchdb/compare/{base}...{head}","merges_url":"https://api.github.com/repos/apache/couchdb/merges","archive_url":"https://api.github.com/repos/apache/couchdb/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/apache/couchdb/downloads","issues_url":"https://api.github.com/repos/apache/couchdb/issues{/number}","pulls_url":"https://api.github.com/repos/apache/couchdb/pulls{/number}","milestones_url":"https://api.github.com/repos/apache/couchdb/milestones{/number}","notifications_url":"https://api.github.com/repos/apache/couchdb/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/apache/couchdb/labels{/name}","releases_url":"https://api.github.com/repos/apache/couchdb/releases{/id}","deployments_url":"https://api.github.com/repos/apache/couchdb/deployments","created_at":"2009-05-21T02:03:38Z","updated_at":"2018-11-12T08:57:49Z","pushed_at":"2018-11-12T12:26:01Z","git_url":"git://github.com/apache/couchdb.git","ssh_url":"git@github.com:apache/couchdb.git","clone_url":"https://github.com/apache/couchdb.git","svn_url":"https://github.com/apache/couchdb","homepage":"","size":30418,"stargazers_count":3916,"watchers_count":3916,"language":"Erlang","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":805,"mirror_url":null,"archived":false,"open_issues_count":167,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":805,"open_issues":167,"watchers":3916,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/apache/couchdb/pulls/1195"},"html":{"href":"https://github.com/apache/couchdb/pull/1195"},"issue":{"href":"https://api.github.com/repos/apache/couchdb/issues/1195"},"comments":{"href":"https://api.github.com/repos/apache/couchdb/issues/1195/comments"},"review_comments":{"href":"https://api.github.com/repos/apache/couchdb/pulls/1195/comments"},"review_comment":{"href":"https://api.github.com/repos/apache/couchdb/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/apache/couchdb/pulls/1195/commits"},"statuses":{"href":"https://api.github.com/repos/apache/couchdb/statuses/b18a89325c6a4c2a8b46d503c2e6155a9f46b405"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"AlexanderKaraberov"}}