From 2cd85c40a9f396bb24f7861c832acd52e61c4780 Mon Sep 17 00:00:00 2001 From: Johannes Sixt Date: Sat, 7 Feb 2009 16:08:27 +0100 Subject: Make test-path-utils more robust against incorrect use Previously, this test utility happily returned with exit code 0 if garbage was thrown at it. Now it reports failure if an unknown function name was given on the command line. Signed-off-by: Johannes Sixt Signed-off-by: Junio C Hamano --- test-path-utils.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'test-path-utils.c') diff --git a/test-path-utils.c b/test-path-utils.c index 2c0f5a37e8..7e6fc8deaf 100644 --- a/test-path-utils.c +++ b/test-path-utils.c @@ -7,6 +7,7 @@ int main(int argc, char **argv) int rv = normalize_absolute_path(buf, argv[2]); assert(strlen(buf) == rv); puts(buf); + return 0; } if (argc >= 2 && !strcmp(argv[1], "make_absolute_path")) { @@ -15,12 +16,16 @@ int main(int argc, char **argv) argc--; argv++; } + return 0; } if (argc == 4 && !strcmp(argv[1], "longest_ancestor_length")) { int len = longest_ancestor_length(argv[2], argv[3]); printf("%d\n", len); + return 0; } - return 0; + fprintf(stderr, "%s: unknown function name: %s\n", argv[0], + argv[1] ? argv[1] : "(there was none)"); + return 1; } -- cgit v1.2.3 From f42302b49333d035a323f5d80fb9562d375b17f1 Mon Sep 17 00:00:00 2001 From: Johannes Sixt Date: Sat, 7 Feb 2009 16:08:30 +0100 Subject: Test and fix normalize_path_copy() This changes the test-path-utils utility to invoke normalize_path_copy() instead of normalize_absolute_path() because the latter is about to be removed. The test cases in t0060 are adjusted in two regards: - normalize_path_copy() more often leaves a trailing slash in the result. This has no negative side effects because the new user of this function, longest_ancester_length(), already accounts for this behavior. - The function can fail. The tests uncover a flaw in normalize_path_copy(): If there are sufficiently many '..' path components so that the root is reached, such as in "/d1/s1/../../d2", then the leading slash was lost. This manifested itself that (assuming there is a repository at /tmp/foo) $ git add /d1/../tmp/foo/some-file reported 'pathspec is outside repository'. This is now fixed. Moreover, the test case descriptions of t0060 now include the test data and expected outcome. Signed-off-by: Johannes Sixt Signed-off-by: Junio C Hamano --- test-path-utils.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'test-path-utils.c') diff --git a/test-path-utils.c b/test-path-utils.c index 7e6fc8deaf..5168a8e3df 100644 --- a/test-path-utils.c +++ b/test-path-utils.c @@ -2,10 +2,11 @@ int main(int argc, char **argv) { - if (argc == 3 && !strcmp(argv[1], "normalize_absolute_path")) { + if (argc == 3 && !strcmp(argv[1], "normalize_path_copy")) { char *buf = xmalloc(PATH_MAX + 1); - int rv = normalize_absolute_path(buf, argv[2]); - assert(strlen(buf) == rv); + int rv = normalize_path_copy(buf, argv[2]); + if (rv) + buf = "++failed++"; puts(buf); return 0; } -- cgit v1.2.3