aboutsummaryrefslogtreecommitdiff
path: root/builtin-push.c
diff options
context:
space:
mode:
Diffstat (limited to 'builtin-push.c')
-rw-r--r--builtin-push.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/builtin-push.c b/builtin-push.c
index 7a3d2bb06..5f4d7d34d 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);