diff options
Diffstat (limited to 'builtin-push.c')
-rw-r--r-- | builtin-push.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/builtin-push.c b/builtin-push.c index 7a3d2bb064..5f4d7d34d3 100644 --- a/builtin-push.c +++ b/builtin-push.c @@ -8,10 +8,10 @@ #define MAX_URI (16) -static const char push_usage[] = "git-push [--all] [--tags] [-f | --force] <repository> [<refspec>...]"; +static const char push_usage[] = "git-push [--all] [--tags] [--receive-pack=<git-receive-pack>] [--repo=all] [-f | --force] [-v] [<repository> <refspec>...]"; static int all, tags, force, thin = 1, verbose; -static const char *execute; +static const char *receivepack; #define BUF_SIZE (2084) static char buffer[BUF_SIZE]; @@ -143,6 +143,7 @@ static const char *config_repo; static int config_repo_len; static int config_current_uri; static int config_get_refspecs; +static int config_get_receivepack; static int get_remote_config(const char* key, const char* value) { @@ -157,6 +158,15 @@ static int get_remote_config(const char* key, const char* value) else if (config_get_refspecs && !strcmp(key + 7 + config_repo_len, ".push")) add_refspec(xstrdup(value)); + else if (config_get_receivepack && + !strcmp(key + 7 + config_repo_len, ".receivepack")) { + if (!receivepack) { + char *rp = xmalloc(strlen(value) + 16); + sprintf(rp, "--receive-pack=%s", value); + receivepack = rp; + } else + error("more than one receivepack given, using the first"); + } } return 0; } @@ -168,6 +178,7 @@ static int get_config_remotes_uri(const char *repo, const char *uri[MAX_URI]) config_current_uri = 0; config_uri = uri; config_get_refspecs = !(refspec_nr || all || tags); + config_get_receivepack = (receivepack == NULL); git_config(get_remote_config); return config_current_uri; @@ -252,8 +263,8 @@ static int do_push(const char *repo) argv[argc++] = "--all"; if (force) argv[argc++] = "--force"; - if (execute) - argv[argc++] = execute; + if (receivepack) + argv[argc++] = receivepack; common_argc = argc; for (i = 0; i < n; i++) { @@ -336,8 +347,12 @@ int cmd_push(int argc, const char **argv, const char *prefix) thin = 0; continue; } + if (!strncmp(arg, "--receive-pack=", 15)) { + receivepack = arg; + continue; + } if (!strncmp(arg, "--exec=", 7)) { - execute = arg; + receivepack = arg; continue; } usage(push_usage); |