Hello, I've backported six strarray_t patches to cyrus-imapd-2.4.17 to support the sieve imap4flags extension. Are these patches a reasonable backport to 2.4?
I started the imap4flags extension on 2.4, but rebased it onto master and completed the work there. I have since backported it to 2.4, but it relied on the strarray_t in several places. Is it better to have these strarray_t patches backported, or should I do the backport so that it won't require these extra patches. The latter will require more work. The former is already complete. I'm mostly concerned about the strarray_t patches I've backported, but if there any comments on the imap4flags code itself, I'm all ears. Thanks. V/r, James Cassell The following changes since commit d1df8aff4ab1b916a7794b39ca4be8e72b1548af: Bump version for cyrus-imapd to 2.4.17 (2012-12-01 19:57:54 +0000) are available in the git repository at: git://git.cyrusimap.org/git/cyrus-imapd dev/cassell/for-review-imap4flags-2.4 for you to fetch changes up to a67c68d95d09aa7006eab1e2fa5b1cfbebbc0274: [sieve] bump bytecode version for imap4flags extension (2014-10-31 14:14:37 -0400) ---------------------------------------------------------------- Bron Gondwana (1): strarray: add flags support to _split* Greg Banks (6): use strarray_t for appendstage.flags[] Fix compile b0rkage in nntpd.c Use strarray_t in cmd_store() index_store() Replace struct boundary with strarray_t Replace struct sieve_imapflags_t with strarray_t Replace stringlist_t with strarray_t. James Cassell (40): [sieve] add imap4flags reference [sieve] add parser support for imap4flags [sieve] add imap4flags awareness to sieve interpreter [sieve] update bytecode to support imap4flags [sieve] imap4flags support for bytecode generator [sieve] imap4flags support for bytecode emitter [sieve] imap4flags support for bytecode decompiler [sieve] bc_emit.c: fix comment [sieve] only 'fileinto' once per folder (RFC 3028) [sieve] fileinto: ensure last flag list value wins (RFC 5232) [sieve] keep: ensure last flag list value wins (RFC 5232) [sieve] bc_generate,bc_emit: put new parameter first [sieve] message.c: add :copy support to keep action [sieve] make sieve_{add,remove}flag() functions case insensitive [sieve] bc_eval.c: support for :flags parameter on KEEP and FILEINTO [sieve] bc_emit.c: add comments for B_FILEINTO [sieve] add legacy test cases for :flags argument to fileinto and keep [sieve] bc_eval: track current value of internal flags variable [sieve] bc_eval.c: support for imap4flags hasflag test [sieve] update sieve_fileinto() and sieve_keep() to use :flags parameter [sieve] sieve.y: verify :flags parameter is a valid list of flags [sieve] sieve.y: free_ftags(): free flags stringlist [sieve] sieve.y: support for space-separated flags within a string [sieve] tree.c: free flags stringlists in free_tree() and free_test() [sieve] sieve.y: 'require' imap4flags for hasflag test and :flags arg [sieve] Anticipate bytecode changes for VARIABLES extension [sieve] bc_dump.c: support imap4flags keep, fileinto, hasflag [sieve] sieved: update bytecode decompiler for imap4flags [sieve] added varlist.{c,h} in anticipation of the variables extension [sieve] remove dependence on actionflags parameter [sieve] bc_eval.c: add :count match-type support to hasflag test [sieve] move verify_flaglist() to flags.c for reuse elsewhere [sieve] sieve.y: an invalid flag should not cause a parsing error [sieve] properly handle NULL flag lists Revert "[sieve] update sieve_fileinto() and sieve_keep() to use :flags parameter" [sieve] complete removal of no-longer-used actionflags parameter [sieve] remove superfluous sieve_addflag() and _removeflag() functions [sieve] sieve.y: remove bytecode dependence on sieve.y [sieve] add legacy test cases for hasflag test [sieve] bump bytecode version for imap4flags extension doc/specs.html | 2 + imap/append.c | 17 +- imap/append.h | 3 +- imap/global.c | 2 +- imap/imapd.c | 53 +--- imap/index.c | 8 +- imap/index.h | 3 +- imap/lmtp_sieve.c | 12 +- imap/lmtpd.c | 17 +- imap/lmtpd.h | 6 +- imap/message.c | 62 ++--- imap/nntpd.c | 2 +- lib/imapoptions | 2 +- lib/strarray.c | 23 +- lib/strarray.h | 7 +- sieve/Makefile.in | 2 +- sieve/README | 3 + sieve/bc_dump.c | 33 ++- sieve/bc_emit.c | 60 ++++- sieve/bc_eval.c | 212 +++++++++++++-- sieve/bc_generate.c | 58 +++-- sieve/bytecode.h | 63 ++++- sieve/flags.c | 59 +++++ sieve/flags.h | 15 ++ sieve/interp.c | 14 +- sieve/interp.h | 2 +- sieve/message.c | 78 ++++-- sieve/message.h | 8 +- sieve/script.c | 115 +++------ sieve/script.h | 1 + sieve/sieve-lex.l | 2 + sieve/sieve.y | 285 ++++++++++++++------- sieve/sieve_interface.h | 14 +- sieve/sieved.c | 40 ++- sieve/test.c | 28 +- .../actionExtensions/serverm/ueamail-imap4flags | 11 + .../actionExtensions/testm/ueatest-imap4flags | 6 + .../actionExtensions/uberExtensionActionScript.key | 12 + .../actionExtensions/uberExtensionActionScript.s | 21 +- sieve/tests/testExtension/serverm/uetmail-hasflag | 11 + sieve/tests/testExtension/testm/uetest-hasflag | 7 + .../testExtension/uberExtensionTestScript.key | 14 + .../tests/testExtension/uberExtensionTestScript.s | 92 ++++++- sieve/tree.c | 62 ++--- sieve/tree.h | 39 ++- sieve/varlist.c | 79 ++++++ sieve/varlist.h | 32 +++ 47 files changed, 1205 insertions(+), 492 deletions(-) create mode 100644 sieve/flags.c create mode 100644 sieve/flags.h create mode 100644 sieve/tests/actionExtensions/serverm/ueamail-imap4flags create mode 100644 sieve/tests/actionExtensions/testm/ueatest-imap4flags create mode 100644 sieve/tests/testExtension/serverm/uetmail-hasflag create mode 100644 sieve/tests/testExtension/testm/uetest-hasflag create mode 100644 sieve/varlist.c create mode 100644 sieve/varlist.h