commit-mailutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SCM] GNU Mailutils branch, master, updated. release-3.1-4-gfb84d1e


From: Sergey Poznyakoff
Subject: [SCM] GNU Mailutils branch, master, updated. release-3.1-4-gfb84d1e
Date: Wed, 14 Dec 2016 20:01:08 +0000 (UTC)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Mailutils".

http://git.savannah.gnu.org/cgit/mailutils.git/commit/?id=fb84d1e35a1f9247e3c79919b52230adf6592f9f

The branch, master has been updated
       via  fb84d1e35a1f9247e3c79919b52230adf6592f9f (commit)
      from  89fb41d0170724c49d23c0887d5f47026b221898 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit fb84d1e35a1f9247e3c79919b52230adf6592f9f
Author: Sergey Poznyakoff <address@hidden>
Date:   Wed Dec 14 21:52:40 2016 +0200

    Fix pick --component NAME
    
    * mh/mh_getopt.c (mh_getopt0): New function.
    (mh_getopt): Rewrite as alternative entry point to .
    * mh/mh_getopt.h (mh_getopt0): New proto.
    * mh/pick.c: Use mh_getopt0
    * mh/tests/pick.at: Add new testcase.

-----------------------------------------------------------------------

Summary of changes:
 mh/mh_getopt.c   |   47 +++++++++++++++++++++++++++++++++++++++--------
 mh/mh_getopt.h   |    5 +++++
 mh/pick.c        |   17 +++++++++++++++--
 mh/tests/pick.at |   33 +++++++++++++++++++++++++++++++++
 4 files changed, 92 insertions(+), 10 deletions(-)

diff --git a/mh/mh_getopt.c b/mh/mh_getopt.c
index 0e7ec3c..211f57f 100644
--- a/mh/mh_getopt.c
+++ b/mh/mh_getopt.c
@@ -178,9 +178,11 @@ has_folder_option (struct mu_option *opt)
 }
 
 void
-mh_getopt (int *pargc, char ***pargv, struct mu_option *options,
-          int mhflags,
-          char *argdoc, char *progdoc, char *extradoc)
+mh_getopt0 (int *pargc, char ***pargv, struct mu_option *options,
+           int mhflags,
+           char *argdoc, char *progdoc, char *extradoc,
+           int (*eatarg) (int argc, char **argv, void *data),
+           void *data)
 {
   int argc = *pargc;
   char **argv = *pargv;
@@ -197,6 +199,9 @@ mh_getopt (int *pargc, char ***pargv, struct mu_option 
*options,
   po.po_negation = "no";
   flags |= MU_PARSEOPT_NEGATION;
 
+  if (eatarg)
+    flags |= MU_PARSEOPT_IN_ORDER;
+  
   if ((mhflags & MH_GETOPT_DEFAULT_FOLDER) || has_folder_option (options))
     {
       po.po_special_args = N_("[+FOLDER]");
@@ -254,12 +259,29 @@ mh_getopt (int *pargc, char ***pargv, struct mu_option 
*options,
   if (options)
     optv[i++] = options;
   optv[i] = NULL;
-  
-  if (mu_parseopt (&po, argc, argv, optv, flags))
-    exit (po.po_exit_error);
 
-  argc -= po.po_arg_start;
-  argv += po.po_arg_start;
+  do
+    {
+      if (mu_parseopt (&po, argc, argv, optv, flags))
+       exit (po.po_exit_error);
+      argc -= po.po_arg_start;
+      argv += po.po_arg_start;
+      if (eatarg)
+       {
+         int consumed = eatarg (argc, argv, data);
+         if (consumed == 0)
+           break;
+         else
+           {
+             argc -= consumed;
+             argv += consumed;
+           }
+         flags |= MU_PARSEOPT_ARGV0;
+       }
+      else
+       break;
+    }
+  while (argc > 0);
 
   process_std_options (argc, argv, &po);
   
@@ -283,6 +305,15 @@ mh_getopt (int *pargc, char ***pargv, struct mu_option 
*options,
 }
 
 void
+mh_getopt (int *pargc, char ***pargv, struct mu_option *options,
+          int mhflags,
+          char *argdoc, char *progdoc, char *extradoc)
+{
+  return mh_getopt0 (pargc, pargv, options, mhflags, argdoc, progdoc, extradoc,
+                    NULL, NULL);
+}
+
+void
 mh_opt_notimpl (struct mu_parseopt *po, struct mu_option *opt, char const *arg)
 {
   mu_error (_("option is not yet implemented: %s"), opt->opt_long);
diff --git a/mh/mh_getopt.h b/mh/mh_getopt.h
index 2dcd57a..93d1d34 100644
--- a/mh/mh_getopt.h
+++ b/mh/mh_getopt.h
@@ -23,6 +23,11 @@
 void mh_getopt (int *pargc, char ***pargv, struct mu_option *options,
                int flags,
                char *argdoc, char *progdoc, char *extradoc);
+void mh_getopt0 (int *pargc, char ***pargv, struct mu_option *options,
+                int mhflags,
+                char *argdoc, char *progdoc, char *extradoc,
+                int (*eatarg) (int argc, char **argv, void *data),
+                void *data);
 
 void mh_opt_notimpl (struct mu_parseopt *po, struct mu_option *opt,
                     char const *arg);
diff --git a/mh/pick.c b/mh/pick.c
index 53e9d83..baf1ff8 100644
--- a/mh/pick.c
+++ b/mh/pick.c
@@ -260,6 +260,19 @@ parse_comp_match (int *pargc, char **argv)
   *pargc = j;
 }
 
+static int
+comp_match_arg (int argc, char **argv, void *data)
+{
+  if (argc >= 2 && strncmp (argv[0], "--", 2) == 0)
+    {
+      mu_list_t *lp = data;
+      pick_add_token (lp, T_COMP, argv[0] + 2);
+      pick_add_token (lp, T_STRING, argv[1]);
+      return 2;
+    }
+  return 0;
+}
+  
 int
 main (int argc, char **argv)
 {
@@ -267,8 +280,8 @@ main (int argc, char **argv)
   mu_mailbox_t mbox;
   mu_msgset_t msgset;
 
-  mh_getopt (&argc, &argv, options, MH_GETOPT_DEFAULT_FOLDER,
-            args_doc, prog_doc, NULL);
+  mh_getopt0 (&argc, &argv, options, MH_GETOPT_DEFAULT_FOLDER,
+             args_doc, prog_doc, NULL, comp_match_arg, &lexlist);
 
   parse_comp_match (&argc, argv);
   
diff --git a/mh/tests/pick.at b/mh/tests/pick.at
index ce3dab1..d5a3b33 100644
--- a/mh/tests/pick.at
+++ b/mh/tests/pick.at
@@ -342,5 +342,38 @@ pick --X-Envelope-Sender hare
 71
 ])
 
+MH_CHECK([pick --Component pattern -or ...],[pick12 pick-component0or],[
+MUT_MBCOPY($abs_top_srcdir/testsuite/mh/teaparty,[Mail/inbox])
+pick --X-Envelope-Sender hare -or -to hare
+],
+[0],
+[1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+16
+21
+22
+23
+24
+35
+42
+58
+59
+62
+71
+72
+])
+
 m4_popdef[MH_KEYWORDS])
 # End of pick.at


hooks/post-receive
-- 
GNU Mailutils



reply via email to

[Prev in Thread] Current Thread [Next in Thread]