+static bool changes_db(const struct op *op)
+{
+ return gives(op, NULL) != NULL;
+}
+
+static void depend_on_previous(struct op *op[],
+ char *filename[],
+ unsigned int num,
+ struct key_user user[],
+ unsigned int i,
+ int prev)
+{
+ bool deps[num];
+ int j;
+
+ if (i == 0)
+ return;
+
+ if (prev == i - 1) {
+ /* Just depend on previous. */
+ add_dependency(NULL, op, filename,
+ user[i].file, user[i].op_num,
+ user[prev].file, user[prev].op_num);
+ return;
+ }
+
+ /* We have to wait for the readers. Find last one in *each* file. */
+ memset(deps, 0, sizeof(deps));
+ deps[user[i].file] = true;
+ for (j = i - 1; j > prev; j--) {
+ if (!deps[user[j].file]) {
+ add_dependency(NULL, op, filename,
+ user[i].file, user[i].op_num,
+ user[j].file, user[j].op_num);
+ deps[user[j].file] = true;
+ }
+ }
+}
+