From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 8282D1F46C; Thu, 23 Jan 2020 23:02:58 +0000 (UTC) Date: Thu, 23 Jan 2020 23:02:58 +0000 From: Eric Wong To: meta@public-inbox.org Subject: Re: Minimalist public-inbox feed: sendmail-pi-feed Message-ID: <20200123230258.GA13632@dcvr> References: <20200121222924.ioz5ve2sg65zcuoy@chatter.i7.local> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200121222924.ioz5ve2sg65zcuoy@chatter.i7.local> List-Id: Konstantin Ryabitsev 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 > 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").