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.

drh 2021-06-23 19:06 trunk
Commit 5a28d7c094d41a8bdba10ea5293d9eb189d4f42fb4b449230222dca3628714e6
1 file changed +34 -12
+34 -12
--- src/patch.c
+++ src/patch.c
@@ -191,12 +191,12 @@
191191
"UNION ALL"
192192
" SELECT 'user',%Q "
193193
"UNION ALL"
194194
" SELECT 'date',julianday('now')"
195195
"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') "
198198
"UNION ALL"
199199
" SELECT 'fossil-date',julianday('" MANIFEST_DATE "')"
200200
";", vid, g.zLocalRoot, g.zRepositoryName, g.zLogin);
201201
z = fossil_hostname();
202202
if( z ){
@@ -305,23 +305,43 @@
305305
}
306306
307307
/*
308308
** Show a summary of the content of a patch on standard output
309309
*/
310
-void patch_view(void){
310
+void patch_view(unsigned mFlags){
311311
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));
317320
}
318321
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
+ }
319339
if( db_table_exists("patch","patchmerge") ){
320340
db_prepare(&q, "SELECT upper(type),mhash FROM patchmerge");
321341
while( db_step(&q)==SQLITE_ROW ){
322
- fossil_print("%-10s %s\n",
342
+ fossil_print("%-12s %s\n",
323343
db_column_text(&q,0),
324344
db_column_text(&q,1));
325345
}
326346
db_finalize(&q);
327347
}
@@ -339,14 +359,14 @@
339359
zClass = "NEW";
340360
}else if( db_column_int(&q, 2) ){
341361
zClass = zOrigName==0 ? "DELETE" : 0;
342362
}
343363
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);
345365
}
346366
if( zClass ){
347
- fossil_print("%-10s %s\n", zClass, zName);
367
+ fossil_print("%-12s %s\n", zClass, zName);
348368
}
349369
}
350370
db_finalize(&q);
351371
}
352372
@@ -885,18 +905,20 @@
885905
pclose(pOut);
886906
}
887907
}else
888908
if( strncmp(zCmd, "view", n)==0 ){
889909
const char *zIn;
910
+ unsigned int flags = 0;
911
+ if( find_option("verbose","v",0) ) flags |= PATCH_VERBOSE;
890912
verify_all_options();
891913
if( g.argc!=4 ){
892914
usage("view FILENAME");
893915
}
894916
zIn = g.argv[3];
895917
if( fossil_strcmp(zIn, "-")==0 ) zIn = 0;
896918
patch_attach(zIn, stdin);
897
- patch_view();
919
+ patch_view(flags);
898920
}else
899921
{
900922
goto patch_usage;
901923
}
902924
}
903925
--- 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

Keyboard Shortcuts

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