Fossil SCM
Enhance 'fossil branch list' to accept a GLOB argument and show only matching branches.
Commit
6a5cdecddc6444410e084ace244854910b84819559cb6765b9963123bc7deb5b
Parent
3316b29225dc604…
2 files changed
+10
-5
+1
-1
+10
-5
| --- src/branch.c | ||
| +++ src/branch.c | ||
| @@ -282,11 +282,11 @@ | ||
| 282 | 282 | ** |
| 283 | 283 | ** If (which<0) then the query pulls only closed branches. If |
| 284 | 284 | ** (which>0) then the query pulls all (closed and opened) |
| 285 | 285 | ** branches. Else the query pulls currently-opened branches. |
| 286 | 286 | */ |
| 287 | -void branch_prepare_list_query(Stmt *pQuery, int brFlags){ | |
| 287 | +void branch_prepare_list_query(Stmt *pQuery, int brFlags, const char *zBrNameGlob){ | |
| 288 | 288 | Blob sql; |
| 289 | 289 | blob_init(&sql, 0, 0); |
| 290 | 290 | brlist_create_temp_table(); |
| 291 | 291 | switch( brFlags & BRL_OPEN_CLOSED_MASK ){ |
| 292 | 292 | case BRL_CLOSED_ONLY: { |
| @@ -295,11 +295,11 @@ | ||
| 295 | 295 | ); |
| 296 | 296 | break; |
| 297 | 297 | } |
| 298 | 298 | case BRL_BOTH: { |
| 299 | 299 | blob_append_sql(&sql, |
| 300 | - "SELECT name FROM tmp_brlist" | |
| 300 | + "SELECT name FROM tmp_brlist WHERE 1" | |
| 301 | 301 | ); |
| 302 | 302 | break; |
| 303 | 303 | } |
| 304 | 304 | case BRL_OPEN_ONLY: { |
| 305 | 305 | blob_append_sql(&sql, |
| @@ -306,10 +306,11 @@ | ||
| 306 | 306 | "SELECT name FROM tmp_brlist WHERE NOT isclosed" |
| 307 | 307 | ); |
| 308 | 308 | break; |
| 309 | 309 | } |
| 310 | 310 | } |
| 311 | + if(zBrNameGlob) blob_append_sql(&sql, " AND (name GLOB %Q)", zBrNameGlob); | |
| 311 | 312 | if( brFlags & BRL_ORDERBY_MTIME ){ |
| 312 | 313 | blob_append_sql(&sql, " ORDER BY -mtime"); |
| 313 | 314 | }else{ |
| 314 | 315 | blob_append_sql(&sql, " ORDER BY name COLLATE nocase"); |
| 315 | 316 | } |
| @@ -355,17 +356,19 @@ | ||
| 355 | 356 | ** |
| 356 | 357 | ** > fossil branch info BRANCH-NAME |
| 357 | 358 | ** |
| 358 | 359 | ** Print information about a branch |
| 359 | 360 | ** |
| 360 | -** > fossil branch list|ls ?OPTIONS? | |
| 361 | +** > fossil branch list|ls ?OPTIONS? ?GLOB? | |
| 361 | 362 | ** |
| 362 | 363 | ** List all branches. Options: |
| 363 | 364 | ** -a|--all List all branches. Default show only open branches |
| 364 | 365 | ** -c|--closed List closed branches. |
| 365 | 366 | ** -r Reverse the sort order |
| 366 | 367 | ** -t Show recently changed branches first |
| 368 | +** | |
| 369 | +** If GLOB is given, show only branches matching the pattern. | |
| 367 | 370 | ** |
| 368 | 371 | ** > fossil branch new BRANCH-NAME BASIS ?OPTIONS? |
| 369 | 372 | ** |
| 370 | 373 | ** Create a new branch BRANCH-NAME off of check-in BASIS. |
| 371 | 374 | ** Supported options for this subcommand include: |
| @@ -418,22 +421,24 @@ | ||
| 418 | 421 | } |
| 419 | 422 | }else if( (strncmp(zCmd,"list",n)==0)||(strncmp(zCmd, "ls", n)==0) ){ |
| 420 | 423 | Stmt q; |
| 421 | 424 | int vid; |
| 422 | 425 | char *zCurrent = 0; |
| 426 | + const char *zBrNameGlob = 0; | |
| 423 | 427 | int brFlags = BRL_OPEN_ONLY; |
| 424 | 428 | if( find_option("all","a",0)!=0 ) brFlags = BRL_BOTH; |
| 425 | 429 | if( find_option("closed","c",0)!=0 ) brFlags = BRL_CLOSED_ONLY; |
| 426 | 430 | if( find_option("t",0,0)!=0 ) brFlags |= BRL_ORDERBY_MTIME; |
| 427 | 431 | if( find_option("r",0,0)!=0 ) brFlags |= BRL_REVERSE; |
| 432 | + if( g.argc >= 4 ) zBrNameGlob = g.argv[3]; | |
| 428 | 433 | |
| 429 | 434 | if( g.localOpen ){ |
| 430 | 435 | vid = db_lget_int("checkout", 0); |
| 431 | 436 | zCurrent = db_text(0, "SELECT value FROM tagxref" |
| 432 | 437 | " WHERE rid=%d AND tagid=%d", vid, TAG_BRANCH); |
| 433 | 438 | } |
| 434 | - branch_prepare_list_query(&q, brFlags); | |
| 439 | + branch_prepare_list_query(&q, brFlags, zBrNameGlob); | |
| 435 | 440 | while( db_step(&q)==SQLITE_ROW ){ |
| 436 | 441 | const char *zBr = db_column_text(&q, 0); |
| 437 | 442 | int isCur = zCurrent!=0 && fossil_strcmp(zCurrent,zBr)==0; |
| 438 | 443 | fossil_print("%s%s\n", (isCur ? "* " : " "), zBr); |
| 439 | 444 | } |
| @@ -595,11 +600,11 @@ | ||
| 595 | 600 | @ reopened).</li> |
| 596 | 601 | @ </ol> |
| 597 | 602 | style_sidebox_end(); |
| 598 | 603 | #endif |
| 599 | 604 | |
| 600 | - branch_prepare_list_query(&q, brFlags); | |
| 605 | + branch_prepare_list_query(&q, brFlags, 0); | |
| 601 | 606 | cnt = 0; |
| 602 | 607 | while( db_step(&q)==SQLITE_ROW ){ |
| 603 | 608 | const char *zBr = db_column_text(&q, 0); |
| 604 | 609 | if( cnt==0 ){ |
| 605 | 610 | if( colorTest ){ |
| 606 | 611 |
| --- 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 |
+1
-1
| --- src/json_branch.c | ||
| +++ src/json_branch.c | ||
| @@ -128,11 +128,11 @@ | ||
| 128 | 128 | cson_object_set(pay,"current",json_new_string(zCurrent)); |
| 129 | 129 | } |
| 130 | 130 | } |
| 131 | 131 | |
| 132 | 132 | |
| 133 | - branch_prepare_list_query(&q, branchListFlags); | |
| 133 | + branch_prepare_list_query(&q, branchListFlags, 0); | |
| 134 | 134 | cson_object_set(pay,"branches",listV); |
| 135 | 135 | while((SQLITE_ROW==db_step(&q))){ |
| 136 | 136 | cson_value * v = cson_sqlite3_column_to_value(q.pStmt,0); |
| 137 | 137 | if(v){ |
| 138 | 138 | cson_array_append(list,v); |
| 139 | 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); |
| 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 |