]> git.cworth.org Git - notmuch/commitdiff
Merge branch 'release'
authorDavid Bremner <david@tethera.net>
Sat, 4 Dec 2021 13:27:30 +0000 (09:27 -0400)
committerDavid Bremner <david@tethera.net>
Sat, 4 Dec 2021 13:27:30 +0000 (09:27 -0400)
1  2 
doc/man1/notmuch-config.rst
lib/database-private.h
lib/open.cc
test/T055-path-config.sh

index 6f12c773aa160d6734e30697eb966965a431c40c,36e57ea61ccf64f54c16fe76db788743520bd237..ed188a25c61829dbce315959e664375e8947478b
@@@ -55,14 -55,14 +55,14 @@@ The available configuration items are d
  paths are presumed relative to `$HOME` for items in section
  **database**.
  
 -**database.path**
 +database.path
      Notmuch will store its database here, (in
      sub-directory named ``.notmuch`` if **database.mail\_root**
      is unset).
  
      Default: see :ref:`database`
  
 -**database.mail_root**
 +database.mail_root
      The top-level directory where your mail currently exists and to
      where mail will be delivered in the future. Files should be
      individual email messages.
@@@ -72,7 -72,7 +72,7 @@@
      Default: For compatibility with older configurations, the value of
      database.path is used if **database.mail\_root** is unset.
  
 -**database.backup_dir**
 +database.backup_dir
      Directory to store tag dumps when upgrading database.
  
      History: this configuration value was introduced in notmuch 0.32.
@@@ -80,7 -80,7 +80,7 @@@
      Default: A sibling directory of the Xapian database called
      `backups`.
  
 -**database.hook_dir**
 +database.hook_dir
      Directory containing hooks run by notmuch commands. See
      :any:`notmuch-hooks(5)`.
  
@@@ -88,7 -88,7 +88,7 @@@
  
      Default: See HOOKS, below.
  
 -**database.autocommit**
 +database.autocommit
  
      How often to commit transactions to disk. `0` means wait until
      command completes, otherwise an integer `n` specifies to commit to
  
      History: this configuration value was introduced in notmuch 0.33.
  
 -**user.name**
 +user.name
      Your full name.
  
      Default: ``$NAME`` variable if set, otherwise read from
      ``/etc/passwd``.
  
 -**user.primary\_email**
 +user.primary\_email
      Your primary email address.
  
      Default: ``$EMAIL`` variable if set, otherwise constructed from
      the username and hostname of the current machine.
  
 -**user.other\_email**
 +user.other\_email
      A list of other email addresses at which you receive email.
  
      Default: not set.
  
 -**new.tags**
 +new.tags
      A list of tags that will be added to all messages incorporated by
      **notmuch new**.
  
      Default: ``unread;inbox``.
  
 -**new.ignore**
 +new.ignore
      A list to specify files and directories that will not be searched
      for messages by :any:`notmuch-new(1)`. Each entry in the list is either:
  
  
      Default: empty list.
  
 -**search.exclude\_tags**
 +search.exclude\_tags
      A list of tags that will be excluded from search results by
      default. Using an excluded tag in a query will override that
      exclusion.
      Default: empty list. Note that :any:`notmuch-setup(1)` puts
      ``deleted;spam`` here when creating new configuration file.
  
 -**maildir.synchronize\_flags**
 +maildir.synchronize\_flags
      If true, then the following maildir flags (in message filenames)
      will be synchronized with the corresponding notmuch tags:
  
  
      Default: ``true``.
  
 -**index.decrypt**
 +index.decrypt
      Policy for decrypting encrypted messages during indexing.  Must be
      one of: ``false``, ``auto``, ``nostash``, or ``true``.
  
  
      Default: ``auto``.
  
 -**index.header.<prefix>**
 +index.header.<prefix>
      Define the query prefix <prefix>, based on a mail header. For
      example ``index.header.List=List-Id`` will add a probabilistic
      prefix ``List:`` that searches the ``List-Id`` field.  User
      supported. See :any:`notmuch-search-terms(7)` for a list of existing
      prefixes, and an explanation of probabilistic prefixes.
  
 -**built_with.<name>**
 +built_with.<name>
      Compile time feature <name>. Current possibilities include
      "retry_lock" (configure option, included by default).
      (since notmuch 0.30, "compact" and "field_processor" are
      always included.)
  
 -**query.<name>**
 +query.<name>
      Expansion for named query called <name>. See
      :any:`notmuch-search-terms(7)` for more information about named
      queries.
  
 -**squery.<name>**
 +squery.<name>
      Expansion for named query called <name>, using s-expression syntax. See
      :any:`notmuch-sexp-queries(7)` for more information about s-expression
      queries.
  FILES
  =====
  
+ .. _config_search:
  CONFIGURATION
  -------------
  
diff --combined lib/database-private.h
index 7a0450515f4466cf26d877178412f2628a4c2d14,8dd7728113335bd7c051ebf536bc8575d596b2a3..8133e36415d85a58b381ef999791c2961caa54df
@@@ -160,7 -160,7 +160,7 @@@ operator&= (_notmuch_features &a, _notm
  
  /*
   * Configuration options for xapian database fields */
 -typedef enum notmuch_field_flags {
 +typedef enum {
      NOTMUCH_FIELD_NO_FLAGS    = 0,
      NOTMUCH_FIELD_EXTERNAL    = 1 << 0,
      NOTMUCH_FIELD_PROBABILISTIC = 1 << 1,
@@@ -190,6 -190,39 +190,39 @@@ operator& (notmuch_field_flag_t a, notm
                                    Xapian::QueryParser::FLAG_WILDCARD | \
                                    Xapian::QueryParser::FLAG_PURE_NOT)
  
+ /*
+  * Which parameters were explicit when the database was opened */
+ typedef enum {
+     NOTMUCH_PARAM_NONE                = 0,
+     NOTMUCH_PARAM_DATABASE    = 1 << 0,
+     NOTMUCH_PARAM_CONFIG      = 1 << 1,
+     NOTMUCH_PARAM_PROFILE     = 1 << 2,
+ } notmuch_open_param_t;
+ /*
+  * define bitwise operators to hide casts */
+ inline notmuch_open_param_t
+ operator| (notmuch_open_param_t a, notmuch_open_param_t b)
+ {
+     return static_cast<notmuch_open_param_t>(
+       static_cast<unsigned>(a) | static_cast<unsigned>(b));
+ }
+ inline notmuch_open_param_t&
+ operator|= (notmuch_open_param_t &a, notmuch_open_param_t b)
+ {
+     a = a | b;
+     return a;
+ }
+ inline notmuch_open_param_t
+ operator& (notmuch_open_param_t a, notmuch_open_param_t b)
+ {
+     return static_cast<notmuch_open_param_t>(
+       static_cast<unsigned>(a) & static_cast<unsigned>(b));
+ }
  struct _notmuch_database {
      bool exception_reported;
  
  
      /* Cached and possibly overridden configuration */
      notmuch_string_map_t *config;
+     /* Track what parameters were specified when opening */
+     notmuch_open_param_t params;
  };
  
  /* Prior to database version 3, features were implied by the database
diff --combined lib/open.cc
index 46a0154534886b77e446604219023e5de5c790d4,a942383b84b8cda800ae8006034555e267d11119..c2cb281865e7beccbe9a3046c8f911855820a436
@@@ -19,8 -19,9 +19,8 @@@ notmuch_database_open (const char *path
      char *status_string = NULL;
      notmuch_status_t status;
  
 -    status = notmuch_database_open_verbose (path, mode, database,
 -                                          &status_string);
 -
 +    status = notmuch_database_open_with_config (path, mode, "", NULL,
 +                                              database, &status_string);
      if (status_string) {
        fputs (status_string, stderr);
        free (status_string);
@@@ -246,7 -247,7 +246,7 @@@ _choose_database_path (void *ctx
  }
  
  static notmuch_database_t *
- _alloc_notmuch ()
+ _alloc_notmuch (const char *database_path, const char *config_path, const char *profile)
  {
      notmuch_database_t *notmuch;
  
      notmuch->transaction_count = 0;
      notmuch->transaction_threshold = 0;
      notmuch->view = 1;
+     notmuch->params = NOTMUCH_PARAM_NONE;
+     if (database_path)
+       notmuch->params |= NOTMUCH_PARAM_DATABASE;
+     if (config_path)
+       notmuch->params |= NOTMUCH_PARAM_CONFIG;
+     if (profile)
+       notmuch->params |= NOTMUCH_PARAM_PROFILE;
      return notmuch;
  }
  
@@@ -509,7 -519,7 +518,7 @@@ notmuch_database_open_with_config (cons
  
      _notmuch_init ();
  
-     notmuch = _alloc_notmuch ();
+     notmuch = _alloc_notmuch (database_path, config_path, profile);
      if (! notmuch) {
        status = NOTMUCH_STATUS_OUT_OF_MEMORY;
        goto DONE;
@@@ -609,7 -619,7 +618,7 @@@ notmuch_database_create_with_config (co
  
      _notmuch_init ();
  
-     notmuch = _alloc_notmuch ();
+     notmuch = _alloc_notmuch (database_path, config_path, profile);
      if (! notmuch) {
        status = NOTMUCH_STATUS_OUT_OF_MEMORY;
        goto DONE;
@@@ -811,7 -821,7 +820,7 @@@ notmuch_database_load_config (const cha
  
      _notmuch_init ();
  
-     notmuch = _alloc_notmuch ();
+     notmuch = _alloc_notmuch (database_path, config_path, profile);
      if (! notmuch) {
        status = NOTMUCH_STATUS_OUT_OF_MEMORY;
        goto DONE;
diff --combined test/T055-path-config.sh
index 38f72e5e3bee85cad71ee414518459cd84a5154c,6d9fb40291bf2e1692ade64599f748d1bd8fe5fd..f0ce55dac93a494d51ab3eab9cb1c9bbcdb9c9a7
@@@ -277,7 -277,7 +277,7 @@@ EO
  built_with.compact=something
  built_with.field_processor=something
  built_with.retry_lock=something
 -built_with.sexpr_query=something
 +built_with.sexp_queries=something
  database.autocommit=8000
  database.backup_dir
  database.hook_dir
@@@ -306,7 -306,23 +306,23 @@@ EO
           output2=$(notmuch --config='' config get ${key})
           notmuch config set ${key}
           test_expect_equal "${output}+${output2}" "${value}+"
-          ;;
+          ;&
+        split)
+          test_begin_subtest "'to' header does not crash (python-cffi) ($config)"
+          echo 'notmuch@notmuchmail.org' > EXPECTED
+          test_python <<EOF
+ from notmuch2 import Database
+ db=Database(config=Database.CONFIG.SEARCH)
+ m=db.find('20091117232137.GA7669@griffis1.net')
+ to=m.header('To')
+ print(to)
+ EOF
+          test_expect_equal_file EXPECTED OUTPUT
+          ;& # fall through
+    esac
+    case $config in
+        split|XDG*)
     esac
     restore_config
     rm -rf home/.local