]> git.ipfire.org Git - thirdparty/git.git/commitdiff
test-tool: handle the `-C <directory>` option just like `git`
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Thu, 18 Apr 2019 13:16:49 +0000 (06:16 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 19 Apr 2019 05:03:24 +0000 (14:03 +0900)
In preparation for moving `git serve` into `test-tool` (because it
really is only used by the test suite), we teach the `test-tool` the
useful trick to change the working directory before running the test
command, which will avoid introducing subshells in the test code.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/helper/test-tool.c

index 99db7409b812898b461e75c8bd14e910f9e10e5c..2b21943f9352a62e3929fed5b345e8822db63ad2 100644 (file)
@@ -1,5 +1,11 @@
 #include "git-compat-util.h"
 #include "test-tool.h"
+#include "parse-options.h"
+
+static const char * const test_tool_usage[] = {
+       "test-tool [-C <directory>] <command [<arguments>...]]",
+       NULL
+};
 
 struct test_cmd {
        const char *name;
@@ -73,11 +79,24 @@ static NORETURN void die_usage(void)
 int cmd_main(int argc, const char **argv)
 {
        int i;
+       const char *working_directory = NULL;
+       struct option options[] = {
+               OPT_STRING('C', NULL, &working_directory, "directory",
+                          "change the working directory"),
+               OPT_END()
+       };
 
        BUG_exit_code = 99;
+       argc = parse_options(argc, argv, NULL, options, test_tool_usage,
+                            PARSE_OPT_STOP_AT_NON_OPTION |
+                            PARSE_OPT_KEEP_ARGV0);
+
        if (argc < 2)
                die_usage();
 
+       if (working_directory && chdir(working_directory) < 0)
+               die("Could not cd to '%s'", working_directory);
+
        for (i = 0; i < ARRAY_SIZE(cmds); i++) {
                if (!strcmp(cmds[i].name, argv[1])) {
                        argv++;