@@ -166,39 +166,40 @@
166 166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cPrevType = z[0];
167 167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
seenHeader = 1;
168 168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( blob_token(&line, &token)!=1 ) goto manifest_syntax_error;
169 169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( z[0] ){
170 170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** A (+|-)<filename> target source
171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** A <filename> <target> ?<source>?
172 172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
173 173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Identifies an attachment to either a wiki page or a ticket.
174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** <uuid> is the artifact that is the attachment.
174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <source> is the artifact that is the attachment. <source>
175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is omitted to delete an attachment. <target> is the name of
176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a wiki page or ticket to which that attachment is connected.
175 177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
176 178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 'A': {
177 179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zName, *zTarget, *zSrc;
178 180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
md5sum_step_text(blob_buffer(&line), blob_size(&line));
179 181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( blob_token(&line, &a1)==0 ) goto manifest_syntax_error;
180 182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( blob_token(&line, &a2)==0 ) goto manifest_syntax_error;
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( blob_token(&line, &a3)==0 ) goto manifest_syntax_error;
182 183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->zAttachName!=0 ) goto manifest_syntax_error;
183 184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zName = blob_terminate(&a1);
184 185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zTarget = blob_terminate(&a2);
186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_token(&line, &a3);
185 187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zSrc = blob_terminate(&a3);
186 188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
defossilize(zName);
187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zName[0]!='+' && zName[0]!='-' ){
188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- goto manifest_syntax_error;
189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !file_is_simple_pathname(&zName[1]) ){
189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !file_is_simple_pathname(zName) ){
191 190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto manifest_syntax_error;
192 191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
193 192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
defossilize(zTarget);
194 193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (blob_size(&a2)!=UUID_SIZE || !validate16(zTarget, UUID_SIZE))
195 194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& !wiki_name_is_wellformed((const unsigned char *)zTarget) ){
196 195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto manifest_syntax_error;
197 196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( blob_size(&a3)!=UUID_SIZE ) goto manifest_syntax_error;
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !validate16(zSrc, UUID_SIZE) ) goto manifest_syntax_error;
197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( blob_size(&a3)>0
198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (blob_size(&a3)!=UUID_SIZE || !validate16(zSrc, UUID_SIZE)) ){
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ goto manifest_syntax_error;
200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
200 201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->zAttachName = zName;
201 202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->zAttachSrc = zSrc;
202 203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->zAttachTarget = zTarget;
203 204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
204 205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -622,10 +623,11 @@
622 623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( p->zAttachName ){
623 624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->nCChild>0 ) goto manifest_syntax_error;
624 625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->rDate==0.0 ) goto manifest_syntax_error;
625 626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->zTicketUuid ) goto manifest_syntax_error;
626 627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->zWikiTitle ) goto manifest_syntax_error;
628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !seenZ ) goto manifest_syntax_error;
627 629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->type = CFTYPE_ATTACHMENT;
628 630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
629 631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->nCChild>0 ) goto manifest_syntax_error;
630 632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->rDate<=0.0 ) goto manifest_syntax_error;
631 633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->nParent>0 ) goto manifest_syntax_error;
@@ -1114,10 +1116,23 @@
1114 1116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zTag = mprintf("tkt-%s", m.zTicketUuid);
1115 1117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tag_insert(zTag, 1, 0, rid, m.rDate, rid);
1116 1118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free(zTag);
1117 1119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_multi_exec("INSERT OR IGNORE INTO pending_tkt VALUES(%Q)",
1118 1120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
m.zTicketUuid);
1121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
1122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( m.type==CFTYPE_ATTACHMENT ){
1123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_multi_exec(
1124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "INSERT OR IGNORE INTO attachment(mtime, target, filename)"
1125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "VALUES(0.0,%Q,%Q)",
1126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ m.zAttachTarget, m.zAttachName
1127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
1128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_multi_exec(
1129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "UPDATE attachment SET mtime=%.17g, src=%Q, comment=%Q, user=%Q"
1130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " WHERE mtime<%.17g AND target=%Q AND filename=%Q",
1131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ m.rDate, m.zAttachSrc, m.zComment, m.zUser,
1132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ m.rDate, m.zAttachTarget, m.zAttachName
1133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
1119 1134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1120 1135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_end_transaction(0);
1121 1136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
manifest_clear(&m);
1122 1137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
1123 1138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
1124 1139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!