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

[PATCH v13 01/15] test: add test cases for relative_path

From
Jiang Xin <worldhello.net@gmail.com>
Date
May 22, 2013, 01:40 UTC
Message-ID
<12d11d43c239adde88b878558da52c37a3d77cfa.1369186574.git.worldhello.net@gmail.com>
In-Reply-To
<cover.1369186574.git.worldhello.net@gmail.com>

Add subcommand "relative_path" in test-path-utils, and add test cases in t0060.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
---
 t/t0060-path-utils.sh | 26 ++++++++++++++++++++++++++
 test-path-utils.c     | 25 +++++++++++++++++++++++++
 2 files changed, 51 insertions(+)
diff --git a/t/t0060-path-utils.sh b/t/t0060-path-utils.sh
index 09a42..2199b 100755
--- a/t/t0060-path-utils.sh
+++ b/t/t0060-path-utils.sh
@@ -12,6 +12,11 @@ norm_path() {
 	"test \"\$(test-path-utils normalize_path_copy '$1')\" = '$2'"
 }
 
+relative_path() {
+	test_expect_success $4 "relative path: $1 $2 => $3" \
+	"test \"\$(test-path-utils relative_path '$1' '$2')\" = '$3'"
+}
+
 # On Windows, we are using MSYS's bash, which mangles the paths.
 # Absolute paths are anchored at the MSYS installation directory,
 # which means that the path / accounts for this many characters:
@@ -183,4 +188,25 @@ test_expect_success SYMLINKS 'real path works on symlinks' '
 	test "$sym" = "$(test-path-utils real_path "$dir2/syml")"
 '
 
+relative_path /a/b/c/	/a/b/		c/
+relative_path /a/b/c/	/a/b		c/
+relative_path /a//b//c/	//a/b//		c/
+relative_path /a/b	/a/b		.
+relative_path /a/b/	/a/b		.
+relative_path /a	/a/b		/a
+relative_path /		/a/b/		/
+relative_path /a/c	/a/b/		/a/c
+relative_path /a/c	/a/b		/a/c
+relative_path /a/b	"<empty>"	/a/b
+relative_path /a/b 	"<null>"	/a/b
+relative_path "<empty>"	/a/b		"(empty)"
+relative_path "<empty>"	"<empty>"	"(empty)"
+relative_path "<empty>"	"<null>"	"(empty)"
+relative_path "<null>"	"<empty>"	"(null)"
+relative_path "<null>"	"<null>"	"(null)"
+
+test_expect_failure 'relative path: <null> /a/b => segfault' '
+	test-path-utils relative_path "<null>" "/a/b"
+'
+
 test_done
diff --git a/test-path-utils.c b/test-path-utils.c
index 0092cb..dcc530 100644
--- a/test-path-utils.c
+++ b/test-path-utils.c
@@ -28,6 +28,19 @@ static int normalize_ceiling_entry(struct string_list_item *item, void *unused)
 	return 1;
 }
 
+static void normalize_argv_string(const char **var, const char *input)
+{
+	if (!strcmp(input, "<null>"))
+		*var = NULL;
+	else if (!strcmp(input, "<empty>"))
+		*var = "";
+	else
+		*var = input;
+
+	if (*var && (**var == '<' || **var == '('))
+		die("Bad value: %s\n", input);
+}
+
 int main(int argc, char **argv)
 {
 	if (argc == 3 && !strcmp(argv[1], "normalize_path_copy")) {
@@ -103,6 +116,18 @@ int main(int argc, char **argv)
 		return 0;
 	}
 
+	if (argc == 4 && !strcmp(argv[1], "relative_path")) {
+		const char *abs, *base, *rel;
+		normalize_argv_string(&abs, argv[2]);
+		normalize_argv_string(&base, argv[3]);
+		rel = relative_path(abs, base);
+		if (!rel)
+			puts("(null)");
+		else
+			puts(strlen(rel) > 0 ? rel : "(empty)");
+		return 0;
+	}
+
 	fprintf(stderr, "%s: unknown function name: %s\n", argv[0],
 		argv[1] ? argv[1] : "(there was none)");
 	return 1;
-- 
1.8.3.rc3.368.g7c798dd
Previous: Jiang XinNext: Jiang Xin
Message 5 of 38 in “Interactive git-clean”
  1. 00/15 Interactive git-cleanJiang Xin, May 18, 2013
  2. 01/15 test: add test cases for relative_pathJiang Xin, May 18, 2013
  3. Junio C HamanoMay 21, 2013
  4. 00/15 interactive git-cleanJiang Xin, May 22, 2013
  5. 01/15 test: add test cases for relative_pathJiang Xin, May 22, 2013
  6. 02/15 path.c: refactor relative_path(), not only strip prefixJiang Xin, May 22, 2013
  7. Michael HaggertyMay 22, 2013
  8. Junio C HamanoMay 22, 2013
  9. Jiang XinMay 26, 2013
  10. Jiang XinMay 30, 2013
  11. 03/15 quote.c: remove path_relative, use relative_path insteadJiang Xin, May 22, 2013
  12. 04/15 Refactor quote_path_relative, remove unused paramsJiang Xin, May 22, 2013
  13. 05/15 Refactor write_name_quoted_relative, remove unused paramsJiang Xin, May 22, 2013
  14. 06/15 git-clean: refactor git-clean into two phasesJiang Xin, May 22, 2013
  15. 07/15 git-clean: add support for -i/--interactiveJiang Xin, May 22, 2013
  16. 08/15 git-clean: show items of del_list in columnsJiang Xin, May 22, 2013
  17. 09/15 git-clean: add colors to interactive git-cleanJiang Xin, May 22, 2013
  18. 10/15 git-clean: use a git-add-interactive compatible UIJiang Xin, May 22, 2013
  19. 11/15 git-clean: add filter by pattern interactive actionJiang Xin, May 22, 2013
  20. 12/15 git-clean: add select by numbers interactive actionJiang Xin, May 22, 2013
  21. 13/15 git-clean: add ask each interactive actionJiang Xin, May 22, 2013
  22. 14/15 git-clean: add documentation for interactive git-cleanJiang Xin, May 22, 2013
  23. 15/15 test: add t7301 for git-clean--interactiveJiang Xin, May 22, 2013
  24. 02/15 path.c: refactor relative_path(), not only strip prefixJiang Xin, May 18, 2013
  25. 03/15 quote.c: remove path_relative, use relative_path insteadJiang Xin, May 18, 2013
  26. 04/15 Refactor quote_path_relative, remove unused paramsJiang Xin, May 18, 2013
  27. 05/15 Refactor write_name_quoted_relative, remove unused paramsJiang Xin, May 18, 2013
  28. 06/15 git-clean: refactor git-clean into two phasesJiang Xin, May 18, 2013
  29. 07/15 git-clean: add support for -i/--interactiveJiang Xin, May 18, 2013
  30. 08/15 git-clean: show items of del_list in columnsJiang Xin, May 18, 2013
  31. 09/15 git-clean: add colors to interactive git-cleanJiang Xin, May 18, 2013
  32. 10/15 git-clean: use a git-add-interactive compatible UIJiang Xin, May 18, 2013
  33. 11/15 git-clean: add filter by pattern interactive actionJiang Xin, May 18, 2013
  34. 12/15 git-clean: add select by numbers interactive actionJiang Xin, May 18, 2013
  35. 13/15 git-clean: add ask each interactive actionJiang Xin, May 18, 2013
  36. 14/15 git-clean: add documentation for interactive git-cleanJiang Xin, May 18, 2013
  37. 15/15 test: add t7301 for git-clean--interactiveJiang Xin, May 18, 2013
  38. Junio C HamanoMay 20, 2013

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.