git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 6/7] test-tool: handle the `-C <directory>` option just like `git`

From
Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>
Date
Apr 12, 2019, 12:00 UTC
Message-ID
<2e19f538bcc20393468535561b6857ba3ab252f8.1555070430.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.168.git.gitgitgadget@gmail.com>
From: Johannes Schindelin <johannes.schindelin@gmx.de>

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>
---
 t/helper/test-tool.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)
diff --git a/t/helper/test-tool.c b/t/helper/test-tool.c
index 99db7409b8..2b21943f93 100644
--- a/t/helper/test-tool.c
+++ b/t/helper/test-tool.c
@@ -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++;
-- 
gitgitgadget
Previous: Johannes SchindelinNext: Johannes Schindelin via GitGitGadget
Message 28 of 41 in “Assorted Documentation-related fixes”
  1. 0/7 Assorted Documentation-related fixesJohannes Schindelin via GitGitGadget, Apr 12, 2019
  2. 1/7 remote-testgit: move it into the support directory for t5801Johannes Schindelin via GitGitGadget, Apr 12, 2019
  3. Junio C HamanoApr 15, 2019
  4. Johannes SchindelinApr 18, 2019
  5. 2/7 help -a: do not list commands that are excluded from the buildJohannes Schindelin via GitGitGadget, Apr 12, 2019
  6. Junio C HamanoApr 15, 2019
  7. Johannes SchindelinApr 18, 2019
  8. 4/7 docs: exclude documentation for commands that have been excludedJohannes Schindelin via GitGitGadget, Apr 12, 2019
  9. Eric SunshineApr 12, 2019
  10. Junio C HamanoApr 15, 2019
  11. Eric SunshineApr 15, 2019
  12. Eric SunshineApr 15, 2019
  13. Johannes SchindelinApr 18, 2019
  14. Jeff KingApr 15, 2019
  15. Junio C HamanoApr 16, 2019
  16. Johannes SchindelinApr 18, 2019
  17. Jeff KingApr 18, 2019
  18. 3/7 check-docs: do not pretend that commands are listed which are excludedJohannes Schindelin via GitGitGadget, Apr 12, 2019
  19. Junio C HamanoApr 15, 2019
  20. Johannes SchindelinApr 18, 2019
  21. 7/7 Turn `git serve` into a test helperJohannes Schindelin via GitGitGadget, Apr 12, 2019
  22. Junio C HamanoApr 15, 2019
  23. Jeff KingApr 17, 2019
  24. Junio C HamanoApr 17, 2019
  25. Josh SteadmonApr 17, 2019
  26. Junio C HamanoApr 18, 2019
  27. Johannes SchindelinApr 18, 2019
  28. 6/7 test-tool: handle the `-C <directory>` option just like `git`Johannes Schindelin via GitGitGadget, Apr 12, 2019
  29. 5/7 check-docs: do not bother checking for legacy scripts' documentationJohannes Schindelin via GitGitGadget, Apr 12, 2019
  30. Junio C HamanoApr 15, 2019
  31. 0/8 Assorted Documentation-related fixesJohannes Schindelin via GitGitGadget, Apr 18, 2019
  32. 1/8 remote-testgit: move it into the support directory for t5801Johannes Schindelin via GitGitGadget, Apr 18, 2019
  33. 2/8 Makefile: drop the NO_INSTALL variableJohannes Schindelin via GitGitGadget, Apr 18, 2019
  34. 3/8 help -a: do not list commands that are excluded from the buildJohannes Schindelin via GitGitGadget, Apr 18, 2019
  35. 4/8 check-docs: allow command-list.txt to contain excluded commandsJohannes Schindelin via GitGitGadget, Apr 18, 2019
  36. 5/8 docs: exclude documentation for commands that have been excludedJohannes Schindelin via GitGitGadget, Apr 18, 2019
  37. Junio C HamanoApr 19, 2019
  38. Johannes SchindelinApr 29, 2019
  39. 6/8 check-docs: do not bother checking for legacy scripts' documentationJohannes Schindelin via GitGitGadget, Apr 18, 2019
  40. 7/8 test-tool: handle the `-C <directory>` option just like `git`Johannes Schindelin via GitGitGadget, Apr 18, 2019
  41. 8/8 Turn `git serve` into a test helperJohannes Schindelin via GitGitGadget, Apr 18, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.