Fossil SCM

Added ?#-n|--limit #? option to (fossil tag find).

stephan 2013-08-03 16:22 UTC trunk
Commit 73135ec22aa14325ac66815567c5540799258dc5
1 file changed +19 -5
+19 -5
--- src/tag.c
+++ src/tag.c
@@ -348,14 +348,15 @@
348348
** %fossil tag cancel ?--raw? TAGNAME CHECK-IN
349349
**
350350
** Remove the tag TAGNAME from CHECK-IN, and also remove
351351
** the propagation of the tag to any descendants.
352352
**
353
-** %fossil tag find ?--raw? ?-t|--type TYPE? TAGNAME
353
+** %fossil tag find ?--raw? ?-t|--type TYPE? ?-n|--limit #? TAGNAME
354354
**
355355
** List all objects that use TAGNAME. TYPE can be "ci" for
356
-** checkins or "e" for events.
356
+** checkins or "e" for events. The limit option limits the number
357
+** of results to the given value.
357358
**
358359
** %fossil tag list ?--raw? ?CHECK-IN?
359360
**
360361
** List all tags, or if CHECK-IN is supplied, list
361362
** all tags and their values for CHECK-IN.
@@ -387,10 +388,12 @@
387388
void tag_cmd(void){
388389
int n;
389390
int fRaw = find_option("raw","",0)!=0;
390391
int fPropagate = find_option("propagate","",0)!=0;
391392
const char *zPrefix = fRaw ? "" : "sym-";
393
+ char const * zFindLimit = find_option("limit","n",1);
394
+ int const nFindLimit = zFindLimit ? atoi(zFindLimit) : 0;
392395
393396
db_find_and_open_repository(0, 0);
394397
if( g.argc<3 ){
395398
goto tag_cmd_usage;
396399
}
@@ -428,40 +431,51 @@
428431
}else
429432
430433
if( strncmp(g.argv[2],"find",n)==0 ){
431434
Stmt q;
432435
const char *zType = find_option("type","t",1);
436
+ Blob sql = empty_blob;
433437
if( zType==0 || zType[0]==0 ) zType = "*";
434438
if( g.argc!=4 ){
435
- usage("find ?--raw? ?-t|--type TYPE? TAGNAME");
439
+ usage("find ?--raw? ?-t|--type TYPE? ?-n|--limit #? TAGNAME");
436440
}
437441
if( fRaw ){
438
- db_prepare(&q,
442
+ blob_appendf(&sql,
439443
"SELECT blob.uuid FROM tagxref, blob"
440444
" WHERE tagid=(SELECT tagid FROM tag WHERE tagname=%Q)"
441445
" AND tagxref.tagtype>0"
442446
" AND blob.rid=tagxref.rid",
443447
g.argv[3]
444448
);
449
+ if(nFindLimit>0){
450
+ blob_appendf(&sql, " LIMIT %d", nFindLimit);
451
+ }
452
+ db_prepare(&q, "%s", blob_str(&sql));
453
+ blob_reset(&sql);
445454
while( db_step(&q)==SQLITE_ROW ){
446455
fossil_print("%s\n", db_column_text(&q, 0));
447456
}
448457
db_finalize(&q);
449458
}else{
450459
int tagid = db_int(0, "SELECT tagid FROM tag WHERE tagname='sym-%q'",
451460
g.argv[3]);
452461
if( tagid>0 ){
453
- db_prepare(&q,
462
+ blob_appendf(&sql,
454463
"%s"
455464
" AND event.type GLOB '%q'"
456465
" AND blob.rid IN ("
457466
" SELECT rid FROM tagxref"
458467
" WHERE tagtype>0 AND tagid=%d"
459468
")"
460469
" ORDER BY event.mtime DESC",
461470
timeline_query_for_tty(), zType, tagid
462471
);
472
+ if(nFindLimit>0){
473
+ blob_appendf(&sql, " LIMIT %d", nFindLimit);
474
+ }
475
+ db_prepare(&q, "%s", blob_str(&sql));
476
+ blob_reset(&sql);
463477
print_timeline(&q, 2000, 0);
464478
db_finalize(&q);
465479
}
466480
}
467481
}else
468482
--- src/tag.c
+++ src/tag.c
@@ -348,14 +348,15 @@
348 ** %fossil tag cancel ?--raw? TAGNAME CHECK-IN
349 **
350 ** Remove the tag TAGNAME from CHECK-IN, and also remove
351 ** the propagation of the tag to any descendants.
352 **
353 ** %fossil tag find ?--raw? ?-t|--type TYPE? TAGNAME
354 **
355 ** List all objects that use TAGNAME. TYPE can be "ci" for
356 ** checkins or "e" for events.
 
357 **
358 ** %fossil tag list ?--raw? ?CHECK-IN?
359 **
360 ** List all tags, or if CHECK-IN is supplied, list
361 ** all tags and their values for CHECK-IN.
@@ -387,10 +388,12 @@
387 void tag_cmd(void){
388 int n;
389 int fRaw = find_option("raw","",0)!=0;
390 int fPropagate = find_option("propagate","",0)!=0;
391 const char *zPrefix = fRaw ? "" : "sym-";
 
 
392
393 db_find_and_open_repository(0, 0);
394 if( g.argc<3 ){
395 goto tag_cmd_usage;
396 }
@@ -428,40 +431,51 @@
428 }else
429
430 if( strncmp(g.argv[2],"find",n)==0 ){
431 Stmt q;
432 const char *zType = find_option("type","t",1);
 
433 if( zType==0 || zType[0]==0 ) zType = "*";
434 if( g.argc!=4 ){
435 usage("find ?--raw? ?-t|--type TYPE? TAGNAME");
436 }
437 if( fRaw ){
438 db_prepare(&q,
439 "SELECT blob.uuid FROM tagxref, blob"
440 " WHERE tagid=(SELECT tagid FROM tag WHERE tagname=%Q)"
441 " AND tagxref.tagtype>0"
442 " AND blob.rid=tagxref.rid",
443 g.argv[3]
444 );
 
 
 
 
 
445 while( db_step(&q)==SQLITE_ROW ){
446 fossil_print("%s\n", db_column_text(&q, 0));
447 }
448 db_finalize(&q);
449 }else{
450 int tagid = db_int(0, "SELECT tagid FROM tag WHERE tagname='sym-%q'",
451 g.argv[3]);
452 if( tagid>0 ){
453 db_prepare(&q,
454 "%s"
455 " AND event.type GLOB '%q'"
456 " AND blob.rid IN ("
457 " SELECT rid FROM tagxref"
458 " WHERE tagtype>0 AND tagid=%d"
459 ")"
460 " ORDER BY event.mtime DESC",
461 timeline_query_for_tty(), zType, tagid
462 );
 
 
 
 
 
463 print_timeline(&q, 2000, 0);
464 db_finalize(&q);
465 }
466 }
467 }else
468
--- src/tag.c
+++ src/tag.c
@@ -348,14 +348,15 @@
348 ** %fossil tag cancel ?--raw? TAGNAME CHECK-IN
349 **
350 ** Remove the tag TAGNAME from CHECK-IN, and also remove
351 ** the propagation of the tag to any descendants.
352 **
353 ** %fossil tag find ?--raw? ?-t|--type TYPE? ?-n|--limit #? TAGNAME
354 **
355 ** List all objects that use TAGNAME. TYPE can be "ci" for
356 ** checkins or "e" for events. The limit option limits the number
357 ** of results to the given value.
358 **
359 ** %fossil tag list ?--raw? ?CHECK-IN?
360 **
361 ** List all tags, or if CHECK-IN is supplied, list
362 ** all tags and their values for CHECK-IN.
@@ -387,10 +388,12 @@
388 void tag_cmd(void){
389 int n;
390 int fRaw = find_option("raw","",0)!=0;
391 int fPropagate = find_option("propagate","",0)!=0;
392 const char *zPrefix = fRaw ? "" : "sym-";
393 char const * zFindLimit = find_option("limit","n",1);
394 int const nFindLimit = zFindLimit ? atoi(zFindLimit) : 0;
395
396 db_find_and_open_repository(0, 0);
397 if( g.argc<3 ){
398 goto tag_cmd_usage;
399 }
@@ -428,40 +431,51 @@
431 }else
432
433 if( strncmp(g.argv[2],"find",n)==0 ){
434 Stmt q;
435 const char *zType = find_option("type","t",1);
436 Blob sql = empty_blob;
437 if( zType==0 || zType[0]==0 ) zType = "*";
438 if( g.argc!=4 ){
439 usage("find ?--raw? ?-t|--type TYPE? ?-n|--limit #? TAGNAME");
440 }
441 if( fRaw ){
442 blob_appendf(&sql,
443 "SELECT blob.uuid FROM tagxref, blob"
444 " WHERE tagid=(SELECT tagid FROM tag WHERE tagname=%Q)"
445 " AND tagxref.tagtype>0"
446 " AND blob.rid=tagxref.rid",
447 g.argv[3]
448 );
449 if(nFindLimit>0){
450 blob_appendf(&sql, " LIMIT %d", nFindLimit);
451 }
452 db_prepare(&q, "%s", blob_str(&sql));
453 blob_reset(&sql);
454 while( db_step(&q)==SQLITE_ROW ){
455 fossil_print("%s\n", db_column_text(&q, 0));
456 }
457 db_finalize(&q);
458 }else{
459 int tagid = db_int(0, "SELECT tagid FROM tag WHERE tagname='sym-%q'",
460 g.argv[3]);
461 if( tagid>0 ){
462 blob_appendf(&sql,
463 "%s"
464 " AND event.type GLOB '%q'"
465 " AND blob.rid IN ("
466 " SELECT rid FROM tagxref"
467 " WHERE tagtype>0 AND tagid=%d"
468 ")"
469 " ORDER BY event.mtime DESC",
470 timeline_query_for_tty(), zType, tagid
471 );
472 if(nFindLimit>0){
473 blob_appendf(&sql, " LIMIT %d", nFindLimit);
474 }
475 db_prepare(&q, "%s", blob_str(&sql));
476 blob_reset(&sql);
477 print_timeline(&q, 2000, 0);
478 db_finalize(&q);
479 }
480 }
481 }else
482

Keyboard Shortcuts

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