about summary refs log tree commit homepage
DateCommit message (Collapse)
2024-01-30watch: support incremental updates from MH
The good news (compared to lei) is we only have to worry about imports and don't care about the filename nor keywords, so it's immune to .mh_sequences writing inconsistencies across MH implementations and sequence number packing. We still assume the writer will write the mail file with one of: * rename(2) to create the final sequence number filename * a single write(2) if not relying on rename(2) mlmmj and mutt satisfy these requirements. Python's Lib/mailbox.py may, I'm not sure...
2024-01-30syscall: use pure Perl sendmsg/recvmsg on *BSD
While syscall symbols (e.g. SYS_*) have changed on us in FreeBSD during the history of Sys::Syscall and this project and did bite us in some cases; the actual numbers don't get recycled for new syscalls. We're also fortunate that sendmsg and recvmsg syscalls and associated msghdr and cmsg structs predate the BSD forks and are compatible across all the BSDs I've tried. OpenBSD routes Perl `syscall' through libc; while NetBSD + FreeBSD document procedures for maintaining backwards compatibility. It looks like Dragonfly follows FreeBSD, here. Tested on i386 OpenBSD, and amd64 {Free,Net,Open,Dragonfly}BSD This enables *BSD users to use lei, -cindex and future SCM_RIGHTS-only features without needing Inline::C. [1] https://cvsweb.openbsd.org/src/gnu/usr.bin/perl/gen_syscall_emulator.pl [2] https://www.netbsd.org/docs/internals/en/chap-processes.html#syscall_versioning [3] https://wiki.freebsd.org/AddingSyscalls#Backward_compatibily
2024-01-30syscall: update formatting to match our codebase
Sys::Syscall needs separate patches anyways (if it ever gets updated), and having a mix of indentation styles in our codebase gets confusing. We'll also update cfarm-related comments for the current URL.
2024-01-24view: /$INBOX/ links to topics_{new,active}.html
This makes the new endpoints easier-to-find. The navigation is still at the bottom of the page since I figured having it at the top is too cluttered for users on small terminals.
2024-01-24www_topics: simplify date column mapping
We can rely on SQLite to map `MAX(ds)' to `ds' rather than doing it in Perl, reducing the size of our Perl optree at the (smaller) expense of SQLite bytecode.
2024-01-17www: repolist: support globbing in URL
This can make it easier to find deeply-nested repositories on my mirror of git.kernel.org. It's not perfect, since projects like Linux use several completely different basenames (e.g. linux.git vs vfs.git vs net.git), but it can still help find significant matches further up a tree. I don't expect glob characters to conflict with actual git repositories used by reasonable people, but direct (non-glob) hits are still tried first.
2024-01-17config: glob2re: fix over-matching /**/foo
Noticed while adding wildcard support to WwwCoderepo...
2024-01-17config: don't vivify invalid fields for coderepos
We don't need 404s for non-existent coderepos creating fake (and invalid) entries. I noticed this while working on subsequent changes to support globbing in URLs.
2024-01-17examples/unsubscribe-milter@.service: use KillMode=process
This can be a multi-process daemon, but systemd should only kill the top-level one. And also finish a comment about the User having access to the shared private key.
2024-01-17tests: clarify Email::MIME is only for development
We moved to PublicInbox::Eml a while back and have no plans to go back to using Email::MIME, so don't tempt users and packagers to waste disk space on Email::MIME.
2024-01-11lei_to_mail: show supported mbox formats on error
Users may accidentally or unknowingly write `mbox' and not know we support 4 incompatible mbox variants.
2024-01-11lei+net_reader: show NNTP message in more failures
Showing absolutely nothing when hitting a server requiring authentication is a very bad user experience. While we're at it, use Net::Cmd->message in more places where we experience failure, too.
2024-01-11net_reader: fix NNTP credential use
Clearly this was never tested until now, as passwords being retrieved by git-credential got completely ignored and unused. This enables users to connect to NNTP(S) servers requiring a password.
2024-01-10www: use autodie in more coderepo places
This cuts down on code somewhat (before I add more :x)
2024-01-10address: avoid [ undef, undef ] address pairs
For totally bogus things in address fields, we'll fall back to showing the original entry in the name column when using Email::Address::XS. The pure Perl version differs here, but we'll just let them be different when it comes to handling bogus data.
2024-01-10www: linkify inbox addresses in To/Cc headers
This makes it easier to discover contemporary messages crossposted to other groups within the same WWW instance. The internal cache is necessary for giant threads, and the expiry mechanism is necessary to prevent attackers from trivially OOM-ing.
2024-01-10git: lowercase host in host_prefix_url
This will make it more effective for use as a cache key. I'm not entirely happy with this sub being in the Git module since it's used by lei and command-line tools, but that's for another day to deal with...
2024-01-10test_common: key2sub: don't require final ';' in scripts
I noticed this when I wrote a new (but probably unnecessary) *.t test and `make check-run' failed since I omitted the final semi-colon after `done_testing'.
2024-01-10doc: txt2pre: linkify -extindex(1), dedupe -config(5)
I noticed the HTML manpages didn't have -extindex linkification while checking over the docs. While adding it, I also noticed -config(5) had two entries :x
2024-01-10git: workaround occasional -watch error message
I'm not sure how this happens (perl 5.34.1 on FreeBSD 13.2) but it appears the {sock} check can succeed and then go undef and become unable to call ->owner_pid. This happens when libgit2 is in use, so perhaps that's a factor. In any case, the rest of the tests succeed.
2024-01-04lei: MH: support inotify to detect updates
This should help us deal with MH sequence number packing and invalidating mail_sync.sqlite3.
2024-01-02view: always show strict|loose note w/ multi-roots
For thread skeletons with multiple roots, it makes sense to note the strict|loose delineation even when the first message matches the desired Message-ID.
2024-01-02over: re-sort Subject matches for WWW /T/ endpoint
When retrieving loose (Subject) matches for a thread, we wanted the most recent matches in reverse chronological order. However, when displaying the /T/ endpoint generating the thread skeleton, we prefer ascending chronological order to match the flow of the conversation. Reported-by: Askar Safin <safinaskar@gmail.com> Link: https://public-inbox.org/meta/CAPnZJGAqsh8ZhPaCAy5M2NZVNcWrr_Hr94t32VXiyiTXwD9jRQ@mail.gmail.com/
2023-12-30lei: support reading MH for convert+import+index
The MH format is widely-supported and used by various MUAs such as mutt and sylpheed, and a MH-like format is used by mlmmj for archives, as well. Locking implementations for writes are inconsistent, so this commit doesn't support writes, yet. inotify|EVFILT_VNODE watches aren't supported, yet, but that'll have to come since MH allows packing unused integers and renaming files.
2023-12-29pure Perl inotify support
This is a step towards improving the out-of-the-box experience in achieving notifications without XS, extra downloads, and .so loading + runtime mmap overhead. This also fixes loongarch support of all Linux syscalls due to a bad regexp :x All the reachable Linux architectures listed at <https://portal.cfarm.net/machines/list/> should be supported. At the moment, there appears to be no reachable sparc* Linux machines available to cfarm users. Fixes: b0e5093aa3572a86 (syscall: add support for riscv64, 2022-08-11)
2023-12-16lei: use ->child_error API properly
I noticed this bug while developing another feature and tests were getting SIGHUP (since SIGHUP == 1 on most systems).
2023-12-16lei index: support +L: labels
`lei index' should be capable of indexing the the same way `lei import' does, but without the indexing. I only noticed this omission while developing a new feature.
2023-12-16t/pop3d-limit: use v1 inbox to test on ancient git
We don't need v2 features nor scalability to test POP3 stuff.
2023-12-16git: quiet down `rev-parse --git-path' errors
This fixes t/mda.t with git 1.8.5
2023-12-16cindex: --prune needs git 2.6+
Older versions of git lack --batch-all-objects, and 2.6+ is new enough already since v2, lei, etc all depend on it.
2023-12-16searchidx: quiet down old git patchid
CentOS 7.x ships with git 1.8.5, so unless a CentOS 7.x user enables 3rd-party repos[1], they'll be stuck with a version of git without `--stable' (though I'm becoming skeptical of indexing patchids at all). [1] https://public-inbox.org/meta/20210421151308.yz5hzkgm75klunpe@nitro.local/
2023-12-16tests: quiet uninitialized warnings on CentOS 7.x
Test::More distributed with Perl 5.16.3 on CentOS 7.x expects the `$how_many' argument for `skip' and warns when its uninitialized, so quiet that warning down.
2023-12-15doc: RelNotes: more 2.0 updates
But new ideas keep popping into muh brain :x
2023-12-13t/lei-import: relax EIO regexp
musl uses "I/O error" while glibc uses "Input/output error" I wish something like strerrorname_np(3) were portable and built into Perl so we could just match on /EIO/.
2023-12-13gzip_filter: use OO ->zflush dispatch
While it's not in a code path intended WwwCoderepo and RepoAtom, those classes provide their own ->zflush, this can future-proof our code against future subclasses at a minor performance cost.
2023-12-13www_coderepo: fix read buffering
Our read buffering only worked well with the stdout buffering on glibc and *BSD libc, but not musl. When reading the stdout of git(1), we are likely to get smaller buffers and require more reads on musl-based systems (tested Alpine Linux 3.19.0). Thus we must prevent ->translate from being called with an empty argument list (denoting EOF). We'll also avoid some local variable assignments while at it and favor the non-OO ->zflush dispatch inside RepoAtom and WwwCoderepo subclasses.
2023-12-13t/convert-compact: allow S_ISGID bit
My user home directory on Alpine has S_ISGID set on it and every subdirectory inherits it. This includes my work tree and the t/data-gen/* subdirectories. So just ignore the presence (or non-presence) of the S_ISGID bit on directories descended from the cached t/data-gen/* directories. Now, public-inbox-convert may want to preserve S_ISGID on the newly-created v2 inbox, but that's a separate discussion.
2023-12-13test_common: extract oct_is from search.t
And use it in convert-compact.t This gives us nicer errors for debugging a problem I noticed on Alpine Linux (tested 3.19.0)
2023-12-13install: updates for Alpine Linux and apk
Somewhat surprising that BSD::Resource hasn't been packaged for Alpine, but otherwise pretty straightforward mapping with some dependencies filled in manually.
2023-12-13xap_helper_cxx: support clang w/o `c++' executable
This makes the C++ build work on Alpine Linux (tested 3.19.0) without having to install g++ to get the `c++' executable. I've tested this change with and without g++ on Alpine so it'll continue to work if a user decides to install g++. This should continue to work if the Xapian package on Alpine is changed to link against libc++ instead of libstdc++, since we only add `-lstdc++' as a fallback. For reference, Xapian is already linked against libc++ and not libstdc++ on FreeBSD 13.x
2023-12-13xap_helper_cxx: decouple from Inline::C
We don't actually need Inline::C support to build a standalone executable implemented in C++.
2023-12-13treewide: avoid strftime %k for portability
The musl strftime(3) implementation on AlpineLinux 3.19.0 doesn't support `%k' and `%k' isn't in POSIX, either. So we fall back to using the `sprintf' perlop in the user-facing UI since leading zeroes require needless overhead for my eyes and brain to parse in the time.
2023-12-13lei inspect: drop unneeded strftime import
`lei inspect' uses the `iso8601' sub from LeiOverview.
2023-12-13tests: attempt compatibility w/ busybox lsof
BusyBox lsof(1) ignores the `-p PID' argument and shows the open files for every process it knows about. BusyBox lsof also lacks the `NODE' column of the non-BusyBox implementation, so we'll rely on /proc/PID/fd/ in those cases since the deleted file checks are Linux-only and it's common to have procfs is mounted on /proc on Linux.
2023-12-13t/cindex*: skip --join when join(1) is missing
While join(1) is POSIX, busybox on Alpine 3.19.0 does not provide its functionality. So just skip tests for now since it's too much trouble to provide a workaround for an otherwise common POSIX command.
2023-12-13tests: account for missing git-http-backend
Alpine Linux ships git-http-backend in the `git-daemon' package separately from `git', so we must test for its existence before attempting to test functionality which depends on it.
2023-12-13t/io: strace is optional on Linux
There are many Linux (GNU or otherwise) which do not have strace(1) installed.
2023-12-10imap: replace Mail::Address fallback with AddressPP
Our pure-Perl (PublicInbox::AddressPP) fallback is closer to the preferred Email::Address::XS (EAX) behavior than Mail::Address is for ->name support. EAX tends to be overkill with good spam filtering, and using our own fallback means life is easier for users with neither C/XS build tools nor a pre-built EAX package.
2023-12-09cindex: switch --join to use dfpost7 by default
Post-image blob OIDs are what solver already works with, and longer OIDs may not be available in historical mail archives. `patchid' turns out to be unsuitable since: 1) git's default diff algorithm has changed over time 2) users may use different diff options to improve readability Of course, we could eventually run `lei rediff' during the index phase to regenerate patchids, but that's out-of-scope for now and likely to be too expensive.
2023-12-09xap_helper: support term length limit
This will allow us to use p2q-compatible specifications such as "dfpost7" to only capture blob OIDs which are 7 characters in length (the indexer will always index down to 7 characters)