Fossil SCM
Enable "fossil tag find" to find all occurrences of a given tag name whether check-in, event, wiki page, or ticket, as the help suggests is the default, while leaving the "raw" behavior unchanged.
Commit
378f0a5bb54d3a176102e6a666178123c82b388cc1fa29c9b38edc84eab18c55
Parent
524a3fec657d832…
1 file changed
+20
-22
+20
-22
| --- src/tag.c | ||
| +++ src/tag.c | ||
| @@ -587,21 +587,23 @@ | ||
| 587 | 587 | int fRaw = find_option("raw","",0)!=0; |
| 588 | 588 | const char *zFindLimit = find_option("limit","n",1); |
| 589 | 589 | const int nFindLimit = zFindLimit ? atoi(zFindLimit) : -2000; |
| 590 | 590 | const char *zType = find_option("type","t",1); |
| 591 | 591 | Blob sql = empty_blob; |
| 592 | + const char *zTag; | |
| 592 | 593 | if( zType==0 || zType[0]==0 ) zType = "*"; |
| 593 | 594 | if( g.argc!=4 ){ |
| 594 | 595 | usage("find ?--raw? ?-t|--type TYPE? ?-n|--limit #? TAGNAME"); |
| 595 | 596 | } |
| 597 | + zTag = g.argv[3]; | |
| 596 | 598 | if( fRaw ){ |
| 597 | 599 | blob_append_sql(&sql, |
| 598 | 600 | "SELECT blob.uuid FROM tagxref, blob" |
| 599 | 601 | " WHERE tagid=(SELECT tagid FROM tag WHERE tagname=%Q)" |
| 600 | 602 | " AND tagxref.tagtype>0" |
| 601 | 603 | " AND blob.rid=tagxref.rid", |
| 602 | - g.argv[3] | |
| 604 | + zTag | |
| 603 | 605 | ); |
| 604 | 606 | if( nFindLimit>0 ){ |
| 605 | 607 | blob_append_sql(&sql, " LIMIT %d", nFindLimit); |
| 606 | 608 | } |
| 607 | 609 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| @@ -609,31 +611,27 @@ | ||
| 609 | 611 | while( db_step(&q)==SQLITE_ROW ){ |
| 610 | 612 | fossil_print("%s\n", db_column_text(&q, 0)); |
| 611 | 613 | } |
| 612 | 614 | db_finalize(&q); |
| 613 | 615 | }else{ |
| 614 | - int tagid = db_int(0, "SELECT tagid FROM tag " | |
| 615 | - "WHERE tagname='%s%q'", | |
| 616 | - (zType && 'c'==zType[0]) | |
| 617 | - ? "sym-" : ""/*safe-for-%s*/, | |
| 618 | - g.argv[3]); | |
| 619 | - if( tagid>0 ){ | |
| 620 | - blob_append_sql(&sql, | |
| 621 | - "%s" | |
| 622 | - " AND event.type GLOB '%q'" | |
| 623 | - " AND blob.rid IN (" | |
| 624 | - " SELECT rid FROM tagxref" | |
| 625 | - " WHERE tagtype>0 AND tagid=%d" | |
| 626 | - ")" | |
| 627 | - " ORDER BY event.mtime DESC /*sort*/", | |
| 628 | - timeline_query_for_tty(), zType, tagid | |
| 629 | - ); | |
| 630 | - db_prepare(&q, "%s", blob_sql_text(&sql)); | |
| 631 | - blob_reset(&sql); | |
| 632 | - print_timeline(&q, nFindLimit, 79, 0, 0); | |
| 633 | - db_finalize(&q); | |
| 634 | - } | |
| 616 | + blob_append_sql(&sql, | |
| 617 | + "%s" | |
| 618 | + " AND event.type GLOB '%q'" | |
| 619 | + " AND blob.rid IN (" | |
| 620 | + " SELECT rid FROM tagxref" | |
| 621 | + " WHERE tagtype>0 AND tagid IN (" | |
| 622 | + " SELECT tagid FROM tag WHERE tagname IN " | |
| 623 | + " ('%q','sym-%q','wiki-%q','tkt-%q','event-%q')" | |
| 624 | + " )" | |
| 625 | + ")" | |
| 626 | + " ORDER BY event.mtime DESC /*sort*/", | |
| 627 | + timeline_query_for_tty(), zType, zTag, zTag, zTag, zTag, zTag | |
| 628 | + ); | |
| 629 | + db_prepare(&q, "%s", blob_sql_text(&sql)); | |
| 630 | + blob_reset(&sql); | |
| 631 | + print_timeline(&q, nFindLimit, 79, 0, 0); | |
| 632 | + db_finalize(&q); | |
| 635 | 633 | } |
| 636 | 634 | }else |
| 637 | 635 | |
| 638 | 636 | if(( strncmp(g.argv[2],"list",n)==0 )||( strncmp(g.argv[2],"ls",n)==0 )){ |
| 639 | 637 | Stmt q; |
| 640 | 638 |
| --- src/tag.c | |
| +++ src/tag.c | |
| @@ -587,21 +587,23 @@ | |
| 587 | int fRaw = find_option("raw","",0)!=0; |
| 588 | const char *zFindLimit = find_option("limit","n",1); |
| 589 | const int nFindLimit = zFindLimit ? atoi(zFindLimit) : -2000; |
| 590 | const char *zType = find_option("type","t",1); |
| 591 | Blob sql = empty_blob; |
| 592 | if( zType==0 || zType[0]==0 ) zType = "*"; |
| 593 | if( g.argc!=4 ){ |
| 594 | usage("find ?--raw? ?-t|--type TYPE? ?-n|--limit #? TAGNAME"); |
| 595 | } |
| 596 | if( fRaw ){ |
| 597 | blob_append_sql(&sql, |
| 598 | "SELECT blob.uuid FROM tagxref, blob" |
| 599 | " WHERE tagid=(SELECT tagid FROM tag WHERE tagname=%Q)" |
| 600 | " AND tagxref.tagtype>0" |
| 601 | " AND blob.rid=tagxref.rid", |
| 602 | g.argv[3] |
| 603 | ); |
| 604 | if( nFindLimit>0 ){ |
| 605 | blob_append_sql(&sql, " LIMIT %d", nFindLimit); |
| 606 | } |
| 607 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| @@ -609,31 +611,27 @@ | |
| 609 | while( db_step(&q)==SQLITE_ROW ){ |
| 610 | fossil_print("%s\n", db_column_text(&q, 0)); |
| 611 | } |
| 612 | db_finalize(&q); |
| 613 | }else{ |
| 614 | int tagid = db_int(0, "SELECT tagid FROM tag " |
| 615 | "WHERE tagname='%s%q'", |
| 616 | (zType && 'c'==zType[0]) |
| 617 | ? "sym-" : ""/*safe-for-%s*/, |
| 618 | g.argv[3]); |
| 619 | if( tagid>0 ){ |
| 620 | blob_append_sql(&sql, |
| 621 | "%s" |
| 622 | " AND event.type GLOB '%q'" |
| 623 | " AND blob.rid IN (" |
| 624 | " SELECT rid FROM tagxref" |
| 625 | " WHERE tagtype>0 AND tagid=%d" |
| 626 | ")" |
| 627 | " ORDER BY event.mtime DESC /*sort*/", |
| 628 | timeline_query_for_tty(), zType, tagid |
| 629 | ); |
| 630 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| 631 | blob_reset(&sql); |
| 632 | print_timeline(&q, nFindLimit, 79, 0, 0); |
| 633 | db_finalize(&q); |
| 634 | } |
| 635 | } |
| 636 | }else |
| 637 | |
| 638 | if(( strncmp(g.argv[2],"list",n)==0 )||( strncmp(g.argv[2],"ls",n)==0 )){ |
| 639 | Stmt q; |
| 640 |
| --- src/tag.c | |
| +++ src/tag.c | |
| @@ -587,21 +587,23 @@ | |
| 587 | int fRaw = find_option("raw","",0)!=0; |
| 588 | const char *zFindLimit = find_option("limit","n",1); |
| 589 | const int nFindLimit = zFindLimit ? atoi(zFindLimit) : -2000; |
| 590 | const char *zType = find_option("type","t",1); |
| 591 | Blob sql = empty_blob; |
| 592 | const char *zTag; |
| 593 | if( zType==0 || zType[0]==0 ) zType = "*"; |
| 594 | if( g.argc!=4 ){ |
| 595 | usage("find ?--raw? ?-t|--type TYPE? ?-n|--limit #? TAGNAME"); |
| 596 | } |
| 597 | zTag = g.argv[3]; |
| 598 | if( fRaw ){ |
| 599 | blob_append_sql(&sql, |
| 600 | "SELECT blob.uuid FROM tagxref, blob" |
| 601 | " WHERE tagid=(SELECT tagid FROM tag WHERE tagname=%Q)" |
| 602 | " AND tagxref.tagtype>0" |
| 603 | " AND blob.rid=tagxref.rid", |
| 604 | zTag |
| 605 | ); |
| 606 | if( nFindLimit>0 ){ |
| 607 | blob_append_sql(&sql, " LIMIT %d", nFindLimit); |
| 608 | } |
| 609 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| @@ -609,31 +611,27 @@ | |
| 611 | while( db_step(&q)==SQLITE_ROW ){ |
| 612 | fossil_print("%s\n", db_column_text(&q, 0)); |
| 613 | } |
| 614 | db_finalize(&q); |
| 615 | }else{ |
| 616 | blob_append_sql(&sql, |
| 617 | "%s" |
| 618 | " AND event.type GLOB '%q'" |
| 619 | " AND blob.rid IN (" |
| 620 | " SELECT rid FROM tagxref" |
| 621 | " WHERE tagtype>0 AND tagid IN (" |
| 622 | " SELECT tagid FROM tag WHERE tagname IN " |
| 623 | " ('%q','sym-%q','wiki-%q','tkt-%q','event-%q')" |
| 624 | " )" |
| 625 | ")" |
| 626 | " ORDER BY event.mtime DESC /*sort*/", |
| 627 | timeline_query_for_tty(), zType, zTag, zTag, zTag, zTag, zTag |
| 628 | ); |
| 629 | db_prepare(&q, "%s", blob_sql_text(&sql)); |
| 630 | blob_reset(&sql); |
| 631 | print_timeline(&q, nFindLimit, 79, 0, 0); |
| 632 | db_finalize(&q); |
| 633 | } |
| 634 | }else |
| 635 | |
| 636 | if(( strncmp(g.argv[2],"list",n)==0 )||( strncmp(g.argv[2],"ls",n)==0 )){ |
| 637 | Stmt q; |
| 638 |