Index: append.c =================================================================== RCS file: /afs/andrew/system/cvs/src/cyrus/imap/append.c,v retrieving revision 1.109.2.2 diff -u -r1.109.2.2 append.c --- append.c 28 Dec 2009 21:51:28 -0000 1.109.2.2 +++ append.c 4 Jan 2010 15:36:28 -0000 @@ -828,7 +828,8 @@ struct appendstate *as, int nummsg, struct copymsg *copymsg, - int nolink) + int nolink, + struct protstream *pout) { struct mailbox *append_mailbox = &as->m; int msg; @@ -841,6 +842,7 @@ int r, n; int flag, userflag, emptyflag; struct body *body = NULL; + time_t start, now; assert(append_mailbox->format == MAILBOX_FORMAT_NORMAL); @@ -854,7 +856,15 @@ xmalloc(nummsg * sizeof(struct index_record)); /* Copy/link all files and cache info */ - for (msg = 0; msg < nummsg; msg++) { + for (start = time(0), msg = 0; msg < nummsg; msg++) { + /* Send progress update to client every 30 sec */ + if (pout && (now = time(0)) > start + 30) { + start = now; + prot_printf(pout, "* OK copied %d of %d messages\r\n", + msg, nummsg); + prot_flush(pout); + } + zero_index(message_index[msg]); message_index[msg].uid = append_mailbox->last_uid + 1 + as->nummsg; if (append_mailbox->options & OPT_IMAP_CONDSTORE) { Index: append.h =================================================================== RCS file: /afs/andrew/system/cvs/src/cyrus/imap/append.h,v retrieving revision 1.28.2.2 diff -u -r1.28.2.2 append.h --- append.h 28 Dec 2009 21:51:28 -0000 1.28.2.2 +++ append.h 4 Jan 2010 15:36:28 -0000 @@ -139,7 +139,8 @@ extern int append_copy(struct mailbox *mailbox, struct appendstate *append_mailbox, - int nummsg, struct copymsg *copymsg, int nolink); + int nummsg, struct copymsg *copymsg, int nolink, + struct protstream *pout); extern int append_collectnews(struct appendstate *mailbox, const char *group, unsigned long feeduid); Index: index.c =================================================================== RCS file: /afs/andrew/system/cvs/src/cyrus/imap/index.c,v retrieving revision 1.219.2.10 diff -u -r1.219.2.10 index.c --- index.c 28 Dec 2009 21:51:33 -0000 1.219.2.10 +++ index.c 4 Jan 2010 15:36:29 -0000 @@ -1814,7 +1814,7 @@ docopyuid = (append_mailbox.m.myrights & ACL_READ); r = append_copy(mailbox, &append_mailbox, copyargs.nummsg, - copyargs.copymsg, nolink); + copyargs.copymsg, nolink, imapd_out); if (!r) { int sharedseen = (append_mailbox.m.options & OPT_IMAP_SHAREDSEEN);