{"head":"e1c36602f1b533266b25cded80ff0839f6d08d87","size":126,"push_id":46701909,"commits":[{"sha":"544d0d64671359611f579a8c26f763f484fffed9","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@opera.com"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/544d0d64671359611f579a8c26f763f484fffed9","message":"user: move imap_err.h into user.c"},{"sha":"a01c707f2c39653a41b4137eac00bd4dfd5ae19f","author":{"name":"Greg Banks","email":"3c474cf4bdc26bce6c823d6384748a5a3679f008@fastmail.fm"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/a01c707f2c39653a41b4137eac00bd4dfd5ae19f","message":"Make cyrus_mkdir() truly const\n\nPreviously it was casting away const on it's filename argument, writing\ninto the filename, and then carefully restoring the filename back before\nreturning.  Very clever...until the test code passed it a string literal\nin .rodata, at which points it's SEGV time."},{"sha":"098cd905a6ea551c84ddaa4ffd840ab49c2a35c6","author":{"name":"Greg Banks","email":"3c474cf4bdc26bce6c823d6384748a5a3679f008@fastmail.fm"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/098cd905a6ea551c84ddaa4ffd840ab49c2a35c6","message":"Zero the old SYNC_CRC field when writing header\n\ninstead of writing 4 bytes of random garbage off the stack.\nDiscovered by Valgrinding with Julien's new upgrade test."},{"sha":"38e8e4a246aeec631116df8d1db7bb2bde2925ff","author":{"name":"Greg Banks","email":"3c474cf4bdc26bce6c823d6384748a5a3679f008@fastmail.fm"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/38e8e4a246aeec631116df8d1db7bb2bde2925ff","message":"Fix FUM error in mailbox_reconstruct.\n\nAn error at the wrong time would result in the cleanup code in this\nfunction free()ing a random pointer on the stack.  Use a static\ninitialiser to ensure the struct found_files on the stack are always\ncorrectly initialised and can have free_files() called at any time."},{"sha":"7aecef33d5115bedcc0c2327eab222b64f35606c","author":{"name":"Greg Banks","email":"3c474cf4bdc26bce6c823d6384748a5a3679f008@fastmail.fm"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/7aecef33d5115bedcc0c2327eab222b64f35606c","message":"Fix RUM error in nntpd's parse_datetime"},{"sha":"3bca7793427d213946edb8b5d9d75ab43acf5c46","author":{"name":"Greg Banks","email":"3c474cf4bdc26bce6c823d6384748a5a3679f008@fastmail.fm"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/3bca7793427d213946edb8b5d9d75ab43acf5c46","message":"Make mailbox_index_recalc() static\n\nWe don't actually need to call it from sync_client anymore, that was\nonce useful when it had the side effect of recalculating the sync CRC\nfrom scratch, but that doesn't happen anymore.  So now we only call it\nfrom the reconstruct code."},{"sha":"5a2ff8303a00300d679ed891ea6db0c9b5853e7a","author":{"name":"Greg Banks","email":"3c474cf4bdc26bce6c823d6384748a5a3679f008@fastmail.fm"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/5a2ff8303a00300d679ed891ea6db0c9b5853e7a","message":"unit: fix memleak in the charset tests"},{"sha":"b83b5ce52734d48ef27c98228554ace50ab3c3cb","author":{"name":"Greg Banks","email":"3c474cf4bdc26bce6c823d6384748a5a3679f008@fastmail.fm"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/b83b5ce52734d48ef27c98228554ace50ab3c3cb","message":"unit: Valgrind suppress some libz & libcrypto bugs"},{"sha":"2bb7363cc4ef3b1d22e371fc3c56da935222fd78","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@opera.com"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/2bb7363cc4ef3b1d22e371fc3c56da935222fd78","message":"lib: create cyrus_copyfile API\n\nUse for both: mailbox_copyfile and cyrusdb_copyfile\nMoves 'retry' and 'map' into libcyrus_min, because they're\nneeded for using the nice mmap'ed IO copy codepath."},{"sha":"de6f21374ca8ab56e55fad040050ba8c2e0c1bce","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@opera.com"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/de6f21374ca8ab56e55fad040050ba8c2e0c1bce","message":"mbtool: so far just for fixing incorrect timestamps"},{"sha":"efb549c590e8bb7e29e58071acad16e1526727cd","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@opera.com"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/efb549c590e8bb7e29e58071acad16e1526727cd","message":"mboxlist: fix set_specialuse ordering"},{"sha":"0d72517568fb7d4a79420ab72e5ea3bc739b9bdc","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@launde.home.brong.net"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/0d72517568fb7d4a79420ab72e5ea3bc739b9bdc","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":"9ff1345050a65c3c8506c6f22464c5e39ae96658","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@opera.com"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/9ff1345050a65c3c8506c6f22464c5e39ae96658","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":"d23fc223091123d9df2f0b41eeab3b01371bb91e","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@launde.brong.net"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/d23fc223091123d9df2f0b41eeab3b01371bb91e","message":"Tool to build debian package directory"},{"sha":"9fc41a5183232f6f6665458bbd0356d165d36068","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@opera.com"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/9fc41a5183232f6f6665458bbd0356d165d36068","message":"Fatal -> abort in common daemons"},{"sha":"2bc85ddb22819b5c42ad95dcce1af59af7619734","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@opera.com"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/2bc85ddb22819b5c42ad95dcce1af59af7619734","message":"Fastmail Secrets (no rated)"},{"sha":"bb5203a9e0ae62d482e49a369dcff30a787a8077","author":{"name":"Greg Banks","email":"3c474cf4bdc26bce6c823d6384748a5a3679f008@fastmail.fm"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/bb5203a9e0ae62d482e49a369dcff30a787a8077","message":"Move parse_env_address() into message.c\n\nwhere it will soon be useful for conversations code.\n\nMerge summary:\n\n    split out some hunks of \"conversations_pass a mailbox object down, ouch\""},{"sha":"d2b41dc802c62502e1290effe153cf4113095bd7","author":{"name":"Greg Banks","email":"3c474cf4bdc26bce6c823d6384748a5a3679f008@fastmail.fm"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/d2b41dc802c62502e1290effe153cf4113095bd7","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":"b15dcc2aa54791625435e24e6046c4176bea9639","author":{"name":"Bron Gondwana","email":"3466dd23bc7867913745114618459f038a99e706@opera.com"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/b15dcc2aa54791625435e24e6046c4176bea9639","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":"3de76eeb2947ad1e295634f183da22ac40bad896","author":{"name":"Greg Banks","email":"3c474cf4bdc26bce6c823d6384748a5a3679f008@fastmail.fm"},"url":"https://api.github.com/repos/brong/cyrus-imapd/commits/3de76eeb2947ad1e295634f183da22ac40bad896","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\""}],"ref":"refs/heads/future","legacy":{"head":"e1c36602f1b533266b25cded80ff0839f6d08d87","size":126,"push_id":46701909,"shas":[["544d0d64671359611f579a8c26f763f484fffed9","brong@opera.com","user: move imap_err.h into user.c","Bron Gondwana"],["a01c707f2c39653a41b4137eac00bd4dfd5ae19f","gnb@fastmail.fm","Make cyrus_mkdir() truly const\n\nPreviously it was casting away const on it's filename argument, writing\ninto the filename, and then carefully restoring the filename back before\nreturning.  Very clever...until the test code passed it a string literal\nin .rodata, at which points it's SEGV time.","Greg Banks"],["098cd905a6ea551c84ddaa4ffd840ab49c2a35c6","gnb@fastmail.fm","Zero the old SYNC_CRC field when writing header\n\ninstead of writing 4 bytes of random garbage off the stack.\nDiscovered by Valgrinding with Julien's new upgrade test.","Greg Banks"],["38e8e4a246aeec631116df8d1db7bb2bde2925ff","gnb@fastmail.fm","Fix FUM error in mailbox_reconstruct.\n\nAn error at the wrong time would result in the cleanup code in this\nfunction free()ing a random pointer on the stack.  Use a static\ninitialiser to ensure the struct found_files on the stack are always\ncorrectly initialised and can have free_files() called at any time.","Greg Banks"],["7aecef33d5115bedcc0c2327eab222b64f35606c","gnb@fastmail.fm","Fix RUM error in nntpd's parse_datetime","Greg Banks"],["3bca7793427d213946edb8b5d9d75ab43acf5c46","gnb@fastmail.fm","Make mailbox_index_recalc() static\n\nWe don't actually need to call it from sync_client anymore, that was\nonce useful when it had the side effect of recalculating the sync CRC\nfrom scratch, but that doesn't happen anymore.  So now we only call it\nfrom the reconstruct code.","Greg Banks"],["5a2ff8303a00300d679ed891ea6db0c9b5853e7a","gnb@fastmail.fm","unit: fix memleak in the charset tests","Greg Banks"],["b83b5ce52734d48ef27c98228554ace50ab3c3cb","gnb@fastmail.fm","unit: Valgrind suppress some libz & libcrypto bugs","Greg Banks"],["2bb7363cc4ef3b1d22e371fc3c56da935222fd78","brong@opera.com","lib: create cyrus_copyfile API\n\nUse for both: mailbox_copyfile and cyrusdb_copyfile\nMoves 'retry' and 'map' into libcyrus_min, because they're\nneeded for using the nice mmap'ed IO copy codepath.","Bron Gondwana"],["de6f21374ca8ab56e55fad040050ba8c2e0c1bce","brong@opera.com","mbtool: so far just for fixing incorrect timestamps","Bron Gondwana"],["efb549c590e8bb7e29e58071acad16e1526727cd","brong@opera.com","mboxlist: fix set_specialuse ordering","Bron Gondwana"],["0d72517568fb7d4a79420ab72e5ea3bc739b9bdc","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"],["9ff1345050a65c3c8506c6f22464c5e39ae96658","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"],["d23fc223091123d9df2f0b41eeab3b01371bb91e","brong@launde.brong.net","Tool to build debian package directory","Bron Gondwana"],["9fc41a5183232f6f6665458bbd0356d165d36068","brong@opera.com","Fatal -> abort in common daemons","Bron Gondwana"],["2bc85ddb22819b5c42ad95dcce1af59af7619734","brong@opera.com","Fastmail Secrets (no rated)","Bron Gondwana"],["bb5203a9e0ae62d482e49a369dcff30a787a8077","gnb@fastmail.fm","Move parse_env_address() into message.c\n\nwhere it will soon be useful for conversations code.\n\nMerge summary:\n\n    split out some hunks of \"conversations_pass a mailbox object down, ouch\"","Greg Banks"],["d2b41dc802c62502e1290effe153cf4113095bd7","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"],["b15dcc2aa54791625435e24e6046c4176bea9639","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"],["3de76eeb2947ad1e295634f183da22ac40bad896","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"]],"ref":"refs/heads/future"}}