unofficial mirror of notmuch@notmuchmail.org
 help / color / mirror / code / Atom feed
* notmuch-mutt: support for duplicate message removal
@ 2012-08-01  8:09 Stefano Zacchiroli
  2012-08-01  8:09 ` [PATCH 1/2] Add duplicate message removal for notmuch-mutt Stefano Zacchiroli
                   ` (2 more replies)
  0 siblings, 3 replies; 13+ messages in thread
From: Stefano Zacchiroli @ 2012-08-01  8:09 UTC (permalink / raw)
  To: notmuch; +Cc: Kevin J. McCarthy

Heya,
  here is a patchset originating from a feature contributed by Kevin
J. McCarthy: duplicate message removal for notmuch-mutt searches.

I've reviewed the main patch and gone through various iterations of it
with Kevin. I consider it suitable for application in its present
form, and I've added a subsequent patch to fix the Debian packaging
accordingly.

Can someone with commit access be so kind of applying this patchset to
the master branch?

Also, if you've further comments on the patch, do not hesitate!

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH 1/2] Add duplicate message removal for notmuch-mutt.
  2012-08-01  8:09 notmuch-mutt: support for duplicate message removal Stefano Zacchiroli
@ 2012-08-01  8:09 ` Stefano Zacchiroli
  2012-08-03  1:00   ` David Bremner
  2012-08-01  8:09 ` [PATCH 2/2] debian packaging: new depends for duplicate removals in mutt contrib Stefano Zacchiroli
  2012-08-01 11:24 ` notmuch-mutt: support for duplicate message removal Jani Nikula
  2 siblings, 1 reply; 13+ messages in thread
From: Stefano Zacchiroli @ 2012-08-01  8:09 UTC (permalink / raw)
  To: notmuch; +Cc: Kevin J. McCarthy, Stefano Zacchiroli

From: Kevin McCarthy <kevin@8t8.us>

Add a --remove-dups flag which removes duplicate files from search and
thread results.  Uses fdupes if installed.  Otherwise it runs a size and
Digest::SHA scan on each file to detect duplicates.

Signed-off-by: Stefano Zacchiroli <zack@upsilon.cc>
---
 contrib/notmuch-mutt/notmuch-mutt    |   89 ++++++++++++++++++++++++++++------
 contrib/notmuch-mutt/notmuch-mutt.rc |    4 +-
 2 files changed, 76 insertions(+), 17 deletions(-)

diff --git a/contrib/notmuch-mutt/notmuch-mutt b/contrib/notmuch-mutt/notmuch-mutt
index 7c125e6..d14709d 100755
--- a/contrib/notmuch-mutt/notmuch-mutt
+++ b/contrib/notmuch-mutt/notmuch-mutt
@@ -18,6 +18,8 @@ use Mail::Box::Maildir;
 use Pod::Usage;
 use String::ShellQuote;
 use Term::ReadLine;
+use Digest::SHA;
+use File::Which;
 
 
 my $xdg_cache_dir = "$ENV{HOME}/.cache";
@@ -34,16 +36,65 @@ sub empty_maildir($) {
     $folder->close();
 }
 
-# search($maildir, $query)
+# Match files by size and SHA-256; then delete duplicates
+sub builtin_remove_dups($) {
+    my ($maildir) = @_;
+    my (%size_to_files, %sha_to_files);
+
+    # Group files by matching sizes
+    foreach my $file (glob("$maildir/cur/*")) {
+        my $size = -s $file;
+        push(@{$size_to_files{$size}}, $file) if $size;
+    }
+
+    foreach my $same_size_files (values %size_to_files) {
+        # Don't run sha unless there is another file of the same size
+        next if scalar(@$same_size_files) < 2;
+        %sha_to_files = ();
+
+        # Group files with matching sizes by SHA-256
+        foreach my $file (@$same_size_files) {
+            open(my $fh, '<', $file) or next;
+            binmode($fh);
+            my $sha256hash = Digest::SHA->new(256)->addfile($fh)->hexdigest;
+            close($fh);
+
+            push(@{$sha_to_files{$sha256hash}}, $file);
+        }
+
+        # Remove duplicates
+        foreach my $same_sha_files (values %sha_to_files) {
+            next if scalar(@$same_sha_files) < 2;
+            unlink(@{$same_sha_files}[1..$#$same_sha_files]);
+        }
+    }
+}
+
+# Use either fdupes or the built-in scanner to detect and remove duplicate
+# search results in the maildir
+sub remove_duplicates($) {
+    my ($maildir) = @_;
+
+    my $fdupes = which("fdupes");
+    if ($fdupes) {
+      system("$fdupes --hardlinks --symlinks --delete --noprompt"
+             . " --quiet $maildir/cur/ > /dev/null");
+    } else {
+        builtin_remove_dups($maildir);
+    }
+}
+
+# search($maildir, $remove_dups, $query)
 # search mails according to $query with notmuch; store results in $maildir
-sub search($$) {
-    my ($maildir, $query) = @_;
+sub search($$$) {
+    my ($maildir, $remove_dups, $query) = @_;
     $query = shell_quote($query);
 
     empty_maildir($maildir);
     system("notmuch search --output=files $query"
 	   . " | sed -e 's: :\\\\ :g'"
 	   . " | xargs --no-run-if-empty ln -s -t $maildir/cur/");
+    remove_duplicates($maildir) if ($remove_dups);
 }
 
 sub prompt($$) {
@@ -74,28 +125,28 @@ sub get_message_id() {
     return $1;
 }
 
-sub search_action($$@) {
-    my ($interactive, $results_dir, @params) = @_;
+sub search_action($$$@) {
+    my ($interactive, $results_dir, $remove_dups, @params) = @_;
 
     if (! $interactive) {
-	search($results_dir, join(' ', @params));
+	search($results_dir, $remove_dups, join(' ', @params));
     } else {
 	my $query = prompt("search ('?' for man): ", join(' ', @params));
 	if ($query ne "") {
-	    search($results_dir,$query);
+	    search($results_dir, $remove_dups, $query);
 	}
     }
 }
 
-sub thread_action(@) {
-    my ($results_dir, @params) = @_;
+sub thread_action($$@) {
+    my ($results_dir, $remove_dups, @params) = @_;
 
     my $mid = get_message_id();
     my $search_cmd = 'notmuch search --output=threads ' . shell_quote("id:$mid");
     my $tid = `$search_cmd`;	# get thread id
     chomp($tid);
 
-    search($results_dir, $tid);
+    search($results_dir, $remove_dups, $tid);
 }
 
 sub tag_action(@) {
@@ -118,11 +169,13 @@ sub main() {
     my $results_dir = "$cache_dir/results";
     my $interactive = 0;
     my $help_needed = 0;
+    my $remove_dups = 0;
 
     my $getopt = GetOptions(
 	"h|help" => \$help_needed,
 	"o|output-dir=s" => \$results_dir,
-	"p|prompt" => \$interactive);
+	"p|prompt" => \$interactive,
+	"r|remove-dups" => \$remove_dups);
     if (! $getopt || $#ARGV < 0) { die_usage() };
     my ($action, @params) = ($ARGV[0], @ARGV[1..$#ARGV]);
 
@@ -136,9 +189,9 @@ sub main() {
 	print STDERR "Error: no search term provided\n\n";
 	die_usage();
     } elsif ($action eq "search") {
-	search_action($interactive, $results_dir, @params);
+	search_action($interactive, $results_dir, $remove_dups, @params);
     } elsif ($action eq "thread") {
-	thread_action($results_dir, @params);
+	thread_action($results_dir, $remove_dups, @params);
     } elsif ($action eq "tag") {
 	tag_action(@params);
     } else {
@@ -189,6 +242,12 @@ be overwritten. (Default: F<~/.cache/notmuch/mutt/results/>)
 Instead of using command line search terms, prompt the user for them (only for
 "search").
 
+=item -r
+
+=item --remove-dups
+
+Remove duplicates from search results.
+
 =item -h
 
 =item --help
@@ -205,10 +264,10 @@ the following in your Mutt configuration (usually one of: F<~/.muttrc>,
 F</etc/Muttrc>, or a configuration snippet under F</etc/Muttrc.d/>):
 
     macro index <F8> \
-          "<enter-command>unset wait_key<enter><shell-escape>notmuch-mutt --prompt search<enter><change-folder-readonly>~/.cache/notmuch/mutt/results<enter>" \
+          "<enter-command>unset wait_key<enter><shell-escape>notmuch-mutt -r --prompt search<enter><change-folder-readonly>~/.cache/notmuch/mutt/results<enter>" \
           "notmuch: search mail"
     macro index <F9> \
-          "<enter-command>unset wait_key<enter><pipe-message>notmuch-mutt thread<enter><change-folder-readonly>~/.cache/notmuch/mutt/results<enter><enter-command>set wait_key<enter>" \
+          "<enter-command>unset wait_key<enter><pipe-message>notmuch-mutt -r thread<enter><change-folder-readonly>~/.cache/notmuch/mutt/results<enter><enter-command>set wait_key<enter>" \
           "notmuch: reconstruct thread"
     macro index <F6> \
           "<enter-command>unset wait_key<enter><pipe-message>notmuch-mutt tag -- -inbox<enter>" \
diff --git a/contrib/notmuch-mutt/notmuch-mutt.rc b/contrib/notmuch-mutt/notmuch-mutt.rc
index b0a38d1..ddc4b48 100644
--- a/contrib/notmuch-mutt/notmuch-mutt.rc
+++ b/contrib/notmuch-mutt/notmuch-mutt.rc
@@ -1,8 +1,8 @@
 macro index <F8> \
-      "<enter-command>unset wait_key<enter><shell-escape>notmuch-mutt --prompt search<enter><change-folder-readonly>`echo ${XDG_CACHE_HOME:-$HOME/.cache}/notmuch/mutt/results`<enter>" \
+      "<enter-command>unset wait_key<enter><shell-escape>notmuch-mutt -r --prompt search<enter><change-folder-readonly>`echo ${XDG_CACHE_HOME:-$HOME/.cache}/notmuch/mutt/results`<enter>" \
       "notmuch: search mail"
 macro index <F9> \
-      "<enter-command>unset wait_key<enter><pipe-message>notmuch-mutt thread<enter><change-folder-readonly>`echo ${XDG_CACHE_HOME:-$HOME/.cache}/notmuch/mutt/results`<enter><enter-command>set wait_key<enter>" \
+      "<enter-command>unset wait_key<enter><pipe-message>notmuch-mutt -r thread<enter><change-folder-readonly>`echo ${XDG_CACHE_HOME:-$HOME/.cache}/notmuch/mutt/results`<enter><enter-command>set wait_key<enter>" \
       "notmuch: reconstruct thread"
 macro index <F6> \
       "<enter-command>unset wait_key<enter><pipe-message>notmuch-mutt tag -- -inbox<enter>" \
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH 2/2] debian packaging: new depends for duplicate removals in mutt contrib
  2012-08-01  8:09 notmuch-mutt: support for duplicate message removal Stefano Zacchiroli
  2012-08-01  8:09 ` [PATCH 1/2] Add duplicate message removal for notmuch-mutt Stefano Zacchiroli
@ 2012-08-01  8:09 ` Stefano Zacchiroli
  2012-08-01 11:24 ` notmuch-mutt: support for duplicate message removal Jani Nikula
  2 siblings, 0 replies; 13+ messages in thread
From: Stefano Zacchiroli @ 2012-08-01  8:09 UTC (permalink / raw)
  To: notmuch; +Cc: Kevin J. McCarthy, Stefano Zacchiroli

both new hard dependency for File::Which and soft dependency on fdupes
---
 debian/control |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/debian/control b/debian/control
index 812430f..e24fd94 100644
--- a/debian/control
+++ b/debian/control
@@ -109,8 +109,9 @@ Package: notmuch-mutt
 Architecture: all
 Depends: notmuch, libmail-box-perl, libmailtools-perl,
  libstring-shellquote-perl, libterm-readline-gnu-perl,
+ libfile-which-perl,
  ${misc:Depends}
-Recommends: mutt
+Recommends: mutt, fdupes
 Enhances: notmuch, mutt
 Description: thread-based email index, search and tagging (Mutt interface)
  notmuch-mutt provides integration among the Mutt mail user agent and
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: notmuch-mutt: support for duplicate message removal
  2012-08-01  8:09 notmuch-mutt: support for duplicate message removal Stefano Zacchiroli
  2012-08-01  8:09 ` [PATCH 1/2] Add duplicate message removal for notmuch-mutt Stefano Zacchiroli
  2012-08-01  8:09 ` [PATCH 2/2] debian packaging: new depends for duplicate removals in mutt contrib Stefano Zacchiroli
@ 2012-08-01 11:24 ` Jani Nikula
  2012-08-01 16:26   ` Andrei POPESCU
  2012-08-01 17:54   ` Kevin J. McCarthy
  2 siblings, 2 replies; 13+ messages in thread
From: Jani Nikula @ 2012-08-01 11:24 UTC (permalink / raw)
  To: Stefano Zacchiroli, notmuch; +Cc: Kevin J. McCarthy

On Wed, 01 Aug 2012, Stefano Zacchiroli <zack@upsilon.cc> wrote:
> Heya,
>   here is a patchset originating from a feature contributed by Kevin
> J. McCarthy: duplicate message removal for notmuch-mutt searches.
>
> I've reviewed the main patch and gone through various iterations of it
> with Kevin. I consider it suitable for application in its present
> form, and I've added a subsequent patch to fix the Debian packaging
> accordingly.
>
> Can someone with commit access be so kind of applying this patchset to
> the master branch?
>
> Also, if you've further comments on the patch, do not hesitate!

I'm guessing you get the duplicates because you have dupes in the mail
store, and 'notmuch search --output=files' prints all the filenames
associated with each matching message, rather than any other reason. The
presented approach will only remove identical files, and will leave
behind files that are basically the same message, but have differing
headers, e.g. due to being received through different channels. Is this
what you want?

Perhaps an option to 'notmuch search --output=files' to print only one
filename (even if there are many) per message would be interesting. IIRC
the first filename is used by 'notmuch show' to display the message
anyway. At a glance, this should be trivial to implement, but would it
cover your needs?


BR,
Jani.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: notmuch-mutt: support for duplicate message removal
  2012-08-01 11:24 ` notmuch-mutt: support for duplicate message removal Jani Nikula
@ 2012-08-01 16:26   ` Andrei POPESCU
  2012-08-01 17:20     ` Daniel Kahn Gillmor
  2012-08-01 17:54   ` Kevin J. McCarthy
  1 sibling, 1 reply; 13+ messages in thread
From: Andrei POPESCU @ 2012-08-01 16:26 UTC (permalink / raw)
  To: Jani Nikula; +Cc: notmuch, Kevin J. McCarthy, Stefano Zacchiroli

[-- Attachment #1: Type: text/plain, Size: 1032 bytes --]

On Mi, 01 aug 12, 13:24:24, Jani Nikula wrote:
> On Wed, 01 Aug 2012, Stefano Zacchiroli <zack@upsilon.cc> wrote:
> >
> > Also, if you've further comments on the patch, do not hesitate!
> 
> I'm guessing you get the duplicates because you have dupes in the mail
> store, and 'notmuch search --output=files' prints all the filenames
> associated with each matching message, rather than any other reason. The
> presented approach will only remove identical files, and will leave
> behind files that are basically the same message, but have differing
> headers, e.g. due to being received through different channels. Is this
> what you want?

I'm at least one user that cares enough about the distinction to have 
all list mails received via a different address, just to avoid Gmail's 
"feature" of silently dropping my own messages received via a list. 
IMVHO it should at least be configurable...

Kind regards,
Andrei
-- 
If you can't explain it simply, you don't understand it well enough.
(Albert Einstein)

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 490 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: notmuch-mutt: support for duplicate message removal
  2012-08-01 16:26   ` Andrei POPESCU
@ 2012-08-01 17:20     ` Daniel Kahn Gillmor
  2012-08-01 19:18       ` Jani Nikula
  2012-08-02  7:21       ` Stefano Zacchiroli
  0 siblings, 2 replies; 13+ messages in thread
From: Daniel Kahn Gillmor @ 2012-08-01 17:20 UTC (permalink / raw)
  To: Andrei POPESCU; +Cc: notmuch, Kevin J. McCarthy, Stefano Zacchiroli

[-- Attachment #1: Type: text/plain, Size: 564 bytes --]

On 08/01/2012 12:26 PM, Andrei POPESCU wrote:
> I'm at least one user that cares enough about the distinction to have 
> all list mails received via a different address, just to avoid Gmail's 
> "feature" of silently dropping my own messages received via a list. 
> IMVHO it should at least be configurable...

The proposed feature could also exacerbate the previously-discussed
attack vector [0] whereby a malicious Message-ID collision can be used
to hide messages from the victim's mailstore.

	--dkg

[0] id:87k42vrqve.fsf@pip.fifthhorseman.net


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 1030 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: notmuch-mutt: support for duplicate message removal
  2012-08-01 11:24 ` notmuch-mutt: support for duplicate message removal Jani Nikula
  2012-08-01 16:26   ` Andrei POPESCU
@ 2012-08-01 17:54   ` Kevin J. McCarthy
  2012-08-01 19:28     ` Jani Nikula
  1 sibling, 1 reply; 13+ messages in thread
From: Kevin J. McCarthy @ 2012-08-01 17:54 UTC (permalink / raw)
  To: Jani Nikula; +Cc: notmuch, Stefano Zacchiroli

Jani Nikula wrote:
> I'm guessing you get the duplicates because you have dupes in the mail
> store, and 'notmuch search --output=files' prints all the filenames
> associated with each matching message, rather than any other reason. The
> presented approach will only remove identical files, and will leave
> behind files that are basically the same message, but have differing
> headers, e.g. due to being received through different channels. Is this
> what you want?

This method was something we felt comfortable enabling by default.

Stefano and I discussed adding a (by default off) option to remove
duplicates by message-id, but wanted to get this patch merged first and
then think about it.

> Perhaps an option to 'notmuch search --output=files' to print only one
> filename (even if there are many) per message would be interesting.

This would be useful for the second approach.  If it's easy to do, that
would be great.

-Kevin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: notmuch-mutt: support for duplicate message removal
  2012-08-01 17:20     ` Daniel Kahn Gillmor
@ 2012-08-01 19:18       ` Jani Nikula
  2012-08-02  7:21       ` Stefano Zacchiroli
  1 sibling, 0 replies; 13+ messages in thread
From: Jani Nikula @ 2012-08-01 19:18 UTC (permalink / raw)
  To: Daniel Kahn Gillmor, Andrei POPESCU
  Cc: notmuch, Kevin J. McCarthy, Stefano Zacchiroli

On Wed, 01 Aug 2012, Daniel Kahn Gillmor <dkg@fifthhorseman.net> wrote:
> On 08/01/2012 12:26 PM, Andrei POPESCU wrote:
>> I'm at least one user that cares enough about the distinction to have 
>> all list mails received via a different address, just to avoid Gmail's 
>> "feature" of silently dropping my own messages received via a list. 
>> IMVHO it should at least be configurable...
>
> The proposed feature could also exacerbate the previously-discussed
> attack vector [0] whereby a malicious Message-ID collision can be used
> to hide messages from the victim's mailstore.

Just to clarify, the feature proposed in this patch series does not make
the problem worse (as it would hide only fully identical messages, which
is not useful for the malicious purpose).

What I suggested [1] could indeed make notmuch-mutt as vulnerable to the
attack vector as notmuch show, and the emacs ui, currently are (but not
worse than that).

BR,
Jani.

[1] id:"87pq7aam8n.fsf@nikula.org"

>
> 	--dkg
>
> [0] id:87k42vrqve.fsf@pip.fifthhorseman.net

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: notmuch-mutt: support for duplicate message removal
  2012-08-01 17:54   ` Kevin J. McCarthy
@ 2012-08-01 19:28     ` Jani Nikula
  0 siblings, 0 replies; 13+ messages in thread
From: Jani Nikula @ 2012-08-01 19:28 UTC (permalink / raw)
  To: Kevin J. McCarthy; +Cc: notmuch, Stefano Zacchiroli

On Wed, 01 Aug 2012, "Kevin J. McCarthy" <kevin@8t8.us> wrote:
> Jani Nikula wrote:
>> I'm guessing you get the duplicates because you have dupes in the mail
>> store, and 'notmuch search --output=files' prints all the filenames
>> associated with each matching message, rather than any other reason. The
>> presented approach will only remove identical files, and will leave
>> behind files that are basically the same message, but have differing
>> headers, e.g. due to being received through different channels. Is this
>> what you want?
>
> This method was something we felt comfortable enabling by default.
>
> Stefano and I discussed adding a (by default off) option to remove
> duplicates by message-id, but wanted to get this patch merged first and
> then think about it.

Sounds reasonable, especially considering [1]. I have no comments on the
patches; I'm not a notmuch-mutt (or perl) user.

>> Perhaps an option to 'notmuch search --output=files' to print only one
>> filename (even if there are many) per message would be interesting.
>
> This would be useful for the second approach.  If it's easy to do, that
> would be great.

Apart from [1], the hardest part will be bikeshedding about the option
name. ;)

BR,
Jani.

[1] id:"87d33av2sg.fsf@nikula.org"

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: notmuch-mutt: support for duplicate message removal
  2012-08-01 17:20     ` Daniel Kahn Gillmor
  2012-08-01 19:18       ` Jani Nikula
@ 2012-08-02  7:21       ` Stefano Zacchiroli
  2012-08-02 18:03         ` Jameson Graef Rollins
  1 sibling, 1 reply; 13+ messages in thread
From: Stefano Zacchiroli @ 2012-08-02  7:21 UTC (permalink / raw)
  To: Daniel Kahn Gillmor; +Cc: notmuch, Andrei POPESCU

On Wed, Aug 01, 2012 at 01:20:08PM -0400, Daniel Kahn Gillmor wrote:
> The proposed feature could also exacerbate the previously-discussed
> attack vector [0] whereby a malicious Message-ID collision can be used
> to hide messages from the victim's mailstore.
> 
> [0] id:87k42vrqve.fsf@pip.fifthhorseman.net

I didn't find the reference above but, if you're speaking about the
proposed patch only, I don't think it's the case. The proposed patch
only deduplicate file-identical (up to checksums, that is) messages in
maildirs: a Message-ID collision is not enough to hide a message.

But your comment is very interesting anyhow, as deduplicating on the
basis of Message-ID is indeed something I've discussed with Kevin as
future work. You just provided an extra argument not to enable that by
default.

Cheers.
-- 
Stefano Zacchiroli     zack@{upsilon.cc,pps.jussieu.fr,debian.org} . o .
Maître de conférences   ......   http://upsilon.cc/zack   ......   . . o
Debian Project Leader    .......   @zack on identi.ca   .......    o o o
« the first rule of tautology club is the first rule of tautology club »

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: notmuch-mutt: support for duplicate message removal
  2012-08-02  7:21       ` Stefano Zacchiroli
@ 2012-08-02 18:03         ` Jameson Graef Rollins
  2012-08-02 19:20           ` Stefano Zacchiroli
  0 siblings, 1 reply; 13+ messages in thread
From: Jameson Graef Rollins @ 2012-08-02 18:03 UTC (permalink / raw)
  To: Stefano Zacchiroli, Daniel Kahn Gillmor; +Cc: notmuch, Andrei POPESCU

[-- Attachment #1: Type: text/plain, Size: 504 bytes --]

On Thu, Aug 02 2012, Stefano Zacchiroli <zack@upsilon.cc> wrote:
> On Wed, Aug 01, 2012 at 01:20:08PM -0400, Daniel Kahn Gillmor wrote:
>> The proposed feature could also exacerbate the previously-discussed
>> attack vector [0] whereby a malicious Message-ID collision can be used
>> to hide messages from the victim's mailstore.
>> 
>> [0] id:87k42vrqve.fsf@pip.fifthhorseman.net
>
> I didn't find the reference above but,

http://mid.gmane.org/87k42vrqve.fsf@pip.fifthhorseman.net

jamie.

[-- Attachment #2: Type: application/pgp-signature, Size: 835 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: notmuch-mutt: support for duplicate message removal
  2012-08-02 18:03         ` Jameson Graef Rollins
@ 2012-08-02 19:20           ` Stefano Zacchiroli
  0 siblings, 0 replies; 13+ messages in thread
From: Stefano Zacchiroli @ 2012-08-02 19:20 UTC (permalink / raw)
  To: Jameson Graef Rollins; +Cc: notmuch, Andrei POPESCU, Daniel Kahn Gillmor

On Thu, Aug 02, 2012 at 11:03:44AM -0700, Jameson Graef Rollins wrote:
> > I didn't find the reference above but,
> http://mid.gmane.org/87k42vrqve.fsf@pip.fifthhorseman.net

Thanks. I confirm my previous comments after "but," then :-)

-- 
Stefano Zacchiroli     zack@{upsilon.cc,pps.jussieu.fr,debian.org} . o .
Maître de conférences   ......   http://upsilon.cc/zack   ......   . . o
Debian Project Leader    .......   @zack on identi.ca   .......    o o o
« the first rule of tautology club is the first rule of tautology club »

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH 1/2] Add duplicate message removal for notmuch-mutt.
  2012-08-01  8:09 ` [PATCH 1/2] Add duplicate message removal for notmuch-mutt Stefano Zacchiroli
@ 2012-08-03  1:00   ` David Bremner
  0 siblings, 0 replies; 13+ messages in thread
From: David Bremner @ 2012-08-03  1:00 UTC (permalink / raw)
  To: Stefano Zacchiroli, notmuch; +Cc: Stefano Zacchiroli

Stefano Zacchiroli <zack@upsilon.cc> writes:

> From: Kevin McCarthy <kevin@8t8.us>
>
> Add a --remove-dups flag which removes duplicate files from search and
> thread results.  Uses fdupes if installed.  Otherwise it runs a size and
> Digest::SHA scan on each file to detect duplicates.

Pushed,

d

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2012-08-03  1:00 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-01  8:09 notmuch-mutt: support for duplicate message removal Stefano Zacchiroli
2012-08-01  8:09 ` [PATCH 1/2] Add duplicate message removal for notmuch-mutt Stefano Zacchiroli
2012-08-03  1:00   ` David Bremner
2012-08-01  8:09 ` [PATCH 2/2] debian packaging: new depends for duplicate removals in mutt contrib Stefano Zacchiroli
2012-08-01 11:24 ` notmuch-mutt: support for duplicate message removal Jani Nikula
2012-08-01 16:26   ` Andrei POPESCU
2012-08-01 17:20     ` Daniel Kahn Gillmor
2012-08-01 19:18       ` Jani Nikula
2012-08-02  7:21       ` Stefano Zacchiroli
2012-08-02 18:03         ` Jameson Graef Rollins
2012-08-02 19:20           ` Stefano Zacchiroli
2012-08-01 17:54   ` Kevin J. McCarthy
2012-08-01 19:28     ` Jani Nikula

Code repositories for project(s) associated with this public inbox

	https://yhetil.org/notmuch.git/

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 read-only IMAP folder(s) and NNTP newsgroup(s).