{"push_id":811203191,"size":19,"distinct_size":1,"ref":"refs/heads/production","head":"fdf6c6913a0473c42a2a926bcf40ff7c5431ea16","before":"b2d29610001e552a028f523cf85fe9c7c5478f77","commits":[{"sha":"5c109edaf249a02115a4832e3aa92ea00102f6d3","author":{"email":"0a27e12d062ad71673d57f9c2799b207af316885@nylas.com","name":"EthanBlackburn"},"message":"Upgraded IMAPClient dependency to 1.0a0, added backports.ssl, gevent_openssl, and pyopenssl dependencies","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/5c109edaf249a02115a4832e3aa92ea00102f6d3"},{"sha":"7dae722b18bcc33fc2e2898b28d64bb84017ad43","author":{"email":"0a27e12d062ad71673d57f9c2799b207af316885@nylas.com","name":"EthanBlackburn"},"message":"add IMAP1.0a0 support\n\nSummary: This re-adds IMAP1.0a0 after issues with 1) Gmail search and 2) incorrectly configured socket timeouts, both of which have been fixed\n\nTest Plan: tested manually\n\nReviewers: emfree\n\nSubscribers: spang\n\nDifferential Revision: https://phab.nylas.com/D2069","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/7dae722b18bcc33fc2e2898b28d64bb84017ad43"},{"sha":"9bc00fe676f68021c823220d59cc28f33f39355c","author":{"email":"0a27e12d062ad71673d57f9c2799b207af316885@nylas.com","name":"EthanBlackburn"},"message":"Revert \"add IMAP1.0a0 support\" due to problems with gevent_openssl: https://github.com/mjs/gevent_openssl/issues/6#issuecomment-143910070\n\nThis reverts commit 7dae722b18bcc33fc2e2898b28d64bb84017ad43.","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/9bc00fe676f68021c823220d59cc28f33f39355c"},{"sha":"96b39a8e471d09475486b929438a29cb0284a871","author":{"email":"0a27e12d062ad71673d57f9c2799b207af316885@nylas.com","name":"EthanBlackburn"},"message":"Revert \"Upgraded IMAPClient dependency to 1.0a0, added backports.ssl, gevent_openssl, and pyopenssl dependencies\" due to https://github.com/mjs/gevent_openssl/issues/6#issuecomment-143910070\n\nThis reverts commit 5c109edaf249a02115a4832e3aa92ea00102f6d3.","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/96b39a8e471d09475486b929438a29cb0284a871"},{"sha":"351a331b0abc6141578bf3b4b29743111743da16","author":{"email":"d1abc94d70526bfcf3e4b0ce727cb9a6fbb52a3a@inboxapp.com","name":"Eben Freeman"},"message":"Only create contact objects from valid message recipients.\n\nIn particular, this prevents contacts from being created from garbage\nrecipients during draft composition.\n\nFixes T3431.","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/351a331b0abc6141578bf3b4b29743111743da16"},{"sha":"217581c379357a88c72c64881abec72e9d58b498","author":{"email":"d1abc94d70526bfcf3e4b0ce727cb9a6fbb52a3a@inboxapp.com","name":"Eben Freeman"},"message":"Bump interim imapclient version and remove quoting workaround.","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/217581c379357a88c72c64881abec72e9d58b498"},{"sha":"d8f2eee2369833ac837bd56699bd4b1e486288ad","author":{"email":"d1abc94d70526bfcf3e4b0ce727cb9a6fbb52a3a@inboxapp.com","name":"Eben Freeman"},"message":"Properly format exception message for non-ascii folder names.","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/d8f2eee2369833ac837bd56699bd4b1e486288ad"},{"sha":"bec2ba1903cce1fc581bade8e178c91f4c3907a5","author":{"email":"d1abc94d70526bfcf3e4b0ce727cb9a6fbb52a3a@inboxapp.com","name":"Eben Freeman"},"message":"Handle sporadic \"SSLError: EOF occurred ...\" in calendar sync.","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/bec2ba1903cce1fc581bade8e178c91f4c3907a5"},{"sha":"40b5d29aed63f3a9ea948bb8c04a7af2f914d493","author":{"email":"d1abc94d70526bfcf3e4b0ce727cb9a6fbb52a3a@inboxapp.com","name":"Eben Freeman"},"message":"Prevent spurious revision of Calendar objects.\n\nCurrently, transaction records for calendars are committed every time the\nlast_synced field is updated, which is not correct. Fix this.","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/40b5d29aed63f3a9ea948bb8c04a7af2f914d493"},{"sha":"9f8312c9844cd5be8f3d20ee9810bfe994d410ed","author":{"email":"d1abc94d70526bfcf3e4b0ce727cb9a6fbb52a3a@inboxapp.com","name":"Eben Freeman"},"message":"Print more in data deletion so we have some notion of progress.","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/9f8312c9844cd5be8f3d20ee9810bfe994d410ed"},{"sha":"9ddad1708d2992dd74ca321d505377351bd419ee","author":{"email":"d1abc94d70526bfcf3e4b0ce727cb9a6fbb52a3a@inboxapp.com","name":"Eben Freeman"},"message":"Refine database transaction instrumentation.\n\nConfusingly, the `after_transaction_create` event only fires after a database\nflush, and not after a normal database transaction `BEGIN`. This means that if\nyou do something like\n\n```\nwith session_scope() as db_session:\n  a = db_session.query(Account).get(account_id)  # <- \"BEGIN\" is issued here\n  gevent.sleep(22)  # or go do something else\n  db_session.commit()                            # <- \"COMMIT\" is issued here\n```\n\nthe 22-second lifetime of the underlying database transaction will not actually\nbe captured by the after_transaction_create / after_transaction_end events.\n\nSo use the `after_begin` / `after_commit` / `after_rollback` events instead.","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/9ddad1708d2992dd74ca321d505377351bd419ee"},{"sha":"06e88c53b9c311119a7ecb7e0950f4679dacfd92","author":{"email":"d1abc94d70526bfcf3e4b0ce727cb9a6fbb52a3a@inboxapp.com","name":"Eben Freeman"},"message":"Double-check for new UIDs before removing deleted UIDs.\n\nThis patch is for CONDSTORE sync only.","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/06e88c53b9c311119a7ecb7e0950f4679dacfd92"},{"sha":"f827a26aea9afe3bceb58c73e1f5716e198208b3","author":{"email":"d1abc94d70526bfcf3e4b0ce727cb9a6fbb52a3a@inboxapp.com","name":"Eben Freeman"},"message":"Rework draft update syncback for robustness.\n\nSummary:\nFixes T3779. Previously, a draft update would be synced back as a \"save_draft\"\naction followed by a \"delete_draft\" action. The problem with the prior\nimplementation is that the save_draft action becomes a no-op if the draft has\nsubsequently been updated. So the delete can execute, causing the draft to\ntransiently vanish altogether from the backend.\n\nInstead, schedule a single \"update_draft\" action, which proceeds as follows:\n\n(1) Check if the draft already exists on the backend\n(2) If not, create it.\n(3) Delete any older versions on the backend.\n\nThis implementation satisfies the following properties:\n\n* At least one version of the draft always exists on the backend, preventing\n  transient deletions.\n* The action can safely be retried if it fails partway through.\n\nTest Plan:\nManual for now. Working on tests. You can fairly reliably reproduce\nthe original bug by creating a draft and updating it every few seconds until\nyou get a 404.\n\nReviewers: ethanb\n\nReviewed By: ethanb\n\nSubscribers: kav-ya\n\nManiphest Tasks: T3779\n\nDifferential Revision: https://phab.nylas.com/D2077","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/f827a26aea9afe3bceb58c73e1f5716e198208b3"},{"sha":"3319e8963716d1bf6880c0d9724078d19e3eba65","author":{"email":"e1fb1a05abba8fb04acbcbe6d766da7764320db0@nylas.com","name":"Christine Spang"},"message":"Basic contacts searching through Amazon CloudSearch.\n\nSummary:\nThis patch includes an adaptation of our old elasticsearch transaction log\nindexer to index contacts with Amazon CloudSearch. If cloudsearch is not\nconfigured, using the contacts endpoint returns no results.\n\nTest Plan: Manual testing. Unit tests coming pending validation of design.\n\nReviewers: emfree\n\nReviewed By: emfree\n\nDifferential Revision: https://phab.nylas.com/D2088","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/3319e8963716d1bf6880c0d9724078d19e3eba65"},{"sha":"14c814f606c3e3049e1f4b99305540b1fd9e2800","author":{"email":"e1fb1a05abba8fb04acbcbe6d766da7764320db0@nylas.com","name":"Christine Spang"},"message":"Install contact search index scripts.","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/14c814f606c3e3049e1f4b99305540b1fd9e2800"},{"sha":"00ab3bdb65c809469122d37ef345aef7bb86ef54","author":{"email":"e1fb1a05abba8fb04acbcbe6d766da7764320db0@nylas.com","name":"Christine Spang"},"message":"Fix logging import","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/00ab3bdb65c809469122d37ef345aef7bb86ef54"},{"sha":"dd17c30ff3366497b789adec2040f3283c900161","author":{"email":"d1abc94d70526bfcf3e4b0ce727cb9a6fbb52a3a@inboxapp.com","name":"Eben Freeman"},"message":"Require boto3 in setup.py.","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/dd17c30ff3366497b789adec2040f3283c900161"},{"sha":"edecd2264406998b0759bd3e829503501f8447fc","author":{"email":"d1abc94d70526bfcf3e4b0ce727cb9a6fbb52a3a@inboxapp.com","name":"Eben Freeman"},"message":"Remove explicit futures dependency.\n\nNot actually directly needed by sync engine code; prior dependency conflicts\nwith boto3.","distinct":false,"url":"https://api.github.com/repos/nylas/sync-engine/commits/edecd2264406998b0759bd3e829503501f8447fc"},{"sha":"fdf6c6913a0473c42a2a926bcf40ff7c5431ea16","author":{"email":"e1fb1a05abba8fb04acbcbe6d766da7764320db0@nylas.com","name":"Christine Spang"},"message":"Merge branch 'master' into production","distinct":true,"url":"https://api.github.com/repos/nylas/sync-engine/commits/fdf6c6913a0473c42a2a926bcf40ff7c5431ea16"}]}