Diff
Not logged in

Differences From:

File src/manifest.c part of check-in [573a464cb7] - Complete rework of the xfer mechanism. Compiles but not yet working. by drh on 2007-08-10 00:08:25. [view]

To:

File src/manifest.c part of check-in [18b1f6788d] - Make sure the same manifest never gets inserted into the metadata tables twice - resulting in duplicate timeline entries. by drh on 2007-08-28 03:04:09. Also file src/manifest.c part of check-in [15652ff081] - Merged drh's fixes new features (xfer, timeline handling, javascript based timeline highlighting) into my branch. by aku on 2007-08-29 02:55:33. [view]

@@ -302,27 +302,29 @@
   if( manifest_parse(&m, pContent)==0 ){
     return 0;
   }
   db_begin_transaction();
-  for(i=0; i<m.nParent; i++){
-    int pid = uuid_to_rid(m.azParent[i], 1);
-    db_multi_exec("INSERT OR IGNORE INTO plink(pid, cid, isprim, mtime)"
-                  "VALUES(%d, %d, %d, %.17g)", pid, rid, i==0, m.rDate);
-    if( i==0 ){
-      add_mlink(pid, 0, rid, &m);
+  if( !db_exists("SELECT 1 FROM mlink WHERE mid=%d", rid) ){
+    for(i=0; i<m.nParent; i++){
+      int pid = uuid_to_rid(m.azParent[i], 1);
+      db_multi_exec("INSERT OR IGNORE INTO plink(pid, cid, isprim, mtime)"
+                    "VALUES(%d, %d, %d, %.17g)", pid, rid, i==0, m.rDate);
+      if( i==0 ){
+        add_mlink(pid, 0, rid, &m);
+      }
+    }
+    db_prepare(&q, "SELECT cid FROM plink WHERE pid=%d AND isprim", rid);
+    while( db_step(&q)==SQLITE_ROW ){
+      int cid = db_column_int(&q, 0);
+      add_mlink(rid, &m, cid, 0);
     }
-  }
-  db_prepare(&q, "SELECT cid FROM plink WHERE pid=%d AND isprim", rid);
-  while( db_step(&q)==SQLITE_ROW ){
-    int cid = db_column_int(&q, 0);
-    add_mlink(rid, &m, cid, 0);
-  }
-  db_finalize(&q);
-  db_multi_exec(
-    "INSERT INTO event(type,mtime,objid,user,comment)"
-    "VALUES('ci',%.17g,%d,%Q,%Q)",
-    m.rDate, rid, m.zUser, m.zComment
-  );
+    db_finalize(&q);
+    db_multi_exec(
+      "INSERT INTO event(type,mtime,objid,user,comment)"
+      "VALUES('ci',%.17g,%d,%Q,%Q)",
+      m.rDate, rid, m.zUser, m.zComment
+    );
+  }
   db_end_transaction(0);
   manifest_clear(&m);
   return 1;
 }