Jiang Xin [off-list ref] writes:
quoted hunk
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.
quoted hunk
/*
* 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;