aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Austin Clements <amdragon@mit.edu>2014-10-06 17:17:07 -0600
committerGravatar David Bremner <david@tethera.net>2014-10-11 07:09:54 +0200
commit54ec8a0fd87ae7a32c8208be67a345c0eeea7f69 (patch)
treedd3ad3869bff03bab4dae8e58ea8e7f7bfa25fe1
parent1c3b8fba226b4626212a37b503d9ebae3314edf4 (diff)
lib: Move message ID compression to _notmuch_message_create_for_message_id
Previously, this was performed by notmuch_database_add_message. This happens to be the only caller currently (which is why this was safe), but we're about to introduce more callers, and it makes more sense to put responsibility for ID compression in the lower-level function rather than requiring each caller to handle it.
-rw-r--r--lib/database.cc16
-rw-r--r--lib/message.cc4
-rw-r--r--lib/notmuch-private.h3
3 files changed, 11 insertions, 12 deletions
diff --git a/lib/database.cc b/lib/database.cc
index a47a71d5..4e687060 100644
--- a/lib/database.cc
+++ b/lib/database.cc
@@ -390,8 +390,8 @@ find_document_for_doc_id (notmuch_database_t *notmuch, unsigned doc_id)
*
* notmuch-sha1-<sha1_sum_of_message_id>
*/
-static char *
-_message_id_compressed (void *ctx, const char *message_id)
+char *
+_notmuch_message_id_compressed (void *ctx, const char *message_id)
{
char *sha1, *compressed;
@@ -415,7 +415,7 @@ notmuch_database_find_message (notmuch_database_t *notmuch,
return NOTMUCH_STATUS_NULL_POINTER;
if (strlen (message_id) > NOTMUCH_MESSAGE_ID_MAX)
- message_id = _message_id_compressed (notmuch, message_id);
+ message_id = _notmuch_message_id_compressed (notmuch, message_id);
try {
status = _notmuch_database_find_unique_doc_id (notmuch, "id",
@@ -1728,7 +1728,7 @@ static char *
_get_metadata_thread_id_key (void *ctx, const char *message_id)
{
if (strlen (message_id) > NOTMUCH_MESSAGE_ID_MAX)
- message_id = _message_id_compressed (ctx, message_id);
+ message_id = _notmuch_message_id_compressed (ctx, message_id);
return talloc_asprintf (ctx, NOTMUCH_METADATA_THREAD_ID_PREFIX "%s",
message_id);
@@ -2100,14 +2100,6 @@ notmuch_database_add_message (notmuch_database_t *notmuch,
* better than no message-id at all. */
if (message_id == NULL)
message_id = talloc_strdup (message_file, header);
-
- /* If a message ID is too long, substitute its sha1 instead. */
- if (message_id && strlen (message_id) > NOTMUCH_MESSAGE_ID_MAX) {
- char *compressed = _message_id_compressed (message_file,
- message_id);
- talloc_free (message_id);
- message_id = compressed;
- }
}
if (message_id == NULL ) {
diff --git a/lib/message.cc b/lib/message.cc
index 7e825480..bbfc2500 100644
--- a/lib/message.cc
+++ b/lib/message.cc
@@ -226,6 +226,10 @@ _notmuch_message_create_for_message_id (notmuch_database_t *notmuch,
else if (*status_ret)
return NULL;
+ /* If the message ID is too long, substitute its sha1 instead. */
+ if (strlen (message_id) > NOTMUCH_MESSAGE_ID_MAX)
+ message_id = _notmuch_message_id_compressed (message, message_id);
+
term = talloc_asprintf (NULL, "%s%s",
_find_prefix ("id"), message_id);
if (term == NULL) {
diff --git a/lib/notmuch-private.h b/lib/notmuch-private.h
index 17f30613..36cc12b0 100644
--- a/lib/notmuch-private.h
+++ b/lib/notmuch-private.h
@@ -174,6 +174,9 @@ typedef struct _notmuch_doc_id_set notmuch_doc_id_set_t;
const char *
_find_prefix (const char *name);
+char *
+_notmuch_message_id_compressed (void *ctx, const char *message_id);
+
notmuch_status_t
_notmuch_database_ensure_writable (notmuch_database_t *notmuch);