X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=lib%2Fdatabase.cc;h=3ed19772759f2d653fc303c722ec639400a8fa46;hp=553c9f823588d22f7ac96d162d2399fd63febc02;hb=498edff50373785c9dcc889d0fb6bc9bfc13dfcb;hpb=1376a90db622b71e0997fca52c50ccf34faeed22 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,