Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 50331 Details for
Bug 80717
Mutt 1.5.7 (ebuild + updated patches)
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
files/patch-1.5.5.1.cd.edit_threads.9.5-gentoo-1.5.7
patch-1.5.5.1.cd.edit_threads.9.5-gentoo-1.5.7 (text/plain), 21.56 KB, created by
Jasmin Buchert
on 2005-02-04 06:48:18 UTC
(
hide
)
Description:
files/patch-1.5.5.1.cd.edit_threads.9.5-gentoo-1.5.7
Filename:
MIME Type:
Creator:
Jasmin Buchert
Created:
2005-02-04 06:48:18 UTC
Size:
21.56 KB
patch
obsolete
>diff -ruN mutt-1.5.7-old/OPS mutt-1.5.7-new/OPS >--- mutt-1.5.7-old/OPS 2003-07-04 19:07:11.000000000 +0200 >+++ mutt-1.5.7-new/OPS 2005-02-04 03:03:13.613763460 +0100 >@@ -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 -ruN mutt-1.5.7-old/PATCHES mutt-1.5.7-new/PATCHES >--- mutt-1.5.7-old/PATCHES 2005-02-04 03:01:27.000000000 +0100 >+++ mutt-1.5.7-new/PATCHES 2005-02-04 03:03:13.855726376 +0100 >@@ -1 +1,2 @@ > rr.compressed >+patch-1.5.5.1.cd.edit_threads.9.5 >diff -ruN mutt-1.5.7-old/acconfig.h mutt-1.5.7-new/acconfig.h >--- mutt-1.5.7-old/acconfig.h 2005-02-04 03:01:27.000000000 +0100 >+++ mutt-1.5.7-new/acconfig.h 2005-02-04 03:03:13.618762694 +0100 >@@ -39,3 +39,7 @@ > /* The compressed mailboxes support */ > #undef USE_COMPRESSED > >+/* Do you want to use the rethreading functions with IMAP >+ * (--enable-imap-edit-threads) */ >+#undef IMAP_EDIT_THREADS >+ >diff -ruN mutt-1.5.7-old/config.h.in mutt-1.5.7-new/config.h.in >--- mutt-1.5.7-old/config.h.in 2005-02-04 03:01:27.000000000 +0100 >+++ mutt-1.5.7-new/config.h.in 2005-02-04 03:03:13.624761775 +0100 >@@ -596,3 +596,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 -ruN mutt-1.5.7-old/configure mutt-1.5.7-new/configure >--- mutt-1.5.7-old/configure 2005-02-04 03:01:27.000000000 +0100 >+++ mutt-1.5.7-new/configure 2005-02-04 03:04:09.963127023 +0100 >@@ -883,6 +883,7 @@ > --with-docdir=PATH Specify where to put the documentation > --with-domain=DOMAIN Specify your DNS domain name > --with-gss=PFX Compile in GSSAPI authentication for IMAP >+ --enable-imap-edit-threads Enable editing threads support for IMAP > --with-ssl=PFX Compile in SSL support for POP/IMAP > --with-nss=PFX Compile in SSL support for POP/IMAP via NSS > --with-sasl=PFX Use Cyrus SASL library for POP/IMAP authentication >@@ -11412,6 +11413,23 @@ > 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 >+ >+ > > > # Check whether --with-ssl or --without-ssl was given. >diff -ruN mutt-1.5.7-old/configure.in mutt-1.5.7-new/configure.in >--- mutt-1.5.7-old/configure.in 2005-02-04 03:01:27.000000000 +0100 >+++ mutt-1.5.7-new/configure.in 2005-02-04 03:03:13.742743692 +0100 >@@ -561,6 +561,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 -ruN mutt-1.5.7-old/copy.c mutt-1.5.7-new/copy.c >--- mutt-1.5.7-old/copy.c 2004-07-14 06:38:58.000000000 +0200 >+++ mutt-1.5.7-new/copy.c 2005-02-04 03:03:13.747742926 +0100 >@@ -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 -ruN mutt-1.5.7-old/curs_main.c mutt-1.5.7-new/curs_main.c >--- mutt-1.5.7-old/curs_main.c 2005-02-04 03:01:27.000000000 +0100 >+++ mutt-1.5.7-new/curs_main.c 2005-02-04 03:03:13.757741393 +0100 >@@ -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) > { >@@ -1172,6 +1177,89 @@ > } > 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: > > CHECK_MSGCOUNT; >diff -ruN mutt-1.5.7-old/doc/manual.sgml.head mutt-1.5.7-new/doc/manual.sgml.head >--- mutt-1.5.7-old/doc/manual.sgml.head 2005-02-04 03:01:27.000000000 +0100 >+++ mutt-1.5.7-new/doc/manual.sgml.head 2005-02-04 03:03:13.773738941 +0100 >@@ -2322,8 +2322,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 -ruN mutt-1.5.7-old/functions.h mutt-1.5.7-new/functions.h >--- mutt-1.5.7-old/functions.h 2003-07-04 19:08:10.000000000 +0200 >+++ mutt-1.5.7-new/functions.h 2005-02-04 03:03:13.777738328 +0100 >@@ -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 -ruN mutt-1.5.7-old/imap/imap.c mutt-1.5.7-new/imap/imap.c >--- mutt-1.5.7-old/imap/imap.c 2005-01-27 19:53:51.000000000 +0100 >+++ mutt-1.5.7-new/imap/imap.c 2005-02-04 03:03:13.785737103 +0100 >@@ -983,9 +983,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 -ruN mutt-1.5.7-old/main.c mutt-1.5.7-new/main.c >--- mutt-1.5.7-old/main.c 2005-02-04 03:01:27.000000000 +0100 >+++ mutt-1.5.7-new/main.c 2005-02-04 03:03:13.791736183 +0100 >@@ -235,6 +235,12 @@ > "-USE_IMAP " > #endif > >+#ifdef IMAP_EDIT_THREADS >+ "+IMAP_EDIT_THREADS " >+#else >+ "-IMAP_EDIT_THREADS " >+#endif >+ > #ifdef USE_GSS > "+USE_GSS " > #else >diff -ruN mutt-1.5.7-old/mh.c mutt-1.5.7-new/mh.c >--- mutt-1.5.7-old/mh.c 2005-01-27 19:48:04.000000000 +0100 >+++ mutt-1.5.7-new/mh.c 2005-02-04 03:03:13.801734651 +0100 >@@ -1326,7 +1326,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; > >@@ -1337,9 +1337,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 -ruN mutt-1.5.7-old/mutt.h mutt-1.5.7-new/mutt.h >--- mutt-1.5.7-old/mutt.h 2005-02-04 03:01:27.000000000 +0100 >+++ mutt-1.5.7-new/mutt.h 2005-02-04 03:03:13.817732199 +0100 >@@ -96,6 +96,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 */ >@@ -547,6 +549,7 @@ > #define mutt_new_rx_list() safe_calloc (1, sizeof (RX_LIST)) > #define mutt_new_spam_list() safe_calloc (1, sizeof (SPAM_LIST)) > void mutt_free_list (LIST **); >+LIST *mutt_copy_list (LIST *); > void mutt_free_rx_list (RX_LIST **); > void mutt_free_spam_list (SPAM_LIST **); > int mutt_matches_ignore (const char *, LIST *); >@@ -704,6 +707,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. >@@ -744,6 +749,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 >@@ -808,6 +817,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 -ruN mutt-1.5.7-old/mx.c mutt-1.5.7-new/mx.c >--- mutt-1.5.7-old/mx.c 2005-02-04 03:01:27.000000000 +0100 >+++ mutt-1.5.7-new/mx.c 2005-02-04 03:03:13.825730973 +0100 >@@ -1197,6 +1197,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 -ruN mutt-1.5.7-old/pager.c mutt-1.5.7-new/pager.c >--- mutt-1.5.7-old/pager.c 2004-07-12 15:37:18.000000000 +0200 >+++ mutt-1.5.7-new/pager.c 2005-02-04 03:03:13.835729440 +0100 >@@ -2492,6 +2492,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 -ruN mutt-1.5.7-old/protos.h mutt-1.5.7-new/protos.h >--- mutt-1.5.7-old/protos.h 2005-01-26 14:37:15.000000000 +0100 >+++ mutt-1.5.7-new/protos.h 2005-02-04 03:03:13.844728061 +0100 >@@ -161,6 +161,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 *); >@@ -302,6 +303,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_match_spam_list (const char *, SPAM_LIST *, char *, int); >diff -ruN mutt-1.5.7-old/thread.c mutt-1.5.7-new/thread.c >--- mutt-1.5.7-old/thread.c 2004-07-14 07:21:38.000000000 +0200 >+++ mutt-1.5.7-new/thread.c 2005-02-04 03:03:13.852726835 +0100 >@@ -1340,3 +1340,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 80717
:
50330
| 50331 |
50332
|
50333
|
51021
|
51029
|
51030