Re: [PATCH v12 01/15] test: add test cases for relative_path
- From
Junio C Hamano <gitster@pobox.com>
- Date
- May 21, 2013, 20:37 UTC
- Message-ID
- <7vhahwm5n6.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <ea0e3b1148ba1614916a8b1cca8d2d046acd047c.1368846844.git.worldhello.net@gmail.com>
Jiang Xin <worldhello.net@gmail.com> writes:
Show 20 quoted lines
> diff --git a/test-path-utils.c b/test-path-utils.c
> index 0092cb..18267 100644
> --- a/test-path-utils.c
> +++ b/test-path-utils.c
> @@ -1,6 +1,19 @@
> #include "cache.h"
> #include "string-list.h"
>
> +#define PARSE_ARGV_STRING(var, input) do { \
> + if (!strcmp(input, "<null>")) { \
> + var = NULL; \
> + } else if (!strcmp(input, "<empty>")) { \
> + var = ""; \
> + } else if (*input == '<' || *input == '(') { \
> + fprintf(stderr, "Bad value: %s\n", input); \
> + return 1; \
> + } else { \
> + var = input; \
> + } \
> +} while (0)Yuck. Why does it have to be a macro like this? I do not think "because we may return" justifies it.
Show 22 quoted lines
> /*
> * A "string_list_each_func_t" function that normalizes an entry from
> * GIT_CEILING_DIRECTORIES. If the path is unusable for some reason,
> @@ -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;
> + PARSE_ARGV_STRING(abs, argv[2]);
> + PARSE_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;