git-push to multiple locations does not stop at the first failure
authorJunio C Hamano <junkio@cox.net>
Sat, 7 Apr 2007 06:04:53 +0000 (23:04 -0700)
committerJunio C Hamano <junkio@cox.net>
Sat, 7 Apr 2007 09:27:31 +0000 (02:27 -0700)
When pushing into multiple repositories with git push, via
multiple URL in .git/remotes/$shorthand or multiple url
variables in [remote "$shorthand"] section, we used to stop upon
the first failure.  Continue the operation and report the
failure at the end.

Signed-off-by: Junio C Hamano <junkio@cox.net>
builtin-push.c

index 23143be542508c3d3a4eb6909d0625e41224e3bd..cb78401c946eac9019c2e4e953c3b87ef9e214f3 100644 (file)
@@ -297,7 +297,7 @@ static int read_config(const char *repo, const char *uri[MAX_URI])
 static int do_push(const char *repo)
 {
        const char *uri[MAX_URI];
-       int i, n;
+       int i, n, errs;
        int common_argc;
        const char **argv;
        int argc;
@@ -317,6 +317,7 @@ static int do_push(const char *repo)
                argv[argc++] = receivepack;
        common_argc = argc;
 
+       errs = 0;
        for (i = 0; i < n; i++) {
                int err;
                int dest_argc = common_argc;
@@ -343,19 +344,19 @@ static int do_push(const char *repo)
                error("failed to push to '%s'", uri[i]);
                switch (err) {
                case -ERR_RUN_COMMAND_FORK:
-                       die("unable to fork for %s", sender);
+                       error("unable to fork for %s", sender);
                case -ERR_RUN_COMMAND_EXEC:
-                       die("unable to exec %s", sender);
+                       error("unable to exec %s", sender);
+                       break;
                case -ERR_RUN_COMMAND_WAITPID:
                case -ERR_RUN_COMMAND_WAITPID_WRONG_PID:
                case -ERR_RUN_COMMAND_WAITPID_SIGNAL:
                case -ERR_RUN_COMMAND_WAITPID_NOEXIT:
-                       die("%s died with strange error", sender);
-               default:
-                       return -err;
+                       error("%s died with strange error", sender);
                }
+               errs++;
        }
-       return 0;
+       return !!errs;
 }
 
 int cmd_push(int argc, const char **argv, const char *prefix)