Fossil SCM

Enhance 'fossil branch list' to accept a GLOB argument and show only matching branches.

danield 2021-01-26 15:27 trunk
Commit 6a5cdecddc6444410e084ace244854910b84819559cb6765b9963123bc7deb5b
2 files changed +10 -5 +1 -1
+10 -5
--- src/branch.c
+++ src/branch.c
@@ -282,11 +282,11 @@
282282
**
283283
** If (which<0) then the query pulls only closed branches. If
284284
** (which>0) then the query pulls all (closed and opened)
285285
** branches. Else the query pulls currently-opened branches.
286286
*/
287
-void branch_prepare_list_query(Stmt *pQuery, int brFlags){
287
+void branch_prepare_list_query(Stmt *pQuery, int brFlags, const char *zBrNameGlob){
288288
Blob sql;
289289
blob_init(&sql, 0, 0);
290290
brlist_create_temp_table();
291291
switch( brFlags & BRL_OPEN_CLOSED_MASK ){
292292
case BRL_CLOSED_ONLY: {
@@ -295,11 +295,11 @@
295295
);
296296
break;
297297
}
298298
case BRL_BOTH: {
299299
blob_append_sql(&sql,
300
- "SELECT name FROM tmp_brlist"
300
+ "SELECT name FROM tmp_brlist WHERE 1"
301301
);
302302
break;
303303
}
304304
case BRL_OPEN_ONLY: {
305305
blob_append_sql(&sql,
@@ -306,10 +306,11 @@
306306
"SELECT name FROM tmp_brlist WHERE NOT isclosed"
307307
);
308308
break;
309309
}
310310
}
311
+ if(zBrNameGlob) blob_append_sql(&sql, " AND (name GLOB %Q)", zBrNameGlob);
311312
if( brFlags & BRL_ORDERBY_MTIME ){
312313
blob_append_sql(&sql, " ORDER BY -mtime");
313314
}else{
314315
blob_append_sql(&sql, " ORDER BY name COLLATE nocase");
315316
}
@@ -355,17 +356,19 @@
355356
**
356357
** > fossil branch info BRANCH-NAME
357358
**
358359
** Print information about a branch
359360
**
360
-** > fossil branch list|ls ?OPTIONS?
361
+** > fossil branch list|ls ?OPTIONS? ?GLOB?
361362
**
362363
** List all branches. Options:
363364
** -a|--all List all branches. Default show only open branches
364365
** -c|--closed List closed branches.
365366
** -r Reverse the sort order
366367
** -t Show recently changed branches first
368
+**
369
+** If GLOB is given, show only branches matching the pattern.
367370
**
368371
** > fossil branch new BRANCH-NAME BASIS ?OPTIONS?
369372
**
370373
** Create a new branch BRANCH-NAME off of check-in BASIS.
371374
** Supported options for this subcommand include:
@@ -418,22 +421,24 @@
418421
}
419422
}else if( (strncmp(zCmd,"list",n)==0)||(strncmp(zCmd, "ls", n)==0) ){
420423
Stmt q;
421424
int vid;
422425
char *zCurrent = 0;
426
+ const char *zBrNameGlob = 0;
423427
int brFlags = BRL_OPEN_ONLY;
424428
if( find_option("all","a",0)!=0 ) brFlags = BRL_BOTH;
425429
if( find_option("closed","c",0)!=0 ) brFlags = BRL_CLOSED_ONLY;
426430
if( find_option("t",0,0)!=0 ) brFlags |= BRL_ORDERBY_MTIME;
427431
if( find_option("r",0,0)!=0 ) brFlags |= BRL_REVERSE;
432
+ if( g.argc >= 4 ) zBrNameGlob = g.argv[3];
428433
429434
if( g.localOpen ){
430435
vid = db_lget_int("checkout", 0);
431436
zCurrent = db_text(0, "SELECT value FROM tagxref"
432437
" WHERE rid=%d AND tagid=%d", vid, TAG_BRANCH);
433438
}
434
- branch_prepare_list_query(&q, brFlags);
439
+ branch_prepare_list_query(&q, brFlags, zBrNameGlob);
435440
while( db_step(&q)==SQLITE_ROW ){
436441
const char *zBr = db_column_text(&q, 0);
437442
int isCur = zCurrent!=0 && fossil_strcmp(zCurrent,zBr)==0;
438443
fossil_print("%s%s\n", (isCur ? "* " : " "), zBr);
439444
}
@@ -595,11 +600,11 @@
595600
@ reopened).</li>
596601
@ </ol>
597602
style_sidebox_end();
598603
#endif
599604
600
- branch_prepare_list_query(&q, brFlags);
605
+ branch_prepare_list_query(&q, brFlags, 0);
601606
cnt = 0;
602607
while( db_step(&q)==SQLITE_ROW ){
603608
const char *zBr = db_column_text(&q, 0);
604609
if( cnt==0 ){
605610
if( colorTest ){
606611
--- src/branch.c
+++ src/branch.c
@@ -282,11 +282,11 @@
282 **
283 ** If (which<0) then the query pulls only closed branches. If
284 ** (which>0) then the query pulls all (closed and opened)
285 ** branches. Else the query pulls currently-opened branches.
286 */
287 void branch_prepare_list_query(Stmt *pQuery, int brFlags){
288 Blob sql;
289 blob_init(&sql, 0, 0);
290 brlist_create_temp_table();
291 switch( brFlags & BRL_OPEN_CLOSED_MASK ){
292 case BRL_CLOSED_ONLY: {
@@ -295,11 +295,11 @@
295 );
296 break;
297 }
298 case BRL_BOTH: {
299 blob_append_sql(&sql,
300 "SELECT name FROM tmp_brlist"
301 );
302 break;
303 }
304 case BRL_OPEN_ONLY: {
305 blob_append_sql(&sql,
@@ -306,10 +306,11 @@
306 "SELECT name FROM tmp_brlist WHERE NOT isclosed"
307 );
308 break;
309 }
310 }
 
311 if( brFlags & BRL_ORDERBY_MTIME ){
312 blob_append_sql(&sql, " ORDER BY -mtime");
313 }else{
314 blob_append_sql(&sql, " ORDER BY name COLLATE nocase");
315 }
@@ -355,17 +356,19 @@
355 **
356 ** > fossil branch info BRANCH-NAME
357 **
358 ** Print information about a branch
359 **
360 ** > fossil branch list|ls ?OPTIONS?
361 **
362 ** List all branches. Options:
363 ** -a|--all List all branches. Default show only open branches
364 ** -c|--closed List closed branches.
365 ** -r Reverse the sort order
366 ** -t Show recently changed branches first
 
 
367 **
368 ** > fossil branch new BRANCH-NAME BASIS ?OPTIONS?
369 **
370 ** Create a new branch BRANCH-NAME off of check-in BASIS.
371 ** Supported options for this subcommand include:
@@ -418,22 +421,24 @@
418 }
419 }else if( (strncmp(zCmd,"list",n)==0)||(strncmp(zCmd, "ls", n)==0) ){
420 Stmt q;
421 int vid;
422 char *zCurrent = 0;
 
423 int brFlags = BRL_OPEN_ONLY;
424 if( find_option("all","a",0)!=0 ) brFlags = BRL_BOTH;
425 if( find_option("closed","c",0)!=0 ) brFlags = BRL_CLOSED_ONLY;
426 if( find_option("t",0,0)!=0 ) brFlags |= BRL_ORDERBY_MTIME;
427 if( find_option("r",0,0)!=0 ) brFlags |= BRL_REVERSE;
 
428
429 if( g.localOpen ){
430 vid = db_lget_int("checkout", 0);
431 zCurrent = db_text(0, "SELECT value FROM tagxref"
432 " WHERE rid=%d AND tagid=%d", vid, TAG_BRANCH);
433 }
434 branch_prepare_list_query(&q, brFlags);
435 while( db_step(&q)==SQLITE_ROW ){
436 const char *zBr = db_column_text(&q, 0);
437 int isCur = zCurrent!=0 && fossil_strcmp(zCurrent,zBr)==0;
438 fossil_print("%s%s\n", (isCur ? "* " : " "), zBr);
439 }
@@ -595,11 +600,11 @@
595 @ reopened).</li>
596 @ </ol>
597 style_sidebox_end();
598 #endif
599
600 branch_prepare_list_query(&q, brFlags);
601 cnt = 0;
602 while( db_step(&q)==SQLITE_ROW ){
603 const char *zBr = db_column_text(&q, 0);
604 if( cnt==0 ){
605 if( colorTest ){
606
--- src/branch.c
+++ src/branch.c
@@ -282,11 +282,11 @@
282 **
283 ** If (which<0) then the query pulls only closed branches. If
284 ** (which>0) then the query pulls all (closed and opened)
285 ** branches. Else the query pulls currently-opened branches.
286 */
287 void branch_prepare_list_query(Stmt *pQuery, int brFlags, const char *zBrNameGlob){
288 Blob sql;
289 blob_init(&sql, 0, 0);
290 brlist_create_temp_table();
291 switch( brFlags & BRL_OPEN_CLOSED_MASK ){
292 case BRL_CLOSED_ONLY: {
@@ -295,11 +295,11 @@
295 );
296 break;
297 }
298 case BRL_BOTH: {
299 blob_append_sql(&sql,
300 "SELECT name FROM tmp_brlist WHERE 1"
301 );
302 break;
303 }
304 case BRL_OPEN_ONLY: {
305 blob_append_sql(&sql,
@@ -306,10 +306,11 @@
306 "SELECT name FROM tmp_brlist WHERE NOT isclosed"
307 );
308 break;
309 }
310 }
311 if(zBrNameGlob) blob_append_sql(&sql, " AND (name GLOB %Q)", zBrNameGlob);
312 if( brFlags & BRL_ORDERBY_MTIME ){
313 blob_append_sql(&sql, " ORDER BY -mtime");
314 }else{
315 blob_append_sql(&sql, " ORDER BY name COLLATE nocase");
316 }
@@ -355,17 +356,19 @@
356 **
357 ** > fossil branch info BRANCH-NAME
358 **
359 ** Print information about a branch
360 **
361 ** > fossil branch list|ls ?OPTIONS? ?GLOB?
362 **
363 ** List all branches. Options:
364 ** -a|--all List all branches. Default show only open branches
365 ** -c|--closed List closed branches.
366 ** -r Reverse the sort order
367 ** -t Show recently changed branches first
368 **
369 ** If GLOB is given, show only branches matching the pattern.
370 **
371 ** > fossil branch new BRANCH-NAME BASIS ?OPTIONS?
372 **
373 ** Create a new branch BRANCH-NAME off of check-in BASIS.
374 ** Supported options for this subcommand include:
@@ -418,22 +421,24 @@
421 }
422 }else if( (strncmp(zCmd,"list",n)==0)||(strncmp(zCmd, "ls", n)==0) ){
423 Stmt q;
424 int vid;
425 char *zCurrent = 0;
426 const char *zBrNameGlob = 0;
427 int brFlags = BRL_OPEN_ONLY;
428 if( find_option("all","a",0)!=0 ) brFlags = BRL_BOTH;
429 if( find_option("closed","c",0)!=0 ) brFlags = BRL_CLOSED_ONLY;
430 if( find_option("t",0,0)!=0 ) brFlags |= BRL_ORDERBY_MTIME;
431 if( find_option("r",0,0)!=0 ) brFlags |= BRL_REVERSE;
432 if( g.argc >= 4 ) zBrNameGlob = g.argv[3];
433
434 if( g.localOpen ){
435 vid = db_lget_int("checkout", 0);
436 zCurrent = db_text(0, "SELECT value FROM tagxref"
437 " WHERE rid=%d AND tagid=%d", vid, TAG_BRANCH);
438 }
439 branch_prepare_list_query(&q, brFlags, zBrNameGlob);
440 while( db_step(&q)==SQLITE_ROW ){
441 const char *zBr = db_column_text(&q, 0);
442 int isCur = zCurrent!=0 && fossil_strcmp(zCurrent,zBr)==0;
443 fossil_print("%s%s\n", (isCur ? "* " : " "), zBr);
444 }
@@ -595,11 +600,11 @@
600 @ reopened).</li>
601 @ </ol>
602 style_sidebox_end();
603 #endif
604
605 branch_prepare_list_query(&q, brFlags, 0);
606 cnt = 0;
607 while( db_step(&q)==SQLITE_ROW ){
608 const char *zBr = db_column_text(&q, 0);
609 if( cnt==0 ){
610 if( colorTest ){
611
--- src/json_branch.c
+++ src/json_branch.c
@@ -128,11 +128,11 @@
128128
cson_object_set(pay,"current",json_new_string(zCurrent));
129129
}
130130
}
131131
132132
133
- branch_prepare_list_query(&q, branchListFlags);
133
+ branch_prepare_list_query(&q, branchListFlags, 0);
134134
cson_object_set(pay,"branches",listV);
135135
while((SQLITE_ROW==db_step(&q))){
136136
cson_value * v = cson_sqlite3_column_to_value(q.pStmt,0);
137137
if(v){
138138
cson_array_append(list,v);
139139
--- src/json_branch.c
+++ src/json_branch.c
@@ -128,11 +128,11 @@
128 cson_object_set(pay,"current",json_new_string(zCurrent));
129 }
130 }
131
132
133 branch_prepare_list_query(&q, branchListFlags);
134 cson_object_set(pay,"branches",listV);
135 while((SQLITE_ROW==db_step(&q))){
136 cson_value * v = cson_sqlite3_column_to_value(q.pStmt,0);
137 if(v){
138 cson_array_append(list,v);
139
--- src/json_branch.c
+++ src/json_branch.c
@@ -128,11 +128,11 @@
128 cson_object_set(pay,"current",json_new_string(zCurrent));
129 }
130 }
131
132
133 branch_prepare_list_query(&q, branchListFlags, 0);
134 cson_object_set(pay,"branches",listV);
135 while((SQLITE_ROW==db_step(&q))){
136 cson_value * v = cson_sqlite3_column_to_value(q.pStmt,0);
137 if(v){
138 cson_array_append(list,v);
139

Keyboard Shortcuts

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