@@ -273,11 +273,11 @@
273 273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( name_to_uuid(&uuid, 9) ){
274 274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
275 275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
276 276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rid = name_to_rid(blob_str(&uuid));
277 277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
blob_zero(&ctrl);
278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
279 279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( validate16(zTagname, strlen(zTagname)) ){
280 280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_fatal("invalid tag name \"%s\" - might be confused with a UUID",
281 281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zTagname);
282 282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
283 283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zDate = db_text(0, "SELECT datetime('now')");
@@ -305,77 +305,109 @@
305 305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** COMMAND: tag
306 306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Usage: %fossil tag SUBCOMMAND ...
307 307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
308 308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Run various subcommands to control tags and properties
309 309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** %fossil tag add TAGNAME UUID ?VALUE?
310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** %fossil tag add ?--raw? TAGNAME UUID ?VALUE?
311 311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Add a new tag or property to UUID.
312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Add a new tag or property to UUID. The tag will
313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be usable instead of a UUID in commands like
314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** update and the like.
313 315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** %fossil tag branch TAGNAME UUID ?VALUE?
316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** %fossil tag branch ?--raw? TAGNAME UUID ?VALUE?
315 317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
316 318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Add a new tag or property to UUID and make that
317 319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** tag propagate to all direct children.
318 320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** %fossil tag delete TAGNAME UUID
321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** %fossil tag delete ?--raw? TAGNAME UUID
320 322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
321 323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Delete the tag TAGNAME from UUID
322 324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** %fossil tag find TAGNAME
325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** %fossil tag find ?--raw? TAGNAME
324 326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
325 327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** List all baselines that use TAGNAME
326 328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** %fossil tag list ?UUID?
329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** %fossil tag list ?--raw? ?UUID?
328 330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
329 331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** List all tags, or if UUID is supplied, list
330 332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** all tags and their values for UUID.
333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The option ?--raw? is to expose the internal interface
335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for tag handling. This option is not necessary for the
336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** normal use.
337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If you use a tagname that might be confused with a UUID,
339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** you have to explicitly disambiguate it by prefixing it
340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** with "tag:". For instance:
341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fossil update cfcfcfee
343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is not the same as:
345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fossil update tag:cfcfcfee
347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The first will be taken as UUID and fossil will complain
349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if no such revision was found, and the second one expect
350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** "cfcfcfee" to be a tag/branch name!
351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
331 352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
332 353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void tag_cmd(void){
333 354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n;
355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int raw = find_option("raw","",0)!=0;
356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *prefix = raw ? "" : "sym-";
357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int preflen = strlen(prefix);
358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Blob tagname;
359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
334 360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_find_and_open_repository(1);
335 361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.argc<3 ){
336 362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto tag_cmd_usage;
337 363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
338 364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n = strlen(g.argv[2]);
339 365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( n==0 ){
340 366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto tag_cmd_usage;
341 367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_set(&tagname, prefix);
342 370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
343 371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( strncmp(g.argv[2],"add",n)==0 ){
344 372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zValue;
345 373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.argc!=5 && g.argc!=6 ){
346 374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
usage("add TAGNAME UUID ?VALUE?");
347 375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(&tagname, g.argv[3], strlen(g.argv[3]));
348 377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zValue = g.argc==6 ? g.argv[5] : 0;
349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tag_add_artifact(g.argv[3], g.argv[4], zValue, 1);
378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tag_add_artifact(blob_str(&tagname), g.argv[4], zValue, 1);
350 379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
351 380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
352 381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( strncmp(g.argv[2],"branch",n)==0 ){
353 382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zValue;
354 383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.argc!=5 && g.argc!=6 ){
355 384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
usage("branch TAGNAME UUID ?VALUE?");
356 385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(&tagname, g.argv[3], strlen(g.argv[3]));
357 387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zValue = g.argc==6 ? g.argv[5] : 0;
358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tag_add_artifact(g.argv[3], g.argv[4], zValue, 2);
388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tag_add_artifact(blob_str(&tagname), g.argv[4], zValue, 2);
359 389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
360 390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
361 391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( strncmp(g.argv[2],"delete",n)==0 ){
362 392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.argc!=5 ){
363 393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
usage("delete TAGNAME UUID");
364 394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tag_add_artifact(g.argv[3], g.argv[4], 0, 0);
395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(&tagname, g.argv[3], strlen(g.argv[3]));
396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tag_add_artifact(blob_str(&tagname), g.argv[4], 0, 0);
366 397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
367 398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
368 399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( strncmp(g.argv[2],"find",n)==0 ){
369 400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Stmt q;
370 401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.argc!=4 ){
371 402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
usage("find TAGNAME");
372 403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_append(&tagname, g.argv[3], strlen(g.argv[3]));
373 405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&q,
374 406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"SELECT blob.uuid FROM tagxref, blob"
375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " WHERE tagid=(SELECT tagid FROM tag WHERE tagname=%Q)"
376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " AND blob.rid=tagxref.rid", g.argv[3]
407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " WHERE tagid=(SELECT tagid FROM tag WHERE tagname=%B)"
408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " AND blob.rid=tagxref.rid", &tagname
377 409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
378 410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( db_step(&q)==SQLITE_ROW ){
379 411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
printf("%s\n", db_column_text(&q, 0));
380 412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
381 413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_finalize(&q);
@@ -391,11 +423,14 @@
391 423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" WHERE tagid=tag.tagid"
392 424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" AND tagtype>0)"
393 425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" ORDER BY tagname"
394 426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
395 427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( db_step(&q)==SQLITE_ROW ){
396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("%s\n", db_column_text(&q, 0));
428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *name = db_column_text(&q, 0);
429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( raw || strncmp(name, prefix, preflen)==0 ){
430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ printf("%s\n", name+preflen);
431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
397 432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
398 433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_finalize(&q);
399 434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( g.argc==4 ){
400 435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rid = name_to_rid(g.argv[3]);
401 436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_prepare(&q,
@@ -408,13 +443,17 @@
408 443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
409 444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( db_step(&q)==SQLITE_ROW ){
410 445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName = db_column_text(&q, 0);
411 446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zValue = db_column_text(&q, 1);
412 447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zValue ){
413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("%s=%s\n", zName, zValue);
448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( raw || strncmp(zName, prefix, preflen)==0 ){
449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ printf("%s=%s\n", zName+preflen, zValue);
450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
414 451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("%s\n", zName);
452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( raw || strncmp(zName, prefix, preflen)==0 ){
453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ printf("%s\n", zName+preflen);
454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
416 455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
417 456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
418 457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_finalize(&q);
419 458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
420 459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
usage("tag list ?UUID?");
@@ -421,10 +460,13 @@
421 460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
422 461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
423 462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
424 463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto tag_cmd_usage;
425 464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Cleanup */
467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ blob_reset(&tagname);
426 468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
427 469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
428 470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tag_cmd_usage:
429 471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
usage("add|branch|delete|find|list ...");
430 472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
431 473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!