Hello community, here is the log from the commit of package maildir-utils for openSUSE:Factory checked in at 2017-12-19 10:58:44 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/maildir-utils (Old) and /work/SRC/openSUSE:Factory/.maildir-utils.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "maildir-utils" Tue Dec 19 10:58:44 2017 rev:6 rq:558069 version:1.0~alpha3 Changes: -------- --- /work/SRC/openSUSE:Factory/maildir-utils/maildir-utils.changes 2017-11-14 12:57:13.174954153 +0100 +++ /work/SRC/openSUSE:Factory/.maildir-utils.new/maildir-utils.changes 2017-12-19 10:58:46.520516592 +0100 @@ -1,0 +2,10 @@ +Mon Dec 18 11:05:36 UTC 2017 - [email protected] + +- Update to 1.0-alpha3: + * parser: promote single value to a range for range-fields + * mu: support 'raw' query (internally) + * mu: handle funny msgids + * mu4e: improve msgid quoting + * mu4e: fix typo in mu4e~docid-msgid-param + +------------------------------------------------------------------- Old: ---- mu-1.0-alpha2.tar.xz New: ---- mu-1.0-alpha3.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ maildir-utils.spec ++++++ --- /var/tmp/diff_new_pack.L5eG2e/_old 2017-12-19 10:58:47.180484732 +0100 +++ /var/tmp/diff_new_pack.L5eG2e/_new 2017-12-19 10:58:47.184484539 +0100 @@ -16,9 +16,9 @@ # -%define _version 1.0-alpha2 +%define _version 1.0-alpha3 Name: maildir-utils -Version: 1.0~alpha2 +Version: 1.0~alpha3 Release: 0 Summary: Maildir indexer and searcher License: GPL-3.0+ ++++++ mu-1.0-alpha2.tar.xz -> mu-1.0-alpha3.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.0-alpha2/NEWS.org new/mu-1.0-alpha3/NEWS.org --- old/mu-1.0-alpha2/NEWS.org 2017-10-31 05:57:39.000000000 +0100 +++ new/mu-1.0-alpha3/NEWS.org 2017-12-17 16:19:42.000000000 +0100 @@ -1,6 +1,44 @@ #+STARTUP:showall * NEWS (user visible changes) +** 1.0 (unreleased) + + mu 1.0, after 10 years or so! + +*** mu + + - New, custom query parser which Xapian's 'QueryParser' both in mu + and mu4e. Existing queries should generally still work, but the + new engine handles non-alphanum much better. + - Support regular expression queries (with the new query engine) + - cfind: ensure nicks are unique + +*** mu4e + + - allow for rewriting message bodies + - electric-quote-(local-)mode work when composing emails + - Respect format=flowed and delsp=yes for viewing plain-text + messages + - Added new mu4e-split-view mode: single-window + - Unbreak abbrevs in mu4e-compose-mode + - Allow forwarding messages as attachments + (`mu4e-compose-forward-as-attachment') + - Updated documentation + +*** Contributors for this release: + + Ævar Arnfjörð Bjarmason, Alex Bennée, Arne Köhn, Christophe + Troestler, Damien Garaud, Dirk-Jan C. Binnema, galaunay, Hong Xu, + Ian Kelling, John Whitbeck, Josiah Schwab, Jun Hao, Krzysztof + Jurewicz, maxime, Mekeor Melire, Nathaniel Nicandro, Ronald Evers, + Sean 'Shaleh' Perry, Sébastien Le Callonnec, Stig Brautaset, + Thierry Volpiatto, Titus von der Malsburg, Vladimir Sedach, Wataru + Ashihara, Yuri D'Elia. + + And all the people on the mailing-list and in github, with bug + reports, questions and suggestions. + + ** 0.9.18 New development series which will lead to 0.9.18. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.0-alpha2/configure new/mu-1.0-alpha3/configure --- old/mu-1.0-alpha2/configure 2017-11-12 13:38:33.000000000 +0100 +++ new/mu-1.0-alpha3/configure 2017-12-17 16:22:40.000000000 +0100 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for mu 1.0-alpha2. +# Generated by GNU Autoconf 2.69 for mu 1.0-alpha3. # # Report bugs to <https://github.com/djcb/mu/issues>. # @@ -592,8 +592,8 @@ # Identity of this package. PACKAGE_NAME='mu' PACKAGE_TARNAME='mu' -PACKAGE_VERSION='1.0-alpha2' -PACKAGE_STRING='mu 1.0-alpha2' +PACKAGE_VERSION='1.0-alpha3' +PACKAGE_STRING='mu 1.0-alpha3' PACKAGE_BUGREPORT='https://github.com/djcb/mu/issues' PACKAGE_URL='' @@ -1418,7 +1418,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures mu 1.0-alpha2 to adapt to many kinds of systems. +\`configure' configures mu 1.0-alpha3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1488,7 +1488,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of mu 1.0-alpha2:";; + short | recursive ) echo "Configuration of mu 1.0-alpha3:";; esac cat <<\_ACEOF @@ -1645,7 +1645,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -mu configure 1.0-alpha2 +mu configure 1.0-alpha3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2194,7 +2194,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by mu $as_me 1.0-alpha2, which was +It was created by mu $as_me 1.0-alpha3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3171,7 +3171,7 @@ # Define the identity of the package. PACKAGE='mu' - VERSION='1.0-alpha2' + VERSION='1.0-alpha3' cat >>confdefs.h <<_ACEOF @@ -22481,7 +22481,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by mu $as_me 1.0-alpha2, which was +This file was extended by mu $as_me 1.0-alpha3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -22547,7 +22547,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -mu config.status 1.0-alpha2 +mu config.status 1.0-alpha3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.0-alpha2/configure.ac new/mu-1.0-alpha3/configure.ac --- old/mu-1.0-alpha2/configure.ac 2017-11-12 13:37:53.000000000 +0100 +++ new/mu-1.0-alpha3/configure.ac 2017-12-17 16:22:13.000000000 +0100 @@ -15,7 +15,7 @@ ## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. AC_PREREQ([2.68]) -AC_INIT([mu],[1.0-alpha2],[https://github.com/djcb/mu/issues],[mu]) +AC_INIT([mu],[1.0-alpha3],[https://github.com/djcb/mu/issues],[mu]) AC_COPYRIGHT([Copyright (C) 2008-2017 Dirk-Jan C. Binnema]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_SRCDIR([mu/mu.cc]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.0-alpha2/lib/mu-query.cc new/mu-1.0-alpha3/lib/mu-query.cc --- old/mu-1.0-alpha2/lib/mu-query.cc 2017-11-02 07:06:48.000000000 +0100 +++ new/mu-1.0-alpha3/lib/mu-query.cc 2017-12-03 13:04:06.000000000 +0100 @@ -194,22 +194,20 @@ }; static const Xapian::Query -get_query (MuQuery *mqx, const char* searchexpr, GError **err) -{ - try { - Mux::WarningVec warns; - const auto tree = Mux::parse (searchexpr, warns, - std::make_unique<MuProc>(mqx->db())); - for (const auto w: warns) - std::cerr << w << std::endl; +get_query (MuQuery *mqx, const char* searchexpr, bool raw, GError **err) try { - return Mux::xapian_query (tree); - - } catch (...) { - mu_util_g_set_error (err,MU_ERROR_XAPIAN_QUERY, - "parse error in query"); - throw; - } + Mux::WarningVec warns; + const auto tree = Mux::parse (searchexpr, warns, + std::make_unique<MuProc>(mqx->db())); + for (const auto w: warns) + std::cerr << w << std::endl; + + return Mux::xapian_query (tree); + +} catch (...) { + mu_util_g_set_error (err,MU_ERROR_XAPIAN_QUERY, + "parse error in query"); + throw; } MuQuery* @@ -279,16 +277,17 @@ static Xapian::Enquire get_enquire (MuQuery *self, const char *searchexpr, MuMsgFieldId sortfieldid, - bool descending, GError **err) + bool descending, bool raw, GError **err) { Xapian::Enquire enq (self->db()); try { - /* empty or "" means "matchall" */ - if (!mu_str_is_empty(searchexpr) && + if (raw) + enq.set_query(Xapian::Query(Xapian::Query(searchexpr))); + else if (!mu_str_is_empty(searchexpr) && g_strcmp0 (searchexpr, "\"\"") != 0) /* NULL or "" or """" */ - enq.set_query(get_query (self, searchexpr, err)); - else + enq.set_query(get_query (self, searchexpr, raw, err)); + else/* empty or "" means "matchall" */ enq.set_query(Xapian::Query::MatchAll); } catch (...) { mu_util_g_set_error (err, MU_ERROR_XAPIAN_QUERY, @@ -413,15 +412,16 @@ try { MuMsgIter *iter; MuQueryFlags first_flags; - bool inc_related = flags & MU_QUERY_FLAG_INCLUDE_RELATED; - bool descending = flags & MU_QUERY_FLAG_DESCENDING; + const auto inc_related = flags & MU_QUERY_FLAG_INCLUDE_RELATED; + const auto descending = flags & MU_QUERY_FLAG_DESCENDING; + const auto raw = flags & MU_QUERY_FLAG_RAW; Xapian::Enquire enq (get_enquire(self, searchexpr, sortfieldid, - descending, err)); + descending, raw, err)); - /* when we're doing a 'include-related query', we're - * actually doing /two/ queries; one to get the - * initial matches, and based on that one to get all - * messages in threads in those matches. + /* when we're doing a 'include-related query', wea're actually + * doing /two/ queries; one to get the initial matches, and + * based on that one to get all messages in threads in those + * matches. */ /* get the 'real' maxnum if it was specified as < 0 */ @@ -470,7 +470,7 @@ g_return_val_if_fail (searchexpr, NULL); try { - Xapian::Query query (get_query(self, searchexpr, err)); + Xapian::Query query (get_query(self, searchexpr, false, err)); return g_strdup(query.get_description().c_str()); } MU_XAPIAN_CATCH_BLOCK_RETURN(NULL); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.0-alpha2/lib/mu-query.h new/mu-1.0-alpha3/lib/mu-query.h --- old/mu-1.0-alpha2/lib/mu-query.h 2017-10-25 22:48:10.000000000 +0200 +++ new/mu-1.0-alpha3/lib/mu-query.h 2017-12-03 12:55:29.000000000 +0100 @@ -70,7 +70,8 @@ MU_QUERY_FLAG_SKIP_UNREADABLE = 1 << 1, /**< skip unreadable msgs */ MU_QUERY_FLAG_SKIP_DUPS = 1 << 2, /**< skip duplicate msgs */ MU_QUERY_FLAG_INCLUDE_RELATED = 1 << 3, /**< include related msgs */ - MU_QUERY_FLAG_THREADS = 1 << 4 /**< calculate threading info */ + MU_QUERY_FLAG_THREADS = 1 << 4, /**< calculate threading info */ + MU_QUERY_FLAG_RAW = 1 << 5 /**< don't parse the query */ } MuQueryFlags; /** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.0-alpha2/lib/parser/parser.cc new/mu-1.0-alpha3/lib/parser/parser.cc --- old/mu-1.0-alpha2/lib/parser/parser.cc 2017-11-04 13:31:17.000000000 +0100 +++ new/mu-1.0-alpha3/lib/parser/parser.cc 2017-12-03 11:39:27.000000000 +0100 @@ -181,6 +181,10 @@ if (dotdot != std::string::npos) return range(fields, val.substr(0, dotdot), val.substr(dotdot + 2), token.pos, proc, warnings); + else if (proc->is_range_field(fields.front().field)) { + // range field without a range - treat as field:val..val + return range (fields, val, val, token.pos, proc, warnings); + } // if nothing else, it's a value. return value (fields, val, token.pos, proc, warnings); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.0-alpha2/mu/mu-cmd-server.c new/mu-1.0-alpha3/mu/mu-cmd-server.c --- old/mu-1.0-alpha2/mu/mu-cmd-server.c 2017-10-30 21:06:18.000000000 +0100 +++ new/mu-1.0-alpha3/mu/mu-cmd-server.c 2017-12-03 21:03:21.000000000 +0100 @@ -265,70 +265,37 @@ } while (0); - -/* NOTE: this assumes there is only _one_ docid (message) for the - * particular message id */ -static unsigned -get_docid_from_msgid (MuQuery *query, const char *str, GError **err) -{ - gchar *querystr; - unsigned docid; - MuMsgIter *iter; - - querystr = g_strdup_printf ("msgid:%s", str); - iter = mu_query_run (query, querystr, - MU_MSG_FIELD_ID_NONE, - 1, MU_QUERY_FLAG_NONE, err); - g_free (querystr); - - docid = MU_STORE_INVALID_DOCID; - if (!iter || mu_msg_iter_is_done (iter)) - mu_util_g_set_error (err, MU_ERROR_NO_MATCHES, - "could not find message %s", str); - else { - MuMsg *msg; - msg = mu_msg_iter_get_msg_floating (iter); - if (!mu_msg_is_readable(msg)) { - mu_util_g_set_error (err, MU_ERROR_FILE_CANNOT_READ, - "'%s' is not readable", - mu_msg_get_path(msg)); - } else - docid = mu_msg_iter_get_docid (iter); - - mu_msg_iter_destroy (iter); - } - - return docid; -} - - /* get a *list* of all messages with the given message id */ static GSList* -get_docids_from_msgids (MuQuery *query, const char *str, GError **err) +get_docids_from_msgids (MuQuery *query, const char *msgid, + int max, GError **err) { - gchar *querystr; - MuMsgIter *iter; - GSList *lst; - - querystr = g_strdup_printf ("msgid:%s", str); - iter = mu_query_run (query, querystr, MU_MSG_FIELD_ID_NONE, - -1 /*unlimited*/, MU_QUERY_FLAG_NONE, - err); - g_free (querystr); + char xprefix; + char *rawq, *tmp; + MuMsgIter *iter; + GSList *lst; + + xprefix = mu_msg_field_xapian_prefix(MU_MSG_FIELD_ID_MSGID); + /*XXX this is a bit dodgy */ + tmp = g_ascii_strdown(msgid, -1); + rawq = g_strdup_printf("%c%s", xprefix, tmp); + g_free(tmp); + iter = mu_query_run (query, rawq, MU_MSG_FIELD_ID_NONE, + max, MU_QUERY_FLAG_RAW, err); + g_free (rawq); if (!iter || mu_msg_iter_is_done (iter)) { mu_util_g_set_error (err, MU_ERROR_NO_MATCHES, - "could not find message %s", str); + "could not find message(s) for msgid %s", + msgid); return NULL; } lst = NULL; do { lst = g_slist_prepend - (lst, - GSIZE_TO_POINTER(mu_msg_iter_get_docid (iter))); + (lst, GSIZE_TO_POINTER(mu_msg_iter_get_docid (iter))); } while (mu_msg_iter_next (iter)); - mu_msg_iter_destroy (iter); return lst; @@ -342,7 +309,9 @@ static unsigned determine_docid (MuQuery *query, GHashTable *args, GError **err) { - const char* docidstr, *msgidstr; + GSList *docids; + unsigned docid; + const char* docidstr, *msgidstr; docidstr = get_string_from_args (args, "docid", TRUE, err); if (docidstr) @@ -356,7 +325,14 @@ return MU_STORE_INVALID_DOCID; } - return get_docid_from_msgid (query, msgidstr, err); + docids = get_docids_from_msgids (query, msgidstr, 1, err); + if (!docids) + return MU_STORE_INVALID_DOCID; + + docid = GPOINTER_TO_UINT(docids->data); + g_slist_free (docids); + + return docid; } @@ -1291,7 +1267,8 @@ if (!msgid || !flagstr || maildir) return FALSE; - if (!(docids = get_docids_from_msgids (ctx->query, msgid, err))) { + if (!(docids = get_docids_from_msgids (ctx->query, msgid, + -1/*unlimited*/, err))) { print_and_clear_g_error (err); return TRUE; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.0-alpha2/mu4e/mu4e-meta.el new/mu-1.0-alpha3/mu4e/mu4e-meta.el --- old/mu-1.0-alpha2/mu4e/mu4e-meta.el 2017-11-12 13:38:44.000000000 +0100 +++ new/mu-1.0-alpha3/mu4e/mu4e-meta.el 2017-12-17 16:22:48.000000000 +0100 @@ -1,5 +1,5 @@ ;; auto-generated -(defconst mu4e-mu-version "1.0-alpha2" +(defconst mu4e-mu-version "1.0-alpha3" "Required mu binary version; mu4e's version must agree with this.") (defconst mu4e-builddir "/home/djcb/Sources/mu" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/mu-1.0-alpha2/mu4e/mu4e-proc.el new/mu-1.0-alpha3/mu4e/mu4e-proc.el --- old/mu-1.0-alpha2/mu4e/mu4e-proc.el 2017-11-08 20:09:04.000000000 +0100 +++ new/mu-1.0-alpha3/mu4e/mu4e-proc.el 2017-12-10 12:51:52.000000000 +0100 @@ -314,7 +314,7 @@ "Construct a backend parameter based on DOCID-OR-MSGID." (format (if (stringp docid-or-msgid) - "msgid:\"%s\"" + (concat "msgid:"(mu4e~escape (format "%s" docid-or-msgid))) "docid:%d") docid-or-msgid))
