From: Jeff King <peff@peff.net>
To: Adam Spiers <git@adamspiers.org>
Cc: Drew Northup <n1xim.email@gmail.com>,
Git Mailing List <git@vger.kernel.org>,
Felipe Contreras <felipe.contreras@gmail.com>,
"Jason J Pyeron CTR (US)" <jason.j.pyeron.ctr@mail.mil>
Subject: Re: splitting off shell test framework
Date: Thu, 24 Aug 2017 07:23:08 -0700 [thread overview]
Message-ID: <20170824142307.3osmt2uweb3azskl@sigill.intra.peff.net> (raw)
In-Reply-To: <CAOkDyE9pWFLRQ0cZO03bc3Q9r=AzLHMUQ0kxb4bdsTJowcLz=g@mail.gmail.com>
On Thu, Aug 24, 2017 at 12:23:05AM +0100, Adam Spiers wrote:
> > [1] I actually keep a local archive and convert public-inbox URLs into
> > local requests that I view in mutt.
>
> Sounds like a neat trick - any scripts / config worth sharing?
It's probably too specific to my setup, but here it is anyway.
I keep the archive in a normal maildir, which I index with the mairix
tool (you could do the same thing with maildir-utils or notmuch). New
messages get put into the maildir by mutt's auto-move feature after I've
read them.
Then I have a few keys bound in mutt:
macro pager,index M '<pipe-message>gmane<enter>'
macro pager,index B '<pipe-message>rmairix-gmane<enter>'
(you can tell from the names that these predate public-inbox entirely).
The "gmane" script just opens a browser pointing to the current message
in the archive, from which I then 'y'ank the URL into the clipboard or
pasting. The network round-trip was necessary for gmane, since the
article ids were not predictable. For public-inbox, it's not necessary,
but old habits die hard (and it's a nice cross-check that the link
you're sending out isn't broken).
Here's that script:
-- >8 --
#!/bin/sh
mid() {
exec webview "http://public-inbox.org/git/$1"
}
article() {
exec webview "http://public-inbox.org/git/?q=gmane:$1"
}
find_mid() {
perl -ne 'if(/^message-id:\s*<([^>]+)>/i) { print $1, "\n"; exit 0 }'
}
case "$#" in
0) id=`find_mid`
case "$id" in
"") echo >&2 "fatal: unable to extract message-id from stdin"; exit 1 ;;
*) mid "$id" ;;
esac
;;
1) case "$1" in
*@*) mid "$1" ;;
*) article "$1" ;;
esac
;;
*) echo >&2 "fatal: don't know how to handle $# arguments"; exit 100 ;;
esac
-- 8< --
The "webview" command is just a personal wrapper that decides which
browser to use. You could replace it with "firefox" or "chromium" or
whatever.
The "rmairix-gmane" script picks out gmane/public-inbox references and
re-opens them in mutt. It looks like this:
-- >8 --
#!/usr/bin/env perl
use URI;
use URI::Escape;
if (@ARGV) {
show_gmane_article($_) foreach @ARGV;
}
else {
while(<>) {
if (m{http://[^/]*gmane.org/[-\w/.]+}) {
show_gmane_url($&);
}
if (m{https?://public-inbox.org/git/([^/]+)}) {
show_mid(uri_unescape($1));
}
}
}
exit 0;
sub show_mid {
system("rmairix -t m:" . quotemeta(shift) . " </dev/tty");
}
sub show_gmane_url {
my ($group, $article) = extract_article(shift);
show_gmane_article($article);
}
sub show_gmane_article {
my $article = shift;
my $mid = gmane_to_mid($article);
show_mid($mid) if defined $mid;
}
sub gmane_to_mid {
my $want = shift;
open(my $map, "-|", qw(gunzip -c), "$ENV{HOME}/.gmane-to-mid.gz");
while (<$map>) {
chomp;
my ($nr, $mid) = split / /, $_, 2;
return $mid if $nr == $want;
}
}
sub extract_article {
my @path = URI->new(shift)->path_segments;
# first one is always empty in absolute URL
shift @path unless length($path[0]);
# group is always next
my $group = shift @path;
# and then look for numbers starting from the back. E.g.,
# focus=N for threads, or just "N" for articles
while (@path) {
local $_ = pop @path;
return ($group, $&) if /\d+/;
}
return ($group, undef);
}
-- 8< --
The two extra bits you'd need are:
- the ~/.gmane-to-mid.gz mapping. I don't remember if I made this
myself or stole it from one that Eric posted. I'm happy to share if
anybody wants it.
- rmairix is a personal wrapper around mairix that ssh's to my imap
server to do the search and then starts mutt on the result.
Naturally I also use it for general queries like
rmairix -t f:peff sanitize thread
I hope that helps. I suspect it may be more useful to people as
inspiration and not as running code. I'm happy to answer any questions
or give any guidance I can.
-Peff
prev parent reply other threads:[~2017-08-24 14:23 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-12 16:37 splitting off shell test framework Adam Spiers
2012-11-12 16:44 ` Felipe Contreras
2012-11-12 16:57 ` Pyeron, Jason J CTR (US)
2012-11-12 18:18 ` Drew Northup
2012-11-12 23:09 ` Adam Spiers
2017-08-23 13:46 ` Adam Spiers
2017-08-23 15:47 ` Jeff King
2017-08-23 23:23 ` Adam Spiers
2017-08-24 14:23 ` Jeff King [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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170824142307.3osmt2uweb3azskl@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=felipe.contreras@gmail.com \
--cc=git@adamspiers.org \
--cc=git@vger.kernel.org \
--cc=jason.j.pyeron.ctr@mail.mil \
--cc=n1xim.email@gmail.com \
/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.
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 NNTP newsgroup(s).