[Patch v2 2/4] nmbug: use 'notmuch tag --batch'

2013-02-20 Thread da...@tethera.net
From: David Bremner 

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.
---
 devel/nmbug/nmbug |   27 ++-
 1 file changed, 22 insertions(+), 5 deletions(-)

diff --git a/devel/nmbug/nmbug b/devel/nmbug/nmbug
index befc3d9..73d64fe 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";
+  }
 }


-- 
1.7.10.4



[Patch v2 2/4] nmbug: use 'notmuch tag --batch'

2013-02-20 Thread david
From: David Bremner brem...@debian.org

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.
---
 devel/nmbug/nmbug |   27 ++-
 1 file changed, 22 insertions(+), 5 deletions(-)

diff --git a/devel/nmbug/nmbug b/devel/nmbug/nmbug
index befc3d9..73d64fe 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;
+  }
 }
 
 
-- 
1.7.10.4

___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch