Fossil SCM

Made an exception for sqlite3 command: add "--no-repository" flag so it behave like the real sqlite3 program.

mgagnon 2026-03-12 01:58 argv0_as_subcommand
Commit 4cc76a6e440a47b5a0ebdda6cb34da822b7fa12cffa986aa012bec47b6fa9af2
1 file changed +17 -5
+17 -5
--- src/main.c
+++ src/main.c
@@ -460,29 +460,44 @@
460460
** invoked with the matching subcommand.
461461
*/
462462
void process_argv0(void){
463463
int i;
464464
int nNewArgc = g.argc;
465
+ /* strip any path element: "/path/to/cmd" -> "cmd" */
465466
char *zArg0BaseName = command_basename(g.argv[0]);
466467
int nArgcDiff = 0;
467468
char **zNewArgv = NULL;
468469
469470
470471
if( fossil_strcmp(zArg0BaseName, "md5sum") == 0
471472
|| fossil_strcmp(zArg0BaseName, "pikchr") == 0
472473
|| fossil_strcmp(zArg0BaseName, "sha1sum") == 0
473
- || fossil_strcmp(zArg0BaseName, "sha3sum") == 0
474
- || fossil_strcmp(zArg0BaseName, "sqlite3") == 0 ){
474
+ || fossil_strcmp(zArg0BaseName, "sha3sum") == 0 ){
475475
nNewArgc++;
476
+
476477
}else if( fossil_strcmp(zArg0BaseName, "date") == 0
477478
|| fossil_strcmp(zArg0BaseName, "ls") == 0
478479
|| fossil_strcmp(zArg0BaseName, "pwd") == 0
479480
|| fossil_strcmp(zArg0BaseName, "stty") == 0
480481
|| fossil_strcmp(zArg0BaseName, "unzip") == 0
481482
|| fossil_strcmp(zArg0BaseName, "which") == 0
482483
|| fossil_strcmp(zArg0BaseName, "zip") == 0 ){
483484
nNewArgc+=2;
485
+
486
+ }else if( fossil_strcmp(zArg0BaseName, "sqlite3") == 0 ){
487
+ /* with sqlite3 use --no-repository to make it behave like real sqlite3 */
488
+ nNewArgc+=2;
489
+ zNewArgv = fossil_malloc( sizeof(char*)*(nNewArgc) );
490
+ zNewArgv[0] = "fossil";
491
+ zNewArgv[1] = zArg0BaseName;
492
+ zNewArgv[2] = "--no-repository";
493
+ for(i=1; i<g.argc; i++){
494
+ zNewArgv[i+2] = g.argv[i];
495
+ }
496
+ g.argc = nNewArgc;
497
+ g.argv = zNewArgv;
498
+ return;
484499
}
485500
486501
nArgcDiff = nNewArgc - g.argc;
487502
if( nArgcDiff > 0 ){
488503
zNewArgv = fossil_malloc( sizeof(char*)*(nNewArgc) );
@@ -494,19 +509,16 @@
494509
/* FALLTHROUGH */
495510
496511
case 1:
497512
/*regular subcommand */
498513
zNewArgv[0] = "fossil";
499
- /* strip any path element: "/path/to/cmd" -> "cmd" */
500514
zNewArgv[nArgcDiff] = zArg0BaseName;
501515
for(i=1; i<g.argc; i++){
502516
zNewArgv[i+nArgcDiff] = g.argv[i];
503517
}
504518
g.argc = nNewArgc;
505519
g.argv = zNewArgv;
506
-
507
- default: break;
508520
}
509521
}
510522
}
511523
512524
/*
513525
--- src/main.c
+++ src/main.c
@@ -460,29 +460,44 @@
460 ** invoked with the matching subcommand.
461 */
462 void process_argv0(void){
463 int i;
464 int nNewArgc = g.argc;
 
465 char *zArg0BaseName = command_basename(g.argv[0]);
466 int nArgcDiff = 0;
467 char **zNewArgv = NULL;
468
469
470 if( fossil_strcmp(zArg0BaseName, "md5sum") == 0
471 || fossil_strcmp(zArg0BaseName, "pikchr") == 0
472 || fossil_strcmp(zArg0BaseName, "sha1sum") == 0
473 || fossil_strcmp(zArg0BaseName, "sha3sum") == 0
474 || fossil_strcmp(zArg0BaseName, "sqlite3") == 0 ){
475 nNewArgc++;
 
476 }else if( fossil_strcmp(zArg0BaseName, "date") == 0
477 || fossil_strcmp(zArg0BaseName, "ls") == 0
478 || fossil_strcmp(zArg0BaseName, "pwd") == 0
479 || fossil_strcmp(zArg0BaseName, "stty") == 0
480 || fossil_strcmp(zArg0BaseName, "unzip") == 0
481 || fossil_strcmp(zArg0BaseName, "which") == 0
482 || fossil_strcmp(zArg0BaseName, "zip") == 0 ){
483 nNewArgc+=2;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
484 }
485
486 nArgcDiff = nNewArgc - g.argc;
487 if( nArgcDiff > 0 ){
488 zNewArgv = fossil_malloc( sizeof(char*)*(nNewArgc) );
@@ -494,19 +509,16 @@
494 /* FALLTHROUGH */
495
496 case 1:
497 /*regular subcommand */
498 zNewArgv[0] = "fossil";
499 /* strip any path element: "/path/to/cmd" -> "cmd" */
500 zNewArgv[nArgcDiff] = zArg0BaseName;
501 for(i=1; i<g.argc; i++){
502 zNewArgv[i+nArgcDiff] = g.argv[i];
503 }
504 g.argc = nNewArgc;
505 g.argv = zNewArgv;
506
507 default: break;
508 }
509 }
510 }
511
512 /*
513
--- src/main.c
+++ src/main.c
@@ -460,29 +460,44 @@
460 ** invoked with the matching subcommand.
461 */
462 void process_argv0(void){
463 int i;
464 int nNewArgc = g.argc;
465 /* strip any path element: "/path/to/cmd" -> "cmd" */
466 char *zArg0BaseName = command_basename(g.argv[0]);
467 int nArgcDiff = 0;
468 char **zNewArgv = NULL;
469
470
471 if( fossil_strcmp(zArg0BaseName, "md5sum") == 0
472 || fossil_strcmp(zArg0BaseName, "pikchr") == 0
473 || fossil_strcmp(zArg0BaseName, "sha1sum") == 0
474 || fossil_strcmp(zArg0BaseName, "sha3sum") == 0 ){
 
475 nNewArgc++;
476
477 }else if( fossil_strcmp(zArg0BaseName, "date") == 0
478 || fossil_strcmp(zArg0BaseName, "ls") == 0
479 || fossil_strcmp(zArg0BaseName, "pwd") == 0
480 || fossil_strcmp(zArg0BaseName, "stty") == 0
481 || fossil_strcmp(zArg0BaseName, "unzip") == 0
482 || fossil_strcmp(zArg0BaseName, "which") == 0
483 || fossil_strcmp(zArg0BaseName, "zip") == 0 ){
484 nNewArgc+=2;
485
486 }else if( fossil_strcmp(zArg0BaseName, "sqlite3") == 0 ){
487 /* with sqlite3 use --no-repository to make it behave like real sqlite3 */
488 nNewArgc+=2;
489 zNewArgv = fossil_malloc( sizeof(char*)*(nNewArgc) );
490 zNewArgv[0] = "fossil";
491 zNewArgv[1] = zArg0BaseName;
492 zNewArgv[2] = "--no-repository";
493 for(i=1; i<g.argc; i++){
494 zNewArgv[i+2] = g.argv[i];
495 }
496 g.argc = nNewArgc;
497 g.argv = zNewArgv;
498 return;
499 }
500
501 nArgcDiff = nNewArgc - g.argc;
502 if( nArgcDiff > 0 ){
503 zNewArgv = fossil_malloc( sizeof(char*)*(nNewArgc) );
@@ -494,19 +509,16 @@
509 /* FALLTHROUGH */
510
511 case 1:
512 /*regular subcommand */
513 zNewArgv[0] = "fossil";
 
514 zNewArgv[nArgcDiff] = zArg0BaseName;
515 for(i=1; i<g.argc; i++){
516 zNewArgv[i+nArgcDiff] = g.argv[i];
517 }
518 g.argc = nNewArgc;
519 g.argv = zNewArgv;
 
 
520 }
521 }
522 }
523
524 /*
525

Keyboard Shortcuts

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