{"head":"582139d34a2e7f7f9cb6e84d63f2df3de7849f74","size":60,"push_id":47020126,"commits":[{"sha":"d5aa8346d8a777a5d2194863d6fea2e3b7735a14","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@opera.com"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/d5aa8346d8a777a5d2194863d6fea2e3b7735a14","message":"mailbox: fix uniqueid handling on rename\n\nBug introduced by my fix to Bug #3991 - reversed logic!"},{"sha":"67a7dcc2636612ff281c3d7f0c28fd2e7f269f0f","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@opera.com"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/67a7dcc2636612ff281c3d7f0c28fd2e7f269f0f","message":"don't enforce annotation quotas on replicas"},{"sha":"a73ae1300b765bd098b509770d6ece51e24f27f8","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@opera.com"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/a73ae1300b765bd098b509770d6ece51e24f27f8","message":"sync: don't count EXPUNGED record annotations in CRC"},{"sha":"18c899c20f25adb6652548e7cc8ad4f8eb16eb33","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@opera.com"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/18c899c20f25adb6652548e7cc8ad4f8eb16eb33","message":"reconstruct: don't prune annotations for EXPUNGED messages before unlinking"},{"sha":"d9141934c69bd087a3645df2786572dc2dc31750","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@launde.home.brong.net"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/d9141934c69bd087a3645df2786572dc2dc31750","message":"Remove sieve action string\n\nWe use sieve to forward messages to a notification\ndaemon which can send SMSes, and we don't want them\nfilled with information about the actions which\nSieve took.\n\nThis patch stops the action_string being appended to\nthe message sent to the notify daemon."},{"sha":"bd0ccf6e3d939ac3835664655456c6d4aa98e2fb","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@opera.com"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/bd0ccf6e3d939ac3835664655456c6d4aa98e2fb","message":"GUID IMAP COMMANDS\n\nThis patch factors out stuff we used to have in the old MD5UUIDs\npatch, the following FETCH responses in imapd:\n\nFETCH DIGEST.SHA1 => 40 character hex string (message sha1)\nFETCH RFC822.SHA1 => 40 character hex string (message sha1, calculated)\nFETCH RFC822.FILESIZE => size of actual file on disk (via stat or mmap)\n\nIt also adds a capability string item: \"DIGEST=SHA1\"\n\nTotally non-standard of course, but way useful for our replication checking\nscripts.  Embrace and extend 'r' us.\n\nAnyone feel like writing an RFC for fetching the digest of a message via\nIMAP?  If the server calculated it on delivery and cached it then you'd have\na great way to clean up after a UIDVALIDITY change or other destabilising event\nwithout having to fetch every message again."},{"sha":"63e822a6bbfd2d7e6443df5059785bdf14d6a56c","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@launde.brong.net"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/63e822a6bbfd2d7e6443df5059785bdf14d6a56c","message":"Tool to build debian package directory"},{"sha":"dc80d48faedffa2c2451a11a04d8e37cf4e54a6f","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@opera.com"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/dc80d48faedffa2c2451a11a04d8e37cf4e54a6f","message":"Fatal -> abort in common daemons"},{"sha":"232b99f7ff2ff6978b4a676071b373a1c863ed2d","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@opera.com"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/232b99f7ff2ff6978b4a676071b373a1c863ed2d","message":"Fastmail Secrets (no rated)"},{"sha":"286ebb1c2ddf7ddfff807889e242fbd3bad89e45","author":{"name":"Greg Banks","email":"3c474cf4bdc26bce6c823d6384748a5a3679f008@fastmail.fm"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/286ebb1c2ddf7ddfff807889e242fbd3bad89e45","message":"Add conversations database.\n\nIt's a very simple database with only one type of record, which\nmaps a message-id with angle brackets, e.g. \"<0001@example.com>\",\nto a conversation id and a timestamp.  The conversation id is a\n64b int.\n\nstruct conversations_state holds a reference to an open conversations\ndatabase.  There can be more than one of these in existance.  There\nwill eventually be a conversations databases per-user, but this code\ndoesn't know that and just takes a filename.\n\nconversations_open() opens a database handle and starts a transaction.\n\nconversations_close() aborts the transation if it has not been\n    commited, and closes the database handle.\n\nconversations_commit() commits a transaction.\n\nconversations_set() stores a conversation id for a msgid, and sets\n    the record's timestamp to the current system time.\n\nconversations_get() retrieves the conversation id given a msgid.\n\nconversations_prune() removes all records older than a given time.\n\nMerge summary:\n\n    merged in \"Add conversations_getpath()\"\n    merged in some hunks of \"Add conversationsdump utility.\"\n    merged in some hunks of \"Add an imap option to enable conversations\"\n    merged in some hunks of \"Add conversation_id_{de,en}code()\"\n    merged in some hunks of \"Fix compile warnings in conversations code.\"\n    merged in \"More fixup for conversion to times.c in imapurl.c\"\n    merged in some hunks of \"conversations_prune() returns statistics\"\n    merged in some hunks of \"Rename conversations_{get,set} -> _{get,set}_cid\"\n    merged in \"Add conversations_add_folder()\"\n    merged in \"Add conversations_rename_cid()\"\n    merged in \"Dump and undump API for conversations.\"\n    merged in some hunks of \"conversations: convert to human readable DB format\"\n    merged in \"conversations: use mboxname_conf_getpath\"\n    merged in some hunks of \"add highestmodseq to conversations db\"\n    merged in some hunks of \"conversations: rename get/set_cid to get/set_msgid for clarity\"\n    merged in \"conversations: remove bogus buffer\"\n    merged in some hunks of \"convert conversations to use dlist and support status data, part 1\"\n    merged in some hunks of \"conversations_pass a mailbox object down, ouch\"\n    merged in \"cleanups\"\n    merged in \"remove UNSEEN from perl-folder, we don't care\"\n    merged in some hunks of \"Fix recent conversations API maldesign\"\n    merged in \"Stuff\"\n    merged in \"conversations: don't go segfaulting if starting from scratch\"\n    merged in \"conversations: simplify accounting\"\n    merged in \"conversations: don't fail if cid == 0\"\n    merged in some hunks of \"Some more conversations API rejigging\"\n    merged in some hunks of \"conversations: add sender support\"\n    merged in \"conversations: status API\"\n    merged in \"conversations: gnb review - don't leak keys\"\n    merged in \"conversations: gnb review - sender handling safety\"\n    merged in \"conversations: gnb review - free sender information\"\n    merged in \"conversations: return empty for corrupted data\"\n    merged in \"conversations: don't let counts go negative\"\n    merged in some hunks of \"conversation: add flagged and stub for attachments\"\n    merged in \"conversations: add version information to the front of every record\"\n    merged in some hunks of \"conversation: change \"SENDER\" format to be the same as ENVELOPE\"\n    merged in \"conversations: fix route fail\"\n    merged in \"conversations: don't delete zero-exists conversations\"\n    merged in \"IRIS 242 - fix XCONVUNSEEN counting\"\n    merged in \"remove debugging line\"\n    merged in some hunks of \"conversations: use cstate from the mailbox for rename callback\"\n    merged in \"conversations: make \"NAME\" optional in email addresses\"\n    merged in some hunks of \"Fix recent regressions in CID renaming.\"\n    merged in some hunks from \"conversations: add XCONVMODSEQ status item to folders\"\n    merged in \"conversations: allow specifying only some fields to getstatus\"\n    merged in \"make conversation_free NULL-safe\"\n    merged in some hunks of \"first rewrite of conversations open and close\"\n    merged in some hunks of \"ctl_converstationsdb - add '-R' option\"\n    merged in \"ctl_conversationsdb cleanup\"\n    merged in \"conversations: fix remove (found by unit tests)\"\n    merged in \"conversations_rename_folder API first draft\"\n    merged in some hunks of \"conversations_rename_folder part 2 - use it.\"\n    merged in some hunks of \"conversations_rename_folder: use NULL to_name for delete\"\n    merged in \"remove the 'exists' count for the being-deleted mailbox as well.\"\n    merged in some lines of \"Fix parallel build.\"\n    merged in \"conversations: fix memory leak\"\n    merged in some hunks of \"conversations: counts per flag (including to-backport dlist usage fixes)\"\n    merged in some hunks of \"gnb review: convert to strarray_t * and clean up\"\n    merged in \"options: document conversations_counted_flags better\"\n    merged in some hunks of \"conversations: remove limit on the number of counted_flags\"\n    merged in some hunks of \"conversations: store counted flags in the DB\"\n    merged in \"conversations: re-init counted flags on a wipe\"\n    merged in \"Fix memleak of conversation_t.counts\"\n    plus manual cleanups"},{"sha":"0688e1f932a58acdc4ae5958e39367cd658abd16","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@opera.com"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/0688e1f932a58acdc4ae5958e39367cd658abd16","message":"mboxname: add nextmodseq and nextuidvalidity APIs\n\nMerge summary:\n\n    merged in \"mboxname: initialise fd\"\n    merged in \"use per-user meta files to serialize uidvalidity and highestmodseq\"\u0002\n    merged in \"only use per-user modseq and uidvalidity if conversations are enabled\"\n    merged in \"managed values: add set API and use in replication\"\n    merged in \"mboxname_setval: make sync_server value setting work correctly\"\n    merged in \"sync: handle highestmodseq correctly on mailbox create\"\n    merged in \"cunit: test mboxname_nextmodseq (currently broken)\"\n    merged in \"Fix the mboxname.nextmodseq test.\"\n    merged in \"unit: add config handling in mboxname tests\""},{"sha":"47c15d90a9b6760228e596a79db9714a7faa3672","author":{"name":"Greg Banks","email":"3c474cf4bdc26bce6c823d6384748a5a3679f008@fastmail.fm"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/47c15d90a9b6760228e596a79db9714a7faa3672","message":"Add unit test for conversations db.\n\nMerge summary:\n\n    merged in \"unit: test conversation_id_encode et al\"\n    merged in some hunks of \"conversations_prune() returns statistics\"\n    merged in some hunks of \"Rename conversations_{get,set} -> _{get,set}_cid\"\n    merged in \"unit: test conversations_add_folder()\"\n    merged in \"unit: test conversations_rename_cid()\"\n    merged in \"unit: test conversations dump API\"\n    merged in some hunks of \"add highestmodseq to conversations db\"\n    merged in some hunks of \"convert conversations to use dlist and support status data, part 1\"\n    merged in \"unit: remove stray printf.\"\n    merged in \"cunit: re-enable slow \"prune\" test\"\n    merged in some hunks of \"Fix recent conversations API maldesign\"\n    merged in some hunks of \"Some more conversations API rejigging\"\n    merged in some hunks of \"unit: update conversation:cid_rename\"\n    merged in \"unit: track conversations_update() changes\"\n    merged in \"unit: track changes to conversations_rename_cid()\"\n    merged in \"cunit: make test work with new conversations API\"\n    merged in \"cunit: test conversations_folder_rename\"\n    merged in \"unit: fix compile warnings\"\n    merged in \"unit: test counted flags\"\n    merged in \"cunit: support counted_flags in DB\"\n    merged in \"unit: fix memleak in conversations tests\""},{"sha":"db52fa05df1870460edccf69b5f8a54676301141","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@opera.com"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/db52fa05df1870460edccf69b5f8a54676301141","message":"Add mailbox actions file.\n\nThis is a file where actions can be posted, that are then later executed\nby the first process to open the mailbox with an exclusive lock.  A\nfcntl lock is used to provide exclusion between writers to file file,\nand to detect when a writer has lost a race with an opener (who renames\nthe actions file before excuting the actions therein).  Actions are\nsimple lines of text.\n\nCurrently only a single action is implemented, the NOP action which just\nincrements a count.  This is for testing purposes.\n\nThe purpose of the mechanism is to allow delayed renaming of CIDs in\nmailbox index files.\n\nMerge summary:\n\n    manually tweaked to add #include \"strarray.h\""},{"sha":"12e6ed64887afb1e0173b7b7468ed87bbfb6c4b2","author":{"name":"Greg Banks","email":"3c474cf4bdc26bce6c823d6384748a5a3679f008@fastmail.fm"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/12e6ed64887afb1e0173b7b7468ed87bbfb6c4b2","message":"unit: test mailbox actions posting\n\nMerge summary:\n\n    merged in \"mailbox: update unit tests\"\n    merged in \"unit: use config_reset()\""},{"sha":"33471e0b10d9a57815c5843b33020c19147279e7","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@opera.com"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/33471e0b10d9a57815c5843b33020c19147279e7","message":"APPEND updates the conversations db\n\nMerge summary:\n\n    merged in \"Update conversations for COPY\"\n    merged in some hunks of \"Add an imap option to enable conversations\"\n    merged in some hunks of \"Fix compile warnings in conversations code.\"\n    merged in \"Move conversations update code to message.c\"\n    merged in \"Fix memory leak in APPEND command\"\n    merged in some hunks of \"Rename conversations_{get,set} -> _{get,set}_cid\"\n    merged in some hunks of \"Handle CID clashing in APPEND, COPY, LMTP\"\n    merged in some hunks of \"add highestmodseq to conversations db\"\n    merged in some hunks of \"conversations: rename get/set_cid to get/set_msgid for clarity\"\n    merged in some hunks of \"convert conversations to use dlist and support status data, part 1\"\n    merged in \"well, that was dumb\"\n    merged in some hunks of \"conversations_pass a mailbox object down, ouch\"\n    merged in \"two cid updates if cid changes\"\n    merged in \"Clean up mailbox_{open,commit}_conversations\"\n    merged in some hunks of \"Fix recent conversations API maldesign\"\n    merged in some hunks of \"Some more conversations API rejigging\"\n    merged in some hunks of \"conversations: add sender support\"\n    merged in \"conversations: drafts don't count towards unseen\"\n    merged in some hunks of \"conversation: add flagged and stub for attachments\"\n    merged in \"message: simple has_attachment heuristic to give a count\"\n    merged in \"conversations: generate CID even if no message-id headers\"\n    merged in some hunks of \"conversation: change \"SENDER\" format to be the same as ENVELOPE\"\n    merged in \"conversation: initialise return code from generate\"\n    merged in \"conversations: make \"NAME\" optional in email addresses\"\n    merged in \"Fix compile warning in message_has_attachment\"\n    merged in some hunks of \"conversations: convert to human readable DB format\"\n    merged in some hunks of \"Fix recent regressions in CID renaming.\"\n    merged in some hunks of \"first rewrite of conversations open and close\"\n    merged in \"The easy fix: always lock the conversations db\"\n    merged in some hunks of \"ctl_converstationsdb - add '-R' option\"\n    merged in \"conversations: unlock on mailbox unlock\"\n    merged in \"mailbox: lock conversations on mailbox create too\"\n    merged in \"ctl_conversationsdb: actually, expunged messages exist too\"\n    merged in \"[IRIS-293] Handle CID clash by re-inserting\"\n    merged in \"[IRIS-293] brong review: don't unlink on error.\"\n    merged in some hunks of \"conversations: counts per flag (including to-backport dlist usage fixes)\"\n    merged in some hunks of \"gnb review: convert to strarray_t * and clean up\"\n    merged in some hunks of \"conversations: remove limit on the number of counted_flags\"\n    merged in some hunks of \"conversations: store counted flags in the DB\"\n    merged in \"pushback to 0bee8026\"\n    merged in \"pushback to f4203f08\"\n    manually tweaked to remove message_has_attachment() which has no callers\n    manually tweaked for other merge breakage"},{"sha":"f33684e9891fedd23d20d56424bede5b132138c0","author":{"name":"Greg Banks","email":"3c474cf4bdc26bce6c823d6384748a5a3679f008@fastmail.fm"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/f33684e9891fedd23d20d56424bede5b132138c0","message":"Add conversationsdump utility.\n\nSimple commandline utility to dump the contents of a userid's\nconversations database.  Useful for debugging.\n\nMerge summary:\n\n    split off hunks from \"Add conversationsdump utility.\"\n    merged in \"Fix another compile warning in conversations code\"\n    merged in \"Rename conversationsdump -> ctl_conversationsdb\"\n    merged in \"Add a manpage for ctl_conversationsdb.\"\n    merged in \"Add undump option to ctl_conversationsdb\"\n    merged in \"gitignore: change name to ctl_conversationsdb\"\n    merged in \"ctl_conversationsdb: take a userid, not an mboxname\"\n    merged in \"ctl_conversationsdb: zero db and build options\"\n    merged in some hunks of \"add highestmodseq to conversations db\"\n    merged in \"ctl_conversationsdb: factor out do_user\"\n    merged in \"ctl_converstaionsdb: recursive mode\"\n    merged in some hunks of \"first rewrite of conversations open and close\"\n    merged in some hunks of \"ctl_converstationsdb - add '-R' option\"\n    merged in \"ctl_conversationsdb - print mailbox name on recalc if verbose\"\n    merged in some hunks of \"ctl_conversationsdb: actually, expunged messages exist too\"\n    merged in some lines of \"Fix parallel build.\""},{"sha":"d6262d0a4327cc961d310c6cb77cf5c9dab878a5","author":{"name":"Greg Banks","email":"3c474cf4bdc26bce6c823d6384748a5a3679f008@fastmail.fm"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/d6262d0a4327cc961d310c6cb77cf5c9dab878a5","message":"Add a new CID atom to the FETCH command.\n\nReturns \"CID\" and either\n\n- the conversation id formatted as 16 bytes of hex,\n- or \"NIL\" if the CID in the index is NULLCONVERSATION.\n\nMerge summary:\n\n    merged in some hunks of \"Add an imap option to enable conversations\"\n    merged in some hunks of \"Add conversation_id_{de,en}code()\"\n    merged in some hunks of \"conversations: convert to human readable DB format\"\n    merged in some hunks of \"[IRIS-276] fix cleanup on bad cid in XCONVFETCH\"\n    merged in \"Don't emit NIL for non-zero cids.\""},{"sha":"dcc40370ffd4997fba24fe515f572cdfbe4716a5","author":{"name":"Greg Banks","email":"3c474cf4bdc26bce6c823d6384748a5a3679f008@fastmail.fm"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/dcc40370ffd4997fba24fe515f572cdfbe4716a5","message":"Sync conversation IDs.\n\n - The SYNC_CRC_COVERS capability/option supports a new flag \"CID\"\n   which indicates that the CRC covers the CIDs in the index.\n\n - Sync_server advertises COVERS=CID in the capabilities banner,\n   if the \"conversations: on\" has been specified in imapd.conf.\n\n - Sync_client passes CIDs with the per-message data in APPLY\n   MAILBOX, if \"conversations: on\" has been specified in imapd.conf.\n\n - Full update and incremental update for an index record will merge\n   the CIDs from the master and replica, choosing the maximum CID\n   of the two if they differ and are non-NULL.  During incremental\n   update on the server, if this choice would result in the client\n   being confused about the CID, throw CRC failure back to force a\n   full update so that the client can make the same decision.\n\n - The case where master and replica have different non-NULL CIDs\n   is not handled.  Currently we syslog a whiny message and allow\n   the two sides to be inconsistent.  We *should* do a conversation\n   merge, rewriting CIDs in the conversations db, but that code\n   hasn't been written yet.\n\nMerge summary:\n\n    merged in \"sync: fix crc negotiation\"\n    merged in some hunks of \"conversations: convert to human readable DB format\"\n    merged in some hunks of \"Handle CID clashing in APPEND, COPY, LMTP\"\n    merged in \"4a6eb22 wip\"\n    merged in some hunks of \"add highestmodseq to conversations db\"\n    merged in \"SYNC_CHECKSUM\"\n    merged in \"sync: don't care about CID errors on expugned messages\"\n    merged in some hunks of \"conversations: use cstate from the mailbox for rename callback\"\n    merged in \"sync_server: don't throw CID related errors, just pile them up for the end\"\n    merged in some hunks of \"Fix recent regressions in CID renaming.\"\n    merged in some hunks of \"first rewrite of conversations open and close\"\n    merged in \"sync_support: free body\"\n    manually tweaked for merge breakage"},{"sha":"8191e671ec736f4ff684b20676c4714203021623","author":{"name":"Greg Banks","email":"3c474cf4bdc26bce6c823d6384748a5a3679f008@fastmail.fm"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/8191e671ec736f4ff684b20676c4714203021623","message":"cyr_expire expires conversations db entries.\n\nMerge summary:\n\n    merged in some hunks of \"first rewrite of conversations open and close\""},{"sha":"b15c5dd3d81f2c846f8a29b286ecbb1a8fa2fb67","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@opera.com"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/b15c5dd3d81f2c846f8a29b286ecbb1a8fa2fb67","message":"index: add 'uidvalidity_is_max' flag for xconvfetch"}],"ref":"refs/heads/future","legacy":{"head":"582139d34a2e7f7f9cb6e84d63f2df3de7849f74","size":60,"push_id":47020126,"shas":[["d5aa8346d8a777a5d2194863d6fea2e3b7735a14","brong@opera.com","mailbox: fix uniqueid handling on rename\n\nBug introduced by my fix to Bug #3991 - reversed logic!","Bron Gondwana"],["67a7dcc2636612ff281c3d7f0c28fd2e7f269f0f","brong@opera.com","don't enforce annotation quotas on replicas","Bron Gondwana"],["a73ae1300b765bd098b509770d6ece51e24f27f8","brong@opera.com","sync: don't count EXPUNGED record annotations in CRC","Bron Gondwana"],["18c899c20f25adb6652548e7cc8ad4f8eb16eb33","brong@opera.com","reconstruct: don't prune annotations for EXPUNGED messages before unlinking","Bron Gondwana"],["d9141934c69bd087a3645df2786572dc2dc31750","brong@launde.home.brong.net","Remove sieve action string\n\nWe use sieve to forward messages to a notification\ndaemon which can send SMSes, and we don't want them\nfilled with information about the actions which\nSieve took.\n\nThis patch stops the action_string being appended to\nthe message sent to the notify daemon.","Bron Gondwana"],["bd0ccf6e3d939ac3835664655456c6d4aa98e2fb","brong@opera.com","GUID IMAP COMMANDS\n\nThis patch factors out stuff we used to have in the old MD5UUIDs\npatch, the following FETCH responses in imapd:\n\nFETCH DIGEST.SHA1 => 40 character hex string (message sha1)\nFETCH RFC822.SHA1 => 40 character hex string (message sha1, calculated)\nFETCH RFC822.FILESIZE => size of actual file on disk (via stat or mmap)\n\nIt also adds a capability string item: \"DIGEST=SHA1\"\n\nTotally non-standard of course, but way useful for our replication checking\nscripts.  Embrace and extend 'r' us.\n\nAnyone feel like writing an RFC for fetching the digest of a message via\nIMAP?  If the server calculated it on delivery and cached it then you'd have\na great way to clean up after a UIDVALIDITY change or other destabilising event\nwithout having to fetch every message again.","Bron Gondwana"],["63e822a6bbfd2d7e6443df5059785bdf14d6a56c","brong@launde.brong.net","Tool to build debian package directory","Bron Gondwana"],["dc80d48faedffa2c2451a11a04d8e37cf4e54a6f","brong@opera.com","Fatal -> abort in common daemons","Bron Gondwana"],["232b99f7ff2ff6978b4a676071b373a1c863ed2d","brong@opera.com","Fastmail Secrets (no rated)","Bron Gondwana"],["286ebb1c2ddf7ddfff807889e242fbd3bad89e45","gnb@fastmail.fm","Add conversations database.\n\nIt's a very simple database with only one type of record, which\nmaps a message-id with angle brackets, e.g. \"<0001@example.com>\",\nto a conversation id and a timestamp.  The conversation id is a\n64b int.\n\nstruct conversations_state holds a reference to an open conversations\ndatabase.  There can be more than one of these in existance.  There\nwill eventually be a conversations databases per-user, but this code\ndoesn't know that and just takes a filename.\n\nconversations_open() opens a database handle and starts a transaction.\n\nconversations_close() aborts the transation if it has not been\n    commited, and closes the database handle.\n\nconversations_commit() commits a transaction.\n\nconversations_set() stores a conversation id for a msgid, and sets\n    the record's timestamp to the current system time.\n\nconversations_get() retrieves the conversation id given a msgid.\n\nconversations_prune() removes all records older than a given time.\n\nMerge summary:\n\n    merged in \"Add conversations_getpath()\"\n    merged in some hunks of \"Add conversationsdump utility.\"\n    merged in some hunks of \"Add an imap option to enable conversations\"\n    merged in some hunks of \"Add conversation_id_{de,en}code()\"\n    merged in some hunks of \"Fix compile warnings in conversations code.\"\n    merged in \"More fixup for conversion to times.c in imapurl.c\"\n    merged in some hunks of \"conversations_prune() returns statistics\"\n    merged in some hunks of \"Rename conversations_{get,set} -> _{get,set}_cid\"\n    merged in \"Add conversations_add_folder()\"\n    merged in \"Add conversations_rename_cid()\"\n    merged in \"Dump and undump API for conversations.\"\n    merged in some hunks of \"conversations: convert to human readable DB format\"\n    merged in \"conversations: use mboxname_conf_getpath\"\n    merged in some hunks of \"add highestmodseq to conversations db\"\n    merged in some hunks of \"conversations: rename get/set_cid to get/set_msgid for clarity\"\n    merged in \"conversations: remove bogus buffer\"\n    merged in some hunks of \"convert conversations to use dlist and support status data, part 1\"\n    merged in some hunks of \"conversations_pass a mailbox object down, ouch\"\n    merged in \"cleanups\"\n    merged in \"remove UNSEEN from perl-folder, we don't care\"\n    merged in some hunks of \"Fix recent conversations API maldesign\"\n    merged in \"Stuff\"\n    merged in \"conversations: don't go segfaulting if starting from scratch\"\n    merged in \"conversations: simplify accounting\"\n    merged in \"conversations: don't fail if cid == 0\"\n    merged in some hunks of \"Some more conversations API rejigging\"\n    merged in some hunks of \"conversations: add sender support\"\n    merged in \"conversations: status API\"\n    merged in \"conversations: gnb review - don't leak keys\"\n    merged in \"conversations: gnb review - sender handling safety\"\n    merged in \"conversations: gnb review - free sender information\"\n    merged in \"conversations: return empty for corrupted data\"\n    merged in \"conversations: don't let counts go negative\"\n    merged in some hunks of \"conversation: add flagged and stub for attachments\"\n    merged in \"conversations: add version information to the front of every record\"\n    merged in some hunks of \"conversation: change \"SENDER\" format to be the same as ENVELOPE\"\n    merged in \"conversations: fix route fail\"\n    merged in \"conversations: don't delete zero-exists conversations\"\n    merged in \"IRIS 242 - fix XCONVUNSEEN counting\"\n    merged in \"remove debugging line\"\n    merged in some hunks of \"conversations: use cstate from the mailbox for rename callback\"\n    merged in \"conversations: make \"NAME\" optional in email addresses\"\n    merged in some hunks of \"Fix recent regressions in CID renaming.\"\n    merged in some hunks from \"conversations: add XCONVMODSEQ status item to folders\"\n    merged in \"conversations: allow specifying only some fields to getstatus\"\n    merged in \"make conversation_free NULL-safe\"\n    merged in some hunks of \"first rewrite of conversations open and close\"\n    merged in some hunks of \"ctl_converstationsdb - add '-R' option\"\n    merged in \"ctl_conversationsdb cleanup\"\n    merged in \"conversations: fix remove (found by unit tests)\"\n    merged in \"conversations_rename_folder API first draft\"\n    merged in some hunks of \"conversations_rename_folder part 2 - use it.\"\n    merged in some hunks of \"conversations_rename_folder: use NULL to_name for delete\"\n    merged in \"remove the 'exists' count for the being-deleted mailbox as well.\"\n    merged in some lines of \"Fix parallel build.\"\n    merged in \"conversations: fix memory leak\"\n    merged in some hunks of \"conversations: counts per flag (including to-backport dlist usage fixes)\"\n    merged in some hunks of \"gnb review: convert to strarray_t * and clean up\"\n    merged in \"options: document conversations_counted_flags better\"\n    merged in some hunks of \"conversations: remove limit on the number of counted_flags\"\n    merged in some hunks of \"conversations: store counted flags in the DB\"\n    merged in \"conversations: re-init counted flags on a wipe\"\n    merged in \"Fix memleak of conversation_t.counts\"\n    plus manual cleanups","Greg Banks"],["0688e1f932a58acdc4ae5958e39367cd658abd16","brong@opera.com","mboxname: add nextmodseq and nextuidvalidity APIs\n\nMerge summary:\n\n    merged in \"mboxname: initialise fd\"\n    merged in \"use per-user meta files to serialize uidvalidity and highestmodseq\"\u0002\n    merged in \"only use per-user modseq and uidvalidity if conversations are enabled\"\n    merged in \"managed values: add set API and use in replication\"\n    merged in \"mboxname_setval: make sync_server value setting work correctly\"\n    merged in \"sync: handle highestmodseq correctly on mailbox create\"\n    merged in \"cunit: test mboxname_nextmodseq (currently broken)\"\n    merged in \"Fix the mboxname.nextmodseq test.\"\n    merged in \"unit: add config handling in mboxname tests\"","Bron Gondwana"],["47c15d90a9b6760228e596a79db9714a7faa3672","gnb@fastmail.fm","Add unit test for conversations db.\n\nMerge summary:\n\n    merged in \"unit: test conversation_id_encode et al\"\n    merged in some hunks of \"conversations_prune() returns statistics\"\n    merged in some hunks of \"Rename conversations_{get,set} -> _{get,set}_cid\"\n    merged in \"unit: test conversations_add_folder()\"\n    merged in \"unit: test conversations_rename_cid()\"\n    merged in \"unit: test conversations dump API\"\n    merged in some hunks of \"add highestmodseq to conversations db\"\n    merged in some hunks of \"convert conversations to use dlist and support status data, part 1\"\n    merged in \"unit: remove stray printf.\"\n    merged in \"cunit: re-enable slow \"prune\" test\"\n    merged in some hunks of \"Fix recent conversations API maldesign\"\n    merged in some hunks of \"Some more conversations API rejigging\"\n    merged in some hunks of \"unit: update conversation:cid_rename\"\n    merged in \"unit: track conversations_update() changes\"\n    merged in \"unit: track changes to conversations_rename_cid()\"\n    merged in \"cunit: make test work with new conversations API\"\n    merged in \"cunit: test conversations_folder_rename\"\n    merged in \"unit: fix compile warnings\"\n    merged in \"unit: test counted flags\"\n    merged in \"cunit: support counted_flags in DB\"\n    merged in \"unit: fix memleak in conversations tests\"","Greg Banks"],["db52fa05df1870460edccf69b5f8a54676301141","brong@opera.com","Add mailbox actions file.\n\nThis is a file where actions can be posted, that are then later executed\nby the first process to open the mailbox with an exclusive lock.  A\nfcntl lock is used to provide exclusion between writers to file file,\nand to detect when a writer has lost a race with an opener (who renames\nthe actions file before excuting the actions therein).  Actions are\nsimple lines of text.\n\nCurrently only a single action is implemented, the NOP action which just\nincrements a count.  This is for testing purposes.\n\nThe purpose of the mechanism is to allow delayed renaming of CIDs in\nmailbox index files.\n\nMerge summary:\n\n    manually tweaked to add #include \"strarray.h\"","Bron Gondwana"],["12e6ed64887afb1e0173b7b7468ed87bbfb6c4b2","gnb@fastmail.fm","unit: test mailbox actions posting\n\nMerge summary:\n\n    merged in \"mailbox: update unit tests\"\n    merged in \"unit: use config_reset()\"","Greg Banks"],["33471e0b10d9a57815c5843b33020c19147279e7","brong@opera.com","APPEND updates the conversations db\n\nMerge summary:\n\n    merged in \"Update conversations for COPY\"\n    merged in some hunks of \"Add an imap option to enable conversations\"\n    merged in some hunks of \"Fix compile warnings in conversations code.\"\n    merged in \"Move conversations update code to message.c\"\n    merged in \"Fix memory leak in APPEND command\"\n    merged in some hunks of \"Rename conversations_{get,set} -> _{get,set}_cid\"\n    merged in some hunks of \"Handle CID clashing in APPEND, COPY, LMTP\"\n    merged in some hunks of \"add highestmodseq to conversations db\"\n    merged in some hunks of \"conversations: rename get/set_cid to get/set_msgid for clarity\"\n    merged in some hunks of \"convert conversations to use dlist and support status data, part 1\"\n    merged in \"well, that was dumb\"\n    merged in some hunks of \"conversations_pass a mailbox object down, ouch\"\n    merged in \"two cid updates if cid changes\"\n    merged in \"Clean up mailbox_{open,commit}_conversations\"\n    merged in some hunks of \"Fix recent conversations API maldesign\"\n    merged in some hunks of \"Some more conversations API rejigging\"\n    merged in some hunks of \"conversations: add sender support\"\n    merged in \"conversations: drafts don't count towards unseen\"\n    merged in some hunks of \"conversation: add flagged and stub for attachments\"\n    merged in \"message: simple has_attachment heuristic to give a count\"\n    merged in \"conversations: generate CID even if no message-id headers\"\n    merged in some hunks of \"conversation: change \"SENDER\" format to be the same as ENVELOPE\"\n    merged in \"conversation: initialise return code from generate\"\n    merged in \"conversations: make \"NAME\" optional in email addresses\"\n    merged in \"Fix compile warning in message_has_attachment\"\n    merged in some hunks of \"conversations: convert to human readable DB format\"\n    merged in some hunks of \"Fix recent regressions in CID renaming.\"\n    merged in some hunks of \"first rewrite of conversations open and close\"\n    merged in \"The easy fix: always lock the conversations db\"\n    merged in some hunks of \"ctl_converstationsdb - add '-R' option\"\n    merged in \"conversations: unlock on mailbox unlock\"\n    merged in \"mailbox: lock conversations on mailbox create too\"\n    merged in \"ctl_conversationsdb: actually, expunged messages exist too\"\n    merged in \"[IRIS-293] Handle CID clash by re-inserting\"\n    merged in \"[IRIS-293] brong review: don't unlink on error.\"\n    merged in some hunks of \"conversations: counts per flag (including to-backport dlist usage fixes)\"\n    merged in some hunks of \"gnb review: convert to strarray_t * and clean up\"\n    merged in some hunks of \"conversations: remove limit on the number of counted_flags\"\n    merged in some hunks of \"conversations: store counted flags in the DB\"\n    merged in \"pushback to 0bee8026\"\n    merged in \"pushback to f4203f08\"\n    manually tweaked to remove message_has_attachment() which has no callers\n    manually tweaked for other merge breakage","Bron Gondwana"],["f33684e9891fedd23d20d56424bede5b132138c0","gnb@fastmail.fm","Add conversationsdump utility.\n\nSimple commandline utility to dump the contents of a userid's\nconversations database.  Useful for debugging.\n\nMerge summary:\n\n    split off hunks from \"Add conversationsdump utility.\"\n    merged in \"Fix another compile warning in conversations code\"\n    merged in \"Rename conversationsdump -> ctl_conversationsdb\"\n    merged in \"Add a manpage for ctl_conversationsdb.\"\n    merged in \"Add undump option to ctl_conversationsdb\"\n    merged in \"gitignore: change name to ctl_conversationsdb\"\n    merged in \"ctl_conversationsdb: take a userid, not an mboxname\"\n    merged in \"ctl_conversationsdb: zero db and build options\"\n    merged in some hunks of \"add highestmodseq to conversations db\"\n    merged in \"ctl_conversationsdb: factor out do_user\"\n    merged in \"ctl_converstaionsdb: recursive mode\"\n    merged in some hunks of \"first rewrite of conversations open and close\"\n    merged in some hunks of \"ctl_converstationsdb - add '-R' option\"\n    merged in \"ctl_conversationsdb - print mailbox name on recalc if verbose\"\n    merged in some hunks of \"ctl_conversationsdb: actually, expunged messages exist too\"\n    merged in some lines of \"Fix parallel build.\"","Greg Banks"],["d6262d0a4327cc961d310c6cb77cf5c9dab878a5","gnb@fastmail.fm","Add a new CID atom to the FETCH command.\n\nReturns \"CID\" and either\n\n- the conversation id formatted as 16 bytes of hex,\n- or \"NIL\" if the CID in the index is NULLCONVERSATION.\n\nMerge summary:\n\n    merged in some hunks of \"Add an imap option to enable conversations\"\n    merged in some hunks of \"Add conversation_id_{de,en}code()\"\n    merged in some hunks of \"conversations: convert to human readable DB format\"\n    merged in some hunks of \"[IRIS-276] fix cleanup on bad cid in XCONVFETCH\"\n    merged in \"Don't emit NIL for non-zero cids.\"","Greg Banks"],["dcc40370ffd4997fba24fe515f572cdfbe4716a5","gnb@fastmail.fm","Sync conversation IDs.\n\n - The SYNC_CRC_COVERS capability/option supports a new flag \"CID\"\n   which indicates that the CRC covers the CIDs in the index.\n\n - Sync_server advertises COVERS=CID in the capabilities banner,\n   if the \"conversations: on\" has been specified in imapd.conf.\n\n - Sync_client passes CIDs with the per-message data in APPLY\n   MAILBOX, if \"conversations: on\" has been specified in imapd.conf.\n\n - Full update and incremental update for an index record will merge\n   the CIDs from the master and replica, choosing the maximum CID\n   of the two if they differ and are non-NULL.  During incremental\n   update on the server, if this choice would result in the client\n   being confused about the CID, throw CRC failure back to force a\n   full update so that the client can make the same decision.\n\n - The case where master and replica have different non-NULL CIDs\n   is not handled.  Currently we syslog a whiny message and allow\n   the two sides to be inconsistent.  We *should* do a conversation\n   merge, rewriting CIDs in the conversations db, but that code\n   hasn't been written yet.\n\nMerge summary:\n\n    merged in \"sync: fix crc negotiation\"\n    merged in some hunks of \"conversations: convert to human readable DB format\"\n    merged in some hunks of \"Handle CID clashing in APPEND, COPY, LMTP\"\n    merged in \"4a6eb22 wip\"\n    merged in some hunks of \"add highestmodseq to conversations db\"\n    merged in \"SYNC_CHECKSUM\"\n    merged in \"sync: don't care about CID errors on expugned messages\"\n    merged in some hunks of \"conversations: use cstate from the mailbox for rename callback\"\n    merged in \"sync_server: don't throw CID related errors, just pile them up for the end\"\n    merged in some hunks of \"Fix recent regressions in CID renaming.\"\n    merged in some hunks of \"first rewrite of conversations open and close\"\n    merged in \"sync_support: free body\"\n    manually tweaked for merge breakage","Greg Banks"],["8191e671ec736f4ff684b20676c4714203021623","gnb@fastmail.fm","cyr_expire expires conversations db entries.\n\nMerge summary:\n\n    merged in some hunks of \"first rewrite of conversations open and close\"","Greg Banks"],["b15c5dd3d81f2c846f8a29b286ecbb1a8fa2fb67","brong@opera.com","index: add 'uidvalidity_is_max' flag for xconvfetch","Bron Gondwana"]],"ref":"refs/heads/future"}}