aboutsummaryrefslogtreecommitdiff
path: root/mail/mutt-devel
diff options
context:
space:
mode:
authorMartin Wilke <miwi@FreeBSD.org>2009-11-11 11:00:51 +0000
committerMartin Wilke <miwi@FreeBSD.org>2009-11-11 11:00:51 +0000
commitc4077d16f4930047c787ef455ca53dfe22da66a9 (patch)
treea762dfac878cdd0fd681a7ba1f6339c5ccacdb07 /mail/mutt-devel
parentf5cd043bb89e07425ed12d02bbec5da20bc24167 (diff)
downloadports-c4077d16f4930047c787ef455ca53dfe22da66a9.tar.gz
ports-c4077d16f4930047c787ef455ca53dfe22da66a9.zip
Add new parent/child and WITH_TOKYOCABINET match knob
PR: 136878 Submitted by: Jeremie Le Hen <jeremie@le-hen.org> Approved by: Udo Schweigert (maintainer)
Notes
Notes: svn path=/head/; revision=244110
Diffstat (limited to 'mail/mutt-devel')
-rw-r--r--mail/mutt-devel/Makefile14
-rw-r--r--mail/mutt-devel/files/extra-patch-parent-child-match169
2 files changed, 182 insertions, 1 deletions
diff --git a/mail/mutt-devel/Makefile b/mail/mutt-devel/Makefile
index d46d26d1d5e6..cd8efae69686 100644
--- a/mail/mutt-devel/Makefile
+++ b/mail/mutt-devel/Makefile
@@ -102,6 +102,9 @@
# If you want to enable the `greeting' option define:
# WITH_MUTT_GREETING_PATCH
#
+# If you want to enable the parent/child match support define:
+# WITH_MUTT_PARENT_CHILD_MATCH_PATCH
+#
# If you want to enable the internal SMTP relay support define:
# WITH_MUTT_SMTP
#
@@ -115,7 +118,7 @@
PORTNAME= mutt-devel
PORTVERSION= 1.5.20
-PORTREVISION?= 1
+PORTREVISION?= 2
CATEGORIES+= mail ipv6
.if defined(WITH_MUTT_NNTP)
CATEGORIES+= news
@@ -335,6 +338,11 @@ post-patch::
@${PATCH} ${PATCH_ARGS} < ${PATCHDIR}/extra-patch-reverse_reply
.endif
+.if defined(WITH_MUTT_PARENT_CHILD_MATCH_PATCH)
+post-patch::
+ @${PATCH} ${PATCH_ARGS} -p1 < ${PATCHDIR}/extra-patch-parent-child-match
+.endif
+
.if defined(WITHOUT_MUTT_FLOCK)
CONFIGURE_ARGS+= --disable-flock
.else
@@ -475,7 +483,11 @@ SCRIPTS_ENV+= MUTT_COMPRESSED_FOLDERS="yes"
SCRIPTS_ENV+= MUTT_QUOTE_PATCH="yes"
.endif
.if defined(WITH_MUTT_IMAP_HEADER_CACHE)
+.if defined(WITH_TOKYOCABINET)
+CONFIGURE_ARGS+= --enable-hcache --without-gdbm --without-bdb --with-tokyocabinet
+.else
CONFIGURE_ARGS+= --enable-hcache --without-gdbm --with-bdb
+.endif
.else
CONFIGURE_ARGS+= --disable-hcache
.endif
diff --git a/mail/mutt-devel/files/extra-patch-parent-child-match b/mail/mutt-devel/files/extra-patch-parent-child-match
new file mode 100644
index 000000000000..f9e95e46742a
--- /dev/null
+++ b/mail/mutt-devel/files/extra-patch-parent-child-match
@@ -0,0 +1,169 @@
+--- mutt-1.5.20/doc/manual.xml.head 2009-05-30 19:20:08.000000000 +0200
++++ mutt-1.5.20-parentchildmatch/doc/manual.xml.head 2009-07-18 01:09:23.000000000 +0200
+@@ -3947,6 +3947,22 @@ With the <command>reset</command> comman
+ which allows you to reset all variables to their system defaults.
+ </para>
+
++<para>
++<emphasis role="bold">Parent and child match</emphasis>.
++You can tell mutt that the following pattern has to be matched against
++the parent message with &lt; or one of its childs with &gt;.
++This example matches all mails which have at least an unread duplicate
++message:
++</para>
++
++<para>
++
++<screen>
++>(~= ~N)
++</screen>
++
++</para>
++
+ </sect2>
+
+ <sect2 id="set-myvar">
+diff -urNp mutt-1.5.20/mutt.h mutt-1.5.20-parentchildmatch/mutt.h
+--- mutt-1.5.20/mutt.h 2009-06-13 00:15:42.000000000 +0200
++++ mutt-1.5.20-parentchildmatch/mutt.h 2009-07-18 01:14:21.000000000 +0200
+@@ -819,6 +819,8 @@ typedef struct pattern_t
+ unsigned int alladdr : 1;
+ unsigned int stringmatch : 1;
+ unsigned int groupmatch : 1;
++ unsigned int parentmatch : 1;
++ unsigned int childsmatch : 1;
+ unsigned int ign_case : 1; /* ignore case for local stringmatch searches */
+ int min;
+ int max;
+diff -urNp mutt-1.5.20/pattern.c mutt-1.5.20-parentchildmatch/pattern.c
+--- mutt-1.5.20/pattern.c 2009-06-03 22:48:31.000000000 +0200
++++ mutt-1.5.20-parentchildmatch/pattern.c 2009-07-18 01:09:23.000000000 +0200
+@@ -45,6 +45,7 @@ static int eat_regexp (pattern_t *pat, B
+ static int eat_date (pattern_t *pat, BUFFER *, BUFFER *);
+ static int eat_range (pattern_t *pat, BUFFER *, BUFFER *);
+ static int patmatch (const pattern_t *pat, const char *buf);
++static int pattern_exec (struct pattern_t *pat, pattern_exec_flag flags, CONTEXT *ctx, HEADER *h);
+
+ static struct pattern_flags
+ {
+@@ -769,6 +770,8 @@ pattern_t *mutt_pattern_comp (/* const *
+ pattern_t *last = NULL;
+ int not = 0;
+ int alladdr = 0;
++ int parentmatch = 0;
++ int childsmatch = 0;
+ int or = 0;
+ int implicit = 1; /* used to detect logical AND operator */
+ struct pattern_flags *entry;
+@@ -793,6 +796,24 @@ pattern_t *mutt_pattern_comp (/* const *
+ ps.dptr++;
+ not = !not;
+ break;
++ case '<':
++ ps.dptr++;
++ if (childsmatch) {
++ snprintf (err->data, err->dsize, _("cannot use both < and > as a pattern modifier"));
++ mutt_pattern_free (&curlist);
++ return NULL;
++ }
++ parentmatch = 1;
++ break;
++ case '>':
++ ps.dptr++;
++ if (parentmatch) {
++ snprintf (err->data, err->dsize, _("cannot use both < and > as a pattern modifier"));
++ mutt_pattern_free (&curlist);
++ return NULL;
++ }
++ childsmatch = 1;
++ break;
+ case '|':
+ if (!or)
+ {
+@@ -818,6 +839,8 @@ pattern_t *mutt_pattern_comp (/* const *
+ implicit = 0;
+ not = 0;
+ alladdr = 0;
++ parentmatch = 0;
++ childsmatch = 0;
+ break;
+ case '%':
+ case '=':
+@@ -841,8 +864,12 @@ pattern_t *mutt_pattern_comp (/* const *
+ last = tmp;
+ tmp->not ^= not;
+ tmp->alladdr |= alladdr;
++ tmp->parentmatch |= parentmatch;
++ tmp->childsmatch |= childsmatch;
+ not = 0;
+ alladdr = 0;
++ parentmatch = 0;
++ childsmatch = 0;
+ /* compile the sub-expression */
+ buf = mutt_substrdup (ps.dptr + 1, p);
+ if ((tmp2 = mutt_pattern_comp (buf, flags, err)) == NULL)
+@@ -870,10 +897,14 @@ pattern_t *mutt_pattern_comp (/* const *
+ tmp = new_pattern ();
+ tmp->not = not;
+ tmp->alladdr = alladdr;
++ tmp->parentmatch = parentmatch;
++ tmp->childsmatch = childsmatch;
+ tmp->stringmatch = (*ps.dptr == '=') ? 1 : 0;
+ tmp->groupmatch = (*ps.dptr == '%') ? 1 : 0;
+ not = 0;
+ alladdr = 0;
++ parentmatch = 0;
++ childsmatch = 0;
+
+ if (last)
+ last->next = tmp;
+@@ -939,8 +970,12 @@ pattern_t *mutt_pattern_comp (/* const *
+ last = tmp;
+ tmp->not ^= not;
+ tmp->alladdr |= alladdr;
++ tmp->parentmatch |= parentmatch;
++ tmp->childsmatch |= childsmatch;
+ not = 0;
+ alladdr = 0;
++ parentmatch = 0;
++ childsmatch = 0;
+ ps.dptr = p + 1; /* restore location */
+ break;
+ default:
+@@ -1081,6 +1116,36 @@ static int match_threadcomplete(struct p
+ int
+ mutt_pattern_exec (struct pattern_t *pat, pattern_exec_flag flags, CONTEXT *ctx, HEADER *h)
+ {
++ THREAD *t;
++
++ if (pat->parentmatch) {
++ if (h->thread && h->thread->parent && h->thread->parent->message)
++ return pattern_exec (pat, flags, ctx, h->thread->parent->message);
++ else
++ return pat->not;
++ }
++ if (pat->childsmatch) {
++ if (!h->thread)
++ return pat->not;
++ if (!h->thread->child)
++ return pat->not;
++ t = h->thread->child;
++ while (t->prev)
++ t = t->prev;
++ for (; t; t = t->next) {
++ if (!t->message)
++ continue;
++ if (pattern_exec (pat, flags, ctx, t->message))
++ return !pat->not;
++ }
++ return pat->not;
++ }
++ return pattern_exec (pat, flags, ctx, h);
++}
++
++static int
++pattern_exec (struct pattern_t *pat, pattern_exec_flag flags, CONTEXT *ctx, HEADER *h)
++{
+ switch (pat->op)
+ {
+ case M_AND: