mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
notmuch-mutt: replace shell pipeline with internal pipe processing
The shell pipeline used to symlink files based in search results to "cache" directory for mutt(1) to use was prone to portability problems (due to /bin/sh differences). The replacement executes `notmuch search` without intermediate shell (so shell_quote was removed in this case), reads the filenames from piped output and symlinks files internally.
This commit is contained in:
parent
00dc5dd824
commit
0d4a3c7185
1 changed files with 10 additions and 8 deletions
|
@ -12,6 +12,7 @@ use strict;
|
|||
use warnings;
|
||||
|
||||
use File::Path;
|
||||
use File::Basename;
|
||||
use Getopt::Long qw(:config no_getopt_compat);
|
||||
use Mail::Header;
|
||||
use Mail::Box::Maildir;
|
||||
|
@ -41,16 +42,17 @@ sub search($$$) {
|
|||
my ($maildir, $remove_dups, $query) = @_;
|
||||
my $dup_option = "";
|
||||
|
||||
$query = shell_quote($query);
|
||||
|
||||
if ($remove_dups) {
|
||||
$dup_option = "--duplicate=1";
|
||||
}
|
||||
my @args = qw/notmuch search --output=files/;
|
||||
push @args, "--duplicate=1" if $remove_dups;
|
||||
push @args, $query;
|
||||
|
||||
empty_maildir($maildir);
|
||||
system("notmuch search --output=files $dup_option $query"
|
||||
. " | sed -e 's: :\\\\ :g'"
|
||||
. " | while IFS= read -r searchoutput; do ln -s \$searchoutput $maildir/cur/; done");
|
||||
open my $pipe, '-|', @args or die "Running @args failed: $!\n";
|
||||
while (<$pipe>) {
|
||||
chomp;
|
||||
my $ln = "$maildir/cur/" . basename $_;
|
||||
symlink $_, "$ln" or warn "Failed to symlink '$_', '$ln': $!\n";
|
||||
}
|
||||
}
|
||||
|
||||
sub prompt($$) {
|
||||
|
|
Loading…
Reference in a new issue