Commit Diff


commit - 97b3a7beacbda58876c185d6aa2b1b9c305fa6f6
commit + ce5b7c56feb64f28afedf39561cac1a17a3f028c
blob - e6a9bf7895318f3de7356a15f9b06c1234b7cbb8
blob + 7f1a01f67aaf5f0a4cab88b726643ca644226353
--- got/got.c
+++ 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);
@@ -126,6 +126,19 @@ static struct got_cmd got_commands[] = {
 	{ "cherrypick",	cmd_cherrypick,	usage_cherrypick, "ch" },
 	{ "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);
 }
 
blob - f751d54fdbeba7c6b6020f61dcab94c4080bad40
blob + ab73a28c8793e2580177009a1a28e5e4f4187c4c
--- tog/tog.c
+++ 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);
@@ -4468,11 +4468,26 @@ done:
 	got_ref_list_free(&refs);
 	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;
 		}
 	}