[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