@@ -30,22 +30,27 @@
30 30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int nField = 0;
31 31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static struct tktFieldInfo {
32 32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zName; /* Name of the database field */
33 33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zValue; /* Value to store */
34 34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zAppend; /* Value to append */
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zBsln; /* "baseline for $zName" if that field exists*/
35 36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned mUsed; /* 01: TICKET 02: TICKETCHNG */
36 37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} *aField;
37 38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define USEDBY_TICKET 01
38 39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define USEDBY_TICKETCHNG 02
39 40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define USEDBY_BOTH 03
41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define JCARD_ASSIGN ('=')
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define JCARD_APPEND ('+')
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define JCARD_PRIVATE ('p')
40 44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static u8 haveTicket = 0; /* True if the TICKET table exists */
41 45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static u8 haveTicketCTime = 0; /* True if TICKET.TKT_CTIME exists */
42 46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static u8 haveTicketChng = 0; /* True if the TICKETCHNG table exists */
43 47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static u8 haveTicketChngRid = 0; /* True if TICKETCHNG.TKT_RID exists */
44 48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static u8 haveTicketChngUser = 0;/* True if TICKETCHNG.TKT_USER exists */
45 49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static u8 useTicketGenMt = 0; /* use generated TICKET.MIMETYPE */
46 50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static u8 useTicketChngGenMt = 0;/* use generated TICKETCHNG.MIMETYPE */
51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int nTicketBslns = 0; /* number of valid "baseline for ..." */
47 52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
48 53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
49 54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
50 55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Compare two entries in aField[] for sorting purposes
51 56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -73,31 +78,56 @@
73 78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The haveTicket and haveTicketChng variables are set to 1 if the TICKET and
74 79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** TICKETCHANGE tables exist, respectively.
75 80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
76 81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void getAllTicketFields(void){
77 82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Stmt q;
78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i, noRegularMimetype;
83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i, noRegularMimetype, nBaselines;
79 84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int once = 0;
80 85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( once ) return;
81 86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
once = 1;
87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nBaselines = 0;
82 88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&q, "PRAGMA table_info(ticket)");
83 89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( db_step(&q)==SQLITE_ROW ){
84 90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zFieldName = db_column_text(&q, 1);
85 91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
haveTicket = 1;
86 92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( memcmp(zFieldName,"tkt_",4)==0 ){
87 93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( strcmp(zFieldName, "tkt_ctime")==0 ) haveTicketCTime = 1;
88 94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue;
95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( memcmp(zFieldName,"baseline for ",13)==0 ){
97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( strcmp(db_column_text(&q,2),"INTEGER")==0 ){
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nBaselines++;
99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ continue;
89 101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
90 102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( strchr(zFieldName,' ')!=0 ) continue;
91 103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nField%10==0 ){
92 104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aField = fossil_realloc(aField, sizeof(aField[0])*(nField+10) );
93 105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aField[nField].zBsln = 0;
94 107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aField[nField].zName = mprintf("%s", zFieldName);
95 108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aField[nField].mUsed = USEDBY_TICKET;
96 109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nField++;
97 110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
98 111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_finalize(&q);
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nBaselines ){
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_prepare(&q, "SELECT 1 FROM pragma_table_info('ticket') "
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "WHERE type = 'INTEGER' AND name = :n");
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nField && nBaselines!=0; i++){
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zBsln = mprintf("baseline for %s",aField[i].zName);
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_bind_text(&q, ":n", zBsln);
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( db_step(&q)==SQLITE_ROW ){
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aField[i].zBsln = zBsln;
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nTicketBslns++;
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nBaselines--;
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ free(zBsln);
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_reset(&q);
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_finalize(&q);
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
99 129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&q, "PRAGMA table_info(ticketchng)");
100 130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( db_step(&q)==SQLITE_ROW ){
101 131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zFieldName = db_column_text(&q, 1);
102 132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
haveTicketChng = 1;
103 133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( memcmp(zFieldName,"tkt_",4)==0 ){
@@ -114,10 +144,11 @@
114 144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue;
115 145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116 146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nField%10==0 ){
117 147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aField = fossil_realloc(aField, sizeof(aField[0])*(nField+10) );
118 148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aField[nField].zBsln = 0;
119 150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aField[nField].zName = mprintf("%s", zFieldName);
120 151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aField[nField].mUsed = USEDBY_TICKETCHNG;
121 152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nField++;
122 153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
123 154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_finalize(&q);
@@ -201,21 +232,39 @@
201 232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; (z = cgi_parameter_name(i))!=0; i++){
202 233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Th_Store(z, P(z));
203 234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
204 235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
205 236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Information about a single J-card
239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct jCardInfo {
241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zValue;
242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int mimetype;
243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rid;
244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double mtime;
245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
206 247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
207 248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Update an entry of the TICKET and TICKETCHNG tables according to the
208 249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** information in the ticket artifact given in p. Attempt to create
209 250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the appropriate TICKET table entry if tktid is zero. If tktid is nonzero
210 251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** then it will be the ROWID of an existing TICKET entry.
211 252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
212 253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Parameter rid is the recordID for the ticket artifact in the BLOB table.
254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Upon assignment of a field this rid is stored into a corresponding
255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** zBsln integer column (provided that it is defined within TICKET table).
256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If a field is USEDBY_TICKETCHNG table then back-references within it
258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are extracted and inserted into the BACKLINK table; otherwise
259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a corresponding blob in the `fields` array is updated so that the
260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** caller could extract backlinks from the most recent field's values.
213 261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
214 262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the new rowid of the TICKET table entry.
215 263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int ticket_insert(const Manifest *p, const int rid, int tktid){
264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int ticket_insert(const Manifest *p, const int rid, int tktid,
265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob *fields){
217 266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob sql1; /* update or replace TICKET ... */
218 267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob sql2; /* list of TICKETCHNG's fields that are in the manifest */
219 268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob sql3; /* list of values which correspond to the previous list */
220 269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Stmt q;
221 270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i, j;
@@ -232,12 +281,11 @@
232 281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_zero(&sql3);
233 282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_sql(&sql1, "UPDATE OR REPLACE ticket SET tkt_mtime=:mtime");
234 283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( haveTicketCTime ){
235 284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_sql(&sql1, ", tkt_ctime=coalesce(tkt_ctime,:mtime)");
236 285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aUsed = fossil_malloc( nField );
238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memset(aUsed, 0, nField);
286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aUsed = fossil_malloc_zero( nField );
239 287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<p->nField; i++){
240 288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char * const zName = p->aField[i].zName;
241 289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char * const zBaseName = zName[0]=='+' ? zName+1 : zName;
242 290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
j = fieldId(zBaseName);
243 291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( j<0 ) continue;
@@ -244,12 +292,16 @@
244 292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aUsed[j] = 1;
245 293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( aField[j].mUsed & USEDBY_TICKET ){
246 294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zName[0]=='+' ){
247 295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_sql(&sql1,", \"%w\"=coalesce(\"%w\",'') || %Q",
248 296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zBaseName, zBaseName, p->aField[i].zValue);
297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* when appending keep "baseline for ..." unchanged */
249 298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
250 299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_sql(&sql1,", \"%w\"=%Q", zBaseName, p->aField[i].zValue);
300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aField[j].zBsln ){
301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append_sql(&sql1,", \"%w\"=%d", aField[j].zBsln, rid);
302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
251 303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
252 304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
253 305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( aField[j].mUsed & USEDBY_TICKETCHNG ){
254 306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_sql(&sql2, ",\"%w\"", zBaseName);
255 307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_append_sql(&sql3, ",%Q", p->aField[i].zValue);
@@ -327,24 +379,37 @@
327 379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
328 380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&sql2);
329 381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&sql3);
330 382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(aUsed);
331 383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rid>0 ){ /* extract backlinks */
332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int bReplace = 1, mimetype;
333 384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<p->nField; i++){
334 385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName = p->aField[i].zName;
335 386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zBaseName = zName[0]=='+' ? zName+1 : zName;
336 387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
j = fieldId(zBaseName);
337 388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( j<0 ) continue;
338 389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( aField[j].mUsed & USEDBY_TICKETCHNG ){
339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- mimetype = mimetype_tktchng;
390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ backlink_extract(p->aField[i].zValue, mimetype_tktchng,
391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rid, BKLNK_TICKET, p->rDate,
392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* existing backlinks must have been
393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ * already deleted by the caller */ 0 );
340 394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- mimetype = mimetype_tkt;
395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* update field's data with the most recent values */
396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob *cards = fields + j;
397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct jCardInfo card = {
398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_strdup(p->aField[i].zValue),
399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mimetype_tkt, rid, p->rDate
400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( blob_size(cards) && zName[0]!='+' ){
402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct jCardInfo *x = (struct jCardInfo *)blob_buffer(cards);
403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct jCardInfo *end = x + blob_count(cards,struct jCardInfo);
404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(; x!=end; x++){
405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_free( x->zValue );
406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_truncate(cards,0);
408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(cards, (const char*)(&card), sizeof(card));
342 410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- backlink_extract(p->aField[i].zValue, mimetype, rid, BKLNK_TICKET,
344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->rDate, bReplace);
345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bReplace = 0;
346 411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
347 412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
348 413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return tktid;
349 414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
350 415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -377,12 +442,13 @@
377 442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void ticket_rebuild_entry(const char *zTktUuid){
378 443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zTag = mprintf("tkt-%s", zTktUuid);
379 444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int tagid = tag_findid(zTag, 1);
380 445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Stmt q;
381 446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Manifest *pTicket;
382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int tktid;
447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int tktid, i;
383 448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int createFlag = 1;
449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob *fields; /* array of blobs; each blob holds array of jCardInfo */
384 450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
385 451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_free(zTag);
386 452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
getAllTicketFields();
387 453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( haveTicket==0 ) return;
388 454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tktid = db_int(0, "SELECT tkt_id FROM ticket WHERE tkt_uuid=%Q", zTktUuid);
@@ -390,22 +456,41 @@
390 456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( haveTicketChng ){
391 457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec("DELETE FROM ticketchng WHERE tkt_id=%d;", tktid);
392 458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
393 459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec("DELETE FROM ticket WHERE tkt_id=%d", tktid);
394 460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tktid = 0;
461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fields = blobarray_new( nField );
462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_multi_exec("DELETE FROM backlink WHERE srctype=%d AND srcid IN "
463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "(SELECT rid FROM tagxref WHERE tagid=%d)",BKLNK_TICKET, tagid);
395 464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&q, "SELECT rid FROM tagxref WHERE tagid=%d ORDER BY mtime",tagid);
396 465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( db_step(&q)==SQLITE_ROW ){
397 466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rid = db_column_int(&q, 0);
398 467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTicket = manifest_get(rid, CFTYPE_TICKET, 0);
399 468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTicket ){
400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tktid = ticket_insert(pTicket, rid, tktid);
469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tktid = ticket_insert(pTicket, rid, tktid, fields);
401 470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
manifest_ticket_event(rid, pTicket, createFlag, tagid);
402 471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
manifest_destroy(pTicket);
403 472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
404 473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
createFlag = 0;
405 474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
406 475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_finalize(&q);
476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Extract backlinks from the most recent values of TICKET fields */
477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nField; i++){
478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob *cards = fields + i;
479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( blob_size(cards) ){
480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct jCardInfo *x = (struct jCardInfo *)blob_buffer(cards);
481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct jCardInfo *end = x + blob_count(cards,struct jCardInfo);
482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(; x!=end; x++){
483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( x->zValue );
484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ backlink_extract(x->zValue,x->mimetype,
485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ x->rid,BKLNK_TICKET,x->mtime,0);
486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_free( x->zValue );
487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_truncate(cards,0);
490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blobarray_delete(fields,nField);
407 492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
408 493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
409 494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
410 495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
411 496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Create the TH1 interpreter and load the "common" code.
@@ -738,23 +823,41 @@
738 823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return TH_OK;
739 824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
740 825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
741 826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
742 827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Write a ticket into the repository.
828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Upon reassignment of fields try to delta-compress an artifact against
829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** all artifacts that are referenced in the corresponding zBsln fields.
743 830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
744 831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int ticket_put(
745 832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob *pTicket, /* The text of the ticket change record */
746 833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zTktId, /* The ticket to which this change is applied */
834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *aUsed, /* Indicators for fields' modifications */
747 835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int needMod /* True if moderation is needed */
748 836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
749 837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int result;
750 838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rid;
751 839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
manifest_crosslink_begin();
752 840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rid = content_put_ex(pTicket, 0, 0, 0, needMod);
753 841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rid==0 ){
754 842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_fatal("trouble committing ticket: %s", g.zErrMsg);
755 843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nTicketBslns ){
845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i, s, buf[8], nSrc=0, *aSrc=&(buf[0]);
846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nTicketBslns > count(buf) ){
847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aSrc = (int*)fossil_malloc(sizeof(int)*nTicketBslns);
848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nField; i++){
850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aField[i].zBsln && aUsed[i]==JCARD_ASSIGN ){
851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ s = db_int(0,"SELECT \"%w\" FROM ticket WHERE tkt_uuid = '%q'",
852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aField[i].zBsln, zTktId );
853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( s > 0 ) aSrc[nSrc++] = s;
854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nSrc ) content_deltify(rid, aSrc, nSrc, 0);
857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aSrc!=&(buf[0]) ) fossil_free( aSrc );
858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
756 859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( needMod ){
757 860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
moderation_table_create();
758 861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec(
759 862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"INSERT INTO modreq(objid, tktid) VALUES(%d,%Q)",
760 863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rid, zTktId
@@ -787,14 +890,14 @@
787 890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pUuid,
788 891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int argc,
789 892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char **argv,
790 893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *argl
791 894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zDate;
895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zDate, *aUsed;
793 896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zUuid;
794 897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nJ = 0;
898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nJ = 0, rc = TH_OK;
796 899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob tktchng, cksum;
797 900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int needMod;
798 901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
799 902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
login_verify_csrf_secret();
800 903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !captcha_is_correct(0) ){
@@ -804,15 +907,17 @@
804 907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zUuid = (const char *)pUuid;
805 908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_zero(&tktchng);
806 909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zDate = date_in_standard_format("now");
807 910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&tktchng, "D %s\n", zDate);
808 911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free(zDate);
912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aUsed = fossil_malloc_zero( nField );
809 913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nField; i++){
810 914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( aField[i].zAppend ){
811 915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&tktchng, "J +%s %z\n", aField[i].zName,
812 916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossilize(aField[i].zAppend, -1));
813 917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
++nJ;
918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aUsed[i] = JCARD_APPEND;
814 919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
815 920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
816 921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nField; i++){
817 922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zValue;
818 923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nValue;
@@ -825,12 +930,14 @@
825 930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| strlen(aField[i].zValue)!=nValue
826 931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
827 932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( memcmp(aField[i].zName, "private_", 8)==0 ){
828 933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zValue = db_conceal(zValue, nValue);
829 934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&tktchng, "J %s %s\n", aField[i].zName, zValue);
935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aUsed[i] = JCARD_PRIVATE;
830 936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
831 937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&tktchng, "J %s %#F\n", aField[i].zName, nValue, zValue);
938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aUsed[i] = JCARD_ASSIGN;
832 939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
833 940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nJ++;
834 941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
835 942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
836 943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -846,11 +953,11 @@
846 953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&tktchng, "U %F\n", login_name());
847 954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
md5sum_blob(&tktchng, &cksum);
848 955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&tktchng, "Z %b\n", &cksum);
849 956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nJ==0 ){
850 957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&tktchng);
851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return TH_OK;
958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ goto finish;
852 959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
853 960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
needMod = ticket_need_moderation(0);
854 961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.zPath[0]=='d' ){
855 962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zNeedMod = needMod ? "required" : "skipped";
856 963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If called from /debug_tktnew or /debug_tktedit... */
@@ -858,20 +965,22 @@
858 965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <p>Ticket artifact that would have been submitted:</p>
859 966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <blockquote><pre>%h(blob_str(&tktchng))</pre></blockquote>
860 967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <blockquote><pre>Moderation would be %h(zNeedMod).</pre></blockquote>
861 968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </div>
862 969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <hr />
863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return TH_OK;
864 970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
865 971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.thTrace ){
866 972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Th_Trace("submit_ticket {\n<blockquote><pre>\n%h\n</pre></blockquote>\n"
867 973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"}<br />\n",
868 974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_str(&tktchng));
869 975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ticket_put(&tktchng, zUuid, needMod);
976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ticket_put(&tktchng, zUuid, aUsed, needMod);
977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = ticket_change(zUuid);
871 978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return ticket_change(zUuid);
979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ finish:
980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_free( aUsed );
981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
873 982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
874 983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
875 984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
876 985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
877 986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** WEBPAGE: tktnew
@@ -1141,17 +1250,21 @@
1141 1250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** By default, the artifacts are decoded and formatted. Text fields
1142 1251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** are formatted as text/plain, since in the general case Fossil does
1143 1252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** not have knowledge of the encoding. If the "raw" query parameter
1144 1253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is present, then the undecoded and unformatted text of each artifact
1145 1254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is displayed.
1255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Reassignments of a field of the TICKET table that has a corresponding
1257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** "baseline for ..." companion are rendered as unified diffs.
1146 1258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1147 1259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void tkthistory_page(void){
1148 1260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Stmt q;
1149 1261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zTitle;
1150 1262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zUuid;
1151 1263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int tagid;
1152 1264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nChng = 0;
1265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob *aLastVal = 0; /* holds the last rendered value for each field */
1153 1266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1154 1267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
login_check_credentials();
1155 1268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !g.perm.Hyperlink || !g.perm.RdTkt ){
1156 1269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
login_needed(g.anon.Hyperlink && g.anon.RdTkt);
1157 1270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
@@ -1177,10 +1290,14 @@
1177 1290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1178 1291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( P("raw")!=0 ){
1179 1292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <h2>Raw Artifacts Associated With Ticket %h(zUuid)</h2>
1180 1293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1181 1294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <h2>Artifacts Associated With Ticket %h(zUuid)</h2>
1295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ getAllTicketFields();
1296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nTicketBslns ){
1297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aLastVal = blobarray_new(nField);
1298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1182 1299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1183 1300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&q,
1184 1301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"SELECT datetime(mtime,toLocal()), objid, uuid, NULL, NULL, NULL"
1185 1302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" FROM event, blob"
1186 1303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE objid IN (SELECT rid FROM tagxref WHERE tagid=%d)"
@@ -1198,33 +1315,33 @@
1198 1315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zDate = db_column_text(&q, 0);
1199 1316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rid = db_column_int(&q, 1);
1200 1317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zChngUuid = db_column_text(&q, 2);
1201 1318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zFile = db_column_text(&q, 4);
1202 1319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nChng==0 ){
1203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <ol>
1320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <ol class="tkt-changes">
1204 1321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1205 1322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zFile!=0 ){
1206 1323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zSrc = db_column_text(&q, 3);
1207 1324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zUser = db_column_text(&q, 5);
1325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @
1326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <li id="%S(zChngUuid)"><p><span>
1208 1327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zSrc==0 || zSrc[0]==0 ){
1209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @
1210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <li><p>Delete attachment "%h(zFile)"
1328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ Delete attachment "%h(zFile)"
1211 1329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @
1213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <li><p>Add attachment
1330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ Add attachment
1214 1331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ "%z(href("%R/artifact/%!S",zSrc))%s(zFile)</a>"
1215 1332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ [%z(href("%R/artifact/%!S",zChngUuid))%S(zChngUuid)</a>]
1333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ [%z(href("%R/artifact/%!S",zChngUuid))%S(zChngUuid)</a>]</span>
1217 1334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ (rid %d(rid)) by
1218 1335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
hyperlink_to_user(zUser,zDate," on");
1219 1336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
hyperlink_to_date(zDate, ".</p>");
1220 1337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1221 1338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTicket = manifest_get(rid, CFTYPE_TICKET, 0);
1222 1339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTicket ){
1223 1340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@
1224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <li><p>Ticket change
1225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ [%z(href("%R/artifact/%!S",zChngUuid))%S(zChngUuid)</a>]
1341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <li id="%S(zChngUuid)"><p><span>Ticket change
1342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ [%z(href("%R/artifact/%!S",zChngUuid))%S(zChngUuid)</a>]</span>
1226 1343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ (rid %d(rid)) by
1227 1344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
hyperlink_to_user(pTicket->zUser,zDate," on");
1228 1345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
hyperlink_to_date(zDate, ":");
1229 1346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </p>
1230 1347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( P("raw")!=0 ){
@@ -1233,21 +1350,23 @@
1233 1350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <blockquote><pre>
1234 1351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ %h(blob_str(&c))
1235 1352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </pre></blockquote>
1236 1353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_reset(&c);
1237 1354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ticket_output_change_artifact(pTicket, "a", nChng);
1355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ticket_output_change_artifact(pTicket, "a", nChng, aLastVal);
1239 1356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1240 1357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1241 1358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
manifest_destroy(pTicket);
1242 1359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ </li>
1243 1361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1244 1362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_finalize(&q);
1245 1363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nChng ){
1246 1364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </ol>
1247 1365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1248 1366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
style_finish_page();
1367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aLastVal ) blobarray_delete(aLastVal, nField);
1249 1368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1250 1369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1251 1370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1252 1371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return TRUE if the given BLOB contains a newline character.
1253 1372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -1261,48 +1380,95 @@
1261 1380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1262 1381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1263 1382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1264 1383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The pTkt object is a ticket change artifact. Output a detailed
1265 1384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** description of this object.
1385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If `aLastVal` is not NULL then render selected fields as unified diffs
1387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and update corresponding elements of that array with values from `pTkt`.
1266 1388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1267 1389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void ticket_output_change_artifact(
1268 1390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Manifest *pTkt, /* Parsed artifact for the ticket change */
1269 1391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zListType, /* Which type of list */
1270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int n /* Which ticket change is this */
1392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n, /* Which ticket change is this */
1393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob *aLastVal /* Array of the latest values for the diffs */
1271 1394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
1272 1395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
1273 1396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zListType==0 ) zListType = "1";
1274 1397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
getAllTicketFields();
1275 1398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <ol type="%s(zListType)">
1276 1399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pTkt->nField; i++){
1277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Blob val;
1278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *z, *zX;
1279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int id;
1280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z = pTkt->aField[i].zName;
1281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_set(&val, pTkt->aField[i].zValue);
1282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zX = z[0]=='+' ? z+1 : z;
1283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- id = fieldId(zX);
1400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *z = pTkt->aField[i].zName;
1401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zX = z[0]=='+' ? z+1 : z;
1402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const int id = fieldId(zX);
1403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zValue = pTkt->aField[i].zValue;
1404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const size_t nValue = strlen(zValue);
1405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const int bLong = nValue>50 || memchr(zValue,'\n',nValue)!=NULL;
1406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* zValue is long enough to justify a <blockquote> */
1407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const int bCanDiff = aLastVal && id>=0 && aField[id].zBsln;
1408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* preliminary flag for rendering via unified diff */
1409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bAppend = 0; /* zValue is being appended to a TICKET's field */
1410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bRegular = 0; /* prev value of a TICKET's field is being superseded*/
1284 1411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ <li>\
1285 1412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( id<0 ){
1286 1413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ Untracked field %h(zX):
1287 1414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( aField[id].mUsed==USEDBY_TICKETCHNG ){
1288 1415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ %h(zX):
1289 1416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( n==0 ){
1290 1417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ %h(zX) initialized to:
1291 1418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( z[0]=='+' && (aField[id].mUsed&USEDBY_TICKET)!=0 ){
1292 1419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ Appended to %h(zX):
1293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
1294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ %h(zX) changed to:
1295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
1296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( blob_size(&val)>50 || contains_newline(&val) ){
1297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ <blockquote><pre class='verbatim'>
1298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ %h(blob_str(&val))
1299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ </pre></blockquote></li>
1300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
1301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- @ "%h(blob_str(&val))"</li>
1302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
1303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- blob_reset(&val);
1420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bAppend = 1;
1421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
1422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !bCanDiff ){
1423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ %h(zX) changed to: \
1424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bRegular = 1;
1426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bCanDiff ){
1428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob *prev = aLastVal+id;
1429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob val = BLOB_INITIALIZER;
1430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nValue ){
1431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_init(&val, zValue, nValue+1);
1432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ val.nUsed--; /* makes blob_str() faster */
1433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bRegular && nValue && blob_buffer(prev) && blob_size(prev) ){
1435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob d = BLOB_INITIALIZER;
1436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DiffConfig DCfg;
1437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ construct_diff_flags(1, &DCfg);
1438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DCfg.diffFlags |= DIFF_HTML | DIFF_LINENO;
1439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ text_diff(prev, &val, &d, &DCfg);
1440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ %h(zX) changed as:
1441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ %s(blob_str(&d))
1442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ </li>
1443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(&d);
1444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
1445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bRegular ){
1446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ %h(zX) changed to:
1447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bLong ){
1449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <blockquote><pre class='verbatim'>
1450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ %h(zValue)
1451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ </pre></blockquote></li>
1452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
1453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ "%h(zValue)"</li>
1454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( blob_buffer(prev) && blob_size(prev) && !bAppend ){
1457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_truncate(prev,0);
1458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nValue ) blob_appendb(prev, &val);
1460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(&val);
1461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
1462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bLong ){
1463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ <blockquote><pre class='verbatim'>
1464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ %h(zValue)
1465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ </pre></blockquote></li>
1466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
1467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ @ "%h(zValue)"</li>
1468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1304 1470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1305 1471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@ </ol>
1306 1472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1307 1473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1308 1474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -1460,10 +1626,11 @@
1460 1626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1461 1627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* add a new ticket or update an existing ticket */
1462 1628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
enum { set,add,history,err } eCmd = err;
1463 1629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i = 0;
1464 1630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Blob tktchng, cksum;
1631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *aUsed;
1465 1632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1466 1633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* get command type (set/add) and get uuid, if needed for set */
1467 1634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( strncmp(g.argv[2],"set",n)==0 || strncmp(g.argv[2],"change",n)==0 ||
1468 1635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
strncmp(g.argv[2],"history",n)==0 ){
1469 1636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( strncmp(g.argv[2],"history",n)==0 ){
@@ -1602,10 +1769,11 @@
1602 1769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1603 1770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aField[j].zValue = zFValue;
1604 1771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1605 1772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1606 1773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aUsed = fossil_malloc_zero( nField );
1607 1775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1608 1776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* now add the needed artifacts to the repository */
1609 1777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_zero(&tktchng);
1610 1778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* add the time to the ticket manifest */
1611 1779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&tktchng, "D %s\n", zDate);
@@ -1615,34 +1783,39 @@
1615 1783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zPfx;
1616 1784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1617 1785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( aField[i].zAppend && aField[i].zAppend[0] ){
1618 1786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zPfx = " +";
1619 1787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zValue = aField[i].zAppend;
1788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aUsed[i] = JCARD_APPEND;
1620 1789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( aField[i].zValue && aField[i].zValue[0] ){
1621 1790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zPfx = " ";
1622 1791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zValue = aField[i].zValue;
1792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aUsed[i] = JCARD_ASSIGN;
1623 1793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1624 1794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue;
1625 1795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1626 1796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( memcmp(aField[i].zName, "private_", 8)==0 ){
1627 1797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zValue = db_conceal(zValue, strlen(zValue));
1628 1798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&tktchng, "J%s%s %s\n", zPfx, aField[i].zName, zValue);
1799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aUsed[i] = JCARD_PRIVATE;
1629 1800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1630 1801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&tktchng, "J%s%s %#F\n", zPfx,
1631 1802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aField[i].zName, strlen(zValue), zValue);
1632 1803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1633 1804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1634 1805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&tktchng, "K %s\n", zTktUuid);
1635 1806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&tktchng, "U %F\n", zUser);
1636 1807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
md5sum_blob(&tktchng, &cksum);
1637 1808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_appendf(&tktchng, "Z %b\n", &cksum);
1638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ticket_put(&tktchng, zTktUuid, ticket_need_moderation(1))==0 ){
1809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ticket_put(&tktchng, zTktUuid, aUsed,
1810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ticket_need_moderation(1) )==0 ){
1639 1811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_fatal("%s", g.zErrMsg);
1640 1812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
1641 1813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_print("ticket %s succeeded for %s\n",
1642 1814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(eCmd==set?"set":"add"),zTktUuid);
1643 1815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fossil_free( aUsed );
1644 1817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1645 1818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1646 1819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1647 1820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1648 1821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1649 1822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!