diff options
author | Carl Worth <cworth@cworth.org> | 2009-12-21 15:09:56 -0800 |
---|---|---|
committer | Carl Worth <cworth@cworth.org> | 2010-01-06 10:32:05 -0800 |
commit | 498edff50373785c9dcc889d0fb6bc9bfc13dfcb (patch) | |
tree | 931b1b52f0b4f7ee2a336ef37a8558869640fcff /lib/database.cc | |
parent | 1376a90db622b71e0997fca52c50ccf34faeed22 (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.cc | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/database.cc b/lib/database.cc index 553c9f8..3ed1977 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, |