[Patch v3 05/11] lib: provide config API
Tomi Ollila
tomi.ollila at iki.fi
Sat May 7 10:03:51 PDT 2016
On Sun, May 01 2016, David Bremner <david at tethera.net> wrote:
nits here
> This is a thin wrapper around the Xapian metadata API. The job of this
> layer is to keep the config key value pairs from colliding with other
> metadata by transparently prefixing the keys, along with the usual glue
> to provide a C interface.
>
> The split of _get_config into two functions is to allow returning of the
> return value with different memory ownership semantics.
> ---
> lib/Makefile.local | 1 +
> lib/config.cc | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++
> lib/notmuch.h | 20 +++++++++++
> test/T590-libconfig.sh | 58 ++++++++++++++++++++++++++++++++
> 4 files changed, 169 insertions(+)
> create mode 100644 lib/config.cc
> create mode 100755 test/T590-libconfig.sh
>
> diff --git a/lib/Makefile.local b/lib/Makefile.local
> index 36c3924..76b57cb 100644
> --- a/lib/Makefile.local
> +++ b/lib/Makefile.local
> @@ -49,6 +49,7 @@ libnotmuch_cxx_srcs = \
> $(dir)/index.cc \
> $(dir)/message.cc \
> $(dir)/query.cc \
> + $(dir)/config.cc \
> $(dir)/thread.cc
>
> libnotmuch_modules := $(libnotmuch_c_srcs:.c=.o) $(libnotmuch_cxx_srcs:.cc=.o)
> diff --git a/lib/config.cc b/lib/config.cc
> new file mode 100644
> index 0000000..af00d6f
> --- /dev/null
> +++ b/lib/config.cc
> @@ -0,0 +1,90 @@
> +/* metadata.cc - API for database metadata
config.cc or metadata.cc -- decide ! ;D
> + *
> + * Copyright © 2015 David Bremner
this could be 2016 now (?) (like it matters)
> + *
> + * This program is free software: you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation, either version 3 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program. If not, see http://www.gnu.org/licenses/ .
> + *
> + * Author: David Bremner <david at tethera.net>
> + */
> +
> +#include "notmuch.h"
> +#include "notmuch-private.h"
> +#include "database-private.h"
> +
> +static const std::string CONFIG_PREFIX="C";
spacing. e.g. CONFIG_PREFIX = "C";
> +
> +notmuch_status_t
> +notmuch_database_set_config (notmuch_database_t *notmuch,
> + const char *key,
> + const char *value)
> +{
> + notmuch_status_t status;
> + Xapian::WritableDatabase *db;
> +
> + status = _notmuch_database_ensure_writable (notmuch);
> + if (status)
> + return status;
> +
> + try {
> + db = static_cast <Xapian::WritableDatabase *> (notmuch->xapian_db);
> + db->set_metadata (CONFIG_PREFIX+key, value);
> + } catch (const Xapian::Error &error) {
> + status = NOTMUCH_STATUS_XAPIAN_EXCEPTION;
> + notmuch->exception_reported = TRUE;
> + if (! notmuch->exception_reported) {
> + _notmuch_database_log (notmuch, "Error: A Xapian exception occurred setting metadata: %s\n",
The above goes up to column 104, but probably nothing is to be done there.
> + error.get_msg().c_str());
> + }
> + }
> + return NOTMUCH_STATUS_SUCCESS;
> +}
> +
> +static notmuch_status_t
> +_metadata_value (notmuch_database_t *notmuch,
> + const char *key,
> + std::string &value)
> +{
> + notmuch_status_t status = NOTMUCH_STATUS_SUCCESS;
> +
> + try {
> + value = notmuch->xapian_db->get_metadata (CONFIG_PREFIX+key);
spacing: e.g. (CONFIG_PREFIX + key);
> + } catch (const Xapian::Error &error) {
> + status = NOTMUCH_STATUS_XAPIAN_EXCEPTION;
> + notmuch->exception_reported = TRUE;
> + if (! notmuch->exception_reported) {
> + _notmuch_database_log (notmuch, "Error: A Xapian exception occurred getting metadata: %s\n",
> + error.get_msg().c_str());
> + }
> + }
> + return status;
> +}
> +
> +notmuch_status_t
> +notmuch_database_get_config (notmuch_database_t *notmuch,
> + const char *key,
> + char **value) {
In functions IIRC we always have opening brace in its own line.
> + std::string strval;
> + notmuch_status_t status;
> +
> + if (!value)
> + return NOTMUCH_STATUS_NULL_POINTER;
> +
> + status = _metadata_value (notmuch, key, strval);
> + if (status)
> + return status;
> +
> + *value = strdup (strval.c_str ());
> +
> + return NOTMUCH_STATUS_SUCCESS;
> +}
Tomi
More information about the notmuch
mailing list