public-inbox releases
help / color / mirror / Atom feed
* [ANNOUNCE] public-inbox 1.9.0
From: Eric Wong @ 2022-08-21  2:36 UTC (permalink / raw)
  To: meta


  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:

See archives at for all history.
See for what the future holds.

^ permalink raw reply

* [ANNOUNCE] public-inbox 1.8.0
From: Eric Wong @ 2022-04-23  8:22 UTC (permalink / raw)
  To: meta

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

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.


  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:

See archives at for all history.
See for what the future holds.

^ permalink raw reply

* [ANNOUNCE] public-inbox 1.7.0
From: Eric Wong @ 2021-11-04  7:52 UTC (permalink / raw)
  To: meta

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

  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

  - IMAP and NNTP connection establishment (including git-credential
    prompts) ordering is now tied to config file order.


* 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:

See archives at for all history.
See for what the future holds.

^ permalink raw reply

* [ANNOUNCE] public-inbox 1.6.1
From: Eric Wong @ 2020-12-31 23:45 UTC (permalink / raw)
  To: meta

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.

* 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.

* 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:

* 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:

There are also several ocumentation fixes from Uwe Kleine-König
and Kyle Meyer.

Please report bugs via plain-text mail to:

See archives at for all history.

^ permalink raw reply

* [ANNOUNCE] public-inbox 1.6.0
From: Eric Wong @ 2020-09-16 20:03 UTC (permalink / raw)
  To: meta

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

  - 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:

See archives at for all history.
See for what the future holds.

^ permalink raw reply

* [ANNOUNCE] public-inbox 1.5.0
From: Eric Wong @ 2020-05-10  7:04 UTC (permalink / raw)
  To: meta

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

* 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.<name>.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:

Please report bugs via plain-text mail to:

See archives at for all history.
See for what the future holds.

^ permalink raw reply

* [ANNOUNCE] public-inbox 1.4.0
From: Eric Wong @ 2020-04-17  8:48 UTC (permalink / raw)
  To: meta

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

  - `<' 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:

Please report bugs via plain-text mail to:

See archives at for all history.
See for what the future holds.

^ permalink raw reply

* [ANNOUNCE] public-inbox 1.3.0
From: Eric Wong @ 2020-02-10  5:52 UTC (permalink / raw)
  To: meta

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 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:

Please report bugs via plain-text mail to:

See archives at for all history.
See for what the future holds.

^ permalink raw reply

* [ANNOUNCE] public-inbox 1.2.0
From: Eric Wong @ 2019-11-03  3:12 UTC (permalink / raw)
  To: meta

* 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.

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 for all history.
See for what the future holds.

^ permalink raw reply

* [ANNOUNCE] public-inbox 1.1.0-pre1
From: Eric Wong @ 2018-05-09 20:23 UTC (permalink / raw)
  To: meta; +Cc: Konstantin Ryabitsev

Pre-release for v2 repository support.
Thanks to The Linux Foundation for supporting this work!

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 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
      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 public-inbox
(working on a homepage... sorta :)

^ permalink raw reply

* [ANNOUNCE] public-inbox 1.0.0
From: Eric Wong @ 2018-02-08  2:33 UTC (permalink / raw)
  To: meta

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:

Checksums, mainly as a safeguard against accidental file corruption:

SHA-256 4a08569f3d99310f713bb32bec0aa4819d6b41871e0421ec4eec0657a5582216
	(in other words, don't trust me; instead read the code :>)

^ permalink raw reply

	git clone http://7fh6tueqddpjyxjmgtdiueylzoqt6pt7hec3pukyptlmohoowvhde4yd.onion/public-inbox.git
	git clone