public-inbox 1.9.0 - 2022-08-21 2:36 UTC ========================================= Link: https://public-inbox.org/meta/2022-08-21T023659Z-public-inbox-1.9.0-rele@sed/ Upgrading: lei users need to "lei daemon-kill" after installation to load new code. Normal daemons (read-only, and public-inbox-watch) will also need restarts, of course, but there's no backwards-incompatible data format changes so rolling back to older versions is harmless. Major bugfixes: * lei no longer freezes from inotify/EVFILT_VNODE handling, user interrupts (Ctrl-C), nor excessive errors/warnings * IMAP server fairness improved to avoid excessive blob prefetch New features: * POP3 server support added, use either public-inbox-pop3d or the new public-inbox-netd superserver * public-inbox-netd superserver supporting any combination of HTTP, IMAP, POP3, and NNTP services; simplifying management and allowing more sharing of memory used for various data structures. * public-inbox-httpd and -netd support per-listener .psgi files * SIGHUP reloads TLS certs and keys in addition to config and .psgi files * "lei reindex" command for lei users to update personal index in ~/.local/share/lei/store for search improvements below: Search improvements: These will require --reindex with public-inbox-index and/or public-inbox-extindex for public inboxes. * patchid: prefix search support added to WWW and lei for "git patch-id --stable" support * text inside base-85 binary patches are no longer indexed to avoid false positives * for lei users, "lei reindex" now exists and is required to take advantage of aforementioned indexing changes Performance improvements: * IMAP server startup is faster with many mailboxes when using "public-inbox-extindex --all" * NNTP group listings are also faster with many inboxes when using "public-inbox-extindex --all" * various small opcode and memory usage reductions Please report bugs via plain-text mail to: meta@public-inbox.org See archives at https://public-inbox.org/meta/ for all history. See https://public-inbox.org/TODO for what the future holds. public-inbox 1.8.0 - 2022-04-23 8:22 UTC ========================================= Link: https://public-inbox.org/meta/2022-04-23-public-inbox-1.8.0-released@finally/ A minor release focused on bugfixes and minor improvements. Upgrades should happen transparently, but downgrading back to 1.7.0 will likely cause problems for lei users (and only lei users). lei users may experience duplicate messages in Maildirs if attempting to downgrade from 1.8.0 to 1.7.x. public-inbox-* tools are unaffected and may downgrade freely. Bugfixes: Numerous test fixes thanks to NixOS developers. Long-running daemons are more robust in case of corrupt blobs or crashes of git-cat-file processes PublicInbox::WWW: all CR are removed before LF, fixing display of CR-CR-LF messages. Solver supports SHA-256 code repositories (inbox and lei store support is still pending). Internal updates: Reduced dependencies on Inline::C for Linux users; Linux users may now use lei with neither Inline::C nor Socket::MsgHdr installed. New features: The --dangerous flag is now supported in public-inbox-index and public-inbox-extindex to use the Xapian::DB_DANGEROUS flag for initial indexes. This may reduce SSD/HDD wear at the expense of disallowing concurrency and data integrity in case of an unexpected shutdown. Please report bugs via plain-text mail to: meta@public-inbox.org See archives at https://public-inbox.org/meta/ for all history. See https://public-inbox.org/TODO for what the future holds. public-inbox 1.7.0 - 2021-11-04 7:52 UTC ========================================= Link: https://public-inbox.org/meta/2021-11-04-public-inbox-1.7.0-finally-rele@sed/ Another big release focused on multi-inbox search and scalability. Special thanks to Konstantin Ryabitsev and Kyle Meyer for numerous bug reports and documentation help. * general changes - config file parsing is 2x faster with 50K inboxes - deduplication ignores whitespace differences within address fields - "PRAGMA optimize" is now issued on commits for SQLite 3.18+ * public-inbox-extindex A new Xapian + SQLite index able to search across several inboxes. This may be configured to replace per-inbox Xapian DBs, (but not per-inbox SQLite indices) and speed up manifest.js.gz generation. See public-inbox-extindex-format(5) and public-inbox-extindex(1) manpages for more details. Using it with "--all" speeds up various multi-inbox operations in PublicInbox::WWW, public-inbox-nntpd, and public-inbox-imapd. * read-only public-inbox-daemon (-httpd, -nntpd, -imapd): libgit2 may be used via Inline::C to avoid hitting system pipe and process limits. See public-inbox-tuning(7) manpage for more details. * various memory usage reductions and workarounds for leaks in Encode <3.15, these mainly affect PublicInbox::WWW * public-inbox-nntpd - startup is 6x faster with 50K inboxes if using -extindex * PublicInbox::WWW - mboxrd search results are returned in reverse Xapian docid order, so more recent results are more likely to show up first - d: and dt: search prefixes allow "approxidate" formats supported by "git log --since=" - manifest.js.gz generation is ~25x faster with -extindex - minor navigation improvements in search results HTML page * lei - local email interface An experimental, subject-to-change, likely-to-eat-your-mail tool for personal mail as well as interacting with public-inboxes on the local filesystem or over HTTP(S). See lei(1), lei-overview(7), and other lei-* manpages for details. This is only ready-to-use w.r.t. external public-inbox instances, but mail synchronization for personal mail remains clunky. * public-inbox-index - non-strict (Subject-based) threading supports non-ASCII characters, reindexing is necessary for old messages with non-ASCII subjects. - --batch-size is now 8M on 64-bit systems for throughput improvements, higher values are still advised for more powerful hardware. * public-inbox-watch - IMAP and NNTP code shared with lei, fixing an off-by-one error in IMAP synchronization for single-message IMAP folders. - \Deleted and \Draft messages ignored for IMAP, as they are for Maildir. - IMAP and NNTP connection establishment (including git-credential prompts) ordering is now tied to config file order. Compatibility: * Rollbacks all the way to public-inbox 1.2.0 remain supported Internal changes * public-inbox-index switched to new internal IPC code shared with lei Please report bugs via plain-text mail to: meta@public-inbox.org See archives at https://public-inbox.org/meta/ for all history. See https://public-inbox.org/TODO for what the future holds. public-inbox 1.6.1 - 2020-12-31 23:45 UTC ========================================= Link: https://public-inbox.org/meta/20201231234556.public-inbox-1.6.1-rele@sed/ A small, bugfix release on top of 1.6.0 from September 2020. Bug fixes: * MIME header decoding no longer warns on undefined variables, with Perl <5.28. Thanks to a bug report by Ali Alnubani. https://public-inbox.org/meta/DM6PR12MB49106F8E3BD697B63B943A22DADB0@DM6PR12MB4910.namprd12.prod.outlook.com/ * Fixed a message threading bug thanks to a report from Kyle Meyer. "public-inbox-index --rethread --reindex" will be necessary in case of certain messages arrive out-of-order. Link: https://public-inbox.org/meta/87360nlc44.fsf@kyleam.com/ * WWW: per-inbox grokmirror manifests no longer return info for all inboxes, only the root /manifest.js.gz includes all inboxes. This regression appeared in 1.6. * public-inbox-mda matches List-Id headers insensitively, matching public-inbox-watch behavior. Similarly, List-Id is always indexed lower-cased for boolean matches to avoid matching an incorrect term. * Newsgroup and Path NNTP headers are now emitted in conformance with RFC 5536 3.1.[45]. Thanks to Andrey Melnikov for the report: https://public-inbox.org/meta/CA+PODjpUN5Q4gBFQhAzUNuMasVEdmp9f=8Uo0Ej0mFumdSwi4w@mail.gmail.com/ * Inotify fixes for public-inbox-imapd users relying on SIGHUP reloads and thousands of watches. * Read-only daemon fixes around TLS and Linux <4.5 systems Bugfixes with minor behavior changes: * The X-Status mbox header is now excluded from imports, just like the Status: header has been for many years. They have no place in public archives and can be privacy concern for people sharing archives. * WWW prevents deep-linking to attachments to limit abuse vectors. Noticed by Leah Neukirchen: https://public-inbox.org/meta/87imagyap9.fsf@vuxu.org/ There are also several ocumentation fixes from Uwe Kleine-König and Kyle Meyer. Please report bugs via plain-text mail to: meta@public-inbox.org See archives at https://public-inbox.org/meta/ for all history. public-inbox 1.6.0 - 2020-09-16 20:03 UTC ========================================= Link: https://public-inbox.org/meta/20200916200309.public-inbox-1.6.0-rele@sed/ A big release containing several performance optimizations, a new anonymous IMAP server, and more. It represents an incremental improvement over 1.5 in several areas with more to come in 1.7. The read-only httpd and nntpd daemons no longer block the event loop when retrieving blobs from git, making better use of SMP systems while accomodating slow storage. Indexing can be now be tuned to give somewhat usable performance on HDD storage, though we can't defy the laws of physics, either. * General changes: - ~/.cache/public-inbox/inline-c is automatically used for Inline::C if it exists. PERL_INLINE_DIRECTORY in env remains supported and prioritized to support `nobody'-type users without HOME. - msgmap.sqlite3 uses journal_mode=TRUNCATE, matching over.sqlite3 behavior for a minor reduction in VFS traffic - public-inbox-tuning(7) - new manpage containing pointers to various tuning options and tips for certain HW and OS setups. - Copy-on-write is disabled on BTRFS for new indices to avoid fragmentation. See the new public-inbox-tuning(7) manpage. - message/{rfc822,news,global} attachments are decoded recursively and indexed for search. Reindexing (see below) is required to ensure these attachments are indexed in old messages. - inbox.lock (v2) and ssoma.lock (v1) files are written to on message delivery (or spam removal) to wake up read-only daemons via inotify or kqueue. - `--help' switch supported by command-line tools * Upgrading for new features in 1.6 The ordering of these steps is only necessary if you intend to use some new features in 1.6. Future releases may have different instructions (or be entirely transparent). 0. install (use your OS package manager, or "make install") 1. restart public-inbox-watch instances if you have any 2. Optional: remove Plack::Middleware::Deflater if you're using a custom .psgi file for PublicInbox::WWW. This only saves some memory and CPU cycles, and you may also skip this step if you expect to roll back to 1.5.0 for any reason. Steps 3a and 3b may happen in any order, 3b is optional and is only required to use new WWW and IMAP features. 3a. restart existing read-only daemons if you have them (public-inbox-nntpd, public-inbox-httpd) 3b. run "public-inbox-index -c --reindex --rethread --all" to reindex all configured inboxes 4. configure and start the new public-inbox-imapd. This requires reindexing in 3b, but there's no obligation to run an IMAP server, either. * public-inbox-index There are several new options to improve usability on slow, rotational storage. - `--batch-size=BYTES' or publicinbox.indexBatchSize parameter to reduce frequency of random writes on HDDs - `--sequential-shard' or publicInbox.sequentialShard parameter to improve OS page cache utilization on HDDs. - `--no-fsync' when combined with Xapian 1.4+ can be used to speed up indexing on SSDs and small (default) `--batch-size' - `--rethread' option to go with `--reindex' (use sparringly, see manpage) - parallelize v2 updates by default, `--sequential-shard' and `-j0' is (once again) allowed to disable parallelization - (re-)indexing parallelizes blob reads from git - `--all' may be specified to index all configured inboxes * public-inbox-learn - `rm' supports `--all' to remove from all configured inboxes * public-inbox-imapd - new read-only IMAP daemon similar to public-inbox-nntpd `AUTH=ANONYMOUS' is supported, but any username and password for clients without `AUTH=ANONYMOUS' support. * public-inbox-nntpd - blob reads from git are handled asynchronously * public-inbox-httpd - Plack::Middleware::Deflater is no longer loaded by default when no .psgi file is specified; PublicInbox::WWW can rely on gzip for buffering (see below) * PublicInbox::WWW - use consistent blank line around attachment links - Attachments in message/{rfc822,news,global} messages can be individually downloaded. Downloading the entire message/rfc822 file in full remains supported - $INBOX_DIR/description is treated as UTF-8 - HTML, Atom, and text/plain responses are gzipped without relying on Plack::Middleware::Deflater - Multi-message endpoints (/t.mbox.gz, /T/, /t/, etc) are ~10% faster when running under public-inbox-httpd with asynchronous blob retrieval - mbox search results may now include all messages pertaining to that thread. Needs `--reindex' mentioned above in `Upgrading for new features in 1.6'. - fix mbox.gz search results downloads for lynx users - small navigation tweaks, more prominent mirroring instructions * public-inbox-watch - Linux::Inotify2 or IO::KQueue is used directly, Filesys::Notify::Simple is no longer required - NNTP groups and IMAP mailboxes may be watched in addition to Maildirs (lightly tested). * Ongoing internal changes - reduce event loop hogging for many-inbox support - use more Perl v5.10-isms, future-proof against Perl 8 - more consistent variable and field naming, improve internal documentation and comments - start supporting >=40 char git identifiers for SHA-256 - test -httpd-specific code paths via Plack::Test::ExternalServer in addition to generic PSGI paths. Please report bugs via plain-text mail to: meta@public-inbox.org See archives at https://public-inbox.org/meta/ for all history. See https://public-inbox.org/TODO for what the future holds. public-inbox 1.5.0 - 2020-05-10 7:04 UTC ========================================= Link: https://public-inbox.org/meta/20200510.public-inbox-1.5.0-rele@sed/ This release introduces a new pure-Perl lazy email parser, PublicInbox::Eml, which uses roughly 10% less memory and is up to 2x faster than Email::MIME. This is a major internal change Limits commonly enforced by MTAs are also enforced in the new parser, as messages may bypass MTA transports. Email::MIME and other Email::* modules are no longer dependencies nor used at all outside of maintainer validation tests. * public-inbox-index - `--max-size=SIZE' CLI switch and `publicinbox.indexMaxSize' config file option added to prevent indexing of overly large messages. - List-Id headers are indexed in new messages, old messages can be found after `--reindex'. * public-inbox-watch - multiple values of `publicinbox..watchheader' are now supported, thanks to Kyle Meyer - List-Id headers are matched case-insensitively as specified by RFC 2919 * PublicInbox::WWW - $INBOX_DIR/description and $INBOX_DIR/cloneurl are not memoized if missing - improved display of threads, thanks to Kyle Meyer - search for List-Id is available via `l:' prefix if indexed - all encodings are preloaded at startup to reduce fragmentation - diffstat linkification and highlighting are stricter and less likely to linkify tables in cover letters - fix hunk header links to solver which were off-by-one line, thanks again to Kyle Meyer Release tarball available for download over HTTPS or Tor .onion: https://yhbt.net/public-inbox.git/snapshot/public-inbox-1.5.0.tar.gz http://ou63pmih66umazou.onion/public-inbox.git/snapshot/public-inbox-1.5.0.tar.gz Please report bugs via plain-text mail to: meta@public-inbox.org See archives at https://public-inbox.org/meta/ for all history. See https://public-inbox.org/TODO for what the future holds. public-inbox 1.4.0 - 2020-04-17 8:48 UTC ========================================= Link: https://public-inbox.org/meta/20200417084800.public-inbox-1.4.0-rele@sed/ This release focuses on reproducibility improvements and bugfixes for corner-cases. Busy instances of PublicInbox::WWW may also notice memory usage reductions. For rare messages lacking Date and/or Received headers, mirrors now fall back to using the git author/commit times to reindex them. This ensures search and filtering queries behave identically on mirrors as they do on the original machine. "altid" SQLite dumps are now accessible to all over the WWW interface via `POST /$INBOX/$ALTID.sql.gz'. Busy instances of PublicInbox::WWW (whether via public-inbox-httpd or another PSGI server) may notice significant memory usage reductions from the single message "permalink" lifetime optimization. There also ongoing work to improve memory lifetime management to reduce the potential for memory fragmentation in daemons. * general changes: - `include.*' directives in the public-inbox-config(5) file are now honored as documented in git-config(1), thanks to Andreas Rottmann. - `+0000' is assumed for dates missing TZ offsets; thanks to Leah Neukirchen for spotting this regression from v1.2.0. - `<' and `>' characters are dropped to avoid errors in git in addresses for git, thanks again to Leah for noticing this long-standing bug. * PublicInbox::WWW: - memory reductions for message display and rendering - code preload improved to reduce memory fragmentation - remove redundant "a=" parameter in links to solver - escape '&' in hrefs properly - fix optional address obfuscation in search results - `POST /$INBOX/$ALTID.sql.gz' endpoint to retrieve SQLite dumps * public-inbox-httpd + public-inbox-nntpd: - fix SIGUSR2 upgrade in worker-less instances (-W0) * public-inbox-httpd: - fix RFC 7230 conformance when Content-Length and "chunked" are both specified * public-inbox-index: - reproduce original date and time stamps in mirrors for messages lacking Date: and/or Received: headers - new `--compact' (or `-c') switch to perform the equivalent of public-inbox-compact(1) after indexing each inbox * documentation: - add Documentation/technical/data_structures.txt for new hackers * scripts/import_vger_from_mbox: (not really a production-level script) - fix ">From" unescaping thanks to a bug report from Kyle Meyer Thanks to Andreas Rottmann, Leah Neukirchen and Kyle Meyer for their contributions to this release. Release tarball available for download over HTTPS or Tor .onion: https://yhbt.net/public-inbox.git/snapshot/public-inbox-1.4.0.tar.gz http://ou63pmih66umazou.onion/public-inbox.git/snapshot/public-inbox-1.4.0.tar.gz Please report bugs via plain-text mail to: meta@public-inbox.org See archives at https://public-inbox.org/meta/ for all history. See https://public-inbox.org/TODO for what the future holds. public-inbox 1.3.0 - 2020-02-10 5:52 UTC ========================================= Link: https://public-inbox.org/meta/20200210055200.public-inbox-1.3.0-rele@sed/ Many internal improvements to improve the developer experience, long-term maintainability, ease-of-installation and compatibility. There are also several bugfixes. Some of the internal improvements involve avoiding Perl startup time in tests. "make check" now runs about 50% faster than before, and the new "make check-run" can be around 30% faster than "make check" after being primed by "make check". Most closures (anonymous subroutines) are purged from the -nntpd, -httpd and WWW code paths to make checking for memory leaks easier. * documentation now builds on BSD make * Date::Parse (TimeDate CPAN distribution) is now optional, allowing installation from OpenBSD systems via "pkg". * the work-in-progress Xapian.pm SWIG bindings are now supported in addition to the traditional Search::Xapian XS bindings. Only the SWIG bindings are packaged for OpenBSD. * Plack is optional for users who wish to avoid web-related components * Filesys::Notify::Simple is optional for non-watch users (but Plack will still pull it in) * improved internal error checking and reporting in numerous places * fixed Perl 5.10.1 compatibility (tested with Devel::PatchPerl) * IPC::Run and XML::Feed are no longer used in tests, though XML::TreePP becomes an optional test dependency. * Email::Address::XS used if available (newer Email::MIME requires it), it should handle more corner cases. * PublicInbox::WWW: - "nested" search results page now shows relevancy percentages - many solver bugs fixed - solver works on "-U0" patches using "git apply --unidiff-zero" - solver now compatible with git < v1.8.5 (but >= v1.8.0) - raw HTML no longer shown inline in multipart/alternative messages (v1.2.0 regression) - reduced memory usage for displaying multipart messages - static file responses support Last-Modified/If-Modified-Since - avoid trailing underlines in diffstat linkification - more consistent handling of messages without Subjects * public-inbox-httpd / public-inbox-nntpd: - MSG_MORE used consistently in long responses - fixed IO::KQueue usage on *BSDs - listen sockets are closed immediately on graceful shutdown - missed signals avoided with signalfd or EVFILT_SIGNAL - Linux x32 ABI support * public-inbox-nntpd: - Y2020 workaround for Time::Local * public-inbox-watch: - avoid memory leak from cyclic reference on SIGHUP - fix documentation of publicinboxwatch.watchspam * public-inbox-convert: - avoid article number jumps when converting indexed v1 inboxes * public-inbox-compact / public-inbox-xcpdb: - concurrent invocations of -compact and -xcpdb commands, not just -mda, -watch, -learn, -purge * examples/unsubscribe.milter: - support unique mailto: unsubscribe Release tarball available for download at: https://public-inbox.org/public-inbox.git/snapshot/public-inbox-1.3.0.tar.gz Please report bugs via plain-text mail to: meta@public-inbox.org See archives at https://public-inbox.org/meta/ for all history. See https://public-inbox.org/TODO for what the future holds. public-inbox 1.2.0 - 2019-11-03 3:12 UTC ========================================= Link: https://public-inbox.org/meta/20191103030500.public-inbox-1.2.0@released/ * first non-pre/rc release with v2 format support for scalability. See public-inbox-v2-format(5) manpage for more details. * new admin tools for v2 inboxes: - public-inbox-convert - converts v1 to v2 repo formats - public-inbox-compact - v2 convenience wrapper for xapian-compact(1) - public-inbox-purge - purges entire messages out of v2 history - public-inbox-edit - edits sensitive data out messages from v2 history - public-inbox-xcpdb - copydatabase(1) wrapper to upgrade Xapian formats (e.g. from "chert" to "glass") and resharding of v2 inboxes * SQLite3 support decoupled from Xapian support, and Xapian DBs may be configured without phrase support to save space. See "indexlevel" in public-inbox-config(5) manpage for more info. * codebase now uses Perl 5.10.1+ features (e.g. "//") * public-inbox-nntpd - support STARTTLS and NNTPS - support COMPRESS extension - fix several RFC3977 compliance bugs - improved interopability with picky clients such as leafnode and Alpine * public-inbox-watch - support multiple spam training directories - support mapping multiple inboxes per Maildir - List-ID header support (see "listid" in public-inbox-config(5)) * public-inbox-mda - List-ID header support (see above) * PublicInbox::WWW - grokmirror-compatible manifest.js.gz endpoint generation - user-configurable color support in $INBOX_URL/_/text/color/ - BOFHs may set default colors via "publicinbox.css" (see public-inbox-config(5)) - ability to map git code repositories and run cgit (see "coderepo" and "cgitrc" in public-inbox-config(5)) - able to recreate blobs with coderepo associations and Xapian - search results may be reversed - reduce memory usage when rendering large threads - syntax highlighting for patches and blobs * public-inbox-httpd / public-inbox-nntpd: - lower memory usage in C10K scenarios - buffers slow clients to filesystem (TMPDIR) instead of RAM - improved FreeBSD support - Danga::Socket is no longer a runtime dependency * many documentation updates, new manpages for: - PublicInbox::SaPlugin::ListMirror - public-inbox-init - public-inbox-learn * workaround memory leaks on Perl 5.16.3 (on CentOS/RHEL 7.x) Thanks to Ali Alnubani, Alyssa Ross, Amitai Schleier, Dave Taht, Dmitry Alexandrov, Eric W. Biederman, Jan Kiszka, Jonathan Corbet, Kyle Meyer, Leah Neukirchen, Mateusz Łoskot, Nicolás Ojeda Bär, SZEDER Gábor, Urs Janßen, Wang Kang, and edef for all their help, bug reports, patches and suggestions. Special thanks to Konstantin Ryabitsev and The Linux Foundation for their sponsorship and support over the past two years. https://public-inbox.org/releases/public-inbox-1.2.0.tar.gz SHA256: dabc735a5cfe396f457ac721559de26ae38abbaaa74612eb786e9e2e1ca94269 Chances are: You don't know me and never will. Everybody else can verify the tarball and sign a reply saying they've verified it, instead. The more who do this, the better, but don't trust the BOFH :P See archives at https://public-inbox.org/meta/ for all history. See https://public-inbox.org/TODO for what the future holds. public-inbox 1.1.0-pre1 - 2018-05-09 20:23 UTC ============================================== Link: https://public-inbox.org/meta/20180509202303.GA15156@dcvr/ Pre-release for v2 repository support. Thanks to The Linux Foundation for supporting this work! https://public-inbox.org/releases/public-inbox-1.1.0-pre1.tar.gz SHA-256: d0023770a63ca109e6fe2c58b04c58987d4f81572ac69d18f95d6af0915fa009 (only intended to guard against accidental file corruption) shortlog below: Eric Wong (27): nntp: improve fairness during XOVER and similar commands nntp: do not drain rbuf if there is a command pending extmsg: use news.gmane.org for Message-ID lookups searchview: fix non-numeric comparison mbox: do not barf on queries which return no results nntp: allow and ignore empty commands ensure SQLite and Xapian files respect core.sharedRepository TODO: a few more updates filter/rubylang: do not set altid on spam training import: cleanup git cat-file processes when ->done disallow "\t" and "\n" in OVER headers searchidx: release lock again during v1 batch callback searchidx: remove leftover debugging code convert: copy description and git config from v1 repo view: untangle loop when showing message headers view: wrap To: and Cc: headers in HTML display view: drop redundant References: display code TODO: add EPOLLEXCLUSIVE item searchview: do not blindly append "l" parameter to URL search: avoid repeated mbox results from search msgmap: add limit to response for NNTP thread: prevent hidden threads in /$INBOX/ landing page thread: sort incoming messages by Date searchidx: preserve umask when starting/committing transactions scripts/import_slrnspool: support v2 repos scripts/import_slrnspool: cleanup progress messages public-inbox 1.1.0-pre1 Eric Wong (Contractor, The Linux Foundation) (239): AUTHORS: add The Linux Foundation watch_maildir: allow '-' in mail filename scripts/import_vger_from_mbox: relax From_ line match slightly import: stop writing legacy ssoma.index by default import: begin supporting this without ssoma.lock import: initial handling for v2 t/import: test for last_object_id insertion content_id: add test case searchmsg: add mid_mime import for _extract_mid scripts/import_vger_from_mbox: support --dry-run option import: APIs to support v2 use search: free up 'Q' prefix for a real unique identifier searchidx: fix comment around next_thread_id address: extract more characters from email addresses import: pass "raw" dates to git-fast-import(1) scripts/import_vger_from_mbox: use v2 layout for import import: quiet down warnings from bogus From: lines import: allow the epoch (0s) as a valid time extmsg: fix broken Xapian MID lookup search: stop assuming Message-ID is unique www: stop assuming mainrepo == git_dir v2writable: initial cut for repo-rotation git: reload alternates file on missing blob v2: support Xapian + SQLite indexing import_vger_from_inbox: allow "-V" option import_vger_from_mbox: use PublicInbox::MIME and avoid clobbering v2: parallelize Xapian indexing v2writable: round-robin to partitions based on article number searchidxpart: increase pipe size for partitions v2writable: warn on duplicate Message-IDs searchidx: do not modify Xapian DB while iterating v2/ui: some hacky things to get the PSGI UI to show up v2/ui: retry DB reopens in a few more places v2writable: cleanup unused pipes in partitions searchidxpart: binmode use PublicInbox::MIME consistently searchidxpart: chomp line before splitting searchidx*: name child subprocesses searchidx: get rid of pointless index_blob wrapper view: remove X-PI-TS reference searchidxthread: load doc data for references searchidxpart: force integers into add_message search: reopen skeleton DB as well searchidx: index values in the threader search: use different Enquire object for skeleton queries rename SearchIdxThread to SearchIdxSkeleton v2writable: commit to skeleton via remote partitions searchidxskeleton: extra error checking searchidx: do not modify Xapian DB while iterating search: query_xover uses skeleton DB iff available v2/ui: get nntpd and init tests running on v2 v2writable: delete ::Import obj when ->done search: remove informational "warning" message searchidx: add PID to error message when die-ing content_id: special treatment for Message-Id headers evcleanup: disable outside of daemon v2writable: deduplicate detection on add evcleanup: do not create event loop if nothing was registered mid: add `mids' and `references' methods for extraction content_id: use `mids' and `references' for MID extraction searchidx: use new `references' method for parsing References content_id: no need to be human-friendly v2writable: inject new Message-IDs on true duplicates search: revert to using 'Q' as a uniQue id per-Xapian conventions searchidx: support indexing multiple MIDs mid: be strict with References, but loose on Message-Id searchidx: avoid excessive XNQ indexing with diffs searchidxskeleton: add a note about locking v2writable: generated Message-ID goes first searchidx: use add_boolean_term for internal terms searchidx: add NNTP article number as a searchable term mid: truncate excessively long MIDs early nntp: use NNTP article numbers for lookups nntp: fix NEWNEWS command searchidx: store the primary MID in doc data for NNTP import: consolidate object info for v2 imports v2: avoid redundant/repeated configs for git partition repos INSTALL: document more optional dependencies search: favor skeleton DB for lookup_mail search: each_smsg_by_mid uses skeleton if available v2writable: remove unnecessary skeleton commit favor Received: date over Date: header globally import: fall back to Sender for extracting name and email scripts/import_vger_from_mbox: perform mboxrd or mboxo escaping v2writable: detect and use previous partition count extmsg: rework partial MID matching to favor current inbox extmsg: rework partial MID matching to favor current inbox content_id: use Sender header if From is not available v2writable: support "barrier" operation to avoid reforking use string ref for Email::Simple->new v2writable: remove unnecessary idx_init call searchidx: do not delete documents while iterating search: allow ->reopen to be chainable v2writable: implement remove correctly skeleton: barrier init requires a lock import: (v2) delete writes the blob into history in subdir import: (v2): write deletes to a separate '_' subdirectory import: implement barrier operation for v1 repos mid: mid_mime uses v2-compatible mids function watchmaildir: use content_digest to generate Message-Id import: force Message-ID generation for v1 here import: switch to URL-safe Base64 for Message-IDs v2writable: test for idempotent removals import: enable locking under v2 index: s/GIT_DIR/REPO_DIR/ Lock: new base class for writable lockers t/watch_maildir: note the reason for FIFO creation v2writable: ensure ->done is idempotent watchmaildir: support v2 repositories searchidxpart: s/barrier/remote_barrier/ v2writable: allow disabling parallelization scripts/import_vger_from_mbox: filter out same headers as MDA v2writable: add DEBUG_DIFF env support v2writable: remove "resent" message for duplicate Message-IDs content_id: do not take Message-Id into account introduce InboxWritable class import: discard all the same headers as MDA InboxWritable: add mbox/maildir parsing + import logic use both Date: and Received: times msgmap: add tmp_clone to create an anonymous copy fix syntax warnings v2writable: support reindexing Xapian t/altid.t: extra tests for mid_set v2writable: add NNTP article number regeneration support v2writable: clarify header cleanups v2writable: DEBUG_DIFF respects $TMPDIR feed: $INBOX/new.atom endpoint supports v2 inboxes import: consolidate mid prepend logic, here www: $MESSAGE_ID/raw endpoint supports "duplicates" search: reopen DB if each_smsg_by_mid fails t/psgi_v2: minimal test for Atom feed and t.mbox.gz feed: fix new.html for v2 view: permalink (per-message) view shows multiple messages searchidx: warn about vivifying multiple ghosts v2writable: warn on unseen deleted files www: get rid of unnecessary 'inbox' name reference searchview: remove unnecessary imports from MID module view: depend on SearchMsg for Message-ID http: fix modification of read-only value githttpbackend: avoid infinite loop on generic PSGI servers www: support cloning individual v2 git partitions http: fix modification of read-only value githttpbackend: avoid infinite loop on generic PSGI servers www: remove unnecessary ghost checks v2writable: append, instead of prepending generated Message-ID lookup by Message-ID favors the "primary" one www: fix attachment downloads for conflicted Message-IDs searchmsg: document why we store To: and Cc: for NNTP public-inbox-convert: tool for converting old to new inboxes v2writable: support purging messages from git entirely search: cleanup uniqueness checking search: get rid of most lookup_* subroutines search: move find_doc_ids to searchidx v2writable: cleanup: get rid of unused fields mbox: avoid extracting Message-ID for linkification www: cleanup expensive fallback for legacy URLs view: get rid of some unnecessary imports search: retry_reopen on first_smsg_by_mid import: run_die supports redirects as spawn does v2writable: initializing an existing inbox is idempotent public-inbox-compact: new tool for driving xapian-compact mda: support v2 inboxes search: warn on reopens and die on total failure v2writable: allow gaps in git partitions v2writable: convert some fatal reindex errors to warnings wwwstream: flesh out clone instructions for v2 v2writable: go backwards through alternate Message-IDs view: speed up homepage loading time with date clamp view: drop load_results feed: optimize query for feeds, too msgtime: parse 3-digit years properly convert: avoid redundant "done\n" statement for fast-import search: move permissions handling to InboxWritable t/v2writable: use simplify permissions reading v2: respect core.sharedRepository in git configs searchidx: correct warning for over-vivification v2: one file, really v2writable: fix parallel termination truncate Message-IDs and References consistently scripts/import_vger_from_mbox: set address properly search: reduce columns stored in Xapian replace Xapian skeleton with SQLite overview DB v2writable: simplify barrier vs checkpoints t/over: test empty Subject: line matching www: rework query responses to avoid COUNT in SQLite over: speedup get_thread by avoiding JOIN nntp: fix NEWNEWS command t/thread-all.t: modernize test to support modern inboxes rename+rewrite test using Benchmark module nntp: make XOVER, XHDR, OVER, HDR and NEWNEWS faster view: avoid offset during pagination mbox: remove remaining OFFSET usage in SQLite msgmap: replace id_batch with ids_after nntp: simplify the long_response API searchidx: ensure duplicated Message-IDs can be linked together init: s/GIT_DIR/REPO_DIR/ in usage import: rewrite less history during purge v2: support incremental indexing + purge v2writable: do not modify DBs while iterating for ->remove v2writable: recount partitions after acquiring lock searchmsg: remove unused `tid' and `path' methods search: remove unnecessary OP_AND of query mbox: do not sort search results searchview: minor cleanup support altid mechanism for v2 compact: better handling of over.sqlite3* files v2writable: remove redundant remove from Over DB v2writable: allow tracking parallel versions v2writable: refer to git each repository as "epoch" over: use only supported and safe SQLite APIs search: index and allow searching by date-time altid: fix miscopied field name nntp: set Xref across multiple inboxes www: favor reading more from SQLite, and less from Xapian ensure Xapian and SQLite are still optional for v1 tests psgi: ensure /$INBOX/$MESSAGE_ID/T/ endpoint is chronological over: avoid excessive SELECT over: remove forked subprocess v2writable: reduce barriers index: allow specifying --jobs=0 to disable multiprocess convert: support converting with altid defined store less data in the Xapian document msgmap: speed up minmax with separate queries feed: respect feedmax, again v1: remove articles from overview DB compact: do not merge v2 repos by default v2writable: reduce partititions by one search: preserve References in Xapian smsg for x=t view v2: generate better Message-IDs for duplicates v2: improve deduplication checks import: cat_blob drops leading 'From ' lines like Inbox searchidx: regenerate and avoid article number gaps on full index extmsg: remove expensive git path checks use %H consistently to disable abbreviations searchidx: increase term positions for all text terms searchidx: revert default BATCH_BYTES to 1_000_000 Merge remote-tracking branch 'origin/master' into v2 fix tests to run without Xapian installed extmsg: use Xapian only for partial matches Jonathan Corbet (3): Don't use LIMIT in UPDATE statements Update the installation instructions with Fedora package names Allow specification of the number of search results to return -- git clone https://public-inbox.org/ public-inbox (working on a homepage... sorta :) public-inbox 1.0.0 - 2018-02-08 2:33 UTC ========================================= Link: https://public-inbox.org/meta/20180208023357.GA32591@80x24.org/ After some 3.5 odd years of working on this, I suppose now is as good a time as any to tar this up and call it 1.0.0. The TODO list is still very long and there'll be some new development in coming weeks :> So, here you have a release: https://public-inbox.org/releases/public-inbox-1.0.0.tar.gz Checksums, mainly as a safeguard against accidental file corruption: SHA-256 4a08569f3d99310f713bb32bec0aa4819d6b41871e0421ec4eec0657a5582216 (in other words, don't trust me; instead read the code :>)