Fossil SCM

Try to align the "fossil tag find" command with the documented behavior (search all tag types) and also don't require foreknowledge of the special prefixes (e.g. "sym-", "wiki-", etc.) while still allowing those to work if known.

andybradford 2025-12-05 15:15 trunk merge
Commit fbe5269b7f53baa446d73898775484795b1bb2be189e64c4550f3bcfb4d9f0c7
1 file changed +20 -22
+20 -22
--- src/tag.c
+++ src/tag.c
@@ -587,21 +587,23 @@
587587
int fRaw = find_option("raw","",0)!=0;
588588
const char *zFindLimit = find_option("limit","n",1);
589589
const int nFindLimit = zFindLimit ? atoi(zFindLimit) : -2000;
590590
const char *zType = find_option("type","t",1);
591591
Blob sql = empty_blob;
592
+ const char *zTag;
592593
if( zType==0 || zType[0]==0 ) zType = "*";
593594
if( g.argc!=4 ){
594595
usage("find ?--raw? ?-t|--type TYPE? ?-n|--limit #? TAGNAME");
595596
}
597
+ zTag = g.argv[3];
596598
if( fRaw ){
597599
blob_append_sql(&sql,
598600
"SELECT blob.uuid FROM tagxref, blob"
599601
" WHERE tagid=(SELECT tagid FROM tag WHERE tagname=%Q)"
600602
" AND tagxref.tagtype>0"
601603
" AND blob.rid=tagxref.rid",
602
- g.argv[3]
604
+ zTag
603605
);
604606
if( nFindLimit>0 ){
605607
blob_append_sql(&sql, " LIMIT %d", nFindLimit);
606608
}
607609
db_prepare(&q, "%s", blob_sql_text(&sql));
@@ -609,31 +611,27 @@
609611
while( db_step(&q)==SQLITE_ROW ){
610612
fossil_print("%s\n", db_column_text(&q, 0));
611613
}
612614
db_finalize(&q);
613615
}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);
635633
}
636634
}else
637635
638636
if(( strncmp(g.argv[2],"list",n)==0 )||( strncmp(g.argv[2],"ls",n)==0 )){
639637
Stmt q;
640638
--- 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

Keyboard Shortcuts

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