Fossil SCM
Added ?#-n|--limit #? option to (fossil tag find).
Commit
73135ec22aa14325ac66815567c5540799258dc5
Parent
f25bdf6e84498da…
1 file changed
+19
-5
+19
-5
| --- src/tag.c | ||
| +++ src/tag.c | ||
| @@ -348,14 +348,15 @@ | ||
| 348 | 348 | ** %fossil tag cancel ?--raw? TAGNAME CHECK-IN |
| 349 | 349 | ** |
| 350 | 350 | ** Remove the tag TAGNAME from CHECK-IN, and also remove |
| 351 | 351 | ** the propagation of the tag to any descendants. |
| 352 | 352 | ** |
| 353 | -** %fossil tag find ?--raw? ?-t|--type TYPE? TAGNAME | |
| 353 | +** %fossil tag find ?--raw? ?-t|--type TYPE? ?-n|--limit #? TAGNAME | |
| 354 | 354 | ** |
| 355 | 355 | ** 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. | |
| 357 | 358 | ** |
| 358 | 359 | ** %fossil tag list ?--raw? ?CHECK-IN? |
| 359 | 360 | ** |
| 360 | 361 | ** List all tags, or if CHECK-IN is supplied, list |
| 361 | 362 | ** all tags and their values for CHECK-IN. |
| @@ -387,10 +388,12 @@ | ||
| 387 | 388 | void tag_cmd(void){ |
| 388 | 389 | int n; |
| 389 | 390 | int fRaw = find_option("raw","",0)!=0; |
| 390 | 391 | int fPropagate = find_option("propagate","",0)!=0; |
| 391 | 392 | const char *zPrefix = fRaw ? "" : "sym-"; |
| 393 | + char const * zFindLimit = find_option("limit","n",1); | |
| 394 | + int const nFindLimit = zFindLimit ? atoi(zFindLimit) : 0; | |
| 392 | 395 | |
| 393 | 396 | db_find_and_open_repository(0, 0); |
| 394 | 397 | if( g.argc<3 ){ |
| 395 | 398 | goto tag_cmd_usage; |
| 396 | 399 | } |
| @@ -428,40 +431,51 @@ | ||
| 428 | 431 | }else |
| 429 | 432 | |
| 430 | 433 | if( strncmp(g.argv[2],"find",n)==0 ){ |
| 431 | 434 | Stmt q; |
| 432 | 435 | const char *zType = find_option("type","t",1); |
| 436 | + Blob sql = empty_blob; | |
| 433 | 437 | if( zType==0 || zType[0]==0 ) zType = "*"; |
| 434 | 438 | if( g.argc!=4 ){ |
| 435 | - usage("find ?--raw? ?-t|--type TYPE? TAGNAME"); | |
| 439 | + usage("find ?--raw? ?-t|--type TYPE? ?-n|--limit #? TAGNAME"); | |
| 436 | 440 | } |
| 437 | 441 | if( fRaw ){ |
| 438 | - db_prepare(&q, | |
| 442 | + blob_appendf(&sql, | |
| 439 | 443 | "SELECT blob.uuid FROM tagxref, blob" |
| 440 | 444 | " WHERE tagid=(SELECT tagid FROM tag WHERE tagname=%Q)" |
| 441 | 445 | " AND tagxref.tagtype>0" |
| 442 | 446 | " AND blob.rid=tagxref.rid", |
| 443 | 447 | g.argv[3] |
| 444 | 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); | |
| 445 | 454 | while( db_step(&q)==SQLITE_ROW ){ |
| 446 | 455 | fossil_print("%s\n", db_column_text(&q, 0)); |
| 447 | 456 | } |
| 448 | 457 | db_finalize(&q); |
| 449 | 458 | }else{ |
| 450 | 459 | int tagid = db_int(0, "SELECT tagid FROM tag WHERE tagname='sym-%q'", |
| 451 | 460 | g.argv[3]); |
| 452 | 461 | if( tagid>0 ){ |
| 453 | - db_prepare(&q, | |
| 462 | + blob_appendf(&sql, | |
| 454 | 463 | "%s" |
| 455 | 464 | " AND event.type GLOB '%q'" |
| 456 | 465 | " AND blob.rid IN (" |
| 457 | 466 | " SELECT rid FROM tagxref" |
| 458 | 467 | " WHERE tagtype>0 AND tagid=%d" |
| 459 | 468 | ")" |
| 460 | 469 | " ORDER BY event.mtime DESC", |
| 461 | 470 | timeline_query_for_tty(), zType, tagid |
| 462 | 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); | |
| 463 | 477 | print_timeline(&q, 2000, 0); |
| 464 | 478 | db_finalize(&q); |
| 465 | 479 | } |
| 466 | 480 | } |
| 467 | 481 | }else |
| 468 | 482 |
| --- 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 |