"rebase -i": support special-purpose editor to edit insn sheet
[gitweb.git] / transport.c
index 98c577804f177b1c6f9df0e34e5fc3a656a81d27..fa279d531fe1b99841424080487e685fbe04e5bb 100644 (file)
@@ -10,6 +10,7 @@
 #include "refs.h"
 #include "branch.h"
 #include "url.h"
+#include "submodule.h"
 
 /* rsync support */
 
@@ -482,18 +483,14 @@ static int set_git_option(struct git_transport_options *opts,
 static int connect_setup(struct transport *transport, int for_push, int verbose)
 {
        struct git_transport_data *data = transport->data;
-       struct strbuf sb = STRBUF_INIT;
 
        if (data->conn)
                return 0;
 
-       strbuf_addstr(&sb, for_push ? data->options.receivepack :
-                                data->options.uploadpack);
-       if (for_push && transport->verbose < 0)
-               strbuf_addstr(&sb, " --quiet");
-       data->conn = git_connect(data->fd, transport->url, sb.buf,
+       data->conn = git_connect(data->fd, transport->url,
+                                for_push ? data->options.receivepack :
+                                data->options.uploadpack,
                                 verbose ? CONNECT_VERBOSE : 0);
-       strbuf_release(&sb);
 
        return 0;
 }
@@ -1045,6 +1042,14 @@ int transport_push(struct transport *transport,
                        flags & TRANSPORT_PUSH_MIRROR,
                        flags & TRANSPORT_PUSH_FORCE);
 
+               if ((flags & TRANSPORT_RECURSE_SUBMODULES_CHECK) && !is_bare_repository()) {
+                       struct ref *ref = remote_refs;
+                       for (; ref; ref = ref->next)
+                               if (!is_null_sha1(ref->new_sha1) &&
+                                   check_submodule_needs_pushing(ref->new_sha1,transport->remote->name))
+                                       die("There are unpushed submodules, aborting.");
+               }
+
                push_ret = transport->push_refs(transport, remote_refs, flags);
                err = push_had_errors(remote_refs);
                ret = push_ret | err;