aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/database.cc
diff options
context:
space:
mode:
authorGravatar Carl Worth <cworth@cworth.org>2009-12-21 15:09:56 -0800
committerGravatar Carl Worth <cworth@cworth.org>2010-01-06 10:32:05 -0800
commit498edff50373785c9dcc889d0fb6bc9bfc13dfcb (patch)
tree931b1b52f0b4f7ee2a336ef37a8558869640fcff /lib/database.cc
parent1376a90db622b71e0997fca52c50ccf34faeed22 (diff)
database: Abstract _filename_to_direntry from _add_message
The code to map a filename to a direntry is something that we're going to want in a future _remove_message function, so put it in a new function _notmuch_database_filename_to_direntry .
Diffstat (limited to 'lib/database.cc')
-rw-r--r--lib/database.cc32
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/database.cc b/lib/database.cc
index 553c9f82..3ed19772 100644
--- a/lib/database.cc
+++ b/lib/database.cc
@@ -734,6 +734,38 @@ _notmuch_database_get_directory_path (void *ctx,
return talloc_strdup (ctx, document.get_data ().c_str ());
}
+/* Given a legal 'filename' for the database, (either relative to
+ * database path or absolute with initial components identical to
+ * database path), return a new string (with 'ctx' as the talloc
+ * owner) suitable for use as a direntry term value.
+ */
+notmuch_status_t
+_notmuch_database_filename_to_direntry (void *ctx,
+ notmuch_database_t *notmuch,
+ const char *filename,
+ char **direntry)
+{
+ const char *relative, *directory, *basename;
+ Xapian::docid directory_id;
+ notmuch_status_t status;
+
+ relative = _notmuch_database_relative_path (notmuch, filename);
+
+ status = _notmuch_database_split_path (ctx, relative,
+ &directory, &basename);
+ if (status)
+ return status;
+
+ status = _notmuch_database_find_directory_id (notmuch, directory,
+ &directory_id);
+ if (status)
+ return status;
+
+ *direntry = talloc_asprintf (ctx, "%u:%s", directory_id, basename);
+
+ return NOTMUCH_STATUS_SUCCESS;
+}
+
/* Given a legal 'path' for the database, return the relative path.
*
* The return value will be a pointer to the originl path contents,