make got/tog list commands if -h or an unknown command is provided
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
diff --git a/got/got.c b/got/got.c
index e6a9bf7..7f1a01f 100644
--- a/got/got.c
+++ b/got/got.c
@@ -73,7 +73,7 @@ struct got_cmd {
const char *cmd_alias;
};
-__dead static void usage(void);
+__dead static void usage(int);
__dead static void usage_init(void);
__dead static void usage_checkout(void);
__dead static void usage_update(void);
@@ -127,6 +127,19 @@ static struct got_cmd got_commands[] = {
{ "backout", cmd_backout, usage_backout, "bo" },
};
+static void
+list_commands(void)
+{
+ int i;
+
+ fprintf(stderr, "commands:");
+ for (i = 0; i < nitems(got_commands); i++) {
+ struct got_cmd *cmd = &got_commands[i];
+ fprintf(stderr, " %s", cmd->cmd_name);
+ }
+ fputc('\n', stderr);
+}
+
int
main(int argc, char *argv[])
{
@@ -143,7 +156,7 @@ main(int argc, char *argv[])
hflag = 1;
break;
default:
- usage();
+ usage(hflag);
/* NOTREACHED */
}
}
@@ -153,7 +166,7 @@ main(int argc, char *argv[])
optind = 0;
if (argc <= 0)
- usage();
+ usage(hflag);
signal(SIGINT, catch_sigint);
signal(SIGPIPE, catch_sigpipe);
@@ -180,13 +193,16 @@ main(int argc, char *argv[])
}
fprintf(stderr, "%s: unknown command '%s'\n", getprogname(), argv[0]);
+ list_commands();
return 1;
}
__dead static void
-usage(void)
+usage(int hflag)
{
fprintf(stderr, "usage: %s [-h] command [arg ...]\n", getprogname());
+ if (hflag)
+ list_commands();
exit(1);
}
diff --git a/tog/tog.c b/tog/tog.c
index f751d54..ab73a28 100644
--- a/tog/tog.c
+++ b/tog/tog.c
@@ -71,7 +71,7 @@ struct tog_cmd {
void (*cmd_usage)(void);
};
-__dead static void usage(void);
+__dead static void usage(int);
__dead static void usage_log(void);
__dead static void usage_diff(void);
__dead static void usage_blame(void);
@@ -4469,10 +4469,25 @@ done:
return error;
}
+static void
+list_commands(void)
+{
+ int i;
+
+ fprintf(stderr, "commands:");
+ for (i = 0; i < nitems(tog_commands); i++) {
+ struct tog_cmd *cmd = &tog_commands[i];
+ fprintf(stderr, " %s", cmd->name);
+ }
+ fputc('\n', stderr);
+}
+
__dead static void
-usage(void)
+usage(int hflag)
{
fprintf(stderr, "usage: %s [-h] [command] [arg ...]\n", getprogname());
+ if (hflag)
+ list_commands();
exit(1);
}
@@ -4513,7 +4528,7 @@ main(int argc, char *argv[])
hflag = 1;
break;
default:
- usage();
+ usage(hflag);
/* NOTREACHED */
}
}
@@ -4525,7 +4540,7 @@ main(int argc, char *argv[])
if (argc == 0) {
if (hflag)
- usage();
+ usage(hflag);
/* Build an argument vector which runs a default command. */
cmd = &tog_commands[0];
cmd_argv = make_argv(cmd->name, NULL);
@@ -4545,7 +4560,7 @@ main(int argc, char *argv[])
if (cmd == NULL) {
fprintf(stderr, "%s: unknown command '%s'\n",
getprogname(), argv[0]);
- usage();
+ list_commands();
return 1;
}
}