user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
From: Eric Wong <e@yhbt.net>
To: meta@public-inbox.org
Subject: Re: Minimalist public-inbox feed: sendmail-pi-feed
Date: Thu, 23 Jan 2020 23:02:58 +0000	[thread overview]
Message-ID: <20200123230258.GA13632@dcvr> (raw)
In-Reply-To: <20200121222924.ioz5ve2sg65zcuoy@chatter.i7.local>

Konstantin Ryabitsev <konstantin@linuxfoundation.org> wrote:
> Hi, all:
> 
> I was trying to create a "simplest possible" way to maintain a 
> public-inbox developer feed, and this is the end-result:
> 
> https://git.kernel.org/pub/scm/linux/kernel/git/mricon/korg-helpers.git/tree/sendmail-pi-feed
> 
> It's written to be used with git-send-email, but can, theoretically, be 
> used with any tool that accepts custom sendmail command paths (e.g.  
> mutt) -- though if used in that capacity, it needs more features to make 
> sure that private mail is not added to the feed. For example, there can 
> be an "allowlist" of addresses to match against "to" or "cc".
> 
> At the moment, this is more of a proof of concept and I wanted to share 
> it with you all for early comments. The main goal was to avoid 
> introducing too many dependencies, such as perl and its many cpan 
> modules, while producing valid public-inbox feeds -- so this script is 
> literally 50 lines of bash. :)

Cool.  Though it's doable with POSIX sh :)  I seem to remember
Ubuntu not installing bash by default, and I know git itself
hasn't require it since 2006 or so.

> From the readme section:
> 
> [sendemail "sendmail-pi-feed"]
>   # the directory where to put the feed (will be created with --init)
>   inboxdir = /path/to/toplevel/public-inbox-dir
>   # if not set, the epoch will be 0, which is strongly suggested;
>   # if you increment it for some reason, make sure you don't skip 
>   # numbers
>   epoch = 0

<snip>

> If you would like to auto-push the feed, you can add an appropriate
> post-commit hook.
> ----
> 
> Thoughts?

It could be confusing with "inboxdir" meaning slightly different
things between public-inbox itself and sendmail-pi-feed.

Perhaps start with:

diff --git a/sendmail-pi-feed b/sendmail-pi-feed
index 67c4668..c085410 100755
--- a/sendmail-pi-feed
+++ b/sendmail-pi-feed
@@ -52,7 +52,7 @@ if [[ -z $EPOCH ]]; then
     EPOCH=0
 fi
 
-PIGITDIR="$INBOXDIR/$EPOCH"
+PIGITDIR="$INBOXDIR/git/$EPOCH.git"
 PIGITDIR="${PIGITDIR/#\~/$HOME}"
 
 if [[ $1 == '--init' ]]; then


And then init --bare, add a worktree; or better,
use old-school plumbing to avoid porcelain surprises:

	# n.b. error-checking omitted
	GIT_DIR=$PIGITDIR
	export GIT_DIR
	head=refs/heads/master
	name=$(expr "z$AUTHOR" : 'z\(.*[^ ]\) *<.*')
	email=$(expr "z$AUTHOR" : '.*\(<.*\)')

	# no cat, no temporary file, no worktree, no index:
	blob=$(git hash-object -w --stdin)
	tree=$(printf '100644 blob %s\tm' $blob | git mktree)

	# check if it's the initial commit, or if there's a parent
	parent=
	if git rev-parse $head^0 2>/dev/null
	then
		parent="-p $head"
	fi
	commit=$(GIT_AUTHOR_NAME=$name \
		GIT_AUTHOR_EMAIL=$email \
		GIT_AUTHOR_DATE=$DATE \
		git commit-tree $parent -m "$LOGLINE" $tree)
	git update-ref $head $commit

Working off a bare repo has other benefits, too, in case the
user eventually wants to run "public-inbox-index" on it and
serve directly from their machine.

As for porcelain surprises, a "git commit" invocation w/o
"--no-verify" could trip some folks up because some users
have hooks to reject trailing whitespace via "git init",
and email signature delimiters have trailing space ("-- \n").

      reply	other threads:[~2020-01-23 23:02 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-21 22:29 Minimalist public-inbox feed: sendmail-pi-feed Konstantin Ryabitsev
2020-01-23 23:02 ` Eric Wong [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://public-inbox.org/README

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200123230258.GA13632@dcvr \
    --to=e@yhbt.net \
    --cc=meta@public-inbox.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/public-inbox.git

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