FreeBSD Bugzilla – Attachment 39792 Details for
Bug 62651
maintainer-update of mail/mutt-devel
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
file.diff
file.diff (text/plain), 23.42 KB, created by
Udo.Schweigert
on 2004-02-10 17:20:10 UTC
(
hide
)
Description:
file.diff
Filename:
MIME Type:
Creator:
Udo.Schweigert
Created:
2004-02-10 17:20:10 UTC
Size:
23.42 KB
patch
obsolete
>diff -ru /usr/ports/mail/mutt-devel/Makefile ./Makefile >--- /usr/ports/mail/mutt-devel/Makefile Tue Feb 10 06:33:05 2004 >+++ ./Makefile Tue Feb 10 14:50:29 2004 >@@ -125,9 +125,6 @@ > > .include <bsd.port.pre.mk> > >-.if defined(WITH_MUTT_EDIT_THREADS) >-BROKEN= "mutt-devel's edit threads patch appears to be broken" >-.endif > CD_PATCH_VERSION= 1.5.5.1 > CD_IFDEF_PATCH_VERSION= 1.5.4 > .if !defined(VVV_PATCH_VERSION) >@@ -213,6 +210,11 @@ > @${PATCH} ${PATCH_ARGS} < ${PATCHDIR}/extra-patch-pgp-dw > .endif > >+.if defined(WITH_MUTT_EDIT_THREADS) >+pre-configure:: >+ @${PATCH} ${PATCH_ARGS} < ${PATCHDIR}/extra-patch-edit-threads >+.endif >+ > .if defined(WITH_MUTT_LOCALES_FIX) > CONFIGURE_ARGS+= --enable-locales-fix > .endif >@@ -247,7 +249,6 @@ > SGML_NEEDED= yes > .endif > .if defined(WITH_MUTT_EDIT_THREADS) >-PATCHFILES+= patch-${CD_PATCH_VERSION}.cd.edit_threads.9.5:cd > CONFIGURE_ARGS+= --enable-imap-edit-threads > SGML_NEEDED= yes > .endif >diff -ru /usr/ports/mail/mutt-devel/distinfo ./distinfo >--- /usr/ports/mail/mutt-devel/distinfo Thu Feb 5 06:31:10 2004 >+++ ./distinfo Tue Feb 10 14:50:38 2004 >@@ -1,10 +1,18 @@ > MD5 (mutt/mutt-1.5.6i.tar.gz) = aa1433635d7c86beba1675a3408b0324 >+SIZE (mutt/mutt-1.5.6i.tar.gz) = 2910730 > MD5 (mutt/patch-1.5.6.vvv.slang.gz) = 11dccb4b178d63d0dbf51afcea3b30c8 >+SIZE (mutt/patch-1.5.6.vvv.slang.gz) = 347 > MD5 (mutt/patch-1.5.6.rr.compressed.gz) = 0d57a62f17c93eb1d2eff60e070933b3 >+SIZE (mutt/patch-1.5.6.rr.compressed.gz) = 10077 > MD5 (mutt/patch-1.5.6.vvv.nntp.gz) = b32ef18006ce8a211ad2d1dabc62bfcb >+SIZE (mutt/patch-1.5.6.vvv.nntp.gz) = 106691 > MD5 (mutt/patch-1.5.6.vvv.initials.gz) = eecaa646227609b52e5267178b3bc462 >+SIZE (mutt/patch-1.5.6.vvv.initials.gz) = 667 > MD5 (mutt/patch-1.5.6.vvv.quote.gz) = f262968775cf5c37ba49b29248fcf170 >-MD5 (mutt/patch-1.5.5.1.cd.edit_threads.9.5) = a8a3a973d8693f8af526cecf7edbd71f >+SIZE (mutt/patch-1.5.6.vvv.quote.gz) = 1558 > MD5 (mutt/patch-1.5.5.1.cd.signatures_menu.2.1) = 22caeffb4a612f5fa6e1f585b40c51a6 >+SIZE (mutt/patch-1.5.5.1.cd.signatures_menu.2.1) = 22637 > MD5 (mutt/patch-1.5.4.cd.ifdef.1) = a545036cdb55519154d0b35465f52daa >+SIZE (mutt/patch-1.5.4.cd.ifdef.1) = 3545 > MD5 (mutt/p0-patch-1.5.6.dw.mbox-hook.1) = 9e29a6778ab07a4de3442691e4573fea >+SIZE (mutt/p0-patch-1.5.6.dw.mbox-hook.1) = 6405 >diff -ru /usr/ports/mail/mutt-devel/files/extra-patch-edit-threads ./files/extra-patch-edit-threads >--- /usr/ports/mail/mutt-devel/files/extra-patch-edit-threads Thu Jan 1 01:00:00 1970 >+++ ./files/extra-patch-edit-threads Tue Feb 10 14:53:16 2004 >@@ -0,0 +1,651 @@ >+diff -ru work.old/mutt-1.5.6/OPS work/mutt-1.5.6/OPS >+--- OPS Wed Nov 5 10:41:31 2003 >++++ OPS Tue Feb 10 14:40:41 2004 >+@@ -96,6 +96,7 @@ >+ OP_LIST_REPLY "reply to specified mailing list" >+ OP_MACRO "execute a macro" >+ OP_MAIL "compose a new mail message" >++OP_MAIN_BREAK_THREAD "break the thread in two" >+ OP_MAIN_CHANGE_FOLDER "open a different folder" >+ OP_MAIN_CHANGE_FOLDER_READONLY "open a different folder in read only mode" >+ OP_MAIN_CLEAR_FLAG "clear a status flag from a message" >+@@ -105,6 +106,7 @@ >+ OP_MAIN_FIRST_MESSAGE "move to the first message" >+ OP_MAIN_LAST_MESSAGE "move to the last message" >+ OP_MAIN_LIMIT "show only messages matching a pattern" >++OP_MAIN_LINK_THREADS "link tagged message to the current one" >+ OP_MAIN_NEXT_NEW "jump to the next new message" >+ OP_MAIN_NEXT_NEW_THEN_UNREAD "jump to the next new or unread message" >+ OP_MAIN_NEXT_SUBTHREAD "jump to the next subthread" >+diff -ru work.old/mutt-1.5.6/acconfig.h work/mutt-1.5.6/acconfig.h >+--- acconfig.h Tue Jan 21 11:50:49 2003 >++++ acconfig.h Tue Feb 10 14:40:41 2004 >+@@ -36,3 +36,7 @@ >+ * all return values other than (size_t)(-1) as equivalent. */ >+ #undef ICONV_NONTRANS >+ >++/* Do you want to use the rethreading functions with IMAP >++ * (--enable-imap-edit-threads) */ >++#undef IMAP_EDIT_THREADS >++ >+diff -ru work.old/mutt-1.5.6/config.h.in work/mutt-1.5.6/config.h.in >+--- config.h.in Sun Feb 1 18:18:21 2004 >++++ config.h.in Tue Feb 10 14:40:41 2004 >+@@ -549,3 +549,7 @@ >+ * all return values other than (size_t)(-1) as equivalent. */ >+ #undef ICONV_NONTRANS >+ >++/* Do you want to use the rethreading functions with IMAP >++ * (--enable-imap-edit-threads) */ >++#undef IMAP_EDIT_THREADS >++ >+diff -ru work.old/mutt-1.5.6/configure work/mutt-1.5.6/configure >+--- configure Sun Feb 1 19:22:06 2004 >++++ configure Tue Feb 10 14:40:41 2004 >+@@ -40,6 +40,8 @@ >+ ac_help="$ac_help >+ --with-gss[=PFX] Compile in GSSAPI authentication for IMAP" >+ ac_help="$ac_help >++ --enable-imap-edit-threads Enable editing threads support for IMAP" >++ac_help="$ac_help >+ --with-ssl[=PFX] Compile in SSL support for POP/IMAP" >+ ac_help="$ac_help >+ --with-nss[=PFX] Compile in SSL support for POP/IMAP via NSS" >+@@ -5383,6 +5385,23 @@ >+ else >+ USE_GSS_TRUE='#' >+ USE_GSS_FALSE= >++fi >++ >++ >++# Check whether --enable-imap-edit-threads or --disable-imap-edit-threads was given. >++if test "${enable_imap_edit_threads+set}" = set; then >++ enableval="$enable_imap_edit_threads" >++ >++ if test "$enableval" = "yes"; then >++ if test "$need_imap" = "yes"; then >++ cat >> confdefs.h <<\EOF >++#define IMAP_EDIT_THREADS 1 >++EOF >++ >++ else >++ echo "configure: warning: IMAP support for edit_threads is only useful with IMAP support" 1>&2 >++ fi >++fi >+ fi >+ >+ >+diff -ru work.old/mutt-1.5.6/configure.in work/mutt-1.5.6/configure.in >+--- configure.in Sun Feb 1 19:22:05 2004 >++++ configure.in Tue Feb 10 14:40:41 2004 >+@@ -559,6 +559,16 @@ >+ >+ dnl -- end imap dependencies -- >+ >++AC_ARG_ENABLE(imap-edit-threads, [ --enable-imap-edit-threads Enable editing threads support for IMAP], >++[ >++ if test "$enableval" = "yes"; then >++ if test "$need_imap" = "yes"; then >++ AC_DEFINE(IMAP_EDIT_THREADS) >++ else >++ AC_MSG_WARN([IMAP support for edit_threads is only useful with IMAP support]) >++ fi >++fi]) >++ >+ AC_ARG_WITH(ssl, [ --with-ssl[=PFX] Compile in SSL support for POP/IMAP], >+ [ if test "$with_ssl" != "no" >+ then >+diff -ru work.old/mutt-1.5.6/copy.c work/mutt-1.5.6/copy.c >+--- copy.c Wed Nov 5 10:41:31 2003 >++++ copy.c Tue Feb 10 14:40:41 2004 >+@@ -95,6 +95,12 @@ >+ (ascii_strncasecmp ("Content-Length:", buf, 15) == 0 || >+ ascii_strncasecmp ("Lines:", buf, 6) == 0)) >+ continue; >++ if ((flags & CH_UPDATE_REFS) && >++ ascii_strncasecmp ("References:", buf, 11) == 0) >++ continue; >++ if ((flags & CH_UPDATE_IRT) && >++ ascii_strncasecmp ("In-Reply-To:", buf, 12) == 0) >++ continue; >+ ignore = 0; >+ } >+ >+@@ -193,6 +199,12 @@ >+ ascii_strncasecmp ("type:", buf + 8, 5) == 0)) || >+ ascii_strncasecmp ("mime-version:", buf, 13) == 0)) >+ continue; >++ if ((flags & CH_UPDATE_REFS) && >++ ascii_strncasecmp ("References:", buf, 11) == 0) >++ continue; >++ if ((flags & CH_UPDATE_IRT) && >++ ascii_strncasecmp ("In-Reply-To:", buf, 12) == 0) >++ continue; >+ >+ /* Find x -- the array entry where this header is to be saved */ >+ if (flags & CH_REORDER) >+@@ -326,6 +338,8 @@ >+ CH_XMIT ignore Lines: and Content-Length: >+ CH_WEED do header weeding >+ CH_NOQFROM ignore ">From " line >++ CH_UPDATE_IRT update the In-Reply-To: header >++ CH_UPDATE_REFS update the References: header >+ >+ prefix >+ string to use if CH_PREFIX is set >+@@ -335,6 +349,9 @@ >+ mutt_copy_header (FILE *in, HEADER *h, FILE *out, int flags, const char *prefix) >+ { >+ char buffer[SHORT_STRING]; >++ >++ flags |= (h->irt_changed ? CH_UPDATE_IRT : 0) >++ | (h->refs_changed ? CH_UPDATE_REFS : 0); >+ >+ if (mutt_copy_hdr (in, out, h->offset, h->content->offset, flags, prefix) == -1) >+ return (-1); >+@@ -358,7 +375,56 @@ >+ if (flags & CH_UPDATE) >+ { >+ if ((flags & CH_NOSTATUS) == 0) >++#ifdef IMAP_EDIT_THREADS >++#define NEW_ENV new_env >++#else >++#define NEW_ENV env >++#endif >+ { >++ if (h->irt_changed && h->NEW_ENV->in_reply_to) >++ { >++ LIST *listp = h->NEW_ENV->in_reply_to; >++ >++ if (fputs ("In-Reply-To: ", out) == EOF) >++ return (-1); >++ >++ for (; listp; listp = listp->next) >++ if ((fputs (listp->data, out) == EOF) || (fputc (' ', out) == EOF)) >++ return (-1); >++ >++ if (fputc ('\n', out) == EOF) >++ return (-1); >++ } >++ >++ if (h->refs_changed && h->NEW_ENV->references) >++ { >++ LIST *listp = h->NEW_ENV->references, *refs = NULL, *t; >++ >++ if (fputs ("References: ", out) == EOF) >++ return (-1); >++ >++ /* Mutt stores references in reverse order, thus we create >++ * a reordered refs list that we can put in the headers */ >++ for (; listp; listp = listp->next, refs = t) >++ { >++ t = (LIST *)safe_malloc (sizeof (LIST)); >++ t->data = listp->data; >++ t->next = refs; >++ } >++ >++ for (; refs; refs = refs->next) >++ if ((fputs (refs->data, out) == EOF) || (fputc (' ', out) == EOF)) >++ return (-1); >++ >++ /* clearing refs from memory */ >++ for (t = refs; refs; refs = t->next, t = refs) >++ safe_free ((void **)&refs); >++ >++ if (fputc ('\n', out) == EOF) >++ return (-1); >++ } >++#undef NEW_ENV >++ >+ if (h->old || h->read) >+ { >+ if (fputs ("Status: ", out) == EOF) >+diff -ru work.old/mutt-1.5.6/curs_main.c work/mutt-1.5.6/curs_main.c >+--- curs_main.c Wed Nov 5 10:41:31 2003 >++++ curs_main.c Tue Feb 10 14:40:41 2004 >+@@ -930,6 +930,11 @@ >+ else >+ { >+ mutt_set_flag (Context, CURHDR, M_TAG, !CURHDR->tagged); >++ >++ Context->last_tag = CURHDR->tagged ? CURHDR : >++ ((Context->last_tag == CURHDR && !CURHDR->tagged) >++ ? NULL : Context->last_tag); >++ >+ menu->redraw = REDRAW_STATUS; >+ if (option (OPTRESOLVE) && menu->current < Context->vcount - 1) >+ { >+@@ -1162,6 +1167,89 @@ >+ } >+ done = 1; >+ } >++ break; >++ >++ case OP_MAIN_BREAK_THREAD: >++ >++ CHECK_MSGCOUNT; >++ CHECK_VISIBLE; >++ CHECK_READONLY; >++ >++ if ((Sort & SORT_MASK) != SORT_THREADS) >++ mutt_error _("Threading is not enabled."); >++ >++#if defined (USE_IMAP) && ! defined (IMAP_EDIT_THREADS) >++ else if (Context->magic == M_IMAP) >++ mutt_error _("Compile Mutt with --enable-imap-edit-threads for break-thread support"); >++#endif >++ >++ else >++ { >++ { >++ HEADER *oldcur = CURHDR; >++ >++ mutt_break_thread (CURHDR); >++ mutt_sort_headers (Context, 1); >++ menu->current = oldcur->virtual; >++ } >++ >++ Context->changed = 1; >++ mutt_message _("Thread broken"); >++ >++ if (menu->menu == MENU_PAGER) >++ { >++ op = OP_DISPLAY_MESSAGE; >++ continue; >++ } >++ else >++ menu->redraw |= REDRAW_INDEX; >++ } >++ >++ break; >++ >++ case OP_MAIN_LINK_THREADS: >++ >++ CHECK_MSGCOUNT; >++ CHECK_VISIBLE; >++ CHECK_READONLY; >++ >++ if ((Sort & SORT_MASK) != SORT_THREADS) >++ mutt_error _("Threading is not enabled."); >++ >++#if defined (USE_IMAP) && ! defined (IMAP_EDIT_THREADS) >++ else if (Context->magic == M_IMAP) >++ mutt_error _("Compile Mutt with --enable-imap-edit-threads for link-threads support"); >++#endif >++ >++ else if (!CURHDR->env->message_id) >++ mutt_error _("No Message-ID: header available to link thread"); >++ else if (!tag && (!Context->last_tag || !Context->last_tag->tagged)) >++ mutt_error _("First, please tag a message to be linked here"); >++ else >++ { >++ HEADER *oldcur = CURHDR; >++ >++ if (mutt_link_threads (CURHDR, tag ? NULL : Context->last_tag, >++ Context)) >++ { >++ mutt_sort_headers (Context, 1); >++ menu->current = oldcur->virtual; >++ >++ Context->changed = 1; >++ mutt_message _("Threads linked"); >++ } >++ else >++ mutt_error _("No thread linked"); >++ } >++ >++ if (menu->menu == MENU_PAGER) >++ { >++ op = OP_DISPLAY_MESSAGE; >++ continue; >++ } >++ else >++ menu->redraw |= REDRAW_STATUS | REDRAW_INDEX; >++ >+ break; >+ >+ case OP_EDIT_TYPE: >+diff -ru work.old/mutt-1.5.6/doc/manual.sgml.head work/mutt-1.5.6/doc/manual.sgml.head >+--- doc/manual.sgml.head Sun Feb 1 18:49:53 2004 >++++ doc/manual.sgml.head Tue Feb 10 14:40:41 2004 >+@@ -2197,8 +2197,43 @@ >+ with large volume mailing lists easier because you can easily delete >+ uninteresting threads and quickly find topics of value. >+ >++<sect1>Editing threads >++<p> >++Mutt has the ability to dynamically restructure threads that are broken >++either by misconfigured software or bad behaviour from some >++correspondents. This allows to clean your mailboxes formats) from these >++annoyances which make it hard to follow a discussion. >++ >++If you want to use these functions with IMAP, you need to compile Mutt >++with the <em/--enable-imap-edit-threads/ configure flag. >++ >++<sect2>Linking threads >++<p> >++ >++Some mailers tend to "forget" to correctly set the "In-Reply-To:" and >++"References:" headers when replying to a message. This results in broken >++discussions because Mutt has not enough information to guess the correct >++threading. >++You can fix this by tagging the reply, then moving to the parent message >++and using the ``link-threads'' function (bound to & by default). The >++reply will then be connected to this "parent" message. >++ >++You can also connect multiple childs at once, tagging them and using the >++tag-prefix command (';') or the auto_tag option. >++ >++<sect2>Breaking threads >++<p> >++ >++On mailing lists, some people are in the bad habit of starting a new >++discussion by hitting "reply" to any message from the list and changing >++the subject to a totally unrelated one. >++You can fix such threads by using the ``break-thread'' function (bound >++by default to #), which will turn the subthread starting from the >++current message into a whole different thread. >++ >+ <sect1>Delivery Status Notification (DSN) Support >+ <p> >++ >+ RFC1894 defines a set of MIME content types for relaying information >+ about the status of electronic mail messages. These can be thought of as >+ ``return receipts.'' Berkeley sendmail 8.8.x currently has some command >+diff -ru work.old/mutt-1.5.6/functions.h work/mutt-1.5.6/functions.h >+--- functions.h Wed Nov 5 10:41:31 2003 >++++ functions.h Tue Feb 10 14:40:41 2004 >+@@ -69,6 +69,7 @@ >+ struct binding_t OpMain[] = { >+ { "create-alias", OP_CREATE_ALIAS, "a" }, >+ { "bounce-message", OP_BOUNCE_MESSAGE, "b" }, >++ { "break-thread", OP_MAIN_BREAK_THREAD, "#" }, >+ { "change-folder", OP_MAIN_CHANGE_FOLDER, "c" }, >+ { "change-folder-readonly", OP_MAIN_CHANGE_FOLDER_READONLY, "\033c" }, >+ { "collapse-thread", OP_MAIN_COLLAPSE_THREAD, "\033v" }, >+@@ -95,6 +96,7 @@ >+ { "next-undeleted", OP_MAIN_NEXT_UNDELETED, "j" }, >+ { "previous-undeleted", OP_MAIN_PREV_UNDELETED, "k" }, >+ { "limit", OP_MAIN_LIMIT, "l" }, >++ { "link-threads", OP_MAIN_LINK_THREADS, "&" }, >+ { "list-reply", OP_LIST_REPLY, "L" }, >+ { "mail", OP_MAIL, "m" }, >+ { "toggle-new", OP_TOGGLE_NEW, "N" }, >+@@ -153,6 +155,7 @@ >+ }; >+ >+ struct binding_t OpPager[] = { >++ { "break-thread", OP_MAIN_BREAK_THREAD, "#" }, >+ { "create-alias", OP_CREATE_ALIAS, "a" }, >+ { "bounce-message", OP_BOUNCE_MESSAGE, "b" }, >+ { "change-folder", OP_MAIN_CHANGE_FOLDER, "c" }, >+@@ -175,6 +178,7 @@ >+ { "next-entry", OP_NEXT_ENTRY, "J" }, >+ { "previous-undeleted",OP_MAIN_PREV_UNDELETED, "k" }, >+ { "previous-entry", OP_PREV_ENTRY, "K" }, >++ { "link-threads", OP_MAIN_LINK_THREADS, "&" }, >+ { "list-reply", OP_LIST_REPLY, "L" }, >+ { "redraw-screen", OP_REDRAW, "\014" }, >+ { "mail", OP_MAIL, "m" }, >+diff -ru work.old/mutt-1.5.6/imap/imap.c work/mutt-1.5.6/imap/imap.c >+--- imap/imap.c Sun Feb 1 18:10:58 2004 >++++ imap/imap.c Tue Feb 10 14:40:41 2004 >+@@ -981,9 +981,11 @@ >+ mutt_buffer_addstr (&cmd, "UID STORE "); >+ mutt_buffer_addstr (&cmd, uid); >+ >+- /* if attachments have been deleted we delete the message and reupload >+- * it. This works better if we're expunging, of course. */ >+- if (ctx->hdrs[n]->attach_del) >++ /* if the message has been rethreaded or attachments have been deleted >++ * we delete the message and reupload it. >++ * This works better if we're expunging, of course. */ >++ if (ctx->hdrs[n]->refs_changed || ctx->hdrs[n]->irt_changed || >++ ctx->hdrs[n]->attach_del) >+ { >+ dprint (3, (debugfile, "imap_sync_mailbox: Attachments to be deleted, falling back to _mutt_save_message\n")); >+ if (!appendctx) >+diff -ru work.old/mutt-1.5.6/main.c work/mutt-1.5.6/main.c >+--- main.c Tue Mar 4 08:49:48 2003 >++++ main.c Tue Feb 10 14:40:41 2004 >+@@ -228,6 +228,12 @@ >+ "-USE_IMAP " >+ #endif >+ >++#ifdef IMAP_EDIT_THREADS >++ "+IMAP_EDIT_THREADS " >++#else >++ "-IMAP_EDIT_THREADS " >++#endif >++ >+ #ifdef USE_GSS >+ "+USE_GSS " >+ #else >+diff -ru work.old/mutt-1.5.6/mh.c work/mutt-1.5.6/mh.c >+--- mh.c Sun Feb 1 18:10:57 2004 >++++ mh.c Tue Feb 10 14:40:41 2004 >+@@ -1220,7 +1220,7 @@ >+ { >+ HEADER *h = ctx->hdrs[msgno]; >+ >+- if (h->attach_del) >++ if (h->attach_del || h->refs_changed || h->irt_changed) >+ if (mh_rewrite_message (ctx, msgno) != 0) >+ return -1; >+ >+@@ -1231,9 +1231,9 @@ >+ { >+ HEADER *h = ctx->hdrs[msgno]; >+ >+- if (h->attach_del) >++ if (h->attach_del || h->refs_changed || h->irt_changed) >+ { >+- /* when doing attachment deletion, fall back to the MH case. */ >++ /* when doing attachment deletion/rethreading, fall back to the MH case. */ >+ if (mh_rewrite_message (ctx, msgno) != 0) >+ return (-1); >+ } >+diff -ru work.old/mutt-1.5.6/mutt.h work/mutt-1.5.6/mutt.h >+--- mutt.h Sun Feb 1 18:15:17 2004 >++++ mutt.h Tue Feb 10 14:41:33 2004 >+@@ -94,6 +94,8 @@ >+ #define CH_WEED_DELIVERED (1<<13) /* weed eventual Delivered-To headers */ >+ #define CH_FORCE_FROM (1<<14) /* give CH_FROM precedence over CH_WEED? */ >+ #define CH_NOQFROM (1<<15) /* give CH_FROM precedence over CH_WEED? */ >++#define CH_UPDATE_IRT (1<<16) /* update In-Reply-To: */ >++#define CH_UPDATE_REFS (1<<17) /* update References: */ >+ >+ /* flags for mutt_enter_string() */ >+ #define M_ALIAS 1 /* do alias "completion" by calling up the alias-menu */ >+@@ -518,6 +520,8 @@ >+ void mutt_free_rx_list (RX_LIST **); >+ int mutt_matches_ignore (const char *, LIST *); >+ >++LIST *mutt_copy_list (LIST *); >++ >+ /* add an element to a list */ >+ LIST *mutt_add_list (LIST *, const char *); >+ >+@@ -657,6 +661,8 @@ >+ unsigned int subject_changed : 1; /* used for threading */ >+ unsigned int threaded : 1; /* used for threading */ >+ unsigned int display_subject : 1; /* used for threading */ >++ unsigned int irt_changed : 1; /* In-Reply-To changed to link/break threads */ >++ unsigned int refs_changed : 1; /* References changed to break thread */ >+ unsigned int recip_valid : 1; /* is_recipient is valid */ >+ unsigned int active : 1; /* message is not to be removed */ >+ unsigned int trash : 1; /* message is marked as trashed on disk. >+@@ -697,6 +703,10 @@ >+ char *tree; /* character string to print thread tree */ >+ struct thread *thread; >+ >++#ifdef IMAP_EDIT_THREADS >++ ENVELOPE *new_env; /* envelope information for rethreading */ >++#endif >++ >+ #ifdef MIXMASTER >+ LIST *chain; >+ #endif >+@@ -761,6 +771,7 @@ >+ char *pattern; /* limit pattern string */ >+ pattern_t *limit_pattern; /* compiled limit pattern */ >+ HEADER **hdrs; >++ HEADER *last_tag; /* last tagged msg. used to link threads */ >+ THREAD *tree; /* top of thread tree */ >+ HASH *id_hash; /* hash table by msg id */ >+ HASH *subj_hash; /* hash table by subject */ >+diff -ru work.old/mutt-1.5.6/mx.c work/mutt-1.5.6/mx.c >+--- mx.c Wed Nov 5 10:41:32 2003 >++++ mx.c Tue Feb 10 14:40:41 2004 >+@@ -1161,6 +1161,8 @@ >+ ctx->deleted = 0; >+ } >+ } >++ else if (ctx->last_tag && ctx->last_tag->deleted) >++ ctx->last_tag = NULL; /* reset last tagged msg now useless */ >+ } >+ >+ /* really only for IMAP - imap_sync_mailbox results in a call to >+diff -ru work.old/mutt-1.5.6/pager.c work/mutt-1.5.6/pager.c >+--- pager.c Sun Feb 1 18:10:57 2004 >++++ pager.c Tue Feb 10 14:40:41 2004 >+@@ -2481,6 +2481,11 @@ >+ case OP_TAG: >+ CHECK_MODE(IsHeader (extra)); >+ mutt_set_flag (Context, extra->hdr, M_TAG, !extra->hdr->tagged); >++ >++ Context->last_tag = extra->hdr->tagged ? extra->hdr : >++ ((Context->last_tag == extra->hdr && !extra->hdr->tagged) >++ ? NULL : Context->last_tag); >++ >+ redraw = REDRAW_STATUS | REDRAW_INDEX; >+ if (option (OPTRESOLVE)) >+ { >+diff -ru work.old/mutt-1.5.6/protos.h work/mutt-1.5.6/protos.h >+--- protos.h Sun Feb 1 18:15:17 2004 >++++ protos.h Tue Feb 10 14:40:41 2004 >+@@ -148,6 +148,7 @@ >+ void mutt_block_signals_system (void); >+ void mutt_body_handler (BODY *, STATE *); >+ int mutt_bounce_message (FILE *fp, HEADER *, ADDRESS *); >++void mutt_break_thread (HEADER *); >+ void mutt_buffy (char *, size_t); >+ int mutt_buffy_list (void); >+ void mutt_canonical_charset (char *, size_t, const char *); >+@@ -289,6 +290,7 @@ >+ int mutt_is_subscribed_list (ADDRESS *); >+ int mutt_is_text_part (BODY *); >+ int mutt_is_valid_mailbox (const char *); >++int mutt_link_threads (HEADER *, HEADER *, CONTEXT *); >+ int mutt_lookup_mime_type (BODY *, const char *); >+ int mutt_match_rx_list (const char *, RX_LIST *); >+ int mutt_messages_in_thread (CONTEXT *, HEADER *, int); >+diff -ru work.old/mutt-1.5.6/thread.c work/mutt-1.5.6/thread.c >+--- thread.c Sun Feb 1 18:10:58 2004 >++++ thread.c Tue Feb 10 14:40:41 2004 >+@@ -1336,3 +1336,105 @@ >+ >+ return hash; >+ } >++ >++static void clean_references (THREAD *brk, THREAD *cur) >++{ >++ THREAD *p; >++ LIST *ref = NULL; >++ int done = 0; >++ >++ for (; cur; cur = cur->next, done = 0) >++ { >++ /* parse subthread recursively */ >++ clean_references (brk, cur->child); >++ >++ if (!cur->message) >++ break; /* skip pseudo-message */ >++ >++ /* Looking for the first bad reference according to the new threading. >++ * Optimal since Mutt stores the references in reverse order, and the >++ * first loop should match immediatly for mails respecting RFC2822. */ >++ for (p = brk; !done && p; p = p->parent) >++ for (ref = cur->message->env->references; p->message && ref; ref = ref->next) >++ if (!mutt_strcasecmp (ref->data, p->message->env->message_id)) >++ { >++ done = 1; >++ break; >++ } >++ >++ if (done) >++ { >++ HEADER *h = cur->message; >++ >++ /* clearing the References: header from obsolete Message-Id(s) */ >++ mutt_free_list (&ref->next); >++ >++#ifdef IMAP_EDIT_THREADS >++ if (h->new_env) >++ mutt_free_list (&h->new_env->references); >++ else >++ h->new_env = mutt_new_envelope (); >++ >++ h->new_env->references = mutt_copy_list (h->env->references); >++#endif >++ >++ h->refs_changed = h->changed = 1; >++ } >++ } >++} >++ >++void mutt_break_thread (HEADER *hdr) >++{ >++ mutt_free_list (&hdr->env->in_reply_to); >++ mutt_free_list (&hdr->env->references); >++ hdr->irt_changed = hdr->refs_changed = hdr->changed = 1; >++ >++#ifdef IMAP_EDIT_THREADS >++ if (hdr->new_env) >++ { >++ mutt_free_list (&hdr->new_env->in_reply_to); >++ mutt_free_list (&hdr->new_env->references); >++ } >++ else >++ hdr->new_env = mutt_new_envelope (); >++#endif >++ >++ clean_references (hdr->thread, hdr->thread->child); >++} >++ >++static int link_threads (HEADER *parent, HEADER *child, CONTEXT *ctx) >++{ >++ if (child == parent) >++ return 0; >++ >++ mutt_break_thread (child); >++ >++ child->env->in_reply_to = mutt_new_list (); >++ child->env->in_reply_to->data = safe_strdup (parent->env->message_id); >++ >++#ifdef IMAP_EDIT_THREADS >++ child->new_env->in_reply_to = mutt_new_list (); >++ child->new_env->in_reply_to->data = safe_strdup (parent->env->message_id); >++#endif >++ >++ mutt_set_flag (ctx, child, M_TAG, 0); >++ >++ child->irt_changed = child->changed = 1; >++ return 1; >++} >++ >++int mutt_link_threads (HEADER *cur, HEADER *last, CONTEXT *ctx) >++{ >++ int i, changed = 0; >++ >++ if (!last) >++ { >++ for (i = 0; i < ctx->vcount; i++) >++ if (ctx->hdrs[Context->v2r[i]]->tagged) >++ changed |= link_threads (cur, ctx->hdrs[Context->v2r[i]], ctx); >++ } >++ else >++ changed = link_threads (cur, last, ctx); >++ >++ return changed; >++}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 62651
: 39792