-void task_submit_part(byte *user, byte *task, byte *part, byte *ext, uns version UNUSED, struct fastbuf *fb)
+static void
+task_record_history(byte *user, byte *task, byte *part, byte *ext, uns version, byte *submitted_name)
+{
+ if (!history_format)
+ return;
+
+ time_t now = time(NULL);
+ struct tm *tm = localtime(&now);
+ byte prefix[256];
+ if (strftime(prefix, sizeof(prefix), history_format, tm) <= 0)
+ {
+ msg(L_ERROR, "Error formatting history prefix: too long");
+ return;
+ }
+
+ byte *name = stk_printf("%s%s:%s:%s:v%d.%s", prefix, user, task, (strcmp(task, part) ? part : (byte*)""), version, ext);
+ struct fastbuf *orig = bopen(submitted_name, O_RDONLY, 4096);
+ struct fastbuf *hist = bopen(name, O_WRONLY | O_CREAT | O_EXCL, 4096);
+ bbcopy_slow(orig, hist, ~0U);
+ bclose(hist);
+ bclose(orig);
+}
+
+void
+task_submit_part(byte *user, byte *task, byte *part, byte *ext, uns version, struct fastbuf *fb)