about summary refs log tree commit homepage
DateCommit message (Collapse)
2019-10-15config: we always have {-section_order}
Rewrite a bunch of tests to use ordered input (emulating "git config -l" output) so we can always walk sections in the order they were given in the config file.
2019-10-15Config.pm: Add support for mailing list information
The world has turned since I first started following mailing lists and to my surprise every mailing list that I am subscribed to properly sets the "List-ID:" mailing list header. So instead of doing something clever and flexible I am adding support for looking up public inbox mailing lists by their mailing list name. That makes the work needed for each email trivial and easy to understand. - Parse the "List-ID:" header. - Lookup in the configuration which mailbox is connected to that "List-ID:" - Deliver the mail to that mailbox. To that end this change enhances PublicInbox to have an additional mailbox configuration parameter "listid" that holds the mailing list name. A method is added to the PublicInbox config object called lookup_list_id that given a mailing list name will return the PublicInbox in the configuration that is configured to handle that mailing list. Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> [ew: avoid autovivification of $ibx->{listid} for t/config.t]
2019-10-15PublicInbox::Import Smuggle a raw message into add
I don't trust the MIME type to not munge my email messages in horrible ways upon occasion. Therefore allow for passing in the raw message value instead of trusting the mime object to preserve it. Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com> [ew: use "//" from Perl 5.10+ for defined check]
2019-10-15doc: remove unnecessary dependency on RelNotes directory
It was causing unnecessary rebuilds of NEWS* files
2019-10-15INSTALL: recommend inotify|kqueue modules for -watch
Jan Kiszka reported high polling frequency when using -watch. It turns out OS-specific packages for Filesys::Notify::Simple do not pull in interfaces to use kqueue or inotify, which are required to perform power-efficient event-based wakeups on Maildir writes. Fix the name of the Filesys::Notify::Simple for FreeBSD while we're at it. Link: https://public-inbox.org/meta/c85803c6-6d77-a300-491a-9f310dd284c1@web.de/
2019-10-15TODO: add an item for Python pygments
Pygments seems to be a popular highlighter and widely available, so we'll be providing support for that at some point... Link: https://public-inbox.org/meta/20190926131836.GB10467@chatter.i7.local/ Link: https://public-inbox.org/meta/874l0zt7sd.fsf@alyssa.is/
2019-10-14TODO: add item for config linter and grapher
It'll be useful for tools and users to test and perhaps visualize configs before reloading -httpd/-nntpd/-watch.
2019-10-10t/git-http-backend: disable worker processes
We want to ensure we run lsof(8) on the worker (if needed), and not the master, which doesn't serve requests. This was originally on top of a test-only patch in https://public-inbox.org/meta/20190913015043.17149-1-e@80x24.org/ In any case, no point in spawning extra processes for this test.
2019-10-10doc: explain publicinbox.<name>.watchheader
It wasn't clear to me exactly what this does -- in particular, what happens if it isn't specified? Does it support multiple values? A very brief explanation can answer both of these questions without making somebody look at the code.
2019-10-09doc: use local modules to generate NEWS*
We shouldn't need installed modules to generate NEWS* files.
2019-10-09INSTALL: note that we prefer GNU make
ExtUtils::MakeMaker uses non-POSIX '::', at least; and our own Documentation/include.mk and our postamble are written for GNU make. GNU make is also more widely-installed and available than any other make; even if I'm not generally a fan of GNU-isms.
2019-10-09doc: PublicInbox::SaPlugin::ListMirror manpage
This is a plugin for SpamAssassin that happens to be quite useful in keeping spam off lists I mirror. Hopefully more people can find it useful now that it has a manpage.
2019-10-09extmsg: drop unused $have_mm variable
We rely on Inbox::mm nowadays.
2019-10-07examples: add grok-pull post_update_hook example
This requires the latest (to be in 1.2) -init changes for synchronization and has no dependencies on GNU or bash-isms so it should run on *BSD systems without GNU tools. It does attempt to use curl on <$INBOX_URL/_/text/config/raw>, but curl is fairly standard nowadays, and falls back to using an invalid address to initialize.
2019-10-07doc: generate NEWS, NEWS.atom, and NEWS.html
We'll use our Documentation/RelNotes directory and internal APIs to generate these files for website use (the website should be completely reproducible).
2019-10-07Makefile.PL: add dependency on MANIFEST contents
This prevents breakage when running installed scripts when a user fetches from git and forgets to run "perl Makefile.PL" before "make install".
2019-10-05init: implement locking
First, we use flock(2) to wait on parallel public-inbox-init(1) invocations while we make multiple changes using git-config(1). This flock allows -init processes to wait on each other if using reasonable POSIX filesystems. Then, we also need a git-config(1)-compatible lock to prevent user-invoked git-config(1) processes from clobbering our changes while we're holding the flock.
2019-10-05doc: add manpage for public-inbox-init(1)
This old command was lacking a manpage, so (finally) create one.
2019-10-05init: favor --skip-epoch instead of --skip
Since I intend to add support for --skip-artnum, disambiguating the long option name makes sense. We'll support --skip indefinitely for compatibility.
2019-10-05t/search: bail out on `git init --shared' failures
We can save future testers some time if we bail out early on "git init --shared" failures, since things like seccomp or non-POSIX FSes would trigger failures. BAIL_OUT has been in Test::Simple since Perl v5.10.0, so it's old-enough to call for our purposes. Thanks-to: Alyssa Ross <hi@alyssa.is> Reviewed-by: Alyssa Ross <hi@alyssa.is> Tested-by: Alyssa Ross <hi@alyssa.is> Link: https://public-inbox.org/meta/878sq2hd08.fsf@alyssa.is/
2019-10-03t/search: show file modes as octal on failures
This ought to make permissions errors on odd systems easier to diagnose in the future.
2019-10-02tests: recommend running create-certs.pl with $^X
This is better than recommending running the script directly because it will ensure the correct version of perl is used.
2019-10-02HACKING: document Perl character class gotcha
It took me years to discover this change in Perl 5.6, maybe other potential hackers are in the same boat.
2019-10-02listener: warn on some accept()/accept4() errors
We need to warn when hitting file or socket memory limits or misconfigurations which clear O_NONBLOCK to make it easier to diagnose configuration problems. We'll also warn on some other errors in case bugs creep in...
2019-10-01www: fix absolute URLs when mounted under a subdir
While we avoid generating absolute URLs in most cases, our "git clone" instructions and URL headers in mboxrd files contain full URLs. So do the same thing we do for WwwAtomStream and pre-generate the full URL before Plack::App::URLMap changes $env->{PATH_INFO} and $env->{SCRIPT_NAME} back to their original values. Reported-by: edef <edef@edef.eu> Link: https://public-inbox.org/meta/cover.0f97c47bb88db8b875be7497289d8fedd3b11991.1569296942.git-series.edef@edef.eu/
2019-10-01doc: avoid redundant mkdir(1) calls
GNU make has order-only prerequisites, so use it to avoid redundant mkdir(1) calls since our homepage requires GNU make to build anyways.
2019-10-01TODO: add item for searching based on git-patch-id(1)
I forgot about this feature when I was implementing blob-ID-based searches :x
2019-10-01TODO: update with "git cat-file" items
Millions of inboxes in an instance is probably not feasible, but dozens or even hundreds could happen and /proc/sys/fs/pipe-user-pages-soft is only 16384 on my system, with each "cat-file --batch" process using 16+1 pages worth of pipes.
2019-09-30config: use NUL-delimited git-config(1) output
This allows us to deal with newlines in config values, since git-config(1) acquired "-z" support in git v1.5.3. I'm not sure if it's actually useful in our case, but maybe some multi-line texts could be added. And newlines in path names are super useful!
2019-09-27qspawn: workaround Perl 5.16.3 leak, re-enable Deflater
The httpd-supplied write callback is the leak culprit under Perl 5.16.3. undef-ing it immediately after use keeps a repeated "git fetch" loop from monotonically increasing memory and FD use on the Perl shipped with RHEL/CentOS 7.x. Other endpoints tested showed no increase in memory use under constant load with "ab -HAccept-Encoding:gzip -k", including the async psgi_qx code path used by $INBOX_URL/$OBJECT_ID/s/ via SolverGit module.
2019-09-27wwwtext: support $INBOX_URL/_/text/config/raw
This returns a git-config(1)-compatible file to make it easier to get started on mirroring an existing public-inbox. Omitting the "raw" from the URL works, as well, but I'm not sure if it's very useful.
2019-09-27v2writable: only change $EPOCH.git/config on epoch creation
We don't need to make unnecesary writes to the git config file and wear out storage devices every time we run "public-inbox-index"
2019-09-27mbox: update URL for mboxrd info
qmail.org seems unavailable.
2019-09-26hlmod: update for highlight 3.51 API change
Quoting Amitai Schleier, who made this same change in ikiwiki[1], where lots of the public-inbox highlight code comes from: > As of 3.51, searchFile() is no longer provided in highlight's Perl > bindings (at least on NetBSD and OS X, as built from pkgsrc). This > leaves us falling through to getConfDir(), which has been gone > rather longer. > > From highlight git, it appears searchFile() and getFiletypesConfPath() > both originated in the 3.14 release. The latter is still available in > 3.51, and returns the same result searchFile() used to. Switch to it. So, this should still be compatible with the version of highlight.pm in Debian, but add support for newer versions as well. [1]: commit 4d06df9583e6c4145f8c6fc2fd51d7894c0b85ce Cc: Amitai Schleier <schmonz-web-ikiwiki@schmonz.com>
2019-09-26httpd: disable Deflater middleware by default on Perl <5.18
Testing with perl-5.16.3-294.el7_6 RPM package on RHEL/CentOS 7, the Deflater middleware triggers a leak when used in conjunction with our push-based responses from PublicInbox::Qspawn. I could not find another solution to workaround the memory leak in this case, and I could not find a specific leak fix in the perl5180delta manpage[1] which looked like it would solve our problem. Attempting to workaround the issue proved futile. Using internal Deflater-specific keys to prevent deflating in GitHTTPBackend and Qspawn did not solve the problem: $env->{"plack.skip-deflater"} = 1; $env->{"psgix.no-compress"} = 1; Nor did forcing an invalid encoding via "git fetch": git -c http.extraheader=Accept-Encoding:gzap fetch So this appears to be a problem with Plack::Util::response_cb somewhere. This does NOT appear to be a problem with ref() leaking as in DS::next_tick[2], since I couldn't find where Plack::Middleware::Deflater or Plack::Util::response_cb would be calling ref() on a blessed reference to trigger a leak. Also, oddly enough, the ref() use for backwards compatibility at the top of PublicInbox::GitHTTPBackend::serve does NOT seem to trigger a leak on 5.16.3 due to [2]: # XXX compatibility... ugh, can we stop supporting this? $git = PublicInbox::Git->new($git) unless ref($git); [1] https://perldoc.perl.org/perl5180delta.html [2] https://rt.perl.org/Public/Bug/Display.html?id=114340
2019-09-26ds: workaround a memory leak in Perl 5.16.x
The perl-5.16.3-294.el7_6 RPM package on RHEL/CentOS 7 is affected by a memory leak in Perl when calling `ref' on blessed references. This resulted in a very slow leak that manifests more quickly with a nonstop "git fetch" loop. Use Scalar::Util::blessed to work around the issue. Tested overnight on a CentOS 7 VM. cf. https://rt.perl.org/Public/Bug/Display.html?id=114340
2019-09-24spawnpp: use absolute path for exec
We support "-env" to clear the environment with spawn(), which causes test failures but no runtime failures (since "-env" isn't used anywhere in our real code) Reported-and-tested-by: Alyssa Ross <hi@alyssa.is>
2019-09-22feed: remove unused $cmt->{-html_url} field
It was never used, and will not be needed.
2019-09-22doc: update HACKING and TODO with a few items
Inline::C seems alright, so we might use it more since it still allows end users to quickly make changes. Our performance on rotational disks is also terrible, and could be improved...
2019-09-20wwwatomstream: fix per-feed <id>
We were emitting the same "<id>mailto:name@domain</id>" tag for every feed (but not per-feed entry). This could cause feed readers to mistake the top (news.atom) feed for other feeds (search results, or per-thread feeds). This is technically a breaking change for people relying on per-thread or per-query feeds, but the only alternative is to remain broken for anybody trying to follow multiple feeds off the same inbox.
2019-09-18config: boolean handling matches git-config(1)
We need to handle arbitrary integers and case-insensitive variations of human words to match git-config(1) behavior, since that's what users would expect given we use config files parseable by git-config(1).
2019-09-18doc: add release notes directory
The v1.2.0 is a work-in-progress, while the others are copied out of our mail archives. Eventually, a NEWS file will be generated from these emails and distributed in the release tarball. There'll also be an Atom feed for the website reusing our feed generation code.
2019-09-17t/httpd-corner.t: don't fail lsof test if stdin is a pipe (try #2)
Actually do the redirect properly
2019-09-17t/httpd-corner.t: don't fail lsof test if stdin is a pipe
We don't want the stdin from the test runner to accidentally cause this test to fail.
2019-09-17http: remove unnecessary delete
Only removing $http->{env} is needed to prevent circular references. $env->{'psgix.io'} does not need to be deleted since $env will no longer have any references to it when ->close returns.
2019-09-17http: drop unused `$env' variable after delete
And explain why we need to do that delete in a comment.
2019-09-17qspawn: improve variable naming and commenting
Naming $start_cb consistently helps avoid confusing new readers, and some comments will help with understanding flow
2019-09-17qspawn: shorten lifetime of circular references
All of these circular references are designed to clear themselves, but these will make actual errors from Devel::Cycle easier-to-spot. The circular reference in the limiter {run_queue} is not a real problem, but we can avoid storing the circular reference until we actually need to spawn the child, reducing the size of the Qspawn object while it's in the queue, slightly. We also do not need to have redundant checks to spawn new processes, we should only spawn new processes when they're ->start-ed or after waitpid reaps them.
2019-09-17qspawn: log errors for generic PSGI server users
Generic PSGI servers have $env->{'psgi.errors'}, too, so ensure they can log errors.
2019-09-17qspawn: remove return value from ->finish
We don't use the return value in real code since we do waitpid asynchronously, now. So simplify our runtime code at the cost of making our test slighly more complex.