On Sat, 24 Jan 2015, Stefano Zacchiroli <zack at upsilon.cc> wrote: > From: "Jan N. Klug" <jan.n.klug at rub.de> > > For those messages, compute a synthetic Message-ID based on the SHA1 > of the whole message, in the same way that notmuch would do. See: > http://git.notmuchmail.org/git/notmuch/blob/HEAD:/lib/sha1.c
As I said on IRC, I think this is a notmuch implementation detail, and we don't make any promises about always generating missing message-ids the same way. That said, I don't see any reason why we'd change this anytime soon, so the solution is probably good enough for now. > To do the above, rewrite get_message_id() to scan the current message > line by line, incrementally computing a SHA1. As a consequence, drop > the dependency on Mail::Internet. I am not so sure this is a good idea however, see below. > Signed-off-by: Stefano Zacchiroli <zack at upsilon.cc> > --- > contrib/notmuch-mutt/README | 4 ++-- > contrib/notmuch-mutt/notmuch-mutt | 23 ++++++++++++++++++----- > 2 files changed, 20 insertions(+), 7 deletions(-) > > diff --git a/contrib/notmuch-mutt/README b/contrib/notmuch-mutt/README > index c661447..0013ed0 100644 > --- a/contrib/notmuch-mutt/README > +++ b/contrib/notmuch-mutt/README > @@ -33,10 +33,10 @@ Requirements > > To *run* notmuch-mutt you will need Perl with the following libraries: > > +- Digest::SHA <https://metacpan.org/release/Digest-SHA> > + (Debian package: libdigest-sha-perl) > - Mail::Box <https://metacpan.org/pod/Mail::Box> > (Debian package: libmail-box-perl) > -- Mail::Internet <https://metacpan.org/pod/Mail::Internet> > - (Debian package: libmailtools-perl) > - String::ShellQuote <https://metacpan.org/pod/String::ShellQuote> > (Debian package: libstring-shellquote-perl) > - Term::ReadLine::Gnu <https://metacpan.org/pod/Term::ReadLine::Gnu> > diff --git a/contrib/notmuch-mutt/notmuch-mutt > b/contrib/notmuch-mutt/notmuch-mutt > index 4969e4b..4d30b0b 100755 > --- a/contrib/notmuch-mutt/notmuch-mutt > +++ b/contrib/notmuch-mutt/notmuch-mutt > @@ -13,11 +13,11 @@ use warnings; > > use File::Path; > use Getopt::Long qw(:config no_getopt_compat); > -use Mail::Internet; > use Mail::Box::Maildir; > use Pod::Usage; > use String::ShellQuote; > use Term::ReadLine; > +use Digest::SHA; > > > my $xdg_cache_dir = "$ENV{HOME}/.cache"; > @@ -75,10 +75,23 @@ sub prompt($$) { > } > > sub get_message_id() { > - my $mail = Mail::Internet->new(\*STDIN); > - my $mid = $mail->head->get("message-id") or return undef; > - $mid =~ /^<(.*)>$/; # get message-id value > - return $1; > + my $mid = undef; > + my $sha = Digest::SHA->new(1); # SHA1 hashing > + > + while(<STDIN>) { # scan message line by line, looking for mid > + if ($_ =~ /^Message-ID:\s*<(.*)>$/i) { This doesn't take into account header folding or end of headers. There's probably a bunch of other things to consider in the relevant RFCs. I think you really should use Mail::Internet for the common case, and only fallback to generating the message-id when that fails. BR, Jani. > + $mid = $1; > + last; # message-id found, abort scan > + } > + $sha->add($_); # update hash > + } > + > + # Generate message-id from hash if none was found, in the same way > + # that notmuch would do. > + # See: http://git.notmuchmail.org/git/notmuch/blob/HEAD:/lib/sha1.c > + $mid ||= "notmuch-sha1-".$sha->hexdigest; > + > + return $mid; > } > > sub search_action($$$@) { > -- > 2.1.4 > > _______________________________________________ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch