Fossil SCM

Teach the help command and /help page to be able to distinguish completely unknown commands from commands which are only conditionally available depending on their platform or build flags. Based on a /chat discussion.

stephan 2025-03-10 10:21 trunk
Commit e5ace41107d6312366f365cc1a70d1c1b96ea09935b9ff98d8b39b5d3981ee5b
1 file changed +31 -1
+31 -1
--- src/dispatch.c
+++ src/dispatch.c
@@ -811,10 +811,32 @@
811811
fossil_print(" %s\n", az[j]);
812812
}
813813
}
814814
}
815815
816
+
817
+/*
818
+** Returns 1 if the command or page name zName is known to be a
819
+** command/page which is only available in certain builds/platforms,
820
+** else returns 0.
821
+*/
822
+static int help_is_platform_command(const char *zName){
823
+ const char *aList[] = {
824
+ /* List of commands/pages which are known to only be available in
825
+ ** certain builds/platforms. */
826
+ "winsrv",
827
+ "json", "/json",
828
+ NULL /* end-of-list sentinel */
829
+ };
830
+ int i = 0;
831
+ const char *z;
832
+ for( z = aList[0]; z ; z = aList[++i] ){
833
+ if( 0==fossil_strcmp(zName, z) ) return 1;
834
+ }
835
+ return 0;
836
+}
837
+
816838
/*
817839
** WEBPAGE: help
818840
** URL: /help?name=CMD
819841
**
820842
** Show the built-in help text for CMD. CMD can be a command-line interface
@@ -860,11 +882,15 @@
860882
@ <h1>The "%h(pCmd->zName)" setting:</h1>
861883
}else{
862884
@ <h1>The "%h(pCmd->zName)" command:</h1>
863885
}
864886
if( rc==1 || (rc==2 && zCmd[0]=='/') ){
865
- @ Unknown topic: "%h(zCmd)"
887
+ if( zCmd && help_is_platform_command(zCmd) ){
888
+ @ Not available in this build: "%h(zCmd)"
889
+ }else{
890
+ @ Unknown topic: "%h(zCmd)"
891
+ }
866892
}else if( rc==2 ){
867893
@ Ambiguous prefix: "%h(zCmd)"
868894
}else{
869895
if( pCmd->zHelp[0]==0 ){
870896
@ No help available for "%h(pCmd->zName)"
@@ -1518,10 +1544,14 @@
15181544
rc = dispatch_name_search(g.argv[2], mask|CMDFLAG_PREFIX, &pCmd);
15191545
if( rc ){
15201546
int i, n;
15211547
const char *az[5];
15221548
if( rc==1 ){
1549
+ if( help_is_platform_command(g.argv[2]) ){
1550
+ fossil_print("Command is not available in this build: %s\n", g.argv[2]);
1551
+ return;
1552
+ }
15231553
fossil_print("unknown %s: %s\n", zCmdOrPage, g.argv[2]);
15241554
}else{
15251555
fossil_print("ambiguous %s prefix: %s\n",
15261556
zCmdOrPage, g.argv[2]);
15271557
}
15281558
--- src/dispatch.c
+++ src/dispatch.c
@@ -811,10 +811,32 @@
811 fossil_print(" %s\n", az[j]);
812 }
813 }
814 }
815
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
816 /*
817 ** WEBPAGE: help
818 ** URL: /help?name=CMD
819 **
820 ** Show the built-in help text for CMD. CMD can be a command-line interface
@@ -860,11 +882,15 @@
860 @ <h1>The "%h(pCmd->zName)" setting:</h1>
861 }else{
862 @ <h1>The "%h(pCmd->zName)" command:</h1>
863 }
864 if( rc==1 || (rc==2 && zCmd[0]=='/') ){
865 @ Unknown topic: "%h(zCmd)"
 
 
 
 
866 }else if( rc==2 ){
867 @ Ambiguous prefix: "%h(zCmd)"
868 }else{
869 if( pCmd->zHelp[0]==0 ){
870 @ No help available for "%h(pCmd->zName)"
@@ -1518,10 +1544,14 @@
1518 rc = dispatch_name_search(g.argv[2], mask|CMDFLAG_PREFIX, &pCmd);
1519 if( rc ){
1520 int i, n;
1521 const char *az[5];
1522 if( rc==1 ){
 
 
 
 
1523 fossil_print("unknown %s: %s\n", zCmdOrPage, g.argv[2]);
1524 }else{
1525 fossil_print("ambiguous %s prefix: %s\n",
1526 zCmdOrPage, g.argv[2]);
1527 }
1528
--- src/dispatch.c
+++ src/dispatch.c
@@ -811,10 +811,32 @@
811 fossil_print(" %s\n", az[j]);
812 }
813 }
814 }
815
816
817 /*
818 ** Returns 1 if the command or page name zName is known to be a
819 ** command/page which is only available in certain builds/platforms,
820 ** else returns 0.
821 */
822 static int help_is_platform_command(const char *zName){
823 const char *aList[] = {
824 /* List of commands/pages which are known to only be available in
825 ** certain builds/platforms. */
826 "winsrv",
827 "json", "/json",
828 NULL /* end-of-list sentinel */
829 };
830 int i = 0;
831 const char *z;
832 for( z = aList[0]; z ; z = aList[++i] ){
833 if( 0==fossil_strcmp(zName, z) ) return 1;
834 }
835 return 0;
836 }
837
838 /*
839 ** WEBPAGE: help
840 ** URL: /help?name=CMD
841 **
842 ** Show the built-in help text for CMD. CMD can be a command-line interface
@@ -860,11 +882,15 @@
882 @ <h1>The "%h(pCmd->zName)" setting:</h1>
883 }else{
884 @ <h1>The "%h(pCmd->zName)" command:</h1>
885 }
886 if( rc==1 || (rc==2 && zCmd[0]=='/') ){
887 if( zCmd && help_is_platform_command(zCmd) ){
888 @ Not available in this build: "%h(zCmd)"
889 }else{
890 @ Unknown topic: "%h(zCmd)"
891 }
892 }else if( rc==2 ){
893 @ Ambiguous prefix: "%h(zCmd)"
894 }else{
895 if( pCmd->zHelp[0]==0 ){
896 @ No help available for "%h(pCmd->zName)"
@@ -1518,10 +1544,14 @@
1544 rc = dispatch_name_search(g.argv[2], mask|CMDFLAG_PREFIX, &pCmd);
1545 if( rc ){
1546 int i, n;
1547 const char *az[5];
1548 if( rc==1 ){
1549 if( help_is_platform_command(g.argv[2]) ){
1550 fossil_print("Command is not available in this build: %s\n", g.argv[2]);
1551 return;
1552 }
1553 fossil_print("unknown %s: %s\n", zCmdOrPage, g.argv[2]);
1554 }else{
1555 fossil_print("ambiguous %s prefix: %s\n",
1556 zCmdOrPage, g.argv[2]);
1557 }
1558

Keyboard Shortcuts

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