Fossil SCM
Enhance "fossil patch" to record the project name as part of the patch. Show the project name in "fossil patch view" output, if it exists. Show lots of metadata in "fossil project view" with the -v flag.
Commit
5a28d7c094d41a8bdba10ea5293d9eb189d4f42fb4b449230222dca3628714e6
Parent
2e8c5da0ab17f9e…
1 file changed
+34
-12
+34
-12
| --- src/patch.c | ||
| +++ src/patch.c | ||
| @@ -191,12 +191,12 @@ | ||
| 191 | 191 | "UNION ALL" |
| 192 | 192 | " SELECT 'user',%Q " |
| 193 | 193 | "UNION ALL" |
| 194 | 194 | " SELECT 'date',julianday('now')" |
| 195 | 195 | "UNION ALL" |
| 196 | - " SELECT 'project-code',value FROM repository.config" | |
| 197 | - " WHERE name='project-code' " | |
| 196 | + " SELECT name,value FROM repository.config" | |
| 197 | + " WHERE name IN ('project-code','project-name') " | |
| 198 | 198 | "UNION ALL" |
| 199 | 199 | " SELECT 'fossil-date',julianday('" MANIFEST_DATE "')" |
| 200 | 200 | ";", vid, g.zLocalRoot, g.zRepositoryName, g.zLogin); |
| 201 | 201 | z = fossil_hostname(); |
| 202 | 202 | if( z ){ |
| @@ -305,23 +305,43 @@ | ||
| 305 | 305 | } |
| 306 | 306 | |
| 307 | 307 | /* |
| 308 | 308 | ** Show a summary of the content of a patch on standard output |
| 309 | 309 | */ |
| 310 | -void patch_view(void){ | |
| 310 | +void patch_view(unsigned mFlags){ | |
| 311 | 311 | Stmt q; |
| 312 | - db_prepare(&q, "SELECT value FROM patch.cfg WHERE key='baseline'"); | |
| 313 | - if( db_step(&q)==SQLITE_ROW ){ | |
| 314 | - fossil_print("%-10s %s\n", "BASELINE", db_column_text(&q,0)); | |
| 315 | - }else{ | |
| 316 | - fossil_fatal("ERROR: Missing patch baseline"); | |
| 312 | + db_prepare(&q, | |
| 313 | + "WITH nmap(nkey,nm) AS (VALUES" | |
| 314 | + "('baseline','BASELINE')," | |
| 315 | + "('project-name','PROJECT-NAME'))" | |
| 316 | + "SELECT nm, value FROM nmap, patch.cfg WHERE nkey=key;" | |
| 317 | + ); | |
| 318 | + while( db_step(&q)==SQLITE_ROW ){ | |
| 319 | + fossil_print("%-12s %s\n", db_column_text(&q,0), db_column_text(&q,1)); | |
| 317 | 320 | } |
| 318 | 321 | db_finalize(&q); |
| 322 | + if( mFlags & PATCH_VERBOSE ){ | |
| 323 | + db_prepare(&q, | |
| 324 | + "WITH nmap(nkey,nm,isDate) AS (VALUES" | |
| 325 | + "('project-code','PROJECT-CODE',0)," | |
| 326 | + "('date','TIMESTAMP',1)," | |
| 327 | + "('user','USER',0)," | |
| 328 | + "('hostname','HOSTNAME',0)," | |
| 329 | + "('ckout','CHECKOUT',0)," | |
| 330 | + "('repo','REPOSITORY',0))" | |
| 331 | + "SELECT nm, CASE WHEN isDate THEN datetime(value) ELSE value END" | |
| 332 | + " FROM nmap, patch.cfg WHERE nkey=key;" | |
| 333 | + ); | |
| 334 | + while( db_step(&q)==SQLITE_ROW ){ | |
| 335 | + fossil_print("%-12s %s\n", db_column_text(&q,0), db_column_text(&q,1)); | |
| 336 | + } | |
| 337 | + db_finalize(&q); | |
| 338 | + } | |
| 319 | 339 | if( db_table_exists("patch","patchmerge") ){ |
| 320 | 340 | db_prepare(&q, "SELECT upper(type),mhash FROM patchmerge"); |
| 321 | 341 | while( db_step(&q)==SQLITE_ROW ){ |
| 322 | - fossil_print("%-10s %s\n", | |
| 342 | + fossil_print("%-12s %s\n", | |
| 323 | 343 | db_column_text(&q,0), |
| 324 | 344 | db_column_text(&q,1)); |
| 325 | 345 | } |
| 326 | 346 | db_finalize(&q); |
| 327 | 347 | } |
| @@ -339,14 +359,14 @@ | ||
| 339 | 359 | zClass = "NEW"; |
| 340 | 360 | }else if( db_column_int(&q, 2) ){ |
| 341 | 361 | zClass = zOrigName==0 ? "DELETE" : 0; |
| 342 | 362 | } |
| 343 | 363 | if( zOrigName!=0 && zOrigName[0]!=0 ){ |
| 344 | - fossil_print("%-10s %s -> %s\n", "RENAME",zOrigName,zName); | |
| 364 | + fossil_print("%-12s %s -> %s\n", "RENAME",zOrigName,zName); | |
| 345 | 365 | } |
| 346 | 366 | if( zClass ){ |
| 347 | - fossil_print("%-10s %s\n", zClass, zName); | |
| 367 | + fossil_print("%-12s %s\n", zClass, zName); | |
| 348 | 368 | } |
| 349 | 369 | } |
| 350 | 370 | db_finalize(&q); |
| 351 | 371 | } |
| 352 | 372 | |
| @@ -885,18 +905,20 @@ | ||
| 885 | 905 | pclose(pOut); |
| 886 | 906 | } |
| 887 | 907 | }else |
| 888 | 908 | if( strncmp(zCmd, "view", n)==0 ){ |
| 889 | 909 | const char *zIn; |
| 910 | + unsigned int flags = 0; | |
| 911 | + if( find_option("verbose","v",0) ) flags |= PATCH_VERBOSE; | |
| 890 | 912 | verify_all_options(); |
| 891 | 913 | if( g.argc!=4 ){ |
| 892 | 914 | usage("view FILENAME"); |
| 893 | 915 | } |
| 894 | 916 | zIn = g.argv[3]; |
| 895 | 917 | if( fossil_strcmp(zIn, "-")==0 ) zIn = 0; |
| 896 | 918 | patch_attach(zIn, stdin); |
| 897 | - patch_view(); | |
| 919 | + patch_view(flags); | |
| 898 | 920 | }else |
| 899 | 921 | { |
| 900 | 922 | goto patch_usage; |
| 901 | 923 | } |
| 902 | 924 | } |
| 903 | 925 |
| --- src/patch.c | |
| +++ src/patch.c | |
| @@ -191,12 +191,12 @@ | |
| 191 | "UNION ALL" |
| 192 | " SELECT 'user',%Q " |
| 193 | "UNION ALL" |
| 194 | " SELECT 'date',julianday('now')" |
| 195 | "UNION ALL" |
| 196 | " SELECT 'project-code',value FROM repository.config" |
| 197 | " WHERE name='project-code' " |
| 198 | "UNION ALL" |
| 199 | " SELECT 'fossil-date',julianday('" MANIFEST_DATE "')" |
| 200 | ";", vid, g.zLocalRoot, g.zRepositoryName, g.zLogin); |
| 201 | z = fossil_hostname(); |
| 202 | if( z ){ |
| @@ -305,23 +305,43 @@ | |
| 305 | } |
| 306 | |
| 307 | /* |
| 308 | ** Show a summary of the content of a patch on standard output |
| 309 | */ |
| 310 | void patch_view(void){ |
| 311 | Stmt q; |
| 312 | db_prepare(&q, "SELECT value FROM patch.cfg WHERE key='baseline'"); |
| 313 | if( db_step(&q)==SQLITE_ROW ){ |
| 314 | fossil_print("%-10s %s\n", "BASELINE", db_column_text(&q,0)); |
| 315 | }else{ |
| 316 | fossil_fatal("ERROR: Missing patch baseline"); |
| 317 | } |
| 318 | db_finalize(&q); |
| 319 | if( db_table_exists("patch","patchmerge") ){ |
| 320 | db_prepare(&q, "SELECT upper(type),mhash FROM patchmerge"); |
| 321 | while( db_step(&q)==SQLITE_ROW ){ |
| 322 | fossil_print("%-10s %s\n", |
| 323 | db_column_text(&q,0), |
| 324 | db_column_text(&q,1)); |
| 325 | } |
| 326 | db_finalize(&q); |
| 327 | } |
| @@ -339,14 +359,14 @@ | |
| 339 | zClass = "NEW"; |
| 340 | }else if( db_column_int(&q, 2) ){ |
| 341 | zClass = zOrigName==0 ? "DELETE" : 0; |
| 342 | } |
| 343 | if( zOrigName!=0 && zOrigName[0]!=0 ){ |
| 344 | fossil_print("%-10s %s -> %s\n", "RENAME",zOrigName,zName); |
| 345 | } |
| 346 | if( zClass ){ |
| 347 | fossil_print("%-10s %s\n", zClass, zName); |
| 348 | } |
| 349 | } |
| 350 | db_finalize(&q); |
| 351 | } |
| 352 | |
| @@ -885,18 +905,20 @@ | |
| 885 | pclose(pOut); |
| 886 | } |
| 887 | }else |
| 888 | if( strncmp(zCmd, "view", n)==0 ){ |
| 889 | const char *zIn; |
| 890 | verify_all_options(); |
| 891 | if( g.argc!=4 ){ |
| 892 | usage("view FILENAME"); |
| 893 | } |
| 894 | zIn = g.argv[3]; |
| 895 | if( fossil_strcmp(zIn, "-")==0 ) zIn = 0; |
| 896 | patch_attach(zIn, stdin); |
| 897 | patch_view(); |
| 898 | }else |
| 899 | { |
| 900 | goto patch_usage; |
| 901 | } |
| 902 | } |
| 903 |
| --- src/patch.c | |
| +++ src/patch.c | |
| @@ -191,12 +191,12 @@ | |
| 191 | "UNION ALL" |
| 192 | " SELECT 'user',%Q " |
| 193 | "UNION ALL" |
| 194 | " SELECT 'date',julianday('now')" |
| 195 | "UNION ALL" |
| 196 | " SELECT name,value FROM repository.config" |
| 197 | " WHERE name IN ('project-code','project-name') " |
| 198 | "UNION ALL" |
| 199 | " SELECT 'fossil-date',julianday('" MANIFEST_DATE "')" |
| 200 | ";", vid, g.zLocalRoot, g.zRepositoryName, g.zLogin); |
| 201 | z = fossil_hostname(); |
| 202 | if( z ){ |
| @@ -305,23 +305,43 @@ | |
| 305 | } |
| 306 | |
| 307 | /* |
| 308 | ** Show a summary of the content of a patch on standard output |
| 309 | */ |
| 310 | void patch_view(unsigned mFlags){ |
| 311 | Stmt q; |
| 312 | db_prepare(&q, |
| 313 | "WITH nmap(nkey,nm) AS (VALUES" |
| 314 | "('baseline','BASELINE')," |
| 315 | "('project-name','PROJECT-NAME'))" |
| 316 | "SELECT nm, value FROM nmap, patch.cfg WHERE nkey=key;" |
| 317 | ); |
| 318 | while( db_step(&q)==SQLITE_ROW ){ |
| 319 | fossil_print("%-12s %s\n", db_column_text(&q,0), db_column_text(&q,1)); |
| 320 | } |
| 321 | db_finalize(&q); |
| 322 | if( mFlags & PATCH_VERBOSE ){ |
| 323 | db_prepare(&q, |
| 324 | "WITH nmap(nkey,nm,isDate) AS (VALUES" |
| 325 | "('project-code','PROJECT-CODE',0)," |
| 326 | "('date','TIMESTAMP',1)," |
| 327 | "('user','USER',0)," |
| 328 | "('hostname','HOSTNAME',0)," |
| 329 | "('ckout','CHECKOUT',0)," |
| 330 | "('repo','REPOSITORY',0))" |
| 331 | "SELECT nm, CASE WHEN isDate THEN datetime(value) ELSE value END" |
| 332 | " FROM nmap, patch.cfg WHERE nkey=key;" |
| 333 | ); |
| 334 | while( db_step(&q)==SQLITE_ROW ){ |
| 335 | fossil_print("%-12s %s\n", db_column_text(&q,0), db_column_text(&q,1)); |
| 336 | } |
| 337 | db_finalize(&q); |
| 338 | } |
| 339 | if( db_table_exists("patch","patchmerge") ){ |
| 340 | db_prepare(&q, "SELECT upper(type),mhash FROM patchmerge"); |
| 341 | while( db_step(&q)==SQLITE_ROW ){ |
| 342 | fossil_print("%-12s %s\n", |
| 343 | db_column_text(&q,0), |
| 344 | db_column_text(&q,1)); |
| 345 | } |
| 346 | db_finalize(&q); |
| 347 | } |
| @@ -339,14 +359,14 @@ | |
| 359 | zClass = "NEW"; |
| 360 | }else if( db_column_int(&q, 2) ){ |
| 361 | zClass = zOrigName==0 ? "DELETE" : 0; |
| 362 | } |
| 363 | if( zOrigName!=0 && zOrigName[0]!=0 ){ |
| 364 | fossil_print("%-12s %s -> %s\n", "RENAME",zOrigName,zName); |
| 365 | } |
| 366 | if( zClass ){ |
| 367 | fossil_print("%-12s %s\n", zClass, zName); |
| 368 | } |
| 369 | } |
| 370 | db_finalize(&q); |
| 371 | } |
| 372 | |
| @@ -885,18 +905,20 @@ | |
| 905 | pclose(pOut); |
| 906 | } |
| 907 | }else |
| 908 | if( strncmp(zCmd, "view", n)==0 ){ |
| 909 | const char *zIn; |
| 910 | unsigned int flags = 0; |
| 911 | if( find_option("verbose","v",0) ) flags |= PATCH_VERBOSE; |
| 912 | verify_all_options(); |
| 913 | if( g.argc!=4 ){ |
| 914 | usage("view FILENAME"); |
| 915 | } |
| 916 | zIn = g.argv[3]; |
| 917 | if( fossil_strcmp(zIn, "-")==0 ) zIn = 0; |
| 918 | patch_attach(zIn, stdin); |
| 919 | patch_view(flags); |
| 920 | }else |
| 921 | { |
| 922 | goto patch_usage; |
| 923 | } |
| 924 | } |
| 925 |