mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-22 02:48:08 +01:00
lib/open: track which parameters are passed
This will be used to fine tune the loading of configuration for certain special configuration items (initially just "database.path").
This commit is contained in:
parent
378415a557
commit
d467444085
2 changed files with 49 additions and 4 deletions
|
@ -190,6 +190,39 @@ operator& (notmuch_field_flag_t a, notmuch_field_flag_t b)
|
|||
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;
|
||||
|
||||
|
@ -249,6 +282,9 @@ struct _notmuch_database {
|
|||
|
||||
/* 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
|
||||
|
|
17
lib/open.cc
17
lib/open.cc
|
@ -247,7 +247,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;
|
||||
|
||||
|
@ -263,6 +263,15 @@ _alloc_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;
|
||||
}
|
||||
|
||||
|
@ -510,7 +519,7 @@ notmuch_database_open_with_config (const char *database_path,
|
|||
|
||||
_notmuch_init ();
|
||||
|
||||
notmuch = _alloc_notmuch ();
|
||||
notmuch = _alloc_notmuch (database_path, config_path, profile);
|
||||
if (! notmuch) {
|
||||
status = NOTMUCH_STATUS_OUT_OF_MEMORY;
|
||||
goto DONE;
|
||||
|
@ -610,7 +619,7 @@ notmuch_database_create_with_config (const char *database_path,
|
|||
|
||||
_notmuch_init ();
|
||||
|
||||
notmuch = _alloc_notmuch ();
|
||||
notmuch = _alloc_notmuch (database_path, config_path, profile);
|
||||
if (! notmuch) {
|
||||
status = NOTMUCH_STATUS_OUT_OF_MEMORY;
|
||||
goto DONE;
|
||||
|
@ -812,7 +821,7 @@ notmuch_database_load_config (const char *database_path,
|
|||
|
||||
_notmuch_init ();
|
||||
|
||||
notmuch = _alloc_notmuch ();
|
||||
notmuch = _alloc_notmuch (database_path, config_path, profile);
|
||||
if (! notmuch) {
|
||||
status = NOTMUCH_STATUS_OUT_OF_MEMORY;
|
||||
goto DONE;
|
||||
|
|
Loading…
Reference in a new issue