@@ -31,46 +31,49 @@
31 31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Propagate the tag given by tagid to the children of pid.
32 32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
33 33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine assumes that tagid is a tag that should be
34 34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** propagated and that the tag is already present in pid.
35 35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If addFlag is true then the tag is added. If false, then the
37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** tag is removed.
36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If tagtype is 2 then the tag is being propagated from an
37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ancestor node. If tagtype is 0 it means a branch tag is
38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** being cancelled.
38 39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
39 40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void tag_propagate(
40 41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int pid, /* Propagate the tag to children of this node */
41 42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int tagid, /* Tag to propagate */
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int addFlag, /* True to add the tag. False to delete it. */
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int tagType, /* 2 for a propagating tag. 0 for an antitag */
43 44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zValue, /* Value of the tag. Might be NULL */
44 45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double mtime /* Timestamp on the tag */
45 46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
46 47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
PQueue queue;
47 48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Stmt s, ins, eventupdate;
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( tagType==0 || tagType==2 );
48 51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pqueue_init(&queue);
49 52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pqueue_insert(&queue, pid, 0.0);
50 53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&s,
51 54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"SELECT cid, plink.mtime,"
52 55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" coalesce(srcid=0 AND tagxref.mtime<:mtime, %d) AS doit"
53 56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM plink LEFT JOIN tagxref ON cid=rid AND tagid=%d"
54 57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE pid=:pid AND isprim",
55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- addFlag, tagid
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tagType!=0, tagid
56 59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
57 60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_bind_double(&s, ":mtime", mtime);
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( addFlag ){
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( tagType==2 ){
59 62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&ins,
60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "REPLACE INTO tagxref(tagid, addFlag, srcid, value, mtime, rid)"
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "VALUES(%d,1,0,%Q,:mtime,:rid)",
63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "REPLACE INTO tagxref(tagid, tagtype, srcid, value, mtime, rid)"
64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "VALUES(%d,2,0,%Q,:mtime,:rid)",
62 65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tagid, zValue
63 66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
64 67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_bind_double(&ins, ":mtime", mtime);
65 68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
66 69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zValue = 0;
67 70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&ins,
68 71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"DELETE FROM tagxref WHERE tagid=%d AND rid=:rid", tagid
69 72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
70 73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( tagid==TAG_BR_BGCOLOR ){
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( tagid==TAG_BGCOLOR ){
72 75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&eventupdate,
73 76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"UPDATE event SET brbgcolor=%Q WHERE objid=:rid", zValue
74 77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
75 78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76 79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( (pid = pqueue_extract(&queue))!=0 ){
@@ -82,11 +85,11 @@
82 85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double mtime = db_column_double(&s, 1);
83 86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pqueue_insert(&queue, cid, mtime);
84 87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_bind_int(&ins, ":rid", cid);
85 88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_step(&ins);
86 89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_reset(&ins);
87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( tagid==TAG_BR_BGCOLOR ){
90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( tagid==TAG_BGCOLOR ){
88 91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_bind_int(&eventupdate, ":rid", cid);
89 92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_step(&eventupdate);
90 93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_reset(&eventupdate);
91 94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
92 95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -94,11 +97,11 @@
94 97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_reset(&s);
95 98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
96 99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pqueue_clear(&queue);
97 100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_finalize(&ins);
98 101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_finalize(&s);
99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( tagid==TAG_BR_BGCOLOR ){
102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( tagid==TAG_BGCOLOR ){
100 103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_finalize(&eventupdate);
101 104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
102 105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
103 106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
104 107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -105,21 +108,21 @@
105 108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Propagate all propagatable tags in pid to its children.
106 109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
107 110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void tag_propagate_all(int pid){
108 111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Stmt q;
109 112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&q,
110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "SELECT tagid, addflag, mtime, value FROM tagxref"
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "SELECT tagid, tagtype, mtime, value FROM tagxref"
111 114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE rid=%d"
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " AND (SELECT tagname FROM tag WHERE tagid=tagxref.tagid) LIKE 'br%'",
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " AND (tagtype=0 OR tagtype=2)",
113 116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pid
114 117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
115 118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( db_step(&q)==SQLITE_ROW ){
116 119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int tagid = db_column_int(&q, 0);
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int addflag = db_column_int(&q, 1);
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int tagtype = db_column_int(&q, 1);
118 121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double mtime = db_column_double(&q, 2);
119 122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zValue = db_column_text(&q, 3);
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tag_propagate(pid, tagid, addflag, zValue, mtime);
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tag_propagate(pid, tagid, tagtype, zValue, mtime);
121 124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
122 125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_finalize(&q);
123 126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
124 127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
125 128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -139,106 +142,93 @@
139 142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
140 143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Insert a tag into the database.
141 144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
142 145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void tag_insert(
143 146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zTag, /* Name of the tag (w/o the "+" or "-" prefix */
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int addFlag, /* True to add. False to remove */
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int tagtype, /* 0:cancel 1:singleton 2:propagated */
145 148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zValue, /* Value if the tag is really a property */
146 149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int srcId, /* Artifact that contains this tag */
147 150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double mtime, /* Timestamp. Use default if <=0.0 */
148 151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rid /* Artifact to which the tag is to attached */
149 152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
150 153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Stmt s;
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zCol;
151 155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int tagid = tag_findid(zTag, 1);
152 156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( mtime<=0.0 ){
153 157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mtime = db_double(0.0, "SELECT julianday('now')");
154 158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
155 159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&s,
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "REPLACE INTO tagxref(tagid,addFlag,srcId,value,mtime,rid)"
160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "REPLACE INTO tagxref(tagid,tagtype,srcId,value,mtime,rid)"
157 161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" VALUES(%d,%d,%d,%Q,:mtime,%d)",
158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tagid, addFlag, srcId, zValue, rid
162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tagid, tagtype, srcId, zValue, rid
159 163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
160 164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_bind_double(&s, ":mtime", mtime);
161 165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_step(&s);
162 166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_finalize(&s);
163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( addFlag==0 ){
167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( tagtype==0 ){
164 168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zValue = 0;
165 169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zCol = 0;
166 171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( tagid ){
167 172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TAG_BGCOLOR: {
168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_multi_exec("UPDATE event SET bgcolor=%Q WHERE objid=%d", zValue, rid);
169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case TAG_BR_BGCOLOR: {
172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_multi_exec("UPDATE event SET brbgcolor=%Q WHERE objid=%d", zValue,rid);
173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( tagtype==1 ){
174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zCol = "bgcolor";
175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zCol = "brbgcolor";
177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
173 178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
174 179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
175 180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TAG_COMMENT: {
176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_multi_exec("UPDATE event SET ecomment=%Q WHERE objid=%d", zValue, rid);
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zCol = "ecomment";
177 182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
178 183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
179 184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TAG_USER: {
180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_multi_exec("UPDATE event SET euser=%Q WHERE objid=%d", zValue, rid);
185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zCol = "euser";
181 186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
182 187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
183 188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( strncmp(zTag, "br", 2)==0 ){
185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tag_propagate(rid, tagid, addFlag, zValue, mtime);
189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zCol ){
190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_multi_exec("UPDATE event SET %s=%Q WHERE objid=%d", zCol, zValue, rid);
191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( tagtype==0 || tagtype==2 ){
193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tag_propagate(rid, tagid, tagtype, zValue, mtime);
186 194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
187 195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
188 196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
189 197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
190 198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** COMMAND: test-addtag
192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** %fossil test-addtag TAGNAME UUID ?VALUE?
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** COMMAND: test-tag
200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** %fossil test-tag (+|*|-)TAGNAME UUID ?VALUE?
193 201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Add a tag to the rebuildable tables of the local repository.
202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Add a tag or anti-tag to the rebuildable tables of the local repository.
195 203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** No tag artifact is created so the new tag is erased the next
196 204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** time the repository is rebuilt. This routine is for testing
197 205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** use only.
198 206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void addtag_cmd(void){
207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void testtag_cmd(void){
200 208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zTag;
201 209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zValue;
202 210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rid;
211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int tagtype;
203 212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_must_be_within_tree();
204 213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.argc!=4 && g.argc!=5 ){
205 214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
usage("TAGNAME UUID ?VALUE?");
206 215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
207 216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zTag = g.argv[2];
217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ switch( zTag[0] ){
218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case '+': tagtype = 1; break;
219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case '*': tagtype = 2; break;
220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case '-': tagtype = 0; break;
221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ default: fossil_fatal("tag should begin with '+', '*', or '-'");
222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
208 223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rid = name_to_rid(g.argv[3]);
209 224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rid==0 ){
210 225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_fatal("no such object: %s", g.argv[3]);
211 226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
212 227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zValue = g.argc==5 ? g.argv[4] : 0;
213 228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_begin_transaction();
214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tag_insert(zTag, 1, zValue, -1, 0.0, rid);
215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_end_transaction(0);
216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** COMMAND: test-deltag
219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** %fossil test-deltag TAGNAME UUID
220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Cancel a tag to the rebuildable tables of the local repository.
222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** No tag artifact is created so the cancellation is undone the next
223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** time the repository is rebuilt. This routine is for testing
224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** use only.
225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void deltag_cmd(void){
227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zTag;
228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rid;
229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_must_be_within_tree();
230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( g.argc!=4 ){
231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- usage("TAGNAME UUID");
232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zTag = g.argv[2];
234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rid = name_to_rid(g.argv[3]);
235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rid==0 ){
236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fossil_fatal("no such object: %s", g.argv[3]);
237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_begin_transaction();
239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tag_insert(zTag, 0, 0, -1, 0.0, rid);
229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tag_insert(zTag, tagtype, zValue, -1, 0.0, rid);
240 230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_end_transaction(0);
241 231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
242 232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
243 233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
244 234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Add a control record to the repository that either creates
@@ -246,19 +236,21 @@
246 236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
247 237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void tag_add_artifact(
248 238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zTagname, /* The tag to add or cancel */
249 239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zObjName, /* Name of object attached to */
250 240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zValue, /* Value for the tag. Might be NULL */
251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int addFlag /* True to add. false to cancel */
241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int tagtype /* 0:cancel 1:singleton 2:propagated */
252 242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
253 243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rid;
254 244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nrid;
255 245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zDate;
256 246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob uuid;
257 247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob ctrl;
258 248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob cksum;
249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const char zTagtype[] = { '-', '+', '*' };
259 250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( tagtype>=0 && tagtype<=2 );
260 252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
user_select();
261 253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rid = name_to_rid(zObjName);
262 254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_zero(&uuid);
263 255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_blob(&uuid, "SELECT uuid FROM blob WHERE rid=%d", rid);
264 256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_zero(&ctrl);
@@ -268,12 +260,12 @@
268 260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zTagname);
269 261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
270 262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zDate = db_text(0, "SELECT datetime('now')");
271 263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zDate[10] = 'T';
272 264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&ctrl, "D %s\n", zDate);
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_appendf(&ctrl, "T %c%F %b", addFlag ? '+' : '-', zTagname, &uuid);
274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( addFlag && zValue && zValue[0] ){
265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_appendf(&ctrl, "T %c%F %b", zTagtype[tagtype], zTagname, &uuid);
266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( tagtype && zValue && zValue[0] ){
275 267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&ctrl, " %F\n", zValue);
276 268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
277 269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&ctrl, "\n");
278 270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
279 271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&ctrl, "U %F\n", g.zLogin);
@@ -293,10 +285,15 @@
293 285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
294 286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** %fossil tag add TAGNAME UUID ?VALUE?
295 287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
296 288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Add a new tag or property to UUID.
297 289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** %fossil tag branch TAGNAME UUID ?VALUE?
291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Add a new tag or property to UUID and make that
293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** tag propagate to all direct children.
294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
298 295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** %fossil tag delete TAGNAME UUID
299 296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
300 297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Delete the tag TAGNAME from UUID
301 298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
302 299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** %fossil tag find TAGNAME
@@ -325,10 +322,19 @@
325 322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
usage("tag add TAGNAME UUID ?VALUE?");
326 323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
327 324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zValue = g.argc==6 ? g.argv[5] : 0;
328 325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tag_add_artifact(g.argv[3], g.argv[4], zValue, 1);
329 326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( strncmp(g.argv[2],"branch",n)==0 ){
329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zValue;
330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( g.argc!=5 && g.argc!=6 ){
331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ usage("tag branch TAGNAME UUID ?VALUE?");
332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zValue = g.argc==6 ? g.argv[5] : 0;
334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tag_add_artifact(g.argv[3], g.argv[4], zValue, 2);
335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else
330 336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
331 337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( strncmp(g.argv[2],"delete",n)==0 ){
332 338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.argc!=5 ){
333 339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
usage("tag delete TAGNAME UUID");
334 340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -357,11 +363,11 @@
357 363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&q,
358 364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"SELECT tagname"
359 365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM tag"
360 366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE EXISTS(SELECT 1 FROM tagxref"
361 367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE tagid=tag.tagid"
362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " AND addflag)"
368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " AND tagtype>0)"
363 369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" ORDER BY tagname"
364 370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
365 371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( db_step(&q)==SQLITE_ROW ){
366 372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
printf("%s\n", db_column_text(&q, 0));
367 373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -370,11 +376,11 @@
370 376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rid = name_to_rid(g.argv[3]);
371 377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&q,
372 378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"SELECT tagname, value"
373 379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM tagxref, tag"
374 380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE tagxref.rid=%d AND tagxref.tagid=tag.tagid"
375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " AND addflag"
381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " AND tagtype>0"
376 382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" ORDER BY tagname",
377 383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rid
378 384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
379 385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( db_step(&q)==SQLITE_ROW ){
380 386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName = db_column_text(&q, 0);
@@ -394,7 +400,7 @@
394 400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto tag_cmd_usage;
395 401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
396 402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
397 403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
398 404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tag_cmd_usage:
399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- usage("add|delete|find|list ...");
405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ usage("add|branch|delete|find|list ...");
400 406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
401 407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!