This patch adds the --rewrite-url option to 'git config'. The option takes exactly one argument; a URL that is to be rewritten according to the longest matching url.*.insteadOf rule in the current config. The resulting URL is printed on stdout, and 0 is returned. The rationale for this patch is to enable access to Git's URL rewriting functionality from shell scripts. The URL rewriting functionality is implemented by piggybacking on the existing URL rewriting code in remote.c. Signed-off-by: Johan Herland <johan@xxxxxxxxxxx> --- builtin-config.c | 23 ++++++++++++++++++++++- 1 files changed, 22 insertions(+), 1 deletions(-) diff --git a/builtin-config.c b/builtin-config.c index 91fdc49..977e6cb 100644 --- a/builtin-config.c +++ b/builtin-config.c @@ -1,9 +1,10 @@ #include "builtin.h" #include "cache.h" #include "color.h" +#include "remote.h" static const char git_config_set_usage[] = -"git config [ --global | --system | [ -f | --file ] config-file ] [ --bool | --int | --bool-or-int ] [ -z | --null ] [--get | --get-all | --get-regexp | --replace-all | --add | --unset | --unset-all] name [value [value_regex]] | --rename-section old_name new_name | --remove-section name | --list | --get-color var [default] | --get-colorbool name [stdout-is-tty]"; +"git config [ --global | --system | [ -f | --file ] config-file ] [ --bool | --int | --bool-or-int ] [ -z | --null ] [--get | --get-all | --get-regexp | --replace-all | --add | --unset | --unset-all] name [value [value_regex]] | --rename-section old_name new_name | --remove-section name | --list | --get-color var [default] | --get-colorbool name [stdout-is-tty] | --rewrite-url url"; static char *key; static regex_t *key_regexp; @@ -281,6 +282,24 @@ static int get_colorbool(int argc, const char **argv) } } +static int rewrite_url(int argc, const char **argv) +{ + /* + * git config --rewrite_url <url> + * + * returns <url> after rewriting it according to url.*.insteadOf rules. + */ + + if (argc > 1) + usage(git_config_set_usage); + + struct remote *remote = remote_get(argv[0]); + if (remote->url_nr != 1) + die("Expected exactly one URL from remote_get()!"); + printf("%s\n", remote->url[0]); + return 0; +} + int cmd_config(int argc, const char **argv, const char *prefix) { int nongit; @@ -362,6 +381,8 @@ int cmd_config(int argc, const char **argv, const char *prefix) return get_color(argc-2, argv+2); } else if (!strcmp(argv[1], "--get-colorbool")) { return get_colorbool(argc-2, argv+2); + } else if (!strcmp(argv[1], "--rewrite-url")) { + return rewrite_url(argc-2, argv+2); } else break; argc--; -- 1.6.0.rc1.34.g0fe8c -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html