aboutsummaryrefslogtreecommitdiffhomepage
path: root/devel
diff options
context:
space:
mode:
authorGravatar David Bremner <bremner@debian.org>2013-02-20 18:24:35 -0400
committerGravatar David Bremner <bremner@debian.org>2013-03-02 10:42:16 -0400
commit17b468ac9f43fb63787f913f31dada380cc4089d (patch)
tree32007d801aa813bc0912bc70cd29d622feffce8f /devel
parent2ec4ea610c2f4202f36b4267173e3cff2ec1bd21 (diff)
nmbug: use 'notmuch tag --batch'
This should be more robust with respect to tags with whitespace and and other special characters. It also (hopefully) fixes a remaining bug handling message-ids with whitespace. It should also be noticeably faster for large sets of changes since it does one exec per change set as opposed to one exec per tag changed.
Diffstat (limited to 'devel')
-rwxr-xr-xdevel/nmbug/nmbug27
1 files changed, 22 insertions, 5 deletions
diff --git a/devel/nmbug/nmbug b/devel/nmbug/nmbug
index befc3d90..73d64fe5 100755
--- a/devel/nmbug/nmbug
+++ b/devel/nmbug/nmbug
@@ -267,6 +267,20 @@ sub do_checkout {
do_sync (action => 'checkout');
}
+sub quote_for_xapian {
+ my $str = shift;
+ $str =~ s/"/""/g;
+ return '"' . $str . '"';
+}
+
+sub pair_to_batch_line {
+ my ($action, $pair) = @_;
+
+ # the tag should already be suitably encoded
+
+ return $action . $ENCPREFIX . $pair->{tag} .
+ ' -- id:' . quote_for_xapian ($pair->{id})."\n";
+}
sub do_sync {
@@ -283,17 +297,20 @@ sub do_sync {
$D_action = '-';
}
- foreach my $pair (@{$status->{added}}) {
+ my $notmuch = spawn ({}, '|-', qw/notmuch tag --batch/)
+ or die 'notmuch tag --batch';
- notmuch ('tag', $A_action.$TAGPREFIX.$pair->{tag},
- 'id:'.$pair->{id});
+ foreach my $pair (@{$status->{added}}) {
+ print $notmuch pair_to_batch_line ($A_action, $pair);
}
foreach my $pair (@{$status->{deleted}}) {
- notmuch ('tag', $D_action.$TAGPREFIX.$pair->{tag},
- 'id:'.$pair->{id});
+ print $notmuch pair_to_batch_line ($D_action, $pair);
}
+ unless (close $notmuch) {
+ die "'notmuch tag --batch' exited with nonzero value\n";
+ }
}