lib: split notmuch_database_compact

The "back end" function takes an open notmuch database, which should
know its own path (i.e. the path needs to be cached in the
configuration data).
This commit is contained in:
David Bremner 2020-12-23 23:37:41 -04:00
parent 87e3a82feb
commit 5232462dcf
2 changed files with 45 additions and 9 deletions

View file

@ -705,27 +705,51 @@ notmuch_database_compact (const char *path,
notmuch_compact_status_cb_t status_cb, notmuch_compact_status_cb_t status_cb,
void *closure) void *closure)
{ {
void *local;
char *notmuch_path, *xapian_path, *compact_xapian_path;
notmuch_status_t ret = NOTMUCH_STATUS_SUCCESS; notmuch_status_t ret = NOTMUCH_STATUS_SUCCESS;
notmuch_database_t *notmuch = NULL; notmuch_database_t *notmuch = NULL;
struct stat statbuf;
bool keep_backup;
char *message = NULL; char *message = NULL;
local = talloc_new (NULL);
if (! local)
return NOTMUCH_STATUS_OUT_OF_MEMORY;
ret = notmuch_database_open_verbose (path, ret = notmuch_database_open_verbose (path,
NOTMUCH_DATABASE_MODE_READ_WRITE, NOTMUCH_DATABASE_MODE_READ_WRITE,
&notmuch, &notmuch,
&message); &message);
if (ret) { if (ret) {
if (status_cb) status_cb (message, closure); if (status_cb) status_cb (message, closure);
goto DONE; return ret;
} }
_notmuch_config_cache (notmuch, NOTMUCH_CONFIG_DATABASE_PATH, path);
return notmuch_database_compact_db (notmuch,
backup_path,
status_cb,
closure);
}
notmuch_status_t
notmuch_database_compact_db (notmuch_database_t *notmuch,
const char *backup_path,
notmuch_compact_status_cb_t status_cb,
void *closure) {
void *local;
char *notmuch_path, *xapian_path, *compact_xapian_path;
const char* path;
notmuch_status_t ret = NOTMUCH_STATUS_SUCCESS;
struct stat statbuf;
bool keep_backup;
ret = _notmuch_database_ensure_writable (notmuch);
if (ret)
return ret;
path = notmuch_config_get (notmuch, NOTMUCH_CONFIG_DATABASE_PATH);
if (! path)
return NOTMUCH_STATUS_PATH_ERROR;
local = talloc_new (NULL);
if (! local)
return NOTMUCH_STATUS_OUT_OF_MEMORY;
if (! (notmuch_path = talloc_asprintf (local, "%s/%s", path, ".notmuch"))) { if (! (notmuch_path = talloc_asprintf (local, "%s/%s", path, ".notmuch"))) {
ret = NOTMUCH_STATUS_OUT_OF_MEMORY; ret = NOTMUCH_STATUS_OUT_OF_MEMORY;
goto DONE; goto DONE;

View file

@ -497,6 +497,18 @@ notmuch_database_compact (const char *path,
notmuch_compact_status_cb_t status_cb, notmuch_compact_status_cb_t status_cb,
void *closure); void *closure);
/**
* Like notmuch_database_compact, but take an open database as a
* parameter.
*
* @since libnnotmuch 5.4 (notmuch 0.32)
*/
notmuch_status_t
notmuch_database_compact_db (notmuch_database_t *database,
const char *backup_path,
notmuch_compact_status_cb_t status_cb,
void *closure);
/** /**
* Destroy the notmuch database, closing it if necessary and freeing * Destroy the notmuch database, closing it if necessary and freeing
* all associated resources. * all associated resources.