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=ee71e7712297f5e2ca6ed38fce4a0fc1e72ca5d0

The branch, master has been updated
       via  ee71e7712297f5e2ca6ed38fce4a0fc1e72ca5d0 (commit)
      from  2a28ab58762f9ae9cd00ca3e467ee6f90f241201 (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 ee71e7712297f5e2ca6ed38fce4a0fc1e72ca5d0
Author: Sergey Poznyakoff <g...@gnu.org>
Date:   Sun Oct 16 00:44:30 2016 +0300

    Allow for multiple argument sets in help output.
    
    Alternative invocations follow the main one, each on a separate line,
    preceded by " or: ".
    
    * include/mailutils/cli.h (mu_cli_setup) <prog_alt_args>: New member.
    * include/mailutils/opt.h (mu_parseopt) <po_prog_args>: Change type.
    (mu_program_usage): Change signature.
    * include/mailutils/stream.h (MU_IOCTL_WORDWRAP_GET_OFFSET): Rename to
    MU_IOCTL_WORDWRAP_GET_COLUMN. All uses changed.
    * libmailutils/cli/cli.c (mu_cli): Construct po.po_prog_args from
    prog_args and prog_alt_args.
    * libmailutils/opt/help.c (move_margin): Remove.
    (print_program_usage): New static function.
    (mu_program_usage): Second argument instructs how to display options.
    Main work is done by print_program_usage.
    (mu_program_help): Call print_program_usage.
    * libmailutils/opt/opt.c: Update.
    * libmailutils/stream/wordwrap.c (set_margin): Avoid unnecessary flushes.
    
    * libmailutils/tests/parseopt.c (MU_PARSEOPT_PROG_ARGS): Alternative
    argument sets are separated by the pipe sign.
    * libmailutils/tests/Makefile.am: Add new testcase.
    * libmailutils/tests/testsuite.at: Likewise.
    * libmailutils/tests/parseopt_help04.at: Add MU_PARSEOPT_PROG_ARGS
    to keywords.
    * libmailutils/tests/parseopt_help12.at: New file.
    
    * libmailutils/tests/tcli.c (cli): Add alternative arguments.
    
    * dotlock/dotlock.c: Update.
    * mimeview/mimeview.c: Likewise.
    * sieve/sieve.c: Likewise.

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

Summary of changes:
 dotlock/dotlock.c                                  |    1 +
 include/mailutils/cli.h                            |    1 +
 include/mailutils/opt.h                            |    4 +-
 include/mailutils/stream.h                         |    9 +-
 libmailutils/cli/cli.c                             |   32 ++++++-
 libmailutils/opt/help.c                            |  101 +++++++++++++-------
 libmailutils/opt/opt.c                             |    2 +-
 libmailutils/stream/wordwrap.c                     |   16 ++--
 libmailutils/tests/.gitignore                      |    2 +
 libmailutils/tests/Makefile.am                     |    1 +
 libmailutils/tests/parseopt.c                      |   44 ++++++++-
 libmailutils/tests/parseopt_help04.at              |    2 +-
 .../{parseopt_help04.at => parseopt_help12.at}     |   10 +-
 libmailutils/tests/tcli.c                          |    5 +-
 libmailutils/tests/testsuite.at                    |    1 +
 mimeview/mimeview.c                                |    1 +
 sieve/sieve.c                                      |    1 +
 17 files changed, 175 insertions(+), 58 deletions(-)
 copy libmailutils/tests/{parseopt_help04.at => parseopt_help12.at} (82%)

diff --git a/dotlock/dotlock.c b/dotlock/dotlock.c
index f0e07d6..8304c10 100644
--- a/dotlock/dotlock.c
+++ b/dotlock/dotlock.c
@@ -93,6 +93,7 @@ static struct mu_cli_setup cli = {
   dotlock_cfg_param,
   N_("GNU dotlock -- lock mail spool files."),
   N_("FILE"),
+  NULL,
   N_("Returns 0 on success, 3 if locking the file fails because\
  it's already locked, and 1 if some other kind of error occurred."),
   MU_DL_EX_ERROR,
diff --git a/include/mailutils/cli.h b/include/mailutils/cli.h
index 097759e..dec27de 100644
--- a/include/mailutils/cli.h
+++ b/include/mailutils/cli.h
@@ -43,6 +43,7 @@ struct mu_cli_setup
   struct mu_cfg_param *cfg;    /* Configuration parameters */
   char *prog_doc;              /* Program documentation string */
   char *prog_args;             /* Program arguments string */
+  char const **prog_alt_args;  /* Alternative arguments string */
   char *prog_extra_doc;        /* Extra documentation.  This will be
                                  displayed after options. */
   int ex_usage;                /* If not 0, exit code on usage errors */
diff --git a/include/mailutils/opt.h b/include/mailutils/opt.h
index 7752117..87a9839 100644
--- a/include/mailutils/opt.h
+++ b/include/mailutils/opt.h
@@ -125,7 +125,7 @@ struct mu_parseopt
   /* Informational: */
   char const *po_prog_name;
   char const *po_prog_doc;     
-  char const *po_prog_args;
+  char const **po_prog_args;
   char const *po_bug_address;
   char const *po_package_name;
   char const *po_package_url;
@@ -172,7 +172,7 @@ unsigned mu_parseopt_getcolumn (const char *name);
 void mu_option_describe_options (mu_stream_t str,
                                 struct mu_option **optbuf, size_t optcnt);
 void mu_program_help (struct mu_parseopt *p, mu_stream_t str);
-void mu_program_usage (struct mu_parseopt *p, mu_stream_t str);
+void mu_program_usage (struct mu_parseopt *p, int optsummary, mu_stream_t str);
 void mu_program_version (struct mu_parseopt *po, mu_stream_t str);
 
 void mu_option_set_value (struct mu_parseopt *po, struct mu_option *opt,
diff --git a/include/mailutils/stream.h b/include/mailutils/stream.h
index 4f0ef69..dbd9262 100644
--- a/include/mailutils/stream.h
+++ b/include/mailutils/stream.h
@@ -208,11 +208,16 @@ enum mu_buffer_type
   ((n) == MU_TRANSPORT_INPUT || (n) == MU_TRANSPORT_OUTPUT)
 
 /* Word wrapper streams */
+/* Get left margin. */
 #define MU_IOCTL_WORDWRAP_GET_MARGIN      0
-#define MU_IOCTL_WORDWRAP_SET_MARGIN      1  
+/* Set left margin */  
+#define MU_IOCTL_WORDWRAP_SET_MARGIN      1
+/* Shift left margin relative to current position */ 
 #define MU_IOCTL_WORDWRAP_MOVE_MARGIN     2
+/* Set left margin for the next line */
 #define MU_IOCTL_WORDWRAP_SET_NEXT_MARGIN 3
-#define MU_IOCTL_WORDWRAP_GET_OFFSET      4
+/* Get current column */
+#define MU_IOCTL_WORDWRAP_GET_COLUMN      4
 
 struct mu_nullstream_pattern
 {
diff --git a/libmailutils/cli/cli.c b/libmailutils/cli/cli.c
index 5b8507a..2dd142a 100644
--- a/libmailutils/cli/cli.c
+++ b/libmailutils/cli/cli.c
@@ -336,7 +336,11 @@ mu_cli (int argc, char **argv, struct mu_cli_setup *setup, 
char **capa,
   struct mu_cfg_parse_hints hints;
   struct mu_option **optv;
   mu_list_t com_list;
-
+#define DFLARGC 2
+  char const *dfl_args[DFLARGC];
+  char **args = NULL;
+  size_t argcnt;
+  
   /* Set up defaults */
   if (setup->ex_usage == 0)
     setup->ex_usage = EX_USAGE;
@@ -374,7 +378,28 @@ mu_cli (int argc, char **argv, struct mu_cli_setup *setup, 
char **capa,
 
   if (setup->prog_args)
     {
-      po.po_prog_args = setup->prog_args;
+      size_t i;
+      argcnt = 1;
+
+      if (setup->prog_alt_args)
+       {
+         for (i = 0; setup->prog_alt_args[i]; i++)
+           argcnt++;
+       }
+
+      if (argcnt < DFLARGC)
+       po.po_prog_args = dfl_args;
+      else
+       {
+         args = mu_calloc (argcnt + 1, sizeof (args[0]));
+         po.po_prog_args = (char const **) args;
+       }
+      
+      po.po_prog_args[0] = setup->prog_args;
+      for (i = 1; i < argcnt; i++)
+       po.po_prog_args[i] = setup->prog_alt_args[i-1];
+      po.po_prog_args[i] = NULL;
+
       flags |= MU_PARSEOPT_PROG_ARGS;
     }
   
@@ -439,5 +464,8 @@ mu_cli (int argc, char **argv, struct mu_cli_setup *setup, 
char **capa,
 
   mu_cfg_destroy_tree (&parse_tree);
   free (optv);
+  
+  free (args);
+
   mu_parseopt_free (&po);  
 }
diff --git a/libmailutils/opt/help.c b/libmailutils/opt/help.c
index c4ef8d3..07420dc 100644
--- a/libmailutils/opt/help.c
+++ b/libmailutils/opt/help.c
@@ -204,16 +204,9 @@ static void
 get_offset (mu_stream_t str, unsigned *offset)
 {
   mu_stream_ioctl (str, MU_IOCTL_WORDWRAPSTREAM,
-                  MU_IOCTL_WORDWRAP_GET_OFFSET,
+                  MU_IOCTL_WORDWRAP_GET_COLUMN,
                   offset);
 }
-static void
-move_margin (mu_stream_t str, int margin)
-{
-  mu_stream_ioctl (str, MU_IOCTL_WORDWRAPSTREAM,
-                  MU_IOCTL_WORDWRAP_MOVE_MARGIN,
-                  &margin);
-}
 
 static void
 print_opt_arg (mu_stream_t str, struct mu_option *opt, int delim)
@@ -333,6 +326,9 @@ mu_option_describe_options (mu_stream_t str,
     }
 }
 
+static void print_program_usage (struct mu_parseopt *po, int optsum,
+                                mu_stream_t str);
+
 void
 mu_program_help (struct mu_parseopt *po, mu_stream_t outstr)
 {
@@ -346,15 +342,8 @@ mu_program_help (struct mu_parseopt *po, mu_stream_t 
outstr)
     {
       abort ();//FIXME
     }
-  
-  mu_stream_printf (str, "%s", _("Usage:"));
-  if (po->po_prog_name)
-    mu_stream_printf (str, " %s ", po->po_prog_name);
-  move_margin (str, 0);
-  mu_stream_printf (str, "[%s]...", _("OPTION"));
-  if (po->po_prog_args)
-    mu_stream_printf (str, " %s", gettext (po->po_prog_args));
-  mu_stream_printf (str, "\n");
+
+  print_program_usage (po, 0, str);
   
   if (po->po_prog_doc)
     {
@@ -423,34 +412,20 @@ cmpidx_long (const void *a, const void *b)
   return strcmp (ap->opt_long, bp->opt_long);
 }
 
-void
-mu_program_usage (struct mu_parseopt *po, mu_stream_t outstr)
+static void
+option_summary (struct mu_parseopt *po, mu_stream_t str)
 {
-  int rc;
   unsigned i;
   unsigned *idxbuf;
   unsigned nidx;
 
   struct mu_option **optbuf = po->po_optv;
   size_t optcnt = po->po_optc;
-
-  mu_stream_t str;
-
-  init_usage_vars (po);
-
-  rc = mu_wordwrap_stream_create (&str, outstr, 0, rmargin);
-  if (rc)
-    {
-      abort ();//FIXME
-    }  
   
   option_tab = optbuf;
   
   idxbuf = mu_calloc (optcnt, sizeof (idxbuf[0]));
 
-  mu_stream_printf (str, "%s %s ", _("Usage:"),        po->po_prog_name);
-  set_next_margin (str, usage_indent);
-  
   /* Print a list of short options without arguments. */
   for (i = nidx = 0; i < optcnt; i++)
     if (MU_OPTION_IS_VALID_SHORT_OPTION (optbuf[i]) && !optbuf[i]->opt_arg)
@@ -517,12 +492,66 @@ mu_program_usage (struct mu_parseopt *po, mu_stream_t 
outstr)
        }
     }
 
+  free (idxbuf);
+}  
+
+static void
+print_program_usage (struct mu_parseopt *po, int optsum, mu_stream_t str)
+{
+  char const *usage_text;
+  char const **arg_text;
+  size_t i;
+  
+  usage_text = _("Usage:");
+
   if (po->po_flags & MU_PARSEOPT_PROG_ARGS)
-    mu_stream_printf (str, " %s", _(po->po_prog_args));
+    arg_text = po->po_prog_args;
+  else
+    arg_text = NULL;
+  i = 0;
+  
+  do
+    {
+      mu_stream_printf (str, "%s %s ", usage_text, po->po_prog_name);
+      set_next_margin (str, usage_indent);
 
-  mu_stream_destroy (&str);
+      if (optsum)
+       {
+         option_summary (po, str);
+         optsum = 0;
+       }
+      else
+       mu_stream_printf (str, "[%s]...", _("OPTION"));
+
+      if (arg_text)
+       {
+         mu_stream_printf (str, " %s\n", gettext (arg_text[i]));
+         if (i == 0)
+           usage_text = _("or: ");
+         set_margin (str, 2);
+         i++;
+       }
+      else
+       mu_stream_flush (str);
+    }
+  while (arg_text && arg_text[i]);
+}
+
+void
+mu_program_usage (struct mu_parseopt *po, int optsum, mu_stream_t outstr)
+{
+  int rc;
+  mu_stream_t str;
   
-  free (idxbuf);
+  init_usage_vars (po);
+
+  rc = mu_wordwrap_stream_create (&str, outstr, 0, rmargin);
+  if (rc)
+    {
+      abort ();//FIXME
+    }  
+  print_program_usage (po, optsum, str);
+  mu_stream_destroy (&str);
 }
 
 void
diff --git a/libmailutils/opt/opt.c b/libmailutils/opt/opt.c
index bf3d4cd..7dd28a1 100644
--- a/libmailutils/opt/opt.c
+++ b/libmailutils/opt/opt.c
@@ -87,7 +87,7 @@ fn_help (struct mu_parseopt *po, struct mu_option *opt, char 
const *unused)
 static void
 fn_usage (struct mu_parseopt *po, struct mu_option *opt, char const *unused)
 {
-  mu_program_usage (po, mu_strout);
+  mu_program_usage (po, 1, mu_strout);
   exit (EXIT_SUCCESS);
 }
 
diff --git a/libmailutils/stream/wordwrap.c b/libmailutils/stream/wordwrap.c
index b91a36e..789966e 100644
--- a/libmailutils/stream/wordwrap.c
+++ b/libmailutils/stream/wordwrap.c
@@ -178,18 +178,20 @@ set_margin (mu_stream_t stream, unsigned lmargin, int off)
   if (lmargin >= str->right_margin)
     return EINVAL;
 
-  str->left_margin = lmargin;
-  if (lmargin < str->offset ||
-      (str->offset > 0 && str->buffer[str->offset - 1] == '\n'))
+  if (str->offset > str->left_margin
+      && (lmargin < str->offset || str->buffer[str->offset - 1] == '\n'))
     {
+      str->left_margin = lmargin;
       _wordwrap_flush (stream);
     }
-  else if (lmargin > str->offset)
+  else
     {
-      memset (str->buffer + str->offset, ' ', lmargin - str->offset);
+      if (lmargin > str->offset)
+       memset (str->buffer + str->offset, ' ', lmargin - str->offset);
+      str->left_margin = lmargin;
       str->offset = lmargin;
     }
-      
+
   return 0;
 }
 
@@ -236,7 +238,7 @@ _wordwrap_ctl (mu_stream_t stream, int code, int opcode, 
void *arg)
          else
            return set_margin (stream, str->offset, *(int*)arg);
 
-       case MU_IOCTL_WORDWRAP_GET_OFFSET:
+       case MU_IOCTL_WORDWRAP_GET_COLUMN:
          if (!arg)
            return EINVAL;
          *(unsigned*)arg = str->offset;
diff --git a/libmailutils/tests/.gitignore b/libmailutils/tests/.gitignore
index 62b06b4..b8c5ee6 100644
--- a/libmailutils/tests/.gitignore
+++ b/libmailutils/tests/.gitignore
@@ -18,6 +18,7 @@ imapio
 listop
 mailcap
 mimehdr
+modmesg
 modtofsaf
 msgset
 parseopt
@@ -32,4 +33,5 @@ tempfile
 url-comp
 url-parse
 wicket
+wordwrap
 wsp
diff --git a/libmailutils/tests/Makefile.am b/libmailutils/tests/Makefile.am
index bdd4b20..72850f2 100644
--- a/libmailutils/tests/Makefile.am
+++ b/libmailutils/tests/Makefile.am
@@ -144,6 +144,7 @@ TESTSUITE_AT = \
  parseopt_help09.at\
  parseopt_help10.at\
  parseopt_help11.at\
+ parseopt_help12.at\
  prop.at\
  scantime.at\
  strftime.at\
diff --git a/libmailutils/tests/parseopt.c b/libmailutils/tests/parseopt.c
index 214a93d..d335823 100644
--- a/libmailutils/tests/parseopt.c
+++ b/libmailutils/tests/parseopt.c
@@ -77,8 +77,43 @@ struct parseopt_param
   int flag;
   mu_c_type_t type;
   size_t off;
+  void (*setfn) (struct parseopt_param *param, char const *val, void *target);
 };
 
+static void
+set_prog_args (struct parseopt_param *param, char const *str, void *target)
+{
+  char ***args_ptr = target;
+  char **args;
+  char *p;
+  size_t size, i;
+
+  size = 1;
+  for (i = 0; str[i]; i++)
+    if (str[i] == '\n')
+      size++;
+
+  args = mu_calloc (size + 1, sizeof (args[0]));
+
+  i = 0;
+  while (1)
+    {
+      size_t len = strcspn (str, "|");
+      p = mu_alloc (len + 1);
+      memcpy (p, str, len);
+      p[len] = 0;
+      args[i++] = p;
+      str += len;
+      if (str[0])
+       ++str;
+      else
+       break;
+    }
+  args[i] = NULL;
+  
+  *args_ptr = args;
+}
+  
 static struct parseopt_param parseopt_param[] = {
   { "MU_PARSEOPT_ARGV0", MU_PARSEOPT_ARGV0, mu_c_void },
   { "MU_PARSEOPT_IGNORE_ERRORS", MU_PARSEOPT_IGNORE_ERRORS, mu_c_void },
@@ -93,7 +128,8 @@ static struct parseopt_param parseopt_param[] = {
   { "MU_PARSEOPT_PROG_DOC", MU_PARSEOPT_PROG_DOC,
     mu_c_string, mu_offsetof(struct mu_parseopt, po_prog_doc) },
   { "MU_PARSEOPT_PROG_ARGS", MU_PARSEOPT_PROG_ARGS,
-    mu_c_string, mu_offsetof(struct mu_parseopt, po_prog_args) },
+    mu_c_string, mu_offsetof(struct mu_parseopt, po_prog_args),
+    set_prog_args },
   { "MU_PARSEOPT_BUG_ADDRESS", MU_PARSEOPT_BUG_ADDRESS,
     mu_c_string, mu_offsetof(struct mu_parseopt, po_bug_address) },
   { "MU_PARSEOPT_PACKAGE_NAME", MU_PARSEOPT_PACKAGE_NAME,
@@ -129,7 +165,11 @@ main (int argc, char *argv[])
          if (val)
            {
              flags |= param->flag;
-             if (param->type != mu_c_void)
+             if (param->setfn)
+               {
+                 param->setfn (param, val, ((char*)&po + param->off));
+               }
+             else if (param->type != mu_c_void)
                {
                  char *errmsg;
                  int rc = mu_str_to_c (val, param->type,
diff --git a/libmailutils/tests/parseopt_help04.at 
b/libmailutils/tests/parseopt_help04.at
index bcce1e1..473c0fb 100644
--- a/libmailutils/tests/parseopt_help04.at
+++ b/libmailutils/tests/parseopt_help04.at
@@ -15,7 +15,7 @@
 # along with GNU Mailutils.  If not, see <http://www.gnu.org/licenses/>.
 
 AT_SETUP([MU_PARSEOPT_PROG_ARGS])
-AT_KEYWORDS([parseopt parseopt_help parseopt_help04])
+AT_KEYWORDS([parseopt parseopt_help MU_PARSEOPT_PROG_ARGS parseopt_help04])
 AT_CHECK([
 PARSEOPT_DEFAULT
 MU_PARSEOPT_PROG_ARGS="SOME MORE ARGS" parseopt --help
diff --git a/libmailutils/tests/parseopt_help04.at 
b/libmailutils/tests/parseopt_help12.at
similarity index 82%
copy from libmailutils/tests/parseopt_help04.at
copy to libmailutils/tests/parseopt_help12.at
index bcce1e1..674bdf4 100644
--- a/libmailutils/tests/parseopt_help04.at
+++ b/libmailutils/tests/parseopt_help12.at
@@ -14,15 +14,17 @@
 # You should have received a copy of the GNU General Public License
 # along with GNU Mailutils.  If not, see <http://www.gnu.org/licenses/>.
 
-AT_SETUP([MU_PARSEOPT_PROG_ARGS])
-AT_KEYWORDS([parseopt parseopt_help parseopt_help04])
+AT_SETUP([MU_PARSEOPT_PROG_ARGS (alternative)])
+AT_KEYWORDS([parseopt parseopt_help MU_PARSEOPT_PROG_ARGS parseopt_help12])
 AT_CHECK([
 PARSEOPT_DEFAULT
-MU_PARSEOPT_PROG_ARGS="SOME MORE ARGS" parseopt --help
+MU_PARSEOPT_PROG_ARGS="SOME MORE ARGS|ALTERNATIVE ARGS|ANOTHER ARGS" parseopt 
--help
 ],
 [0],
 [Usage: parseopt [[OPTION]]... SOME MORE ARGS
-
+  or:  parseopt [[OPTION]]... ALTERNATIVE ARGS
+  or:  parseopt [[OPTION]]... ANOTHER ARGS
+  
  Group A
   -a, --all                  no arguments to this one
   -f, --file=FILE            set file name
diff --git a/libmailutils/tests/tcli.c b/libmailutils/tests/tcli.c
index 9a640d5..bfa619d 100644
--- a/libmailutils/tests/tcli.c
+++ b/libmailutils/tests/tcli.c
@@ -37,11 +37,14 @@ static struct mu_cfg_param config[] = {
   { NULL }
 };
 
+char const *alt_args[] = { "ALT ARGUMENTS 1", "ALT ARGUMENTS 2", NULL };
+
 struct mu_cli_setup cli = {
   options,
   config,
   "Tests standard command line interface",
-  "ARGUMENTS"
+  "ARGUMENTS",
+  alt_args
 };
 
 static char **
diff --git a/libmailutils/tests/testsuite.at b/libmailutils/tests/testsuite.at
index f9b1bcc..67f5c3b 100644
--- a/libmailutils/tests/testsuite.at
+++ b/libmailutils/tests/testsuite.at
@@ -121,6 +121,7 @@ m4_include([parseopt_help08.at])
 m4_include([parseopt_help09.at])
 m4_include([parseopt_help10.at])
 m4_include([parseopt_help11.at])
+m4_include([parseopt_help12.at])
 
 AT_BANNER([Standard streams])
 m4_include([strin.at])
diff --git a/mimeview/mimeview.c b/mimeview/mimeview.c
index 011c6af..75ea9c7 100644
--- a/mimeview/mimeview.c
+++ b/mimeview/mimeview.c
@@ -145,6 +145,7 @@ struct mu_cli_setup cli = {
   mimeview_cfg_param,
   N_("GNU mimeview -- display files, using mailcap mechanism."),
   N_("FILE [FILE ...]"),
+  NULL,
   N_("Debug flags are:\n\
   g - Mime.types parser traces\n\
   l - Mime.types lexical analyzer traces\n\
diff --git a/sieve/sieve.c b/sieve/sieve.c
index 2627bd1..d3738df 100644
--- a/sieve/sieve.c
+++ b/sieve/sieve.c
@@ -248,6 +248,7 @@ static struct mu_cli_setup cli = {
   sieve_cfg_param,
   N_("GNU sieve -- a mail filtering tool."),
   "SCRIPT",
+  NULL,
   N_("Debug flags:\n\
   g - main parser traces\n\
   T - mailutils traces (same as --debug-level=sieve.trace0-trace1)\n\


hooks/post-receive
-- 
GNU Mailutils

_______________________________________________
Commit-mailutils mailing list
Commit-mailutils@gnu.org
https://lists.gnu.org/mailman/listinfo/commit-mailutils

Reply via email to