Diff
Not logged in

Differences From:

File src/manifest.c part of check-in [2ad378d065] - Branching now working correctly, including adding of bgcolor tag and correct R line by jnc on 2007-09-23 15:02:58. [view]

To:

File src/manifest.c part of check-in [913608a5a6] - Fix some problems with tag propagation. More problems remain. by drh on 2007-09-25 03:14:30. [view]

@@ -516,8 +516,9 @@
 int manifest_crosslink(int rid, Blob *pContent){
   int i;
   Manifest m;
   Stmt q;
+  int parentid = 0;
 
   if( manifest_parse(&m, pContent)==0 ){
     return 0;
   }
@@ -529,8 +530,9 @@
         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);
+          parentid = pid;
         }
       }
       db_prepare(&q, "SELECT cid FROM plink WHERE pid=%d AND isprim", rid);
       while( db_step(&q)==SQLITE_ROW ){
@@ -565,10 +567,17 @@
         case '-':  type = 0; break;
       }
       tag_insert(&m.aTag[i].zName[1], type, m.aTag[i].zValue,
                  rid, m.rDate, tid);
+      if( tid!=rid ){
+        tag_propagate_all(tid);
+      }
+    }
+    if( parentid ){
+      tag_propagate_all(parentid);
     }
+    tag_propagate_all(rid);
   }
   db_end_transaction(0);
   manifest_clear(&m);
   return 1;
 }