dovecot-1.1: dbox: When converting maildir-format file to native...
dovecot at dovecot.org
dovecot at dovecot.org
Mon Jun 2 20:01:49 EEST 2008
details: http://hg.dovecot.org/dovecot-1.1/rev/c53e20911f07
changeset: 7592:c53e20911f07
user: Timo Sirainen <tss at iki.fi>
date: Mon Jun 02 20:00:45 2008 +0300
description:
dbox: When converting maildir-format file to native dbox format, be sure to
set received/save dates in metadata. Try to write virtual size as well if it
exists in the maildir filename.
diffstat:
3 files changed, 29 insertions(+), 7 deletions(-)
src/lib-storage/index/dbox/dbox-file-maildir.c | 16 +++++++++++-----
src/lib-storage/index/dbox/dbox-file.c | 2 +-
src/lib-storage/index/dbox/dbox-sync-file.c | 18 +++++++++++++++++-
diffs (100 lines):
diff -r a1a146de3ccc -r c53e20911f07 src/lib-storage/index/dbox/dbox-file-maildir.c
--- a/src/lib-storage/index/dbox/dbox-file-maildir.c Mon Jun 02 19:18:54 2008 +0300
+++ b/src/lib-storage/index/dbox/dbox-file-maildir.c Mon Jun 02 20:00:45 2008 +0300
@@ -40,11 +40,13 @@ const char *dbox_file_maildir_metadata_g
{
struct stat st;
uoff_t size;
+ const char *p, *value = NULL;
switch (key) {
case DBOX_METADATA_FLAGS:
case DBOX_METADATA_KEYWORDS:
- return dbox_file_maildir_get_flags(file, key);
+ value = dbox_file_maildir_get_flags(file, key);
+ break;
case DBOX_METADATA_RECEIVED_TIME:
case DBOX_METADATA_SAVE_TIME:
if (file->fd != -1) {
@@ -61,18 +63,22 @@ const char *dbox_file_maildir_metadata_g
}
}
if (key == DBOX_METADATA_RECEIVED_TIME)
- return dec2str(st.st_mtime);
+ value = dec2str(st.st_mtime);
else
- return dec2str(st.st_ctime);
+ value = dec2str(st.st_ctime);
+ break;
case DBOX_METADATA_VIRTUAL_SIZE:
if (maildir_filename_get_size(file->fname,
MAILDIR_EXTRA_VIRTUAL_SIZE,
&size))
- return dec2str(size);
+ value = dec2str(size);
+ break;
case DBOX_METADATA_EXPUNGED:
case DBOX_METADATA_EXT_REF:
case DBOX_METADATA_SPACE:
break;
}
- return NULL;
+ if (value != NULL)
+ dbox_file_metadata_set(file, key, value);
+ return value;
}
diff -r a1a146de3ccc -r c53e20911f07 src/lib-storage/index/dbox/dbox-file.c
--- a/src/lib-storage/index/dbox/dbox-file.c Mon Jun 02 19:18:54 2008 +0300
+++ b/src/lib-storage/index/dbox/dbox-file.c Mon Jun 02 20:00:45 2008 +0300
@@ -948,7 +948,7 @@ void dbox_file_metadata_set(struct dbox_
const char **changes, *data;
unsigned int i, count;
- data = dbox_file_metadata_get(file, key);
+ data = file->maildir_file ? NULL : dbox_file_metadata_get(file, key);
if (data != NULL && strcmp(data, value) == 0) {
/* value didn't change */
return;
diff -r a1a146de3ccc -r c53e20911f07 src/lib-storage/index/dbox/dbox-sync-file.c
--- a/src/lib-storage/index/dbox/dbox-sync-file.c Mon Jun 02 19:18:54 2008 +0300
+++ b/src/lib-storage/index/dbox/dbox-sync-file.c Mon Jun 02 20:00:45 2008 +0300
@@ -196,15 +196,21 @@ dbox_sync_file_split(struct dbox_sync_co
dbox_sync_file_split(struct dbox_sync_context *ctx, struct dbox_file *in_file,
uoff_t offset, uint32_t seq)
{
+ static enum dbox_metadata_key maildir_metadata_keys[] = {
+ DBOX_METADATA_VIRTUAL_SIZE,
+ DBOX_METADATA_RECEIVED_TIME,
+ DBOX_METADATA_SAVE_TIME,
+ };
struct dbox_index_append_context *append_ctx;
struct dbox_file *out_file;
struct istream *input;
struct ostream *output;
struct dbox_message_header dbox_msg_hdr;
struct dbox_mail_index_record rec;
- const char *out_path;
+ const char *out_path, *value;
uint32_t uid;
uoff_t size, append_offset;
+ unsigned int i;
int ret;
bool expunged;
@@ -232,6 +238,16 @@ dbox_sync_file_split(struct dbox_sync_co
T_BEGIN {
dbox_sync_update_metadata(ctx, out_file, NULL, seq);
} T_END;
+
+ /* set static metadata */
+ for (i = 0; i < N_ELEMENTS(maildir_metadata_keys); i++) {
+ value = dbox_file_metadata_get(in_file,
+ maildir_metadata_keys[i]);
+ if (value != NULL) {
+ dbox_file_metadata_set(out_file,
+ maildir_metadata_keys[i], value);
+ }
+ }
/* copy the message */
out_path = dbox_file_get_path(out_file);
More information about the dovecot-cvs
mailing list