* Re: Mail archives in Git using ssoma (Docker image) [not found] ` <20160821094833.GB2338@odin.tremily.us> @ 2016-08-21 12:08 ` Eric Wong 2016-08-21 17:36 ` W. Trevor King 0 siblings, 1 reply; 5+ messages in thread From: Eric Wong @ 2016-08-21 12:08 UTC (permalink / raw) To: W. Trevor King Cc: notmuch, David Bremner, Steven Allen, Tomi Ollila, Carl Worth, meta +Cc meta@public-inbox.org "W. Trevor King" <wking@tremily.us> wrote: > On Sat, Aug 20, 2016 at 09:36:31PM -0700, W. Trevor King wrote: > > [2]: git://tremily.us/notmuch-archives.git Cool! > This is the ssoma archive (with the data in it). I just set up a > basic HTTP archive (following [1]) based on a Docker image [2] (Gentoo > doesn't package all the Perl dependencies public-inbox needs). Ugh, that sucks (sorry, not a fan of Docker). What's missing from Gentoo? It should be easy to copy just the necessary .pm files and use PERL5LIB environment to point to the correct path (man perlrun). I'm conciously avoiding XS (compiled) extensions to make installation/distribution easier. > Dockerfile for rebuilding the image is in [2]. I'm currently hosting > the archives (HTTP only) at [3]. Spinning that up from the Docker > image looks like: > > $ mkdir srv > $ git clone --bare git://tremily.us/notmuch-archives.git srv/notmuch > $ echo 'Notmuch -- Just an email system' >srv/notmuch.git/description > $ git config -f srv/notmuch.git/config publicinbox.http http://tremily.us > $ git config -f srv/notmuch.git/config publicinbox.email notmuch@notmuchmail.org That should probably be: ; based on your [3] git config -f srv/notmuch.git/config \ publicinbox.notmuch.url http://tremily.us/notmuch git config -f srv/notmuch.git/config \ publicinbox.notmuch.address notmuch@notmuchmail.org ; this is crucial for all the public-inbox-* tools git config -f srv/notmuch.git/config \ publicinbox.notmuch.mainrepo /path/to/notmuch.git I'm sorry that most of this is still undocumented at the moment, but it's my first priority once I'm done sorting out some non-computing-related stuff. > $ docker run --name notmuch-archives -d -p 80:8080 -v ${PWD}/srv/:/srv/ wking/public-inbox > > (although I'm using -p ###:8080 and have an Nginx reverse-proxy in > front). It's not updating automatically yet, but that will probably > look like: > > 1. Pull new mbox [4]. > 2. Import into notmuch-archives [5]. > 3. Re-run public-inbox-index (this could probably be via ‘docker exec …’. > > But I'll have to test that to confirm. And ideally we'd be using > ssoma-mda or similar directly, instead of going through mbox, but I'd > rather get the official headers on the stored mail than be efficient > ;). For mirroring existing lists, I started using public-inbox-watch which currently watches Maildirs. The config knobs are sorta documented from my announcement to git@vger: https://public-inbox.org/git/20160710004813.GA20210@dcvr.yhbt.net/ http://hjrcffqmbrq6wope.onion/git/20160710004813.GA20210@dcvr.yhbt.net/ Initial import (w/o spamassassin) was done with scripts/import_vger_from_mbox in the source: torsocks git clone http://hjrcffqmbrq6wope.onion/public-inbox git clone https://public-inbox.org/ public-inbox git clone git://repo.or.cz/public-inbox I recommend public-inbox-watch for mirroring existing lists (such as what I did with git@vger) but public-inbox-mda for self-hosted lists (such as meta@public-inbox.org). > One shift from Gmane's mid.gmane.org/… is that the public-inbox UI > Message-ID lookup is per-bucket, and public-inbox seems to be > encouraging per-list buckets. The public-inbox-nntpd interface supports mid lookups across all inboxes in that instance; so it should be doable in the WWW interface, too. Either way, I think it has to be O(n) where (n) is the number of Xapian DBs, though. I already have news.public-inbox.org hooked up to both NNTP and HTTP(*), so I plan on making http://news.public-inbox.org/<Message-ID> to work like: nntp://news.public-inbox.org/<Message-ID> (*) Right now, it just redirects $GROUP to the HTTP interface: http://news.public-inbox.org/$NEWSGROUP -> http://... And the WWW interface already has fallbacks to scan + link across inboxes, so s/git/meta/ the above URLs and you'll get a link to the message on /git/ instead of /meta/ http://hjrcffqmbrq6wope.onion/meta/20160710004813.GA20210@dcvr.yhbt.net/ > And while I feel like I had a good grasp of the ssoma format two years > ago, I know very little about Perl and public-inbox. I'm sure you > could setup a public-inbox host that is more efficient than what's > currently in my Docker image. Feel free to ask me + meta@public-inbox.org if you have any questions or need help. Writing documentation doesn't come naturally to me, so it's easier for me to answer emails. I try to make it not very Perly. I don't think I'll bother with CPAN, for example (I don't think I successfully got my PAUSE account activated; not a fan of registrations, either). But there will definitely be tarball releases for distros soonish. (mainly targeting Debian at the moment, but FreeBSD is on the table). > Cheers, > Trevor > > [1]: http://public-inbox.org/INSTALL > [2]: https://hub.docker.com/r/wking/public-inbox/ > [3]: http://tremily.us/notmuch/ > [4]: https://notmuchmail.org/archives/notmuch.mbox > [5]: id:20160821043631.GA2338@odin.tremily.us ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Mail archives in Git using ssoma (Docker image) 2016-08-21 12:08 ` Mail archives in Git using ssoma (Docker image) Eric Wong @ 2016-08-21 17:36 ` W. Trevor King 2016-08-21 18:28 ` Eric Wong 0 siblings, 1 reply; 5+ messages in thread From: W. Trevor King @ 2016-08-21 17:36 UTC (permalink / raw) To: Eric Wong Cc: notmuch, David Bremner, Steven Allen, Tomi Ollila, Carl Worth, meta [-- Attachment #1: Type: text/plain, Size: 4424 bytes --] On Sun, Aug 21, 2016 at 12:08:52PM +0000, Eric Wong wrote: > "W. Trevor King" <wking@tremily.us> wrote: > > This is the ssoma archive (with the data in it). I just set up a > > basic HTTP archive (following [1]) based on a Docker image [2] (Gentoo > > doesn't package all the Perl dependencies public-inbox needs). > > Ugh, that sucks (sorry, not a fan of Docker). > > What's missing from Gentoo? Gentoo doesn't package (or I couldn't find the package for) Encode::MIME::Header or Mail::Thread. I tried installing things from CPAN, but ran into a compile-time error from the ‘cpan’ invocationand gave up ;). I can try and reproduce the error if you're curious, but I don't have it handy at the moment. > > $ git config -f srv/notmuch.git/config publicinbox.http http://tremily.us > > $ git config -f srv/notmuch.git/config publicinbox.email notmuch@notmuchmail.org > > That should probably be: > > ; based on your [3] > git config -f srv/notmuch.git/config \ > publicinbox.notmuch.url http://tremily.us/notmuch > > git config -f srv/notmuch.git/config \ > publicinbox.notmuch.address notmuch@notmuchmail.org > > ; this is crucial for all the public-inbox-* tools > git config -f srv/notmuch.git/config \ > publicinbox.notmuch.mainrepo /path/to/notmuch.git I was using these in the Dockerfile's CMD: (cd /srv; for NAME in *; do CONF="/srv/${NAME}/config"; public-inbox-init "${NAME}" "/srv/${NAME}" $(git config -f "${CONF}" publicinbox.http) $(git config -f "${CONF}" publicinbox.email); done) && … Are you saying that I can skip the ~/.public-inbox/config entries setup by public-inbox-init if I set publicinbox.{name}.* in the ssoma repository's config? That would be nice. I don't see a point to having {name} in ssoma-config settings though, since you're already in a single bucket by that point (using publicinbox.{name}.* makes sense in the multi-bucket ~/.public-inbox/config). > > It's not updating automatically yet, but that will probably look > > like: > > > > 1. Pull new mbox [4]. > > 2. Import into notmuch-archives [5]. > > 3. Re-run public-inbox-index (this could probably be via ‘docker exec …’. > > > > But I'll have to test that to confirm. And ideally we'd be using > > ssoma-mda or similar directly, instead of going through mbox, but I'd > > rather get the official headers on the stored mail than be efficient > > ;). > > For mirroring existing lists, I started using public-inbox-watch > which currently watches Maildirs. If I had a Maildir locally, I'd just use procmail and push new messages into ssoma-mda. I'm using the import script because my local mail has “how we delivered this to Trevor” headers (which I don't want to add) but the downloaded mbox has “how we delivered this to notmuch@notmuchmail.org” (which seems like a better fit for a shared ssoma repo). > I recommend public-inbox-watch for mirroring existing lists (such as > what I did with git@vger) but public-inbox-mda for self-hosted lists > (such as meta@public-inbox.org). Why is that? Procmail + public-inbox-mda (or my Python ssoma-mda fork [1,2]) seems simpler and equally effective if you want to insert a message that your mail system is delivering locally. > > One shift from Gmane's mid.gmane.org/… is that the public-inbox UI > > Message-ID lookup is per-bucket, and public-inbox seems to be > > encouraging per-list buckets. > > The public-inbox-nntpd interface supports mid lookups across all > inboxes in that instance; so it should be doable in the WWW > interface, too. Either way, I think it has to be O(n) where (n) is > the number of Xapian DBs, though. I'm more concerned about the interface, and less about the implementation (which can be improved later). The (n) lookups are trivially parallelizable, and you can always add a Message-ID → buckets lookup table if (n) lookups turns out to be too slow. Cheers, Trevor [1]: id:20141107190321.GL23609@odin.tremily.us [2]: id:af679af8257e250ac606e35a1307ad02907b8426.1413663212.git.wking@tremily.us http://public-inbox.org/meta/af679af8257e250ac606e35a1307ad02907b8426.1413663212.git.wking@tremily.us/t/#u -- This email may be signed or encrypted with GnuPG (http://www.gnupg.org). For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Mail archives in Git using ssoma (Docker image) 2016-08-21 17:36 ` W. Trevor King @ 2016-08-21 18:28 ` Eric Wong 0 siblings, 0 replies; 5+ messages in thread From: Eric Wong @ 2016-08-21 18:28 UTC (permalink / raw) To: W. Trevor King Cc: notmuch, David Bremner, Steven Allen, Tomi Ollila, Carl Worth, meta "W. Trevor King" <wking@tremily.us> wrote: > On Sun, Aug 21, 2016 at 12:08:52PM +0000, Eric Wong wrote: > > "W. Trevor King" <wking@tremily.us> wrote: > > > This is the ssoma archive (with the data in it). I just set up a > > > basic HTTP archive (following [1]) based on a Docker image [2] (Gentoo > > > doesn't package all the Perl dependencies public-inbox needs). > > > > Ugh, that sucks (sorry, not a fan of Docker). > > > > What's missing from Gentoo? > > Gentoo doesn't package (or I couldn't find the package for) > Encode::MIME::Header or Mail::Thread. I tried installing things from > CPAN, but ran into a compile-time error from the ‘cpan’ invocationand > gave up ;). I can try and reproduce the error if you're curious, but > I don't have it handy at the moment. Encode::MIME::Header is distributed with perl itself on Debian and also the stock upstream install. Not sure if there's an option you missed or disabled. Which perl version do you use? perl on 5.14 Debian wheezy even seems to have it. I actually still want everything to work on 5.8, since that seems to be the de-facto baseline in the wild. Mail::Thread is one .pm, and I'll probably replace it with something (same algorithm) which can use half the memory by avoiding wrapper object abstractions (it's probably the biggest memory hog at the moment). lib/PublicInbox/Thread.pm already has 3 monkey patches to workaround upstream bugs in Mail::Thread. It's dead upstream, and not available on FreeBSD, either. > > > $ git config -f srv/notmuch.git/config publicinbox.http http://tremily.us > > > $ git config -f srv/notmuch.git/config publicinbox.email notmuch@notmuchmail.org > > > > That should probably be: > > > > ; based on your [3] > > git config -f srv/notmuch.git/config \ > > publicinbox.notmuch.url http://tremily.us/notmuch > > > > git config -f srv/notmuch.git/config \ > > publicinbox.notmuch.address notmuch@notmuchmail.org > > > > ; this is crucial for all the public-inbox-* tools > > git config -f srv/notmuch.git/config \ > > publicinbox.notmuch.mainrepo /path/to/notmuch.git > > I was using these in the Dockerfile's CMD: > > (cd /srv; > for NAME in *; > do > CONF="/srv/${NAME}/config"; > public-inbox-init "${NAME}" "/srv/${NAME}" $(git config -f "${CONF}" publicinbox.http) $(git config -f "${CONF}" publicinbox.email); > done) && … > > Are you saying that I can skip the ~/.public-inbox/config entries > setup by public-inbox-init if I set publicinbox.{name}.* in the ssoma > repository's config? That would be nice. Erm, sorry, no, I mean ~/.public-inbox/config as the "git config -f" arg in the above commands. Your original config was meaningless in the context of public-inbox itself; I don't recall public-inbox relies on $GIT_DIR/config much (if at all) outside of standard git things. Using ~/.public-inbox/config is required for multi-inbox lookups (since you normally run MDA w/o args) You can also override ~/.public-inbox/config by setting the PI_CONFIG env (like GIT_CONFIG). > I don't see a point to having {name} in ssoma-config settings though, > since you're already in a single bucket by that point (using > publicinbox.{name}.* makes sense in the multi-bucket > ~/.public-inbox/config). > > > > It's not updating automatically yet, but that will probably look > > > like: > > > > > > 1. Pull new mbox [4]. > > > 2. Import into notmuch-arcives [5]. > > > 3. Re-run public-inbox-index (this could probably be via ‘docker exec …’. > > > > > > But I'll have to test that to confirm. And ideally we'd be using > > > ssoma-mda or similar directly, instead of going through mbox, but I'd > > > rather get the official headers on the stored mail than be efficient > > > ;). > > > > For mirroring existing lists, I started using public-inbox-watch > > which currently watches Maildirs. > > If I had a Maildir locally, I'd just use procmail and push new > messages into ssoma-mda. I'm using the import script because my local > mail has “how we delivered this to Trevor” headers (which I don't want > to add) but the downloaded mbox has “how we delivered this to > notmuch@notmuchmail.org” (which seems like a better fit for a shared > ssoma repo). I don't mind extra/different headers. The majority of messages in public-inbox.org/git/ has messages that were delivered to gmane; recent ones are delivered to me, and some holes were filled in by Jeff King's archives. All of our mail systems add different headers. > > I recommend public-inbox-watch for mirroring existing lists (such as > > what I did with git@vger) but public-inbox-mda for self-hosted lists > > (such as meta@public-inbox.org). > > Why is that? Procmail + public-inbox-mda (or my Python ssoma-mda fork > [1,2]) seems simpler and equally effective if you want to insert a > message that your mail system is delivering locally. -watch is usable for importing big archives or bursts of traffic since it doesn't have to reload Perl/python on every mail (this is probably not a problem for notmuch; but is for vger lists). The defaults are also less-opinionated so it won't reject attachments that passed through the list server. Maildir with your MUA (in case you missed some earlier, and got them from another user or archive). There's also a Filter inferface I added (see lib/PublicInbox/Filter/Vger.pm as an example) for dropping list trailers before SA, so those trailers don't influence Bayes, but you can do that in the MDA stage, too. But *-mda is fine, too :> > [1]: id:20141107190321.GL23609@odin.tremily.us > [2]: id:af679af8257e250ac606e35a1307ad02907b8426.1413663212.git.wking@tremily.us > http://public-inbox.org/meta/af679af8257e250ac606e35a1307ad02907b8426.1413663212.git.wking@tremily.us/t/#u ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <20160821183704.GB11495@dcvr>]
* Re: Mail archives in Git using ssoma [not found] ` <20160821183704.GB11495@dcvr> @ 2016-08-21 20:28 ` W. Trevor King 2016-08-21 21:14 ` Eric Wong 0 siblings, 1 reply; 5+ messages in thread From: W. Trevor King @ 2016-08-21 20:28 UTC (permalink / raw) To: Eric Wong; +Cc: notmuch, meta [-- Attachment #1: Type: text/plain, Size: 3363 bytes --] On Sun, Aug 21, 2016 at 06:37:04PM +0000, Eric Wong wrote: > "W. Trevor King" <wking@tremily.us> wrote: > > On Fri, Nov 07, 2014 at 11:03:21AM -0800, W. Trevor King wrote: > > > Eric Wong has been working on some tools to store email in a Git > > > repository, and his client-side code is ssoma [1]. I wanted a bit > > > more metadata than the stock ssoma-mda [2], and ended up just > > > writing a ssoma-mda in Python [3]… > > Btw, for public-inbox, I'm using git-fast-import now, so imports are > a bit faster and $GIT_DIR/ssoma.index is no longer used. This was > crucial for getting git@vger archives imported in a reasonable time. > > public-inbox-* still keeps ssoma.index up-to-date for backwards > compatibility with ssoma, and will probably do so until 2020 or > later (there'll be a few years of deprecation notices) > > So I or someone else needs to update Perl ssoma to use fast-import > at some point, too; and I suggest your python version do the same. ssoma-mda imports 22k notmuch messages in around 15 minutes (with profiling enabled), and: $ python -m cProfile -o profile import.py notmuch.mbox $ python -c "import pstats; p=pstats.Stats('profile'); p.sort_stats('cumulative').print_stats(10)" Sun Aug 21 12:56:49 2016 profile 101823722 function calls (99078415 primitive calls) in 885.069 seconds Ordered by: cumulative time List reduced from 1145 to 10 due to restriction <10> ncalls tottime percall cumtime percall filename:lineno(function) 70/1 0.002 0.000 885.069 885.069 {built-in method exec} 1 0.111 0.111 885.069 885.069 /home/wking/src/notmuch/notmuch-archives.git/import.py:9(<module>) 1 0.400 0.400 884.915 884.915 /home/wking/src/notmuch/notmuch-archives.git/import.py:17(import_mbox) 22875 0.601 0.000 863.371 0.038 /home/wking/src/notmuch/notmuch-archives.git/ssoma_mda.py:362(deliver) 22875 8.943 0.000 810.459 0.035 /home/wking/src/notmuch/notmuch-archives.git/ssoma_mda.py:207(append) 22875 0.418 0.000 308.353 0.013 /home/wking/.local/lib64/python3.4/site-packages/pygit2/index.py:146(write_tree) 22875 307.855 0.013 307.855 0.013 {built-in method git_index_write_tree} 22874 0.575 0.000 279.293 0.012 /home/wking/.local/lib64/python3.4/site-packages/pygit2/index.py:238(diff_to_tree) 22874 278.501 0.012 278.501 0.012 {built-in method git_diff_tree_to_index} 22875 0.088 0.000 80.413 0.004 /home/wking/.local/lib64/python3.4/site-packages/pygit2/index.py:99(read) 38 ms per ssoma delivery is probably fast enough, especially if you are invoking ssoma-mda once per message, since process setup will take a similar amount of time: $ time python -c 'print("hello")' hello real 0m0.016s user 0m0.013s sys 0m0.003s It's possible that fast-import would shave a few ms off the pygit2 addition (I'm not sure, and maybe pygit2 is faster than fast-import). But I doubt it matters enough either way to be worth changing unless you are dealing with a really large corpus. Cheers, Trevor -- This email may be signed or encrypted with GnuPG (http://www.gnupg.org). For more information, see http://en.wikipedia.org/wiki/Pretty_Good_Privacy [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Mail archives in Git using ssoma 2016-08-21 20:28 ` Mail archives in Git using ssoma W. Trevor King @ 2016-08-21 21:14 ` Eric Wong 0 siblings, 0 replies; 5+ messages in thread From: Eric Wong @ 2016-08-21 21:14 UTC (permalink / raw) To: W. Trevor King; +Cc: notmuch, meta "W. Trevor King" <wking@tremily.us> wrote: > On Sun, Aug 21, 2016 at 06:37:04PM +0000, Eric Wong wrote: > > Btw, for public-inbox, I'm using git-fast-import now, so imports are > > a bit faster and $GIT_DIR/ssoma.index is no longer used. This was > > crucial for getting git@vger archives imported in a reasonable time. > > ssoma-mda imports 22k notmuch messages in around 15 minutes (with > profiling enabled), and: In contrast, git@vger is around 300K messages. LKML is well into the millions, and I hope public-inbox (and git!) can handle that one day, even on cheap hardware (haven't tried). One problem I noticed with ssoma-mda is that it gets slower as more messages get imported, since all those files sit in the index, and the git index format is bad for incremental updates with big, flat trees. Big trees are a general problem with git: I'm now storing blob IDs directly in Xapian and will be using them more to avoid tree lookups. tree creation lookups degrade the same way the index does as they get bigger. Currently it's using 2/38 of the SHA-1 like git loose objects; a goal might be to move towards supporting 2/2/36 (or deeper) as Jeff noted substantial object traversal improvements: https://public-inbox.org/git/20160805092805.w3nwv2l6jkbuwlzf@sigill.intra.peff.net/ Of course, support for 2/38 will be retained for old archives/messages. > $ python -m cProfile -o profile import.py notmuch.mbox > $ python -c "import pstats; p=pstats.Stats('profile'); p.sort_stats('cumulative').print_stats(10)" > Sun Aug 21 12:56:49 2016 profile > > 101823722 function calls (99078415 primitive calls) in 885.069 seconds > > Ordered by: cumulative time > List reduced from 1145 to 10 due to restriction <10> > > ncalls tottime percall cumtime percall filename:lineno(function) > 70/1 0.002 0.000 885.069 885.069 {built-in method exec} > 1 0.111 0.111 885.069 885.069 /home/wking/src/notmuch/notmuch-archives.git/import.py:9(<module>) > 1 0.400 0.400 884.915 884.915 /home/wking/src/notmuch/notmuch-archives.git/import.py:17(import_mbox) > 22875 0.601 0.000 863.371 0.038 /home/wking/src/notmuch/notmuch-archives.git/ssoma_mda.py:362(deliver) > 22875 8.943 0.000 810.459 0.035 /home/wking/src/notmuch/notmuch-archives.git/ssoma_mda.py:207(append) > 22875 0.418 0.000 308.353 0.013 /home/wking/.local/lib64/python3.4/site-packages/pygit2/index.py:146(write_tree) > 22875 307.855 0.013 307.855 0.013 {built-in method git_index_write_tree} > 22874 0.575 0.000 279.293 0.012 /home/wking/.local/lib64/python3.4/site-packages/pygit2/index.py:238(diff_to_tree) > 22874 278.501 0.012 278.501 0.012 {built-in method git_diff_tree_to_index} It looks like writing the index is already the slowest, here, in terms of total time, too. It might be interesting if you profiled each *-mda invocation to see the degradation from the first to last message. > 22875 0.088 0.000 80.413 0.004 /home/wking/.local/lib64/python3.4/site-packages/pygit2/index.py:99(read) > > 38 ms per ssoma delivery is probably fast enough, especially if you Not even close for me :) > are invoking ssoma-mda once per message, since process setup will take a similar amount of time: > > $ time python -c 'print("hello")' > hello > > real 0m0.016s > user 0m0.013s > sys 0m0.003s > > It's possible that fast-import would shave a few ms off the pygit2 > addition (I'm not sure, and maybe pygit2 is faster than fast-import). > But I doubt it matters enough either way to be worth changing unless > you are dealing with a really large corpus. One key feature is fast-import avoids writing an index entirely. I think pygit2 would have to learn that, too. ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-08-21 21:14 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <20141107190321.GL23609@odin.tremily.us> [not found] ` <20160821043631.GA2338@odin.tremily.us> [not found] ` <20160821094833.GB2338@odin.tremily.us> 2016-08-21 12:08 ` Mail archives in Git using ssoma (Docker image) Eric Wong 2016-08-21 17:36 ` W. Trevor King 2016-08-21 18:28 ` Eric Wong [not found] ` <20160821183704.GB11495@dcvr> 2016-08-21 20:28 ` Mail archives in Git using ssoma W. Trevor King 2016-08-21 21:14 ` Eric Wong
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).