X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=builtin-push.c;h=ada8338cc1d0fbf389cd346b5134595afaaa2e66;hb=cb849b46ac68feea716a45fd1de99cfdd71123d0;hp=e530022824c13138925152de716beb3573714f40;hpb=288c0384505e6c25cc1a162242919a0485d50a74;p=git.git diff --git a/builtin-push.c b/builtin-push.c index e53002282..ada8338cc 100644 --- a/builtin-push.c +++ b/builtin-push.c @@ -8,16 +8,16 @@ #define MAX_URI (16) -static const char push_usage[] = "git push [--all] [--tags] [--force] [...]"; +static const char push_usage[] = "git-push [--all] [--tags] [-f | --force] [...]"; -static int all = 0, tags = 0, force = 0, thin = 1; -static const char *execute = NULL; +static int all, tags, force, thin = 1; +static const char *execute; #define BUF_SIZE (2084) static char buffer[BUF_SIZE]; -static const char **refspec = NULL; -static int refspec_nr = 0; +static const char **refspec; +static int refspec_nr; static void add_refspec(const char *ref) { @@ -32,10 +32,8 @@ static int expand_one_ref(const char *ref, const unsigned char *sha1) /* Ignore the "refs/" at the beginning of the refname */ ref += 5; - if (strncmp(ref, "tags/", 5)) - return 0; - - add_refspec(strdup(ref)); + if (!strncmp(ref, "tags/", 5)) + add_refspec(strdup(ref)); return 0; } @@ -104,7 +102,7 @@ static int get_remotes_uri(const char *repo, const char *uri[MAX_URI]) if (n < MAX_URI) uri[n++] = strdup(s); else - error("more than %d URL's specified, ignoreing the rest", MAX_URI); + error("more than %d URL's specified, ignoring the rest", MAX_URI); } else if (is_refspec && !has_explicit_refspec) add_refspec(strdup(s)); @@ -214,7 +212,7 @@ static int do_push(const char *repo) { const char *uri[MAX_URI]; int i, n; - int remote; + int common_argc; const char **argv; int argc; @@ -231,27 +229,29 @@ static int do_push(const char *repo) argv[argc++] = "--force"; if (execute) argv[argc++] = execute; - if (thin) - argv[argc++] = "--thin"; - remote = argc; - argv[argc++] = "dummy-remote"; - while (refspec_nr--) - argv[argc++] = *refspec++; - argv[argc] = NULL; + common_argc = argc; for (i = 0; i < n; i++) { - int error; + int err; + int dest_argc = common_argc; + int dest_refspec_nr = refspec_nr; + const char **dest_refspec = refspec; const char *dest = uri[i]; const char *sender = "git-send-pack"; if (!strncmp(dest, "http://", 7) || !strncmp(dest, "https://", 8)) sender = "git-http-push"; + else if (thin) + argv[dest_argc++] = "--thin"; argv[0] = sender; - argv[remote] = dest; - error = run_command_v(argc, argv); - if (!error) + argv[dest_argc++] = dest; + while (dest_refspec_nr--) + argv[dest_argc++] = *dest_refspec++; + argv[dest_argc] = NULL; + err = run_command_v(argc, argv); + if (!err) continue; - switch (error) { + switch (err) { case -ERR_RUN_COMMAND_FORK: die("unable to fork for %s", sender); case -ERR_RUN_COMMAND_EXEC: @@ -262,16 +262,16 @@ static int do_push(const char *repo) case -ERR_RUN_COMMAND_WAITPID_NOEXIT: die("%s died with strange error", sender); default: - return -error; + return -err; } } return 0; } -int cmd_push(int argc, const char **argv, char **envp) +int cmd_push(int argc, const char **argv, const char *prefix) { int i; - const char *repo = "origin"; // default repository + const char *repo = "origin"; /* default repository */ for (i = 1; i < argc; i++) { const char *arg = argv[i]; @@ -289,7 +289,7 @@ int cmd_push(int argc, const char **argv, char **envp) tags = 1; continue; } - if (!strcmp(arg, "--force")) { + if (!strcmp(arg, "--force") || !strcmp(arg, "-f")) { force = 1; continue; }