jcoffey-dev is traveling from Thursday 1 October through Sunday 4 October. Issues and pull requests are welcome, and will get an answer after that. Thanks for your patience.
A source that files one message in several folders -- IMAP and Maildir
copies, Gmail labels -- leaves one archive row per folder, all pointing at the
same blob. Export imported each row on its own, so the message arrived on the
target once per folder. Worse, an interrupted export matched the rest by
Message-ID alone on the next run and skipped them, so their folders were never
added.
Export now folds rows with the same blob into one email, with the union of
their folders and keywords. On a match it adds, with one batched Email/set,
any migrated folder the target copy is missing; folders that exist only on the
target are left alone. Matching is still by Message-ID (or the fallback
digest), with size deciding between several messages that share one, so two
different messages are never folded onto one target email.
The archive is unchanged: the fold happens at export, so imports, resumes and
deletions work exactly as before.
Roadmap item 2. Tests: five unit tests (folding, size pairing, memberships) and three end-to-end mock tests (one message in two folders lands once in both; a resumed export adds the missing folder with Email/set and imports nothing; two different messages sharing a Message-ID are not merged). The upstream blobNotFound test is reworked to a single email: with folding, two emails can no longer share one uploaded blob.
A source that files one message in several folders -- IMAP and Maildir
copies, Gmail labels -- leaves one archive row per folder, all pointing at the
same blob. Export imported each row on its own, so the message arrived on the
target once per folder. Worse, an interrupted export matched the rest by
Message-ID alone on the next run and skipped them, so their folders were never
added.
Export now folds rows with the same blob into one email, with the union of
their folders and keywords. On a match it adds, with one batched Email/set,
any migrated folder the target copy is missing; folders that exist only on the
target are left alone. Matching is still by Message-ID (or the fallback
digest), with size deciding between several messages that share one, so two
different messages are never folded onto one target email.
The archive is unchanged: the fold happens at export, so imports, resumes and
deletions work exactly as before.
Roadmap item 2. Tests: five unit tests (folding, size pairing, memberships) and three end-to-end mock tests (one message in two folders lands once in both; a resumed export adds the missing folder with Email/set and imports nothing; two different messages sharing a Message-ID are not merged). The upstream blobNotFound test is reworked to a single email: with folding, two emails can no longer share one uploaded blob.
A source that files one message in several folders -- IMAP and Maildir
copies, Gmail labels -- leaves one archive row per folder, all pointing at the
same blob. Export imported each row on its own, so the message arrived on the
target once per folder. Worse, an interrupted export matched the rest by
Message-ID alone on the next run and skipped them, so their folders were never
added.
Export now folds rows with the same blob into one email, with the union of
their folders and keywords. On a match it adds, with one batched Email/set,
any migrated folder the target copy is missing; folders that exist only on the
target are left alone. Matching is still by Message-ID (or the fallback
digest), with size deciding between several messages that share one, so two
different messages are never folded onto one target email.
The archive is unchanged: the fold happens at export, so imports, resumes and
deletions work exactly as before.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
A source that files one message in several folders -- IMAP and Maildir
copies, Gmail labels -- leaves one archive row per folder, all pointing at the
same blob. Export imported each row on its own, so the message arrived on the
target once per folder. Worse, an interrupted export matched the rest by
Message-ID alone on the next run and skipped them, so their folders were never
added.
Export now folds rows with the same blob into one email, with the union of
their folders and keywords. On a match it adds, with one batched Email/set,
any migrated folder the target copy is missing; folders that exist only on the
target are left alone. Matching is still by Message-ID (or the fallback
digest), with size deciding between several messages that share one, so two
different messages are never folded onto one target email.
The archive is unchanged: the fold happens at export, so imports, resumes and
deletions work exactly as before.
Roadmap item 2. Tests: five unit tests (folding, size pairing, memberships) and three end-to-end mock tests (one message in two folders lands once in both; a resumed export adds the missing folder with Email/set and imports nothing; two different messages sharing a Message-ID are not merged). The upstream blobNotFound test is reworked to a single email: with folding, two emails can no longer share one uploaded blob.