]> Sergey Matveev's repositories - public-inbox.git/log
public-inbox.git
7 years agoimport ssoma-replay example script I've been using
Eric Wong [Sat, 14 May 2016 02:17:47 +0000 (02:17 +0000)]
import ssoma-replay example script I've been using

Unfortunately, most users still prefer their mail delivered
over SMTP; so we'll at least document mlmmj integration for now
until we can popularize pull-based reading over POP3/NNTP/ssoma.

7 years agot/nntpd: test for wide characters and UTF-8 mangling
Eric Wong [Sat, 14 May 2016 01:45:29 +0000 (01:45 +0000)]
t/nntpd: test for wide characters and UTF-8 mangling

We'll need to test non-UTF-8 messages at some point, too.
There are lots of legacy-encoded messages in old archives
and I would not bet we behave sanely w.r.t. those.

7 years agot/nntpd: avoid fork+exec for search indexing
Eric Wong [Sat, 14 May 2016 01:24:08 +0000 (01:24 +0000)]
t/nntpd: avoid fork+exec for search indexing

The Xapian search index is required for the NNTP server, so
there's no point in calling system() for it like we do in
other tests.  This should speed up the test a small amount.

7 years agobuild: support eatmydata in "make check" target by default
Eric Wong [Sat, 14 May 2016 01:16:15 +0000 (01:16 +0000)]
build: support eatmydata in "make check" target by default

This should help poor developers who still use rotating disks on
cheap netbooks.

7 years agonntp: fixup "Wide character" warnings
Eric Wong [Fri, 13 May 2016 12:12:41 +0000 (12:12 +0000)]
nntp: fixup "Wide character" warnings

We need Perl to believe everything we send is UTF-8,
make it so, even if it may not be.

Fixes: 265e79ff82ce 'Revert "nntp: proper UTF-8 support (hopefully?)"'
7 years agoRevert "nntp: proper UTF-8 support (hopefully?)"
Eric Wong [Sun, 8 May 2016 22:03:16 +0000 (22:03 +0000)]
Revert "nntp: proper UTF-8 support (hopefully?)"

This reverts commit f81ad477cb013d05b9b11fa051a9ebc5983a5be6.

The raw, undecoded body is probably what should be sent over the
wire anyways for clients to deal with.  We'll need this to avoid
deprecation warnings with Perl 5.24+ since we use
send()/recv()/sysread().

7 years agogit-http-backend: do not drop connection on successful finish
Eric Wong [Thu, 12 May 2016 09:32:39 +0000 (09:32 +0000)]
git-http-backend: do not drop connection on successful finish

We can maintain the client HTTP connection if the process exited
with failure as long as we terminated our own response properly.

7 years agoimport: fallback to email if '<>' exists in author name
Eric Wong [Thu, 12 May 2016 09:06:56 +0000 (09:06 +0000)]
import: fallback to email if '<>' exists in author name

git doesn't handle '<' and '>' characters in the author
name at all regardless of quoting, not just matched pairs.
So fall back to using the email as the author name since
the commit info isn't critical, anyways (shallow clones
are fine).

7 years agoimport: normalize body by stripping trailing newlines
Eric Wong [Thu, 12 May 2016 09:06:28 +0000 (09:06 +0000)]
import: normalize body by stripping trailing newlines

Mbox formatters may add extra newlines at the end of the
message, and that's not relevant for comparing messages
for deletion.

7 years agombox: sort messages by ascending date
Eric Wong [Fri, 6 May 2016 01:15:31 +0000 (01:15 +0000)]
mbox: sort messages by ascending date

This allows messages to be read in chronological order when
read without a mail client (e.g. with "zcat t.mbox.gz | less")

7 years agot/view: note possibly invalid test...
Eric Wong [Thu, 5 May 2016 20:11:42 +0000 (20:11 +0000)]
t/view: note possibly invalid test...

Ugh, I really need to get off my ass to write automated tests for
an Apache2 + mod_perl config.

8 years agogit-http-backend: reduce memory use for clone/fetch
Eric Wong [Tue, 3 May 2016 02:34:57 +0000 (02:34 +0000)]
git-http-backend: reduce memory use for clone/fetch

When serving large static files or large packs, we may call
Danga::Socket::write directly to queue up callbacks to resume
reading and defer firing them until the socket is writable.
This prevents us from scheduling writes or buffering until we
know the socket is writable and prevents needless buffering by
Danga::Socket when faced with slow clients.

For smart clones, this comes at the cost of throttling the
output of "git pack-objects" to the speed of the client
connection.  This is probably not ideal, but is the behavior of
the standard git-daemon, too; and is preferable to running the
httpd out-of-memory.  Buffering to the filesystem may be an
option in the future...

8 years agohttp: move empty string check into write callback
Eric Wong [Tue, 3 May 2016 02:52:23 +0000 (02:52 +0000)]
http: move empty string check into write callback

This empty string check is for middlewares such as Deflater
which may write empty strings, not for direct real callers of
Danga::Socket who (presumably) know what they're doing.

8 years agospawnpp: use native perl %ENV outside of mod_perl
Eric Wong [Tue, 3 May 2016 06:20:54 +0000 (06:20 +0000)]
spawnpp: use native perl %ENV outside of mod_perl

We only need to use env(1) under mod_perl; since mod_perl
is uncommon nowadays, support native %ENV for a teeny
speedup for folks uncomfortable with running vfork via
Inline::C snippet.

8 years agot/*.t: reduce -mda calls
Eric Wong [Mon, 2 May 2016 07:52:41 +0000 (07:52 +0000)]
t/*.t: reduce -mda calls

Process startup times are atrocious for fast tests and there's far
too much setup involved.  Rely on git-fast-import instead; but
more work is needed in this area.

8 years agot/nntpd.t: stop hard coding message :bytes into test
Eric Wong [Mon, 2 May 2016 07:36:05 +0000 (07:36 +0000)]
t/nntpd.t: stop hard coding message :bytes into test

It limits flexibility and makes it harder to switch
to use PublicImport::Import.

8 years agonntp: append Archived-At and List-Archive headers
Eric Wong [Mon, 2 May 2016 04:22:40 +0000 (04:22 +0000)]
nntp: append Archived-At and List-Archive headers

For readers using NNTP, we should do our best to advertise the
clonable HTTP/HTTPS URLs and the message permalink URL for
ease-of-referencing messages, since we don't want the NNTP server
and it's sequential article numbers to be relied on.

8 years agoview: disable subject threading
Eric Wong [Mon, 2 May 2016 03:20:22 +0000 (03:20 +0000)]
view: disable subject threading

Broken threads should be exposed to hopefully encourage people to
use proper mail clients which set In-Reply-To headers.

8 years agohttp: remove needless binmode call
Eric Wong [Mon, 2 May 2016 01:25:34 +0000 (01:25 +0000)]
http: remove needless binmode call

Unnecessary on *nix, and we won't support systems
which do insane things.

8 years agospawn: proper signal handling for vfork
Eric Wong [Mon, 2 May 2016 08:48:46 +0000 (08:48 +0000)]
spawn: proper signal handling for vfork

We cannot afford to fire Perl-level signal handlers in the
vforked child process since they're not designed to run in
the child like that.

Thus we need to block all signals before calling vfork, reset
signal dispositions in the child, and restore the signal mask in
the parent.

ref: https://ewontfix.com/7

8 years agogit-http-backend: use real lseek for Content-Range
Eric Wong [Sun, 1 May 2016 22:18:35 +0000 (22:18 +0000)]
git-http-backend: use real lseek for Content-Range

Since we use sysread, we must use sysseek for symmetry although
PerlIO may be doing a real lseek with "seek", anyways.

Fixes: 310819ea86ac ("git-http-backend: favor sysread for regular files")
8 years agodaemon: reduce timer-related allocations
Eric Wong [Sun, 1 May 2016 10:14:28 +0000 (10:14 +0000)]
daemon: reduce timer-related allocations

We can reduce the allocation and overhead needed for
Danga::Socket timers for immediately-executed responses by
combining identical timers and reducing anonymous sub creation.

8 years agomda: export @BAD_HEADERS variable
Eric Wong [Sun, 1 May 2016 08:54:10 +0000 (08:54 +0000)]
mda: export @BAD_HEADERS variable

This should allow users to change and add headers as needed.
While we're at it, add the X-Original-To header Postfix likes
to add; it seems like pointless bloat with the existence of
(important) Received: headers.

8 years agolinkify: match more URL characters [:,\$] and schemes
Eric Wong [Sun, 1 May 2016 01:54:07 +0000 (01:54 +0000)]
linkify: match more URL characters [:,\$] and schemes

Adding ':' (colon), ',' (comma), '$' (dollar sign) and
supporting TLS-enabled schemes: ftps, nntps variants as
well as gopher :D

8 years agolinkify: match '~' (tilde) in URLs
Eric Wong [Sun, 1 May 2016 01:47:10 +0000 (01:47 +0000)]
linkify: match '~' (tilde) in URLs

Tilde is common for some homepages: http://example.org/~user/
There's probably some other acceptable characters I'm missing.

8 years agodaemon: graceful shutdown warning and limit removal
Eric Wong [Sat, 30 Apr 2016 02:57:40 +0000 (02:57 +0000)]
daemon: graceful shutdown warning and limit removal

git clones may take longer than 30s, much longer...  So prepare
to wait almost indefinitely for sockets to timeout and document
the second signal behavior for immediate shutdown.

While we're at it, move parent death handling to a separate
class to avoid Danga::Socket->AddOtherFds, since that does not
allow proper handling the parent pipe being closed and would
actually misterminate a worker prematurely.  t/nntpd.t is update
to illustrate the failure with workers enabled.

We will work to keep memory usage low and let clients take their
time without interrupting them.

8 years agohttp: graceful shutdown for pi-httpd.async callers
Eric Wong [Sat, 30 Apr 2016 02:57:39 +0000 (02:57 +0000)]
http: graceful shutdown for pi-httpd.async callers

git clones may take a long time and it's wrong to
drop connections in the middle of a transaction.

8 years agosearchmsg: ensure long subject lines are not broken
Eric Wong [Sat, 30 Apr 2016 02:02:53 +0000 (02:02 +0000)]
searchmsg: ensure long subject lines are not broken

Noticed when using a long URL in the subject.

8 years agohttp: avoid lseek if no input
Eric Wong [Fri, 29 Apr 2016 20:21:39 +0000 (20:21 +0000)]
http: avoid lseek if no input

This saves us a system call for common GET/HEAD requests
with no upload body.

8 years agoTODO: add item for .mailmap support
Eric Wong [Fri, 29 Apr 2016 20:06:14 +0000 (20:06 +0000)]
TODO: add item for .mailmap support

Email addresses get out-of-date, so make sure they're mapped
properly for future readers.  git and linux-kernel already have
an established convention for this, so we will follow it.

8 years agohttp: improve error handling for aborted responses
Eric Wong [Fri, 29 Apr 2016 03:32:20 +0000 (03:32 +0000)]
http: improve error handling for aborted responses

We need to abort connections properly if a response is prematurely
truncated.  This includes problems with serving static files, since
a clumsy admin or broken FS could return truncated responses and
inadvertently leave a client waiting (since the client saw
"Content-Length" in the header and expected a certain length).

8 years agogit-http-backend: check EINTR as well as EAGAIN
Eric Wong [Mon, 7 Mar 2016 19:10:33 +0000 (19:10 +0000)]
git-http-backend: check EINTR as well as EAGAIN

The blocking PSGI server may cause EINTR to be hit, here.

8 years agohttp: avoid corking on "Content-Length: 0" response
Eric Wong [Fri, 29 Apr 2016 04:00:24 +0000 (04:00 +0000)]
http: avoid corking on "Content-Length: 0" response

We must use a normal write instead of send(.., MSG_MORE)
when writing responses of "Content-Length: 0" to avoid
the corking effect MSG_MORE provides.  We only want to
cork headers if we will send a non-empty body.

Fixes: c3eeaf664cf0 ("http: clarify intent for persistence")
This needs a proper test.

8 years agogithttpbackend: clamp to one smart HTTP request at-a-time
Eric Wong [Thu, 28 Apr 2016 01:56:08 +0000 (01:56 +0000)]
githttpbackend: clamp to one smart HTTP request at-a-time

Server admins may not be able to afford to have too many
git-pack-objects processes running at once.  Since PSGI
HTTP servers should already be configured to use multiple
processes for other requests; limit concurrency of smart
backends to one; and fall back to dumb responses if we're
already generating a pack.

8 years agogithttpbackend: fall back to dumb if smart HTTP is off
Eric Wong [Thu, 28 Apr 2016 01:56:07 +0000 (01:56 +0000)]
githttpbackend: fall back to dumb if smart HTTP is off

Using http.getanyfile still keeps the http-backend process
alive, so it's better to break out of that process and
handle serving entirely within the HTTP server.

8 years agoimport: run git-update-server-info when done
Eric Wong [Thu, 28 Apr 2016 01:03:31 +0000 (01:03 +0000)]
import: run git-update-server-info when done

We should update $GIT_DIR/info/refs for dumb HTTP clients
whenever we make changes to the repository.  The best place
to update is immediately after making commits.

This fixes a bug where public-inbox-learn did not properly
update $GIT_DIR/info/refs after inserting or removing
messages.

8 years agoimport: document API for public consumption
Eric Wong [Wed, 27 Apr 2016 23:14:38 +0000 (23:14 +0000)]
import: document API for public consumption

This is probably trivial enough to be final?

8 years agot/feed.t: run properly without ssoma installed
Eric Wong [Mon, 25 Apr 2016 11:52:44 +0000 (11:52 +0000)]
t/feed.t: run properly without ssoma installed

While we're at it, update some references to ssoma in the
Makefile.PL comment.

8 years agoTODO: various updates
Eric Wong [Mon, 25 Apr 2016 10:23:45 +0000 (10:23 +0000)]
TODO: various updates

8 years agogithttpbackend: require IO::File explicitly
Eric Wong [Mon, 25 Apr 2016 10:11:10 +0000 (10:11 +0000)]
githttpbackend: require IO::File explicitly

This is used all over the place, but may not be in the future,
so ensure we explicitly load it ourselves.

8 years agoremove GIT_DIR env usage in favor of --git-dir
Eric Wong [Mon, 25 Apr 2016 09:50:02 +0000 (09:50 +0000)]
remove GIT_DIR env usage in favor of --git-dir

No need to maintain per-block environment state when we can
localize it to per-command.  We've had --git-dir= in git
since 1.4.2 (2006-08-12) and already use it all over the
place.

8 years agoremove ssoma dependency
Eric Wong [Mon, 25 Apr 2016 09:50:01 +0000 (09:50 +0000)]
remove ssoma dependency

By converting to using ourt git-fast-import-based Import
module.  This should allow us to be more easily installed.

8 years agoimport: extra check for final byte read
Eric Wong [Mon, 25 Apr 2016 09:50:00 +0000 (09:50 +0000)]
import: extra check for final byte read

The read could fail entirely and leave $lf undefined.

8 years agonntp: reduce timers for weakening
Eric Wong [Mon, 25 Apr 2016 07:51:26 +0000 (07:51 +0000)]
nntp: reduce timers for weakening

Danga::Socket timers are not cheap, so avoid creating up
to 3 timers per-newsgroup by batching resource weakening.
This lets us reduce resource consumption for scheduing
additional resource consumption reduction :)

8 years agonntp: remove unused hdr_val subroutine
Eric Wong [Mon, 25 Apr 2016 06:42:48 +0000 (06:42 +0000)]
nntp: remove unused hdr_val subroutine

hdr_val has not been used since commit 1d236e649df1
("nntp: implement OVER/XOVER summary in search document")

8 years agosplit out NNTPD and HTTPD* modules
Eric Wong [Mon, 25 Apr 2016 05:12:43 +0000 (05:12 +0000)]
split out NNTPD and HTTPD* modules

Hopefully this modularizes things a little and allows us
to work on a combined super server to save RAM.

8 years agomda: don't clobber existing List-Id header
Eric Wong [Mon, 25 Apr 2016 05:07:26 +0000 (05:07 +0000)]
mda: don't clobber existing List-Id header

We may be importing mail from other lists, so do not
clobber the existing List-Id header.

8 years agosearchview: add "rel=next" and "rel=prev" here, too
Eric Wong [Mon, 25 Apr 2016 01:10:41 +0000 (01:10 +0000)]
searchview: add "rel=next" and "rel=prev" here, too

ref: https://www.w3.org/TR/html/links.html#sequential-link-types

Followup-to: c4183f56aab6 ("www: add rel=next and rel=prev navigation hints")
8 years agowww: add rel=next and rel=prev navigation hints
Eric Wong [Mon, 25 Apr 2016 01:00:24 +0000 (01:00 +0000)]
www: add rel=next and rel=prev navigation hints

This can makes navigation easier with some browsers or
or browser extensions.

ref: https://www.w3.org/TR/html/links.html#sequential-link-types

8 years agoview: fix link generation for replies in threads
Eric Wong [Mon, 25 Apr 2016 00:07:40 +0000 (00:07 +0000)]
view: fix link generation for replies in threads

Oops, gotta test this :x

8 years agoview: add extra newline in flat thread view for lynx
Eric Wong [Sun, 24 Apr 2016 23:52:00 +0000 (23:52 +0000)]
view: add extra newline in flat thread view for lynx

This shouldn't show up in other browsers (tested with w3m, too),
but the extra newline makes a difference for delineating
messages when viewed with lynx.

8 years agoview: more consistent prefixing for thread skeletons
Eric Wong [Sun, 24 Apr 2016 23:37:54 +0000 (23:37 +0000)]
view: more consistent prefixing for thread skeletons

This will allow potential tinkerers to switch away from the '` '
prefix more easily.

8 years agomda: reject multiple Message-IDs up front
Eric Wong [Thu, 21 Apr 2016 22:46:04 +0000 (22:46 +0000)]
mda: reject multiple Message-IDs up front

While ssoma now documents it uses the first Message-ID, they
are confusing and could be a sign of a broken mail software,
and broken mail software is often a sign of spam...

ref: http://public-inbox.org/meta/20160421221128.4910-1-e@80x24.org/

8 years agoview: show flat thread view in chronological order
Eric Wong [Sat, 16 Apr 2016 18:46:35 +0000 (18:46 +0000)]
view: show flat thread view in chronological order

Allowing readers new to a topic to follow in chronological order
probably makes the most sense.  Reverse chronological order may
reduce scrolling (e.g. log view); but nearly all non-threaded
conversation displays seem to be chronological so perhaps
there's a good reason for that.

8 years agoview: thread skeleton tweaks
Eric Wong [Fri, 15 Apr 2016 21:40:13 +0000 (21:40 +0000)]
view: thread skeleton tweaks

Allow the Subject: <-> skeleton line to point to each other so
the reader can bounce around between them without refocusing
their browser.

8 years agowww: redirect /$MESSAGE_ID/f/ endpoints
Eric Wong [Fri, 15 Apr 2016 20:50:56 +0000 (20:50 +0000)]
www: redirect /$MESSAGE_ID/f/ endpoints

Quote-folding was a major design mistake pre-1.0.  Since this
project is still in its infancy and unlikely to be in wide
use at the moment, redirect the /f/ endpoints back to the
plain message.

8 years agodoc: update design notes on WWW development
Eric Wong [Thu, 14 Apr 2016 22:57:48 +0000 (22:57 +0000)]
doc: update design notes on WWW development

Start documenting our anchors and CSS classes for in case users
want to write their own CSS or even JavaScript for local usage.

8 years agoview: drop vestigial elements of quote folding
Eric Wong [Wed, 13 Apr 2016 22:20:43 +0000 (22:20 +0000)]
view: drop vestigial elements of quote folding

...And mark quotes as <span class="q"> since it barely
costs us anything and allows users to choose colors
themselves with custom, user-supplied CSS.

Reduce allocations of the Linkify object, too.

8 years agowww: stop generating /$MESSAGE_ID/f/ links
Eric Wong [Wed, 13 Apr 2016 03:04:11 +0000 (03:04 +0000)]
www: stop generating /$MESSAGE_ID/f/ links

Quote-folding can be detrimental as it fails to hide the
real problem of over-quoting.

Over-quoting wastes bandwidth and space for all readers, not
just WWW readers of the public-inbox.  So hopefully removing
quote-folding support from the WWW interface can shame those
repliers into quoting only relevant portions of what they reply
to.

8 years agoview: fix link to view replies from $MESSAGE_ID/f/ links
Eric Wong [Wed, 13 Apr 2016 02:42:32 +0000 (02:42 +0000)]
view: fix link to view replies from $MESSAGE_ID/f/ links

Oops, $MESSAGE_ID/f/R/ screws up rather badly.

8 years agosearchview: deal with the removal of rsort
Eric Wong [Wed, 13 Apr 2016 01:35:56 +0000 (01:35 +0000)]
searchview: deal with the removal of rsort

Oops.  While we're at it, simplify the calls to do threading
slightly by reducing the places where we touch Mail::Thread
globals.

Fixes: 56164afc2034 (view: allow topics to be "bumped" by new replies)
8 years agombox: do not clobber existing archive headers in WWW
Eric Wong [Tue, 12 Apr 2016 21:25:05 +0000 (21:25 +0000)]
mbox: do not clobber existing archive headers in WWW

When serving archives, it's more robust to keep existing
archive links in one server goes down.

8 years agoview: allow topics to be "bumped" by new replies
Eric Wong [Tue, 12 Apr 2016 21:18:55 +0000 (21:18 +0000)]
view: allow topics to be "bumped" by new replies

This ought to prevent new replies from getting lost for readers
relying on the WWW index interface.

8 years agoimport: filter out [<>] from user names
Eric Wong [Tue, 12 Apr 2016 21:16:38 +0000 (21:16 +0000)]
import: filter out [<>] from user names

It confuses the git ident parser and may not be a great
idea to fix in git since it could break interopability
with older versions.

8 years agoimport: use bytes::length for true data length in bytes
Eric Wong [Mon, 11 Apr 2016 04:44:53 +0000 (04:44 +0000)]
import: use bytes::length for true data length in bytes

git is byte-oriented and fast-import will not tolerate
miscalculations.  This is necessary for wide characters
in commit messages (email Subjects).

8 years agoimport: set binmode before printing author names
Eric Wong [Sat, 9 Apr 2016 09:07:16 +0000 (09:07 +0000)]
import: set binmode before printing author names

Author names may have wide characters in them, so avoid warnings
as git favors UTF-8 for names and fast-import even requires them
for commit messages

8 years agoimport: initial module + test case
Eric Wong [Sat, 9 Apr 2016 00:28:07 +0000 (00:28 +0000)]
import: initial module + test case

This will allow us to write fast importers for existing
archives as well as eventually removing the ssoma dependency
for performance and ease-of-installation.

8 years agogit: add support for qx wrapper
Eric Wong [Thu, 31 Dec 2015 21:16:39 +0000 (21:16 +0000)]
git: add support for qx wrapper

This lets us one-line git commands easily like ``, but without
having to remember --git-dir or escape arguments.

8 years agombox: unconditionally add trailing newline
Eric Wong [Mon, 11 Apr 2016 04:51:40 +0000 (04:51 +0000)]
mbox: unconditionally add trailing newline

This may be necessary for compatibility with non-mboxrd aware
parsers which expect "\nFrom " for everything but the first
record.

8 years agopublic-inbox-learn: drop leading "From " line from mboxes
Eric Wong [Sat, 9 Apr 2016 01:27:37 +0000 (01:27 +0000)]
public-inbox-learn: drop leading "From " line from mboxes

It can confuse Email::MIME if we have it.

8 years agofilter: remove out dated comments
Eric Wong [Sat, 9 Apr 2016 01:21:59 +0000 (01:21 +0000)]
filter: remove out dated comments

Followup-to commit 5a590bcb6813
("filter: preserve Mail-Followup-To and Mail-Reply-To")

8 years agofilter: preserve Mail-Followup-To and Mail-Reply-To
Eric Wong [Sat, 9 Apr 2016 00:57:26 +0000 (00:57 +0000)]
filter: preserve Mail-Followup-To and Mail-Reply-To

Allow users to do wacky things here if they really wish...
It's bad practice, but at least allow other readers to
mock users of these headers :P

8 years agoview: account for threads lacking a common parent
Eric Wong [Wed, 6 Apr 2016 08:23:15 +0000 (08:23 +0000)]
view: account for threads lacking a common parent

In the per-message view, we still need to account for threads
lacking a common parent.  This can happen when threads are
broken by some broken clients or if somebody sends the same
message twice to the same inbox with a different Message-ID.

8 years agoview: shorter link for ghosts in per-message view
Eric Wong [Wed, 6 Apr 2016 07:37:46 +0000 (07:37 +0000)]
view: shorter link for ghosts in per-message view

Shorten lines used for long Message-IDs in the
inline thread view for per-message views for readability.

8 years agoview: do not prune ghosts from threads
Eric Wong [Wed, 6 Apr 2016 07:21:12 +0000 (07:21 +0000)]
view: do not prune ghosts from threads

Keeping readers informed of ghost messages is important,
so do not ever prune them.  Previously, ghosts could get
pruned and sole children would get promoted as the new
root.

8 years agoview: eliminate dead code and hash fields
Eric Wong [Wed, 6 Apr 2016 06:55:39 +0000 (06:55 +0000)]
view: eliminate dead code and hash fields

These were the vestigial remains of our previous use of
of Message-ID compression.

8 years agoexamples/public-inbox.psgi: add note for our httpd
Eric Wong [Wed, 6 Apr 2016 06:30:28 +0000 (06:30 +0000)]
examples/public-inbox.psgi: add note for our httpd

Default to maximizing compatibility in the example, but document the
potential improvement if possible.  Of course, using
public-inbox-httpd out-of-the-box without a user-specified config
file already enables chunked encoding by default.

8 years agohttp: clarify intent for persistence
Eric Wong [Wed, 6 Apr 2016 05:38:53 +0000 (05:38 +0000)]
http: clarify intent for persistence

We don't actually need to know if a response is chunked or
what the actual Content-Length is; we just need to know if
the PSGI app properly terminated the response so we can
handle persistent connections.

8 years agoview: link restructuring for index view
Eric Wong [Tue, 5 Apr 2016 06:26:35 +0000 (06:26 +0000)]
view: link restructuring for index view

The "next/prev" links seem a bit awkward and I don't use them as
much as I expected to.  However, move the "raw" message link
near the top since it's most useful for checking or reinforcing
the validity of the message via GPG or just reading headers.

Turn the Subject line into a permalink to the message, since
that's probably the common behavior anyways for other messaging
systems.  Make the "[threaded|flat]" view links to always
visible for bookmark-ability despite the lack of a "permalink"
label.

8 years agohttp: fix condition for detecting persistence
Eric Wong [Mon, 4 Apr 2016 21:15:26 +0000 (21:15 +0000)]
http: fix condition for detecting persistence

Oops, we need to watch out for how we handle operator
precedence and ensure responses without a Content-Length
or "Transfer-Encoding: chunked" header will always
disconnect after writing.

8 years agowww: more explicit "git clone" usage
Eric Wong [Sat, 2 Apr 2016 22:32:13 +0000 (22:32 +0000)]
www: more explicit "git clone" usage

Little harm in having the entire command-line for users and
avoiding the cognitive overhead of figuring out $URL.

8 years agowww: various style changes and comment updates
Eric Wong [Sat, 2 Apr 2016 22:32:01 +0000 (22:32 +0000)]
www: various style changes and comment updates

Reduce stack depth of arguments and rely more on state hashref
to store response state.  We may end up shoving everything
in ctx eventually.

8 years agohttpd: remove reference to callback during close
Eric Wong [Thu, 31 Mar 2016 03:33:59 +0000 (03:33 +0000)]
httpd: remove reference to callback during close

Avoid wasting memory and the risk of a potential reference
cycles by dropping the callback ASAP.

8 years agodaemon: expand @ARGV paths for running in '/'
Eric Wong [Thu, 17 Mar 2016 01:50:07 +0000 (01:50 +0000)]
daemon: expand @ARGV paths for running in '/'

We also require --stdout/--stderr/--pid-file to be absolute
paths for USR2 usage.  However, allow PSGI files for -httpd
to be relative paths for ease-of-use.

8 years agofeed: fix brain farts in new_oneline removal
Eric Wong [Sat, 12 Mar 2016 07:34:20 +0000 (07:34 +0000)]
feed: fix brain farts in new_oneline removal

Ugh...

Fixes: 476fc666c223 (reduce "PublicInbox::Hval->new_oneline" use)
8 years agosearchmsg: preserve hard tabs, but drop CR (\r)
Eric Wong [Sat, 12 Mar 2016 06:51:22 +0000 (06:51 +0000)]
searchmsg: preserve hard tabs, but drop CR (\r)

Hard tabs *may* be searchable, so preserve them since they do
not take up any more space than a normal space.  However, CR
(carriage return) is worthless and likely a sign of a buggy mail
(or spam) client anyways.

8 years agoreduce "PublicInbox::Hval->new_oneline" use
Eric Wong [Sat, 12 Mar 2016 06:42:04 +0000 (06:42 +0000)]
reduce "PublicInbox::Hval->new_oneline" use

It's probably a bad idea to strip extraneous whitespace
from some headers as an extra space may convey useful
information.

Newlines don't seem to be preserved by Email::MIME or
Email::Simple anyways, so there's no danger in breaking
formatting.

8 years agohttp: use Plack::HTTPParser for HTTP parsing
Eric Wong [Sat, 12 Mar 2016 03:55:20 +0000 (03:55 +0000)]
http: use Plack::HTTPParser for HTTP parsing

This allows us to reduce installation dependencies while
retaining performance as it favors HTTP::Parser::XS when
it is installed and available.

PLACK_HTTP_PARSER_PP may be set to 1 to force a pure Perl
parser for testing.

8 years agoexamples: disable Chunked response in PSGI example
Eric Wong [Sat, 12 Mar 2016 03:14:26 +0000 (03:14 +0000)]
examples: disable Chunked response in PSGI example

It seems incompatible with Starman and probably confuses other
HTTP/1.0-only servers, too.  Our -httpd will respect it and
requires it for persistent connections.

8 years agohttp: prevent zero-byte writes
Eric Wong [Sat, 12 Mar 2016 00:20:12 +0000 (00:20 +0000)]
http: prevent zero-byte writes

Plack::Middleware::Deflater (and perhaps other middleware)
triggers zero-byte writes which wastes syscalls when
they get passed to Danga::Socket.  This may also trigger
problems when we introduce TLS support in the future.

8 years agodaemon: fixup usage of the '-l' switch with IP/INET6 sockets
Eric Wong [Fri, 11 Mar 2016 21:59:42 +0000 (21:59 +0000)]
daemon: fixup usage of the '-l' switch with IP/INET6 sockets

We need to ensure $sock_pkg is preserved outside of the loop.
The variable passed to "for" or "foreach" is implicitly local
and restores the previous value when the loop exits.  This is
documented in the perlsyn manpage in the "Foreach Loops"
section.

Fixes: ea1b6cbd422b ("daemon: allow using IO::Socket::IP over INET6")
8 years agodaemon: allow using IO::Socket::IP over INET6
Eric Wong [Mon, 7 Mar 2016 17:43:19 +0000 (17:43 +0000)]
daemon: allow using IO::Socket::IP over INET6

IO::Socket::IP is bundled with newer versions of Perl,
so it is more likely to be available.  There should
be no differences between these with our use cases.

8 years agohttp: reject excessively large HTTP request bodies
Eric Wong [Sun, 6 Mar 2016 02:09:22 +0000 (02:09 +0000)]
http: reject excessively large HTTP request bodies

We cannot risk using all of a users' disk space buffering
gigantic requests.  Use the defaults git gives us since
we primarily host git repositories.

8 years agohttp: ensure errors are printable before PSGI env
Eric Wong [Sun, 6 Mar 2016 02:09:21 +0000 (02:09 +0000)]
http: ensure errors are printable before PSGI env

We cannot rely on a client socket having a PSGI env before headers
are fully-parsed as we seek to avoid storing hashes for idle
clients.  Sso print errors to the psgi.errors value which belongs to
the httpd listener, instead.

8 years agohttp: reject excessive headers
Eric Wong [Sun, 6 Mar 2016 02:09:20 +0000 (02:09 +0000)]
http: reject excessive headers

HTTP::Parser::XS::PP does not reject excessively large
headers like the XS version.  Ensure we reject headers
over 16K since public-inbox should never need such large
request headers.

8 years agodaemon: sockname detects listeners correctly
Eric Wong [Sat, 5 Mar 2016 22:42:16 +0000 (22:42 +0000)]
daemon: sockname detects listeners correctly

This means we can avoid false-positives when inheriting multiple
Unix domain sockets.

8 years agodaemon: document optional Net::Server dependency
Eric Wong [Sat, 5 Mar 2016 22:42:12 +0000 (22:42 +0000)]
daemon: document optional Net::Server dependency

Non-socket activation users will want to install Net::Server
for daemonization, pid file writing, and user/group switching.

8 years agodoc: add contact/see-also/copyright sections to mda manpage
Eric Wong [Sat, 5 Mar 2016 22:07:53 +0000 (22:07 +0000)]
doc: add contact/see-also/copyright sections to mda manpage

We need manpages before we can expect people to install this.

8 years agohttpd: remove unnecessary eval
Eric Wong [Sat, 5 Mar 2016 20:53:25 +0000 (20:53 +0000)]
httpd: remove unnecessary eval

We have per-middleware evals to deal with them being missing;
no need to put an eval around the whole thing and use an
extra level of indentation.

8 years agot/httpd-corner: avoid clobbering existing FDs after fork
Eric Wong [Sat, 5 Mar 2016 07:35:22 +0000 (07:35 +0000)]
t/httpd-corner: avoid clobbering existing FDs after fork

Due to the deterministic way reference counting works,
we do not want to drop references to existing FDs
even if we no longer need the glob reference; the actual
FD is all we can pass through on exec.