diff --git a/.gitignore b/.gitignore index 54c2668..7432a07 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /notmuch-0.5.tar.gz +/notmuch-0.6.1.tar.gz diff --git a/notmuch-0.6.1-gmime.patch b/notmuch-0.6.1-gmime.patch new file mode 100644 index 0000000..d054d67 --- /dev/null +++ b/notmuch-0.6.1-gmime.patch @@ -0,0 +1,233 @@ +diff -up notmuch-0.6.1/notmuch-client.h.gmime notmuch-0.6.1/notmuch-client.h +--- notmuch-0.6.1/notmuch-client.h.gmime 2011-07-17 16:20:51.000000000 +0200 ++++ notmuch-0.6.1/notmuch-client.h 2011-07-28 17:24:16.904949635 +0200 +@@ -68,7 +68,7 @@ typedef struct notmuch_show_format { + void (*part_start) (GMimeObject *part, + int *part_count); + void (*part_encstatus) (int status); +- void (*part_sigstatus) (const GMimeSignatureValidity* validity); ++ void (*part_sigstatus) (GMimeSignatureList *siglist); + void (*part_content) (GMimeObject *part); + void (*part_end) (GMimeObject *part); + const char *part_sep; +@@ -82,7 +82,7 @@ typedef struct notmuch_show_params { + int entire_thread; + int raw; + int part; +- GMimeCipherContext* cryptoctx; ++ GMimeCryptoContext* cryptoctx; + int decrypt; + } notmuch_show_params_t; + +diff -up notmuch-0.6.1/notmuch-reply.c.gmime notmuch-0.6.1/notmuch-reply.c +--- notmuch-0.6.1/notmuch-reply.c.gmime 2011-07-17 16:20:51.000000000 +0200 ++++ notmuch-0.6.1/notmuch-reply.c 2011-07-28 17:24:16.904949635 +0200 +@@ -610,13 +610,10 @@ notmuch_reply_command (void *ctx, int ar + } + } else if ((STRNCMP_LITERAL (argv[i], "--decrypt") == 0)) { + if (params.cryptoctx == NULL) { +- GMimeSession* session = g_object_new(g_mime_session_get_type(), NULL); +- if (NULL == (params.cryptoctx = g_mime_gpg_context_new(session, "gpg"))) ++ if (NULL == (params.cryptoctx = g_mime_gpg_context_new(NULL, "gpg"))) + fprintf (stderr, "Failed to construct gpg context.\n"); + else + g_mime_gpg_context_set_always_trust((GMimeGpgContext*)params.cryptoctx, FALSE); +- g_object_unref (session); +- session = NULL; + } + } else { + fprintf (stderr, "Unrecognized option: %s\n", argv[i]); +diff -up notmuch-0.6.1/notmuch-show.c.gmime notmuch-0.6.1/notmuch-show.c +--- notmuch-0.6.1/notmuch-show.c.gmime 2011-07-17 16:20:51.000000000 +0200 ++++ notmuch-0.6.1/notmuch-show.c 2011-07-28 17:24:16.905949620 +0200 +@@ -70,7 +70,7 @@ static void + format_part_encstatus_json (int status); + + static void +-format_part_sigstatus_json (const GMimeSignatureValidity* validity); ++format_part_sigstatus_json (GMimeSignatureList *siglist); + + static void + format_part_content_json (GMimeObject *part); +@@ -420,16 +420,14 @@ show_text_part_content (GMimeObject *par + } + + static const char* +-signer_status_to_string (GMimeSignerStatus x) ++signature_status_to_string (GMimeSignatureStatus x) + { + switch (x) { +- case GMIME_SIGNER_STATUS_NONE: +- return "none"; +- case GMIME_SIGNER_STATUS_GOOD: ++ case GMIME_SIGNATURE_STATUS_GOOD: + return "good"; +- case GMIME_SIGNER_STATUS_BAD: ++ case GMIME_SIGNATURE_STATUS_BAD: + return "bad"; +- case GMIME_SIGNER_STATUS_ERROR: ++ case GMIME_SIGNATURE_STATUS_ERROR: + return "error"; + } + return "unknown"; +@@ -524,59 +522,65 @@ format_part_encstatus_json (int status) + } + + static void +-format_part_sigstatus_json (const GMimeSignatureValidity* validity) ++format_part_sigstatus_json (GMimeSignatureList *siglist) + { + printf (", \"sigstatus\": ["); + +- if (!validity) { ++ if (!siglist) { + printf ("]"); + return; + } + +- const GMimeSigner *signer = g_mime_signature_validity_get_signers (validity); +- int first = 1; + void *ctx_quote = talloc_new (NULL); ++ int i; ++ for (i = 0; i < g_mime_signature_list_length (siglist); ++i) { ++ GMimeSignature *signature = g_mime_signature_list_get_signature (siglist, i); + +- while (signer) { +- if (first) +- first = 0; +- else ++ if (i > 0) + printf (", "); +- + printf ("{"); + + /* status */ ++ GMimeSignatureStatus status = g_mime_signature_get_status (signature); + printf ("\"status\": %s", + json_quote_str (ctx_quote, +- signer_status_to_string (signer->status))); ++ signature_status_to_string (status))); + +- if (signer->status == GMIME_SIGNER_STATUS_GOOD) ++ GMimeCertificate *certificate = g_mime_signature_get_certificate (signature); ++ if (status == GMIME_SIGNATURE_STATUS_GOOD) + { +- if (signer->fingerprint) +- printf (", \"fingerprint\": %s", json_quote_str (ctx_quote, signer->fingerprint)); ++ if (certificate) ++ printf (", \"fingerprint\": %s", json_quote_str (ctx_quote, g_mime_certificate_get_fingerprint (certificate))); + /* these dates are seconds since the epoch; should we + * provide a more human-readable format string? */ +- if (signer->created) +- printf (", \"created\": %d", (int) signer->created); +- if (signer->expires) +- printf (", \"expires\": %d", (int) signer->expires); ++ time_t created = g_mime_signature_get_created (signature); ++ if (created != -1) ++ printf (", \"created\": %d", (int) created); ++ time_t expires = g_mime_signature_get_expires (signature); ++ if (expires != -1) ++ printf (", \"expires\": %d", (int) expires); + /* output user id only if validity is FULL or ULTIMATE. */ + /* note that gmime is using the term "trust" here, which + * is WRONG. It's actually user id "validity". */ +- if ((signer->name) && (signer->trust)) { +- if ((signer->trust == GMIME_SIGNER_TRUST_FULLY) || (signer->trust == GMIME_SIGNER_TRUST_ULTIMATE)) +- printf (", \"userid\": %s", json_quote_str (ctx_quote, signer->name)); ++ if (certificate) ++ { ++ const char *name = g_mime_certificate_get_issuer_name (certificate); ++ GMimeCertificateTrust trust = g_mime_certificate_get_trust (certificate); ++ if (name && (trust == GMIME_CERTIFICATE_TRUST_FULLY || trust == GMIME_CERTIFICATE_TRUST_ULTIMATE)) ++ printf (", \"userid\": %s", json_quote_str (ctx_quote, name)); + } +- } else { +- if (signer->keyid) +- printf (", \"keyid\": %s", json_quote_str (ctx_quote, signer->keyid)); +- } +- if (signer->errors != GMIME_SIGNER_ERROR_NONE) { +- printf (", \"errors\": %x", signer->errors); +- } ++ } else if (certificate) { ++ const char *key_id = g_mime_certificate_get_key_id (certificate); ++ if (key_id) ++ printf (", \"keyid\": %s", json_quote_str (ctx_quote, key_id)); ++ } ++ ++ GMimeSignatureError errors = g_mime_signature_get_errors (signature); ++ if (errors != GMIME_SIGNATURE_ERROR_NONE) { ++ printf (", \"errors\": %x", errors); ++ } + +- printf ("}"); +- signer = signer->next; ++ printf ("}"); + } + + printf ("]"); +@@ -899,13 +903,10 @@ notmuch_show_command (void *ctx, unused + } else if ((STRNCMP_LITERAL (argv[i], "--verify") == 0) || + (STRNCMP_LITERAL (argv[i], "--decrypt") == 0)) { + if (params.cryptoctx == NULL) { +- GMimeSession* session = g_object_new(g_mime_session_get_type(), NULL); +- if (NULL == (params.cryptoctx = g_mime_gpg_context_new(session, "gpg"))) ++ if (NULL == (params.cryptoctx = g_mime_gpg_context_new(NULL, "gpg"))) + fprintf (stderr, "Failed to construct gpg context.\n"); + else + g_mime_gpg_context_set_always_trust((GMimeGpgContext*)params.cryptoctx, FALSE); +- g_object_unref (session); +- session = NULL; + } + if (STRNCMP_LITERAL (argv[i], "--decrypt") == 0) + params.decrypt = 1; +diff -up notmuch-0.6.1/show-message.c.gmime notmuch-0.6.1/show-message.c +--- notmuch-0.6.1/show-message.c.gmime 2011-07-17 16:20:51.000000000 +0200 ++++ notmuch-0.6.1/show-message.c 2011-07-28 17:27:12.295304742 +0200 +@@ -68,15 +68,16 @@ show_message_part (GMimeObject *part, + g_mime_multipart_get_count (multipart)); + } else { + GMimeMultipartEncrypted *encrypteddata = GMIME_MULTIPART_ENCRYPTED (part); +- decryptedpart = g_mime_multipart_encrypted_decrypt (encrypteddata, params->cryptoctx, &err); ++ GMimeDecryptResult *decrypt_result = g_mime_decrypt_result_new (); ++ decryptedpart = g_mime_multipart_encrypted_decrypt (encrypteddata, params->cryptoctx, &decrypt_result, &err); + if (decryptedpart) { + if ((selected || state->in_zone) && format->part_encstatus) + format->part_encstatus (1); +- const GMimeSignatureValidity *sigvalidity = g_mime_multipart_encrypted_get_signature_validity (encrypteddata); +- if (!sigvalidity) +- fprintf (stderr, "Failed to verify signed part: %s\n", (err ? err->message : "no error explanation given")); ++ GMimeSignatureList *siglist = g_mime_decrypt_result_get_signatures (decrypt_result); ++ if (!siglist) ++ fprintf (stderr, "Failed to get signatures: %s\n", (err ? err->message : "no error explanation given")); + if ((selected || state->in_zone) && format->part_sigstatus) +- format->part_sigstatus (sigvalidity); ++ format->part_sigstatus (siglist); + } else { + fprintf (stderr, "Failed to decrypt part: %s\n", (err ? err->message : "no error explanation given")); + if ((selected || state->in_zone) && format->part_encstatus) +@@ -92,20 +93,14 @@ show_message_part (GMimeObject *part, + "Error: %d part(s) for a multipart/signed message (should be exactly 2)\n", + g_mime_multipart_get_count (multipart)); + } else { +- /* For some reason the GMimeSignatureValidity returned +- * here is not a const (inconsistent with that +- * returned by +- * g_mime_multipart_encrypted_get_signature_validity, +- * and therefore needs to be properly disposed of. +- * Hopefully the API will become more consistent. */ +- GMimeSignatureValidity *sigvalidity = g_mime_multipart_signed_verify (GMIME_MULTIPART_SIGNED (part), params->cryptoctx, &err); +- if (!sigvalidity) { ++ GMimeSignatureList *siglist = g_mime_multipart_signed_verify (GMIME_MULTIPART_SIGNED (part), params->cryptoctx, &err); ++ if (!siglist) { + fprintf (stderr, "Failed to verify signed part: %s\n", (err ? err->message : "no error explanation given")); + } + if ((selected || state->in_zone) && format->part_sigstatus) +- format->part_sigstatus (sigvalidity); +- if (sigvalidity) +- g_mime_signature_validity_free (sigvalidity); ++ format->part_sigstatus (siglist); ++ if (siglist) ++ g_object_unref (siglist); + } + } + diff --git a/notmuch.spec b/notmuch.spec index 58e8bbe..cd46d7a 100644 --- a/notmuch.spec +++ b/notmuch.spec @@ -1,11 +1,12 @@ Name: notmuch -Version: 0.5 -Release: 4%{?dist} +Version: 0.6.1 +Release: 1%{?dist} Summary: System for indexing, searching, and tagging email Group: Applications/Internet License: GPLv3+ URL: http://notmuchmail.org/ Source0: http://notmuchmail.org/releases/notmuch-%{version}.tar.gz +Patch0: notmuch-0.6.1-gmime.patch BuildRequires: xapian-core-devel BuildRequires: gmime-devel BuildRequires: libtalloc-devel @@ -59,6 +60,7 @@ Requires: emacs-notmuch = %{version}-%{release} %prep %setup -q +%patch0 -p1 -b .gmime %build # The %%configure macro cannot be used because notmuch doesn't support @@ -69,7 +71,6 @@ Requires: emacs-notmuch = %{version}-%{release} make %{?_smp_mflags} CFLAGS="%{optflags}" %install -rm -rf %{buildroot} make install DESTDIR=%{buildroot} # Enable dynamic library stripping. @@ -80,29 +81,29 @@ find %{buildroot}%{_libdir} -name *.so* -exec chmod 755 {} \; %postun -p /sbin/ldconfig %files -%defattr(-,root,root,-) %doc AUTHORS COPYING COPYING-GPL-3 INSTALL README TODO %{_sysconfdir}/bash_completion.d/notmuch -%{_datadir}/zsh/functions/Completion/Unix/notmuch +%{_datadir}/zsh/functions/Completion/Unix/_notmuch %{_bindir}/notmuch %{_mandir}/man1/notmuch.1* %{_libdir}/libnotmuch.so.1* %files devel -%defattr(-,root,root,-) %{_libdir}/libnotmuch.so %{_includedir}/* %files -n emacs-notmuch -%defattr(-,root,root,-) %{_emacs_sitelispdir}/*.elc %{_emacs_sitelispdir}/notmuch-logo.png %files -n emacs-notmuch-el -%defattr(-,root,root,-) %{_emacs_sitelispdir}/*.el %changelog +* Thu Jul 28 2011 Karel Klíč - 0.6.1-1 +- Latest upstream release +- Added -gmime patch to compile with GMime 2.5.x (upstream uses GMime 2.4.x) + * Tue Feb 08 2011 Fedora Release Engineering - 0.5-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild diff --git a/sources b/sources index 3147029..02f5220 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -983cd907a7bf5ee0d12ebfb54cff784f notmuch-0.5.tar.gz +a2d5123d68a0f770e5afe3c2af9f35a3 notmuch-0.6.1.tar.gz