Fossil SCM

Correct tag propagationl. Now works even when rebuilding in a randomized order.

drh 2007-09-25 08:38 trunk
Commit ce7900a0b6bd56ac8a01a8bf94da255705f2b353
2 files changed +12 -7 +16
+12 -7
--- src/manifest.c
+++ src/manifest.c
@@ -539,13 +539,22 @@
539539
int cid = db_column_int(&q, 0);
540540
add_mlink(rid, &m, cid, 0);
541541
}
542542
db_finalize(&q);
543543
db_multi_exec(
544
- "INSERT INTO event(type,mtime,objid,user,comment)"
545
- "VALUES('ci',%.17g,%d,%Q,%Q)",
546
- m.rDate, rid, m.zUser, m.zComment
544
+ "INSERT INTO event(type,mtime,objid,user,comment,"
545
+ " bgcolor,brbgcolor,euser,ecomment)"
546
+ "VALUES('ci',%.17g,%d,%Q,%Q,"
547
+ " (SELECT value FROM tagxref WHERE tagid=%d AND rid=%d AND tagtype=1),"
548
+ "(SELECT value FROM tagxref WHERE tagid=%d AND rid=%d AND tagtype!=1),"
549
+ " (SELECT value FROM tagxref WHERE tagid=%d AND rid=%d),"
550
+ " (SELECT value FROM tagxref WHERE tagid=%d AND rid=%d));",
551
+ m.rDate, rid, m.zUser, m.zComment,
552
+ TAG_BGCOLOR, rid,
553
+ TAG_BGCOLOR, rid,
554
+ TAG_USER, rid,
555
+ TAG_COMMENT, rid
547556
);
548557
}
549558
}
550559
if( m.type==CFTYPE_CLUSTER ){
551560
for(i=0; i<m.nCChild; i++){
@@ -566,18 +575,14 @@
566575
case '*': type = 2; break;
567576
case '-': type = 0; break;
568577
}
569578
tag_insert(&m.aTag[i].zName[1], type, m.aTag[i].zValue,
570579
rid, m.rDate, tid);
571
- if( tid!=rid ){
572
- tag_propagate_all(tid);
573
- }
574580
}
575581
if( parentid ){
576582
tag_propagate_all(parentid);
577583
}
578
- tag_propagate_all(rid);
579584
}
580585
db_end_transaction(0);
581586
manifest_clear(&m);
582587
return 1;
583588
}
584589
--- src/manifest.c
+++ src/manifest.c
@@ -539,13 +539,22 @@
539 int cid = db_column_int(&q, 0);
540 add_mlink(rid, &m, cid, 0);
541 }
542 db_finalize(&q);
543 db_multi_exec(
544 "INSERT INTO event(type,mtime,objid,user,comment)"
545 "VALUES('ci',%.17g,%d,%Q,%Q)",
546 m.rDate, rid, m.zUser, m.zComment
 
 
 
 
 
 
 
 
 
547 );
548 }
549 }
550 if( m.type==CFTYPE_CLUSTER ){
551 for(i=0; i<m.nCChild; i++){
@@ -566,18 +575,14 @@
566 case '*': type = 2; break;
567 case '-': type = 0; break;
568 }
569 tag_insert(&m.aTag[i].zName[1], type, m.aTag[i].zValue,
570 rid, m.rDate, tid);
571 if( tid!=rid ){
572 tag_propagate_all(tid);
573 }
574 }
575 if( parentid ){
576 tag_propagate_all(parentid);
577 }
578 tag_propagate_all(rid);
579 }
580 db_end_transaction(0);
581 manifest_clear(&m);
582 return 1;
583 }
584
--- src/manifest.c
+++ src/manifest.c
@@ -539,13 +539,22 @@
539 int cid = db_column_int(&q, 0);
540 add_mlink(rid, &m, cid, 0);
541 }
542 db_finalize(&q);
543 db_multi_exec(
544 "INSERT INTO event(type,mtime,objid,user,comment,"
545 " bgcolor,brbgcolor,euser,ecomment)"
546 "VALUES('ci',%.17g,%d,%Q,%Q,"
547 " (SELECT value FROM tagxref WHERE tagid=%d AND rid=%d AND tagtype=1),"
548 "(SELECT value FROM tagxref WHERE tagid=%d AND rid=%d AND tagtype!=1),"
549 " (SELECT value FROM tagxref WHERE tagid=%d AND rid=%d),"
550 " (SELECT value FROM tagxref WHERE tagid=%d AND rid=%d));",
551 m.rDate, rid, m.zUser, m.zComment,
552 TAG_BGCOLOR, rid,
553 TAG_BGCOLOR, rid,
554 TAG_USER, rid,
555 TAG_COMMENT, rid
556 );
557 }
558 }
559 if( m.type==CFTYPE_CLUSTER ){
560 for(i=0; i<m.nCChild; i++){
@@ -566,18 +575,14 @@
575 case '*': type = 2; break;
576 case '-': type = 0; break;
577 }
578 tag_insert(&m.aTag[i].zName[1], type, m.aTag[i].zValue,
579 rid, m.rDate, tid);
 
 
 
580 }
581 if( parentid ){
582 tag_propagate_all(parentid);
583 }
 
584 }
585 db_end_transaction(0);
586 manifest_clear(&m);
587 return 1;
588 }
589
+16
--- src/tag.c
+++ src/tag.c
@@ -151,12 +151,28 @@
151151
int rid /* Artifact to which the tag is to attached */
152152
){
153153
Stmt s;
154154
const char *zCol;
155155
int tagid = tag_findid(zTag, 1);
156
+ int rc;
157
+
156158
if( mtime<=0.0 ){
157159
mtime = db_double(0.0, "SELECT julianday('now')");
160
+ }
161
+ db_prepare(&s,
162
+ "SELECT 1 FROM tagxref"
163
+ " WHERE tagid=%d"
164
+ " AND rid=%d"
165
+ " AND mtime>=:mtime",
166
+ tagid, rid
167
+ );
168
+ db_bind_double(&s, ":mtime", mtime);
169
+ rc = db_step(&s);
170
+ db_finalize(&s);
171
+ if( rc==SQLITE_ROW ){
172
+ /* Another entry this is more recent already exists. Do nothing */
173
+ return;
158174
}
159175
db_prepare(&s,
160176
"REPLACE INTO tagxref(tagid,tagtype,srcId,value,mtime,rid)"
161177
" VALUES(%d,%d,%d,%Q,:mtime,%d)",
162178
tagid, tagtype, srcId, zValue, rid
163179
--- src/tag.c
+++ src/tag.c
@@ -151,12 +151,28 @@
151 int rid /* Artifact to which the tag is to attached */
152 ){
153 Stmt s;
154 const char *zCol;
155 int tagid = tag_findid(zTag, 1);
 
 
156 if( mtime<=0.0 ){
157 mtime = db_double(0.0, "SELECT julianday('now')");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
158 }
159 db_prepare(&s,
160 "REPLACE INTO tagxref(tagid,tagtype,srcId,value,mtime,rid)"
161 " VALUES(%d,%d,%d,%Q,:mtime,%d)",
162 tagid, tagtype, srcId, zValue, rid
163
--- src/tag.c
+++ src/tag.c
@@ -151,12 +151,28 @@
151 int rid /* Artifact to which the tag is to attached */
152 ){
153 Stmt s;
154 const char *zCol;
155 int tagid = tag_findid(zTag, 1);
156 int rc;
157
158 if( mtime<=0.0 ){
159 mtime = db_double(0.0, "SELECT julianday('now')");
160 }
161 db_prepare(&s,
162 "SELECT 1 FROM tagxref"
163 " WHERE tagid=%d"
164 " AND rid=%d"
165 " AND mtime>=:mtime",
166 tagid, rid
167 );
168 db_bind_double(&s, ":mtime", mtime);
169 rc = db_step(&s);
170 db_finalize(&s);
171 if( rc==SQLITE_ROW ){
172 /* Another entry this is more recent already exists. Do nothing */
173 return;
174 }
175 db_prepare(&s,
176 "REPLACE INTO tagxref(tagid,tagtype,srcId,value,mtime,rid)"
177 " VALUES(%d,%d,%d,%Q,:mtime,%d)",
178 tagid, tagtype, srcId, zValue, rid
179

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button