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.0-3-ga04c6fe


From: Sergey Poznyakoff
Subject: [SCM] GNU Mailutils branch, master, updated. release-3.0-3-ga04c6fe
Date: Mon, 14 Nov 2016 13:54:38 +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=a04c6feb5007aeeb133b15558f13733743dee3e8

The branch, master has been updated
       via  a04c6feb5007aeeb133b15558f13733743dee3e8 (commit)
      from  aba91e51a9d91c0abef4db78ac4a52c543432bee (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 a04c6feb5007aeeb133b15558f13733743dee3e8
Author: Sergey Poznyakoff <address@hidden>
Date:   Mon Nov 14 09:34:57 2016 +0200

    Fix expansion of #, &, %, etc. in mail copy and file commands.
    
    This was accidentally broken by commit eea2c4aa.
    
    * include/mailutils/mailbox.h (mu_mailbox_expand_name): New proto.
    * libmailutils/mailbox/mbx_default.c (mu_mailbox_expand_name): New function.
    (mu_mailbox_create_default): Use it.
    (mu_set_folder_directory): Accept NULL as argument.
    (mu_folder_directory): Reset default value after assiging it.  This way
    the folder directory still defaults to the same value as earlier, but
    can be reset to NULL, if so desired.
    (plus_expand): Return a copy of the input string if folder is NULL.
    
    * mail/copy.c (append_to_mailbox): Use mu_mailbox_create, as the mailbox
    name has already been expanded.
    * mail/file.c (mail_expand_name): Use mu_mailbox_expand_name.
    (mail_file): Use mu_mailbox_create, as the mailbox
    name has already been expanded.
    * mail/mailvar.c (mailvar_cmd): New enum.
    (mailvar_symbol) <handler>: Change signature and return type.
    (mailvar_set): Rewrite. Take care not to modify the variable
    if the handler (if any) returns non-null or if the memory can't
    be allocated.
    (set_folder): Handler for the "folder" variable.
    
    * mail/tests/copy01.at: New testcase.
    * mail/tests/copy02.at: New testcase.
    * mail/tests/copy03.at: New testcase.
    * mail/tests/copy04.at: New testcase.
    * mail/tests/Makefile.am: Add new tests.
    * mail/tests/testsuite.at (MUT_MAIL_CMD): Set MAILRC to /dev/null.
    Add new tests.

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

Summary of changes:
 include/mailutils/mailbox.h         |    2 +
 libmailutils/mailbox/mbx_default.c  |  201 ++++++++++++++++++++---------------
 mail/copy.c                         |    4 +-
 mail/file.c                         |   47 ++++----
 mail/from.c                         |    4 +-
 mail/mail.c                         |    1 +
 mail/mail.h                         |    2 +-
 mail/mailvar.c                      |  183 +++++++++++++++++++++++--------
 mail/tests/Makefile.am              |    4 +
 mail/tests/cols00.at                |    1 -
 mail/tests/cols01.at                |    1 -
 mail/tests/copy00.at                |    1 -
 mail/tests/{cols01.at => copy01.at} |   26 ++---
 mail/tests/{cols00.at => copy02.at} |   28 ++---
 mail/tests/{cols00.at => copy03.at} |   29 ++---
 mail/tests/{cols00.at => copy04.at} |   35 +++---
 mail/tests/nohome.at                |    1 -
 mail/tests/testsuite.at             |    8 +-
 18 files changed, 362 insertions(+), 216 deletions(-)
 copy mail/tests/{cols01.at => copy01.at} (64%)
 copy mail/tests/{cols00.at => copy02.at} (61%)
 copy mail/tests/{cols00.at => copy03.at} (62%)
 copy mail/tests/{cols00.at => copy04.at} (56%)

diff --git a/include/mailutils/mailbox.h b/include/mailutils/mailbox.h
index 5cfb89d..9b9e43f 100644
--- a/include/mailutils/mailbox.h
+++ b/include/mailutils/mailbox.h
@@ -36,6 +36,8 @@ const char *mu_mailbox_url (void);
 const char *mu_folder_directory (void);
 int mu_construct_user_mailbox_url (char **pout, const char *name);
 
+int mu_mailbox_expand_name (const char *name, char **expansion);
+  
 /* Constructor/destructor and possible types.  */
 extern int  mu_mailbox_create          (mu_mailbox_t *, const char *);
 extern int  mu_mailbox_create_from_url (mu_mailbox_t *, mu_url_t);
diff --git a/libmailutils/mailbox/mbx_default.c 
b/libmailutils/mailbox/mbx_default.c
index 3b9c3e3..ea7e807 100644
--- a/libmailutils/mailbox/mbx_default.c
+++ b/libmailutils/mailbox/mbx_default.c
@@ -117,9 +117,17 @@ mu_set_mailbox_pattern (const char *pat)
 int
 mu_set_folder_directory (const char *p)
 {
-  char *fdir = strdup (p);
-  if (!fdir)
-    return ENOMEM;
+  char *fdir;
+
+  if (p)
+    {
+      fdir = strdup (p);
+      if (!fdir)
+       return ENOMEM;
+    }
+  else
+    fdir = NULL;
+  
   if (_mu_folder_dir != _default_folder_dir)
     free (_mu_folder_dir);
   _mu_folder_dir = fdir;
@@ -127,7 +135,7 @@ mu_set_folder_directory (const char *p)
 }
 
 const char *
-mu_mailbox_url ()
+mu_mailbox_url (void)
 {
   if (_mu_mailbox_pattern)
     return _mu_mailbox_pattern;
@@ -135,10 +143,13 @@ mu_mailbox_url ()
 }
 
 const char *
-mu_folder_directory ()
+mu_folder_directory (void)
 {
-  if (!_mu_folder_dir)
-    _mu_folder_dir = _default_folder_dir;
+  if (!_mu_folder_dir && _default_folder_dir)
+    {
+      mu_set_folder_directory (_default_folder_dir);
+      _default_folder_dir = NULL;
+    }
   return _mu_folder_dir;
 }
 
@@ -286,30 +297,40 @@ user_mailbox_name (const char *user, char **mailbox_name)
 static int
 plus_expand (const char *file, char **buf)
 {
-  char *home;
+  int rc = 0;
   const char *folder_dir = mu_folder_directory ();
 
-  home = get_homedir (NULL);
-  if (!home)
-    return ENOENT;
-  
-  file++;
-  
-  if (folder_dir[0] == '/' || mu_is_proto (folder_dir))
+  if (!folder_dir)
     {
-      *buf = mu_make_file_name (folder_dir, file);
-      if (!*buf)
-       return errno;
+      char *p = strdup (file);
+      if (!p)
+       return ENOMEM;
+      *buf = p;
     }
   else
     {
-      int rc = mu_asprintf (buf, "%s/%s/%s", home, folder_dir, file);
-      if (rc)
-       return rc;
+      file++;
+  
+      if (folder_dir[0] == '/' || mu_is_proto (folder_dir))
+       {
+         char *p = mu_make_file_name (folder_dir, file);
+         if (!p)
+           return errno;
+         *buf = p;
+       }
+      else
+       {
+         char *home = get_homedir (NULL);
+      
+         if (!home)
+           return ENOENT;
+      
+         rc = mu_asprintf (buf, "%s/%s/%s", home, folder_dir, file);
+         free (home);
+       }
     }
   
-  free (home);
-  return 0;
+  return rc;
 }
 
 static int
@@ -374,21 +395,75 @@ attach_auth_ticket (mu_mailbox_t mbox)
     }
 }
 
-/* We are trying to be smart about the location of the mail.
-   mu_mailbox_create() is not doing this.
-   %           --> system mailbox for the real uid
-   %user       --> system mailbox for the given user
-   ~/file      --> /home/user/file
-   ~user/file  --> /home/user/file
-   +file       --> /home/user/Mail/file
-   =file       --> /home/user/Mail/file
-*/
+/* Expand mailbox name according to the following rules:
+
+   NAME            Expands to
+   -------------+------------------------------------
+   %            -> system mailbox for the real uid
+   %user        -> system mailbox for the given user
+   ~/file       -> /home/user/file
+   ~user/file   -> /home/user/file
+   +file        -> /home/user/Mail/file
+   =file        -> /home/user/Mail/file
+ */
 int
-mu_mailbox_create_default (mu_mailbox_t *pmbox, const char *mail)
+mu_mailbox_expand_name (const char *name, char **expansion)
 {
-  char *mbox = NULL;
-  char *tmp_mbox = NULL;
+  int status = 0;
   char *p;
+  char *mbox = NULL;
+  
+  if (!name)
+    return EINVAL;
+  if (!expansion)
+    return MU_ERR_OUT_PTR_NULL;
+
+  p = mu_tilde_expansion (name, MU_HIERARCHY_DELIMITER, NULL);
+  if (!p)
+    return errno;
+  switch (p[0])
+    {
+    case '%':
+      status = percent_expand (p, &mbox);
+      break;
+      
+    case '+':
+    case '=':
+      status = plus_expand (p, &mbox);
+      break;
+  
+    case '/':
+      mbox = p;
+      p = NULL;
+      break;
+      
+    default:
+      if (!mu_is_proto (p))
+       {
+         char *dir = mu_getcwd();
+         mbox = mu_make_file_name (dir, p);
+         if (!mbox)
+           status = errno;
+         free (dir);  
+       }
+      else
+       {
+         mbox = p;
+         p = NULL;
+       }
+    }
+  free (p);
+  if (status == 0)
+    *expansion = mbox;
+  return status;
+}
+
+/* Expand mailbox name MAIL and create a mailbox structure for it. */
+int
+mu_mailbox_create_default (mu_mailbox_t *pmbox, const char *mail)
+{
+  char *mboxname = NULL;
+  char *name_ptr = NULL;
   int status = 0;
 
   /* Sanity.  */
@@ -412,63 +487,19 @@ mu_mailbox_create_default (mu_mailbox_t *pmbox, const 
char *mail)
 
       if (!mail)
        {
-         if ((status = user_mailbox_name (NULL, &tmp_mbox)))
+         if ((status = user_mailbox_name (NULL, &name_ptr)))
            return status;
-         mail = tmp_mbox;
-       }
-    }
-  
-  p = mu_tilde_expansion (mail, MU_HIERARCHY_DELIMITER, NULL);
-  if (tmp_mbox)
-    free (tmp_mbox);
-  tmp_mbox = p;
-  mail = tmp_mbox;
-  if (!mail)
-    return ENOMEM;
-
-  switch (mail[0])
-    {
-    case '%':
-      status = percent_expand (mail, &mbox);
-      break;
-      
-    case '+':
-    case '=':
-      status = plus_expand (mail, &mbox);
-      break;
-
-    case '/':
-      mbox = strdup (mail);
-      if (!mbox)
-       status = errno;
-      break;
-      
-    default:
-      if (!mu_is_proto (mail))
-       {
-         p = mu_getcwd();
-         mbox = mu_make_file_name (p, mail);
-         if (!mbox)
-           status = errno;
-         free (p);  
-       }
-      else
-       {
-         mbox = strdup (mail);
-         if (!mbox)
-           status = errno;
+         mail = name_ptr;
        }
-      break;
     }
 
-  if (tmp_mbox)
-    free (tmp_mbox);
-
+  status = mu_mailbox_expand_name (mail, &mboxname);
+  free (name_ptr);
   if (status)
     return status;
   
-  status = mu_mailbox_create (pmbox, mbox);
-  free (mbox);
+  status = mu_mailbox_create (pmbox, mboxname);
+  free (mboxname);
   if (status == 0)
     attach_auth_ticket (*pmbox);
       
diff --git a/mail/copy.c b/mail/copy.c
index 5f6599c..9a8b547 100644
--- a/mail/copy.c
+++ b/mail/copy.c
@@ -40,7 +40,7 @@ append_to_mailbox (char const *filename, msgset_t *msglist, 
int mark,
   size_t size;
   mu_message_t msg;
   
-  if ((status = mu_mailbox_create_default (&mbx, filename)) != 0)
+  if ((status = mu_mailbox_create (&mbx, filename)) != 0)
     {
       mu_error (_("Cannot create mailbox %s: %s"), filename, 
                    mu_strerror (status));
@@ -96,7 +96,7 @@ append_to_file (char const *filename, msgset_t *msglist, int 
mark,
   size_t lines;
   mu_message_t msg;
   mu_locker_t locker;
-  
+
   status = mu_file_stream_create (&ostr, filename,
                                  MU_STREAM_CREAT|MU_STREAM_APPEND);
   if (status)
diff --git a/mail/file.c b/mail/file.c
index 94bde91..b8cf81d 100644
--- a/mail/file.c
+++ b/mail/file.c
@@ -23,44 +23,43 @@ static char *prev_name;
  * #       the previous file
  * &       the current mbox
  * +file    the file named in the folder directory (set folder=foo)
- * Note 1) The followig notations are left intact, since they are
- * handled by mu_mailbox_create_default:
  * %       system mailbox
- * %user    system mailbox of the user 
- * Note 2) Allocates memory
+ * %user    system mailbox of the user
  */
 char *
 mail_expand_name (const char *name)
 {
-  switch (name[0])
+  int status = 0;
+  char *exp = NULL;
+    
+  if (strcmp (name, "#") == 0)
     {
-    case '#':
       if (!prev_name)
        {
          mu_error (_("No previous file"));
          return NULL;
        }
       else
-       name = mu_strdup (prev_name);
-      break;
-         
-    case '&':
+       return mu_strdup (prev_name);
+    }
+
+  if (strcmp (name, "&") == 0)
+    {
       name = getenv ("MBOX");
       if (!name)
-       mu_error (_("MBOX environment variable not set"));
-      else
-       name = mu_strdup (name);
-      break;
-         
-    case '+':
-      name = util_folder_path (name);
-      break;
-
-    default:
-      name = mu_strdup (name);
-      break;
+       {
+         mu_error (_("MBOX environment variable not set"));
+         return NULL;
+       }
+      /* else fall through */
     }
-  return (char*) name;
+
+  status = mu_mailbox_expand_name (name, &exp);
+
+  if (status)
+    mu_error (_("Failed to expand %s: %s"), name, mu_strerror (status));
+
+  return (char*) exp;
 }
 
 /*
@@ -87,7 +86,7 @@ mail_file (int argc, char **argv)
       if (!name)
        return 1;
       
-      if ((status = mu_mailbox_create_default (&newbox, name)) != 0 
+      if ((status = mu_mailbox_create (&newbox, name)) != 0 
          || (status = mu_mailbox_open (newbox, MU_STREAM_RDWR)) != 0)
        {
          mu_mailbox_destroy (&newbox);
diff --git a/mail/from.c b/mail/from.c
index 99cd87e..66c802f 100644
--- a/mail/from.c
+++ b/mail/from.c
@@ -538,10 +538,10 @@ compile_headline (const char *str)
 static struct header_segm *mail_header_line;
 
 void
-mail_compile_headline (struct mailvar_variable *var)
+mail_compile_headline (char const *str)
 {
   free_headline (mail_header_line);
-  mail_header_line = compile_headline (var->value.string);
+  mail_header_line = compile_headline (str);
 }
 
 
diff --git a/mail/mail.c b/mail/mail.c
index 6a80425..b0adcd8 100644
--- a/mail/mail.c
+++ b/mail/mail.c
@@ -330,6 +330,7 @@ static char *default_setup[] = {
   "set noinplacealiases",
   "set fromfield",
   "set headline=\"%>%a%4m %18f %16d %3L/%-5o %s\"",
+  "unset folder",
   
   /* Start in mail reading mode */
   "setq mode=read",
diff --git a/mail/mail.h b/mail/mail.h
index 0c4465f..f966ca5 100644
--- a/mail/mail.h
+++ b/mail/mail.h
@@ -193,7 +193,7 @@ extern int mail_folders (int argc, char **argv);
 extern int mail_followup (int argc, char **argv);
 extern int mail_from (int argc, char **argv);
 extern int mail_from0 (msgset_t *mspec, mu_message_t msg, void *data);
-extern void mail_compile_headline (struct mailvar_variable *var);
+extern void mail_compile_headline (char const *str);
 
 extern int mail_headers (int argc, char **argv);
 extern int mail_hold (int argc, char **argv);
diff --git a/mail/mailvar.c b/mail/mailvar.c
index a839a73..803f32c 100644
--- a/mail/mailvar.c
+++ b/mail/mailvar.c
@@ -22,20 +22,34 @@
 
 #define MAILVAR_TYPEMASK(type) (1<<(8+(type)))
 
+enum mailvar_cmd
+  {
+    mailvar_cmd_set,
+    mailvar_cmd_unset
+  };
+
 struct mailvar_symbol
 {
   struct mailvar_variable var;
   int flags;
   char *descr;
-  void (*handler) (struct mailvar_variable *);
+  int (*handler) (enum mailvar_cmd, struct mailvar_variable *);
 };
 
 mu_list_t mailvar_list = NULL;
 
-static void set_decode_fallback (struct mailvar_variable *);
-static void set_replyregex (struct mailvar_variable *);
-static void set_screen (struct mailvar_variable *);
-static void set_debug (struct mailvar_variable *);
+static int set_decode_fallback (enum mailvar_cmd cmd,
+                               struct mailvar_variable *);
+static int set_replyregex (enum mailvar_cmd cmd,
+                          struct mailvar_variable *);
+static int set_screen (enum mailvar_cmd cmd,
+                      struct mailvar_variable *);
+static int set_debug (enum mailvar_cmd cmd,
+                     struct mailvar_variable *);
+static int set_folder (enum mailvar_cmd cmd,
+                      struct mailvar_variable *);
+static int set_headline (enum mailvar_cmd,
+                        struct mailvar_variable *);
   
 struct mailvar_symbol mailvar_tab[] =
   {
@@ -119,7 +133,8 @@ struct mailvar_symbol mailvar_tab[] =
       N_("swap the meaning of reply and Reply commands") },
     { { "folder", },
       MAILVAR_TYPEMASK (mailvar_type_string), 
-      N_("folder directory name") },
+      N_("folder directory name"),
+      set_folder },
     { { "fromfield", },
       MAILVAR_TYPEMASK (mailvar_type_boolean),
       N_("get sender address from the `From:' header, instead of "
@@ -133,7 +148,7 @@ struct mailvar_symbol mailvar_tab[] =
     { { "headline", },
       MAILVAR_TYPEMASK (mailvar_type_string),
       N_("format string to use for the header summary"),
-      mail_compile_headline },
+      set_headline },
     { { "hold", },
       MAILVAR_TYPEMASK (mailvar_type_boolean),
       N_("hold the read or saved messages in the system mailbox") },
@@ -471,9 +486,10 @@ int
 mailvar_set (const char *variable, void *value, enum mailvar_type type,
             int flags)
 {
-  struct mailvar_variable *var;
+  struct mailvar_variable *var, newvar;
   const struct mailvar_symbol *sym = find_mailvar_symbol (variable);
-  int unset = flags & MOPTF_UNSET;
+  enum mailvar_cmd cmd =
+    (flags & MOPTF_UNSET) ? mailvar_cmd_unset : mailvar_cmd_set;
   
   if (!(flags & MOPTF_QUIET)
       && mailvar_get (NULL, "variable-strict", mailvar_type_boolean, 0) == 0)
@@ -488,95 +504,174 @@ mailvar_set (const char *variable, void *value, enum 
mailvar_type type,
          return 1;
        }
       else if (!(sym->flags & MAILVAR_TYPEMASK (type))
-              && !unset)
+              && cmd == mailvar_cmd_set)
        {
          mu_error (_("Wrong type for %s"), variable);
          return 1;
        }
     }
 
-  var = mailvar_find_variable (variable, !unset);
+  var = mailvar_find_variable (variable, cmd == mailvar_cmd_set);
 
   if (!var || (var->set && !(flags & MOPTF_OVERWRITE)))
     return 0;
 
-  mailvar_variable_reset (var);
-  if (!unset)
+  newvar.name = var->name;
+  newvar.type = var->type;
+  newvar.set = 0;
+  memset (&newvar.value, 0, sizeof (newvar.value));
+  
+  switch (cmd)
     {
-      var->type = type;
+    case mailvar_cmd_set:
       if (value)
        {
-         var->set = 1;
          switch (type)
            {
            case mailvar_type_number:
-             var->value.number = *(int*)value;
+             newvar.value.number = *(int*)value;
              break;
          
            case mailvar_type_string:
-             var->value.string = strdup (value);
+             {
+               char *p = strdup (value);
+               if (!p)
+                 {
+                   mu_error ("%s", _("Not enough memory"));
+                   return 1;
+                 }
+               newvar.value.string = p;
+             }
              break;
          
            case mailvar_type_boolean:
-             var->value.bool = *(int*)value;
+             newvar.value.bool = *(int*)value;
              break;
                  
            default:
              abort();
            }
+         newvar.set = 1;
+       }
+      newvar.type = type;
+      if (sym
+         && sym->handler
+         && sym->flags & MAILVAR_TYPEMASK (type)
+         && sym->handler (cmd, &newvar))
+       {
+         mailvar_variable_reset (&newvar);
+         return 1;
        }
+      mailvar_variable_reset (var);
+      *var = newvar;
+      break;
+
+    case mailvar_cmd_unset:
+      if (sym
+         && sym->handler
+         && sym->handler (cmd, var))
+       return 1;
+      mailvar_variable_reset (var);
     }
-    
-  /* Special handling for some variables */
-  if (sym && sym->flags & MAILVAR_TYPEMASK (type) && sym->handler)
-    sym->handler (var);
+
+  return 0;
+}
+
+static int
+set_folder (enum mailvar_cmd cmd, struct mailvar_variable *var)
+{
+  int rc = mu_set_folder_directory (var->value.string);
+  if (rc)
+    mu_diag_funcall (MU_DIAG_ERROR, "mu_set_folder_directory",
+                    var->value.string, rc);
+  return rc;
+}
+                  
+
+static int
+set_headline (enum mailvar_cmd cmd, struct mailvar_variable *var)
+{
+  if (cmd == mailvar_cmd_unset)
+    return 1;
   
+  mail_compile_headline (var->value.string);
   return 0;
 }
 
-
-static void
-set_decode_fallback (struct mailvar_variable *var)
+static int
+set_decode_fallback (enum mailvar_cmd cmd, struct mailvar_variable *var)
 {
-  if (mu_set_default_fallback (var->value.string))
+  char *value;
+  int rc;
+  
+  switch (cmd)
+    {
+    case mailvar_cmd_set:
+      value = var->value.string;
+      break;
+
+    case mailvar_cmd_unset:
+      value = "none";
+    }
+  
+  rc = mu_set_default_fallback (value);
+  if (rc)
     mu_error (_("Incorrect value for decode-fallback"));
+  return rc;
 }
 
-static void
-set_replyregex (struct mailvar_variable *var)
+static int
+set_replyregex (enum mailvar_cmd cmd, struct mailvar_variable *var)
 {
   int rc;
   char *err;
-  
-  if ((rc = mu_unre_set_regex (var->value.string, 0, &err)))
+
+  switch (cmd)
     {
-      if (err)
-       mu_error ("%s: %s", mu_strerror (rc), err);
-      else
-       mu_error ("%s", mu_strerror (rc));
+    case mailvar_cmd_set:
+      if ((rc = mu_unre_set_regex (var->value.string, 0, &err)))
+       {
+         if (err)
+           mu_error ("%s: %s", mu_strerror (rc), err);
+         else
+           mu_error ("%s", mu_strerror (rc));
+         return 1;
+       }
+      break;
+
+    case mailvar_cmd_unset:
+      return 1;
     }
+
+  return 0;
 }
 
-static void
-set_screen (struct mailvar_variable *var)
+static int
+set_screen (enum mailvar_cmd cmd, struct mailvar_variable *var)
 {
-  page_invalidate (1);
+  if (cmd == mailvar_cmd_set)
+    page_invalidate (1);
+  return 0;
 }
 
 #define DEFAULT_DEBUG_LEVEL  MU_DEBUG_LEVEL_UPTO (MU_DEBUG_TRACE7)
 
-static void
-set_debug (struct mailvar_variable *var)
+static int
+set_debug (enum mailvar_cmd cmd, struct mailvar_variable *var)
 {
   mu_debug_clear_all ();
 
-  if (var->type == mailvar_type_boolean)
+  if (cmd == mailvar_cmd_set)
     {
-      if (var->set)
-        mu_debug_set_category_level (MU_DEBCAT_ALL, DEFAULT_DEBUG_LEVEL);
-      return;
+      if (var->type == mailvar_type_boolean)
+       {
+         if (var->set)
+           mu_debug_set_category_level (MU_DEBCAT_ALL, DEFAULT_DEBUG_LEVEL);
+         return 0;
+       }
+      mu_debug_parse_spec (var->value.string);
     }
-  mu_debug_parse_spec (var->value.string); 
+  return 0;
 }
 
 
diff --git a/mail/tests/Makefile.am b/mail/tests/Makefile.am
index 3d89b9b..4a9d54a 100644
--- a/mail/tests/Makefile.am
+++ b/mail/tests/Makefile.am
@@ -42,6 +42,10 @@ TESTSUITE_AT =\
  cols00.at\
  cols01.at\
  copy00.at\
+ copy01.at\
+ copy02.at\
+ copy03.at\
+ copy04.at\
  nohome.at\
  testsuite.at\
  version.at
diff --git a/mail/tests/cols00.at b/mail/tests/cols00.at
index b6ab9cf..295bdbd 100644
--- a/mail/tests/cols00.at
+++ b/mail/tests/cols00.at
@@ -24,7 +24,6 @@ AT_KEYWORDS([columns cols00])
 
 AT_CHECK([
 MUT_MBCOPY($abs_top_srcdir/testsuite/spool/mbox)
-unset MAILRC
 COLUMNS=26 MUT_MAIL_CMD -nH -E 'set columns=26' -f ./mbox
 COLUMNS=31 MUT_MAIL_CMD -nH -f ./mbox
 ],
diff --git a/mail/tests/cols01.at b/mail/tests/cols01.at
index d4d5625..2edc2f7 100644
--- a/mail/tests/cols01.at
+++ b/mail/tests/cols01.at
@@ -24,7 +24,6 @@ AT_KEYWORDS([columns cols01])
 
 AT_CHECK([
 MUT_MBCOPY($abs_top_srcdir/testsuite/spool/mbox)
-unset MAILRC
 MUT_MAIL_CMD -nH -E 'set columns=26' -f ./mbox
 MUT_MAIL_CMD -nH -E 'set columns=31' -f ./mbox
 ],
diff --git a/mail/tests/copy00.at b/mail/tests/copy00.at
index e3fc9b9..d054853 100644
--- a/mail/tests/copy00.at
+++ b/mail/tests/copy00.at
@@ -25,7 +25,6 @@ AT_KEYWORDS([copy copy00])
 AT_CHECK([
 test -f /dev/stdout || AT_SKIP_TEST
 MUT_MBCOPY($abs_top_srcdir/testsuite/spool/mbox)
-unset MAILRC
 echo 'copy 1 /dev/stdout' | MUT_MAIL_CMD -N -E 'set readonly' -f ./mbox | sed 
's/  *$//;/^Held 1 message/d';
 ],
 [0],
diff --git a/mail/tests/cols01.at b/mail/tests/copy01.at
similarity index 64%
copy from mail/tests/cols01.at
copy to mail/tests/copy01.at
index d4d5625..858ba22 100644
--- a/mail/tests/cols01.at
+++ b/mail/tests/copy01.at
@@ -14,25 +14,25 @@
 # 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([setting columns])
-AT_KEYWORDS([columns cols01])
+AT_SETUP([copy: % expansion])
+AT_KEYWORDS([copy copy01])
 
-# Description: Mailutils 2.99.98 ignored columns setting
-# Reported-By: Dan Jacobson <address@hidden>
-# References: <address@hidden>,
-#   http://lists.gnu.org/archive/html/bug-mailutils/2015-04/msg00000.html
+# Description: Check whether special mailbox notations are correctly expanded
+# in copy command.  This was broken by commit eea2c4aa.
+#
+# This testcase checks for expansion of "%".
 
 AT_CHECK([
 MUT_MBCOPY($abs_top_srcdir/testsuite/spool/mbox)
-unset MAILRC
-MUT_MAIL_CMD -nH -E 'set columns=26' -f ./mbox
-MUT_MAIL_CMD -nH -E 'set columns=31' -f ./mbox
+mbox=`pwd`/user
+echo 'copy 1 %' | dnl
+ MUT_MAIL_CMD -N -f ./mbox --set '|mailbox|mailbox-pattern'=$mbox | dnl
+ sed 's/  *$//;/^Held 1 message/d;s|'$mbox'|MBOX|'
+cmp user $abs_top_srcdir/testsuite/spool/mbox
 ],
 [0],
-[>N   1 Sergey Poznyakoff
->N   1 Sergey Poznyakoff  Tue
+["MBOX"  14/438
+
 ])
 
 AT_CLEANUP
-
-
diff --git a/mail/tests/cols00.at b/mail/tests/copy02.at
similarity index 61%
copy from mail/tests/cols00.at
copy to mail/tests/copy02.at
index b6ab9cf..a0c5175 100644
--- a/mail/tests/cols00.at
+++ b/mail/tests/copy02.at
@@ -14,25 +14,27 @@
 # 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([setting columns from environment])
-AT_KEYWORDS([columns cols00])
+AT_SETUP([copy: + expansion])
+AT_KEYWORDS([copy copy02])
 
-# Description: Check if COLUMNS setting is honored.
-# Reported-By: Dan Jacobson <address@hidden>
-# References: <address@hidden>,
-#    http://lists.gnu.org/archive/html/bug-mailutils/2015-04/msg00002.html
+# Description: Check whether special mailbox notations are correctly expanded
+# in copy command.  This was broken by commit eea2c4aa.
+#
+# This testcase checks for expansion of "+".
 
 AT_CHECK([
 MUT_MBCOPY($abs_top_srcdir/testsuite/spool/mbox)
-unset MAILRC
-COLUMNS=26 MUT_MAIL_CMD -nH -E 'set columns=26' -f ./mbox
-COLUMNS=31 MUT_MAIL_CMD -nH -f ./mbox
+mkdir folder
+folder=`pwd`/folder
+echo 'copy 1 +saved' | dnl
+ MUT_MAIL_CMD -N -E "set folder=\"$folder\"" -f ./mbox | dnl
+ sed 's/  *$//;/^Held 1 message/d;s|'$folder/saved'|MBOX|'
+test -f $folder/saved || exit 1 
+cmp $folder/saved $abs_top_srcdir/testsuite/spool/mbox
 ],
 [0],
-[>N   1 Sergey Poznyakoff
->N   1 Sergey Poznyakoff  Tue
+["MBOX"  14/438
+
 ])
 
 AT_CLEANUP
-
-
diff --git a/mail/tests/cols00.at b/mail/tests/copy03.at
similarity index 62%
copy from mail/tests/cols00.at
copy to mail/tests/copy03.at
index b6ab9cf..f498ddb 100644
--- a/mail/tests/cols00.at
+++ b/mail/tests/copy03.at
@@ -14,25 +14,28 @@
 # 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([setting columns from environment])
-AT_KEYWORDS([columns cols00])
+AT_SETUP([copy: & expansion])
+AT_KEYWORDS([copy copy03])
 
-# Description: Check if COLUMNS setting is honored.
-# Reported-By: Dan Jacobson <address@hidden>
-# References: <address@hidden>,
-#    http://lists.gnu.org/archive/html/bug-mailutils/2015-04/msg00002.html
+# Description: Check whether special mailbox notations are correctly expanded
+# in copy command.  This was broken by commit eea2c4aa.
+#
+# This testcase checks for expansion of "&".
 
 AT_CHECK([
 MUT_MBCOPY($abs_top_srcdir/testsuite/spool/mbox)
-unset MAILRC
-COLUMNS=26 MUT_MAIL_CMD -nH -E 'set columns=26' -f ./mbox
-COLUMNS=31 MUT_MAIL_CMD -nH -f ./mbox
+mkdir folder
+MBOX=`pwd`/MBOX
+export MBOX
+echo 'copy 1 &' | dnl
+ MUT_MAIL_CMD -N -E "set folder=\"$folder\"" -f ./mbox  | dnl
+ sed 's/  *$//;/^Held 1 message/d;s|'$MBOX'|MBOX|'
+test -f $MBOX || exit 1 
+cmp $MBOX $abs_top_srcdir/testsuite/spool/mbox
 ],
 [0],
-[>N   1 Sergey Poznyakoff
->N   1 Sergey Poznyakoff  Tue
+["MBOX"  14/438
+
 ])
 
 AT_CLEANUP
-
-
diff --git a/mail/tests/cols00.at b/mail/tests/copy04.at
similarity index 56%
copy from mail/tests/cols00.at
copy to mail/tests/copy04.at
index b6ab9cf..5867474 100644
--- a/mail/tests/cols00.at
+++ b/mail/tests/copy04.at
@@ -14,25 +14,34 @@
 # 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([setting columns from environment])
-AT_KEYWORDS([columns cols00])
+AT_SETUP([copy: # expansion])
+AT_KEYWORDS([copy copy04])
 
-# Description: Check if COLUMNS setting is honored.
-# Reported-By: Dan Jacobson <address@hidden>
-# References: <address@hidden>,
-#    http://lists.gnu.org/archive/html/bug-mailutils/2015-04/msg00002.html
+# Description: Check whether special mailbox notations are correctly expanded
+# in copy command.  This was broken by commit eea2c4aa.
+#
+# This testcase checks for expansion of "#".
 
 AT_CHECK([
 MUT_MBCOPY($abs_top_srcdir/testsuite/spool/mbox)
-unset MAILRC
-COLUMNS=26 MUT_MAIL_CMD -nH -E 'set columns=26' -f ./mbox
-COLUMNS=31 MUT_MAIL_CMD -nH -f ./mbox
+folder=`pwd`
+MBOX=$folder/mbox
+NEW=$folder/new
+>$NEW
+AT_DATA([script],[file +new
+file +mbox
+copy 1 #
+])
+MUT_MAIL_CMD -N -E "set folder=\"$folder\"" -f $MBOX < script  | dnl
+ sed 's/  *$//;s|'$NEW'|NEW|;s|'$MBOX'|MBOX|'
+sed '/^X-IMAPbase:/d;/^Status:/d;/^X-UID/d' $NEW | diff - 
$abs_top_srcdir/testsuite/spool/mbox 
 ],
 [0],
-[>N   1 Sergey Poznyakoff
->N   1 Sergey Poznyakoff  Tue
+[Held 1 message in MBOX
+Held 0 messages in NEW
+"NEW"  17/482
+
+Held 1 message in MBOX
 ])
 
 AT_CLEANUP
-
-
diff --git a/mail/tests/nohome.at b/mail/tests/nohome.at
index b4b03f7..7189373 100644
--- a/mail/tests/nohome.at
+++ b/mail/tests/nohome.at
@@ -24,7 +24,6 @@ AT_KEYWORDS([nohome])
 
 AT_CHECK([
 MUT_MBCOPY($abs_top_srcdir/testsuite/spool/mbox)
-unset MAILRC
 unset HOME
 MAIL=./mbox MUT_MAIL_CMD -nH
 ],
diff --git a/mail/tests/testsuite.at b/mail/tests/testsuite.at
index d3b2905..12ae2b1 100644
--- a/mail/tests/testsuite.at
+++ b/mail/tests/testsuite.at
@@ -16,7 +16,7 @@
 
 m4_include([testsuite.inc])
 
-m4_define([MUT_MAIL_CMD],[mail MUT_DEFAULT_OPTIONS])
+m4_define([MUT_MAIL_CMD],[MAILRC=/dev/null mail MUT_DEFAULT_OPTIONS])
 
 AT_INIT
 AT_TESTED([mail])
@@ -25,4 +25,8 @@ m4_include([version.at])
 m4_include([nohome.at])
 m4_include([cols00.at])
 m4_include([cols01.at])
-m4_include([copy00.at])
\ No newline at end of file
+m4_include([copy00.at])
+m4_include([copy01.at])
+m4_include([copy02.at])
+m4_include([copy03.at])
+m4_include([copy04.at])


hooks/post-receive
-- 
GNU Mailutils



reply via email to

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